TinyGo: The Power of Go, in Kilobytes.

To update or switch versions, run webi tinygo@stable (or @v0.30, @beta, etc).

Cheat Sheet

TinyGo is an alternate, llvm-based compiler for Go with a much smaller and simpler runtime with a minimum size of kilobytes - suitable for micro-controllers, embedded devices, and good old fashioned CLI utilities that don't need a high-performance garbage collector.

GOOS=linux GOARCH=arm64 \
    tinygo build -short -no-debug \
    -o hello-v1.0.0-linux-arm64

You may also want to install the Go IDE tooling: go-essentials.

Table of Contents

  • Files
  • Effective TinyGo
  • Compatibility
  • Gotchas


These are the files / directories that are created and/or modified with this install:


Effective TinyGo

Core differences from Go's self-hosted compiler:

  • optimizes for stack usage over heap usage
  • avoids reflection
  • simpler (but slower) garbage collection
  • reimplements some of Go's standard library for performance

By following certain patterns, you can avoid forcing heap allocation and get better memory usage and performance.


Go Compatibility

Your Go, TinyGo, and dependency versions (particularly golang.org/x) will need to be paired.

See the Go Compatibility Matrix


Standard Library

  • avoid packages that rely heavily on reflection, like encoding/json


  • not all Windows syscalls are implemented


  • you may need to install a conflict-free version of llvm from conflict-free brew to get small sizes when cross-compiling

See also:


Report an Issue Submit Installer Star on GitHub