A Go compiler for microcontrollers, WebAssembly, and small systems, producing minimal binaries using LLVM.
TinyGo is a Go compiler specifically designed for small places like microcontrollers, WebAssembly (WASM/WASI), and command-line tools. It solves the problem of running Go on resource-constrained devices by producing minimal binary sizes and supporting a wide range of hardware and runtime targets. Based on LLVM, it provides an alternative compilation path to the standard Go toolchain.
Go developers working on embedded systems, IoT devices, WebAssembly applications, or any project requiring small binary footprints. It's also for those targeting microcontrollers or WASI runtimes like Fastly Compute and Fermyon Spin.
Developers choose TinyGo because it enables Go programming in environments where the standard compiler is too heavy, offering specialized support for microcontrollers and WebAssembly with a focus on minimalism and compatibility. Its use of LLVM allows for optimizations that can lead to smaller and sometimes faster code for specific use cases.
Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Eliminates unused code to produce minimal footprints, essential for resource-constrained devices like microcontrollers, as highlighted in the README's focus on 'very small binary sizes'.
Compiles for over 94 microcontroller boards, including Arduino Uno and Adafruit ItsyBitsy, enabling Go on embedded platforms without modification, per the README's embedded examples.
Supports both WASM for browsers and WASI for serverless runtimes like Fastly Compute and Fermyon Spin, with specific build commands shown in the README.
Targets Linux, macOS, Windows, embedded systems, and WebAssembly from a single codebase, as documented in the supported targets section.
Explicitly not optimized for efficient use of many goroutines, hindering highly concurrent applications, as stated in the 'Non-goals' section of the README.
Uses LLVM which may be slower than the standard Go compiler for certain tasks, affecting development iteration, per the README's admission that it might not be 'as fast as gc'.
Does not support all Go language features, requiring code adjustments for unsupported elements, as indicated by the lang-support page referenced in the README.