В середине декабря 2025 года состоялся выпуск открытого проекта Tinygo 0.40. Это компилятор языка программирования Go для маломощных систем, таких как микроконтроллеры и встраиваемые устройства, которым необходима генерация очень компактных исполняемых файлов и низкое потребление ресурсов. В проекте Tinygo компиляция для поддерживаемых целевых платформ реализована при помощи LLVM, а библиотеки функций заимствованы из основного инструментария проекта Go. Исходный код решения опубликован на GitHub под лицензией BSD.

Скомпилированная с помощью Tinygo программа напрямую может запускаться на микроконтроллерах, что позволяет применять подмножество языка Go для написания сценариев автоматизации.

В текущем виде проектом Tinygo поддерживается более ста моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro, ESP32, M5Stack, ST Micro, Digispark, Raspberry Pi Pico, Nordic Semiconductor, SiFive HiFive1, STM32, Makerdiary и Phytec. Для взаимодействия с датчиками и подключёнными внешними устройствами, а также для поддержки интерфейсов, таких как I2C, GPIO и SPI, предоставляются специальные драйверы.

В отличие от похожего проекта компилятора Еmgo, не обновлявшегося продолжительное время, в решении Tinygo сохранена оригинальная модель управления памятью Go с использованием сборщика мусора и вместо компиляции в представление на языке C, задействован LLVM для генерации эффективного машинного кода.

В программах с использованием Tinygo может без изменений использоваться уже существующий типовой код на языке Go, а также большая часть стандартных пакетов. Помимо генерации машинного кода, в Tinygo доступна поддержка генерации WebAssembly с возможностью создания обособленных WebAssembly-приложений, используя интерфейс WASI (WebAssembly System Interface).

В версии Tinygo 0.40:

  • внесены оптимизации в сборщик мусора, причём прирост производительности составил до 10%;

  • реализована поддержка инструментария LLVM 20;

  • добавлена поддержка платформы ESP32-S3, а также плат Xiao ESP32-S3, Gopher ARCADE и Pico2-Ice;

  • добавлен флаг go-compatibility и переменная окружения TINYGO_GOCOMPATIBILITY для отключения проверки совместимости с объявленной версией языка Go;

  • для глобальных переменных и функций включена опция pragma "//go:linkname" в дополнение к "//go:extern";

  • в компилятор добавлена возможность пометки строковых параметров как доступных только для чтения;

  • для выявления циклов с отложенными вызовами (оператором defer) в компиляторе задействован алгоритм Тарьяна для поиска сильно связанных компонентов.