About this project

TinyGo provides an alternative compilation toolchain for programs written in Go. It combines libraries from the Go language tools with LLVM, targeting use cases where binary size, deployment environment, or hardware constraints make the standard compiler less suitable. For embedded development, TinyGo includes a `machine` package for hardware access and can compile and flash the same program to supported microcontroller boards by selecting a target, such as Arduino Uno, Adafruit Circuit Playground Express, or Seeed Studio XIAO-ESP32S3. The project lists support for over 150 microcontroller boards. For WebAssembly, TinyGo can build browser-oriented WASM modules and WASI programs for servers, edge environments, and hosts such as Fastly Compute, Fermyon Spin, and wazero. It supports WASI Preview 1 targets and exported WASM functions. It can also build command-line programs for Linux, macOS, and Windows. Installation options include native setup and a Docker container, with documentation and getting-started material published on the TinyGo website. The project's stated goals include small binaries, broad microcontroller support, WebAssembly usability, efficient CGo interoperability, and compatibility with common standard-library packages so that many Go programs compile without modification. It does not aim to compile every Go program, match the standard `gc` compiler in every performance scenario, or optimize primarily for extremely large numbers of goroutines. TinyGo is primarily licensed under the BSD 3-clause license. Some imported LLVM code uses an Apache 2.0 variant, and code derived from Teensy libraries uses PJRC's license, as indicated in the relevant file headers. Community support is available through the Gophers Slack #TinyGo channel, and contributions are documented on the project website.