finds.dev← search

// the find

tinygo-org/tinygo

★ 17,541 · Go · NOASSERTION · updated Jul 2026

Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.

TinyGo is an LLVM-based Go compiler targeting microcontrollers (Arduino, ESP32, nRF52, RP2040, 150+ boards), WebAssembly, and WASI. It's the only serious option if you want to write Go for embedded hardware without giving up the language's memory model and garbage collection. Web developers also use it to produce smaller WASM binaries than the standard Go toolchain generates.

Board coverage is genuinely impressive — 150+ targets with a single `-target` flag swap, and the `machine` package abstracts GPIO/SPI/I2C consistently across architectures. The LLVM backend means dead-code elimination is real: TinyGo binaries are often an order of magnitude smaller than `gc`-compiled equivalents, which actually matters when you have 256KB of flash. CGo support with near-zero overhead is a legitimate differentiator — you can call C HAL libraries without paying a context-switch tax. The WASM story is also solid: it integrates with Fastly Compute, Fermyon Spin, and wazero, making it a practical choice for edge/serverless WASM where binary size affects cold-start time.

Standard library coverage is incomplete and the gaps bite at inconvenient times — reflection is limited, `encoding/json` has known issues, and goroutine support is cooperative (single-core only on most targets), so anything assuming true concurrency will misbehave silently. The build toolchain requires LLVM and target-specific libc (picolibc, musl, wasi-libc) as submodules, making initial setup and CI reproducibility a real headache compared to standard Go. Debugging on hardware is primitive — you get printf-over-serial or GDB with limited support depending on the target, nowhere near the tooling you get on the desktop. Language feature support lags Go releases; features added in recent Go versions often take months to land, so you can't assume that code that compiles with `go build` will compile with `tinygo build`.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →