{"slug": "tinygo", "name": "TinyGo", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "A Go compiler for microcontrollers, WebAssembly, and other small environments, based on LLVM.", "recommenders": 6, "commenters": 7, "warners": 0, "score": 5.542, "rising": -0.64, "first": "2025-12-29", "latest": "2026-08-11", "why": "HN commenters recommend TinyGo for compiling Go to WebAssembly/WASI and for niche or embedded hardware, where its minimal runtime is an acceptable tradeoff.", "why_is_quote": false, "has_verdict": true, "sentiment": {"recommend": 6, "neutral": 1, "compare": 0, "warn": 0}, "spark": [0, 1, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0], "listed": true, "loved": ["WebAssembly support", "Embedded hardware"], "caveat": "Go compatibility gaps", "short_quote": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both", "icon": true, "domain": "tinygo.org", "github_repo": null, "official_url": "https://tinygo.org", "pricing": "open source", "aliases": ["TinyGo"], "verdict": [{"text": "HN commenters recommend TinyGo for compiling Go to WebAssembly/WASI and for niche or embedded hardware,", "cites": [{"id": 762090848, "item_id": 47630678, "url": "https://news.ycombinator.com/item?id=47630678", "by": "carverauto", "date": "2026-04-03", "stance": "recommend", "quote": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both", "excerpt": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both if you're using golang.", "context": "builds ServiceRadar", "use_case": "WASM plugin system", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 742791856, "item_id": 46424491, "url": "https://news.ycombinator.com/item?id=46424491", "by": "gothink", "date": "2025-12-29", "stance": "recommend", "quote": "you should check out TinyGo [1] if you haven't already", "excerpt": "Looks like this is available (since Go 1.21 [0]), so no need to build from source anymore. Just did a quick 'hello world' test to verify and it worked: GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go wasmtime main.wasm If you're interested in wasm/wasi and niche hardware with Go, you should check out TinyGo [1] if you haven't already. [0] https://go.dev/blog/wasi [1] https://tinygo.org/docs/guides/webassembly/w", "context": "", "use_case": "Go on wasm/niche hardware", "switched_from": "", "story": "Libgodc: Write Go Programs for Sega Dreamcast"}, {"id": 763128464, "item_id": 47695529, "url": "https://news.ycombinator.com/item?id=47695529", "by": "ted_dunning", "date": "2026-04-08", "stance": "recommend", "quote": "In tinygo, the idiom is to catch an interrupt and put the info into a channel", "excerpt": "In tinygo, the idiom is to catch an interrupt and put the info into a channel so that you can think about what is happening in go style. I use that capability, for instance, in go-wspr [1] to get very nice low-jitter timing for frequency corrections. [1] https://github.com/tdunning/go-wspr", "context": "", "use_case": "Go on embedded systems", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"text": " where its minimal runtime is an acceptable tradeoff.", "cites": [{"id": 788206208, "item_id": 49262888, "url": "https://news.ycombinator.com/item?id=49262888", "by": "win311fwg", "date": "2026-08-11", "stance": "recommend", "quote": "Tinygo's runtime was minimal enough to be acceptable.", "excerpt": "I was interested in minimal, which is why I didn't start with Go, but there was no obvious way to get LLMs into alignment. When I switched to Go, it just worked. Tinygo's runtime was minimal enough to be acceptable. Enough to get users and keep them happy, even if not technically perfect. The tradeoff was worthwhile for my needs. That tradeoff may not be acceptable in all cases. Hence what is best being meaningless a", "context": "", "use_case": "compiling Go to WASM", "switched_from": "", "story": "Why Go Is an Ideal Language for AI-Assisted Software Engineering"}, {"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"text": " The main caveat is that it can silently differ from standard Go, such as ignoring go:embed \"all:\" patterns,", "cites": [{"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"text": " and one commenter says the project seems almost inactive, with reviewed PRs left unmerged.", "cites": [{"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}], "praise": [{"label": "WebAssembly support", "summary": "Used and recommended for Go-to-WASM/WASI builds, including a WASM plugin system with Wazero.", "quotes": [{"id": 762090848, "item_id": 47630678, "url": "https://news.ycombinator.com/item?id=47630678", "by": "carverauto", "date": "2026-04-03", "stance": "recommend", "quote": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both", "excerpt": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both if you're using golang.", "context": "builds ServiceRadar", "use_case": "WASM plugin system", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 742791856, "item_id": 46424491, "url": "https://news.ycombinator.com/item?id=46424491", "by": "gothink", "date": "2025-12-29", "stance": "recommend", "quote": "you should check out TinyGo [1] if you haven't already", "excerpt": "Looks like this is available (since Go 1.21 [0]), so no need to build from source anymore. Just did a quick 'hello world' test to verify and it worked: GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go wasmtime main.wasm If you're interested in wasm/wasi and niche hardware with Go, you should check out TinyGo [1] if you haven't already. [0] https://go.dev/blog/wasi [1] https://tinygo.org/docs/guides/webassembly/w", "context": "", "use_case": "Go on wasm/niche hardware", "switched_from": "", "story": "Libgodc: Write Go Programs for Sega Dreamcast"}, {"id": 782213456, "item_id": 48888341, "url": "https://news.ycombinator.com/item?id=48888341", "by": "yogiisinaga", "date": "2026-07-12", "stance": "neutral", "quote": "Tiny Go is one of the items that I have on v1.0 road map. Will give it a shot", "excerpt": "Yes, the size of the binary is quite big (~4MB for the landing page) but it's a trade-off that I'm taking with this approach and I think there will be ways to optimize for size. I'm currently using the built-in WASM target but Tiny Go is one of the items that I have on v1.0 road map. Will give it a shot and see if it actually helps with the size without affecting any performance.", "context": "building a Go to WASM framework", "use_case": "reducing WASM binary size", "switched_from": "", "story": "Ask HN: What Are You Working On? (July 2026)"}]}, {"label": "Embedded hardware", "summary": "Suited to niche hardware, with a channel-based idiom for handling interrupts and low-jitter timing.", "quotes": [{"id": 763128464, "item_id": 47695529, "url": "https://news.ycombinator.com/item?id=47695529", "by": "ted_dunning", "date": "2026-04-08", "stance": "recommend", "quote": "In tinygo, the idiom is to catch an interrupt and put the info into a channel", "excerpt": "In tinygo, the idiom is to catch an interrupt and put the info into a channel so that you can think about what is happening in go style. I use that capability, for instance, in go-wspr [1] to get very nice low-jitter timing for frequency corrections. [1] https://github.com/tdunning/go-wspr", "context": "", "use_case": "Go on embedded systems", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 742791856, "item_id": 46424491, "url": "https://news.ycombinator.com/item?id=46424491", "by": "gothink", "date": "2025-12-29", "stance": "recommend", "quote": "you should check out TinyGo [1] if you haven't already", "excerpt": "Looks like this is available (since Go 1.21 [0]), so no need to build from source anymore. Just did a quick 'hello world' test to verify and it worked: GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go wasmtime main.wasm If you're interested in wasm/wasi and niche hardware with Go, you should check out TinyGo [1] if you haven't already. [0] https://go.dev/blog/wasi [1] https://tinygo.org/docs/guides/webassembly/w", "context": "", "use_case": "Go on wasm/niche hardware", "switched_from": "", "story": "Libgodc: Write Go Programs for Sega Dreamcast"}]}, {"label": "Minimal runtime", "summary": "Its runtime is small enough to be acceptable where regular Go is too heavy.", "quotes": [{"id": 788206208, "item_id": 49262888, "url": "https://news.ycombinator.com/item?id=49262888", "by": "win311fwg", "date": "2026-08-11", "stance": "recommend", "quote": "Tinygo's runtime was minimal enough to be acceptable.", "excerpt": "I was interested in minimal, which is why I didn't start with Go, but there was no obvious way to get LLMs into alignment. When I switched to Go, it just worked. Tinygo's runtime was minimal enough to be acceptable. Enough to get users and keep them happy, even if not technically perfect. The tradeoff was worthwhile for my needs. That tradeoff may not be acceptable in all cases. Hence what is best being meaningless a", "context": "", "use_case": "compiling Go to WASM", "switched_from": "", "story": "Why Go Is an Ideal Language for AI-Assisted Software Engineering"}, {"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"label": "Fun to use", "summary": "One commenter calls it very cool and just fun.", "quotes": [{"id": 756613120, "item_id": 47288320, "url": "https://news.ycombinator.com/item?id=47288320", "by": "VLM", "date": "2026-03-07", "stance": "recommend", "quote": "just use tinygo its SO cool.  Its just fun.", "excerpt": "Its a small tech bit but a big architecture / management decision. Basically, who runs golang? The perfectionists are correct, UUIDs are awful and if there's a pile of standards that all have small problems the best thing you can do is make a totally new standard to add to the already too long list. The in-the-trenches system software devs want this BAD. Check out https://en.wikipedia.org/wiki/Universally_unique_iden", "context": "", "use_case": "microcontroller programming", "switched_from": "", "story": "UUID package coming to Go standard library"}]}], "caveats": [{"label": "Go compatibility gaps", "summary": "Some standard Go features, like go:embed \"all:\" patterns, are silently ignored.", "quotes": [{"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"label": "Slow maintenance", "summary": "A commenter says the project seems almost inactive, with a reviewed PR unmerged for weeks.", "quotes": [{"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}]}, {"label": "Tradeoffs", "summary": "Its runtime is described as acceptable but not technically perfect, so it may not fit every case.", "quotes": [{"id": 788206208, "item_id": 49262888, "url": "https://news.ycombinator.com/item?id=49262888", "by": "win311fwg", "date": "2026-08-11", "stance": "recommend", "quote": "Tinygo's runtime was minimal enough to be acceptable.", "excerpt": "I was interested in minimal, which is why I didn't start with Go, but there was no obvious way to get LLMs into alignment. When I switched to Go, it just worked. Tinygo's runtime was minimal enough to be acceptable. Enough to get users and keep them happy, even if not technically perfect. The tradeoff was worthwhile for my needs. That tradeoff may not be acceptable in all cases. Hence what is best being meaningless a", "context": "", "use_case": "compiling Go to WASM", "switched_from": "", "story": "Why Go Is an Ideal Language for AI-Assisted Software Engineering"}]}], "who": [{"by": "yogiisinaga", "context": "building a Go to WASM framework", "url": "https://news.ycombinator.com/item?id=48888341", "date": "2026-07-12"}, {"by": "carverauto", "context": "builds ServiceRadar", "url": "https://news.ycombinator.com/item?id=47630678", "date": "2026-04-03"}], "tags": ["for WebAssembly", "for embedded devices", "for Go developers", "for plugin systems"], "use_cases": ["compiling go to wasm", "reducing wasm binary size", "go on embedded systems", "embedded and cloudflare workers", "wasm plugin system", "microcontroller programming"], "compared": [], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47629116", "title": "Go on Embedded Systems and WebAssembly", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=49261133", "title": "Why Go Is an Ideal Language for AI-Assisted Software Engineering", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48884984", "title": "Ask HN: What Are You Working On? (July 2026)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47283665", "title": "UUID package coming to Go standard library", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46420672", "title": "Libgodc: Write Go Programs for Sega Dreamcast", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 1}, "2026-01": {}, "2026-02": {}, "2026-03": {"recommend": 1}, "2026-04": {"recommend": 3}, "2026-05": {}, "2026-06": {}, "2026-07": {"neutral": 1}, "2026-08": {"recommend": 1}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 788206208, "item_id": 49262888, "url": "https://news.ycombinator.com/item?id=49262888", "by": "win311fwg", "date": "2026-08-11", "stance": "recommend", "quote": "Tinygo's runtime was minimal enough to be acceptable.", "excerpt": "I was interested in minimal, which is why I didn't start with Go, but there was no obvious way to get LLMs into alignment. When I switched to Go, it just worked. Tinygo's runtime was minimal enough to be acceptable. Enough to get users and keep them happy, even if not technically perfect. The tradeoff was worthwhile for my needs. That tradeoff may not be acceptable in all cases. Hence what is best being meaningless a", "context": "", "use_case": "compiling Go to WASM", "switched_from": "", "story": "Why Go Is an Ideal Language for AI-Assisted Software Engineering"}, {"id": 782213456, "item_id": 48888341, "url": "https://news.ycombinator.com/item?id=48888341", "by": "yogiisinaga", "date": "2026-07-12", "stance": "neutral", "quote": "Tiny Go is one of the items that I have on v1.0 road map. Will give it a shot", "excerpt": "Yes, the size of the binary is quite big (~4MB for the landing page) but it's a trade-off that I'm taking with this approach and I think there will be ways to optimize for size. I'm currently using the built-in WASM target but Tiny Go is one of the items that I have on v1.0 road map. Will give it a shot and see if it actually helps with the size without affecting any performance.", "context": "building a Go to WASM framework", "use_case": "reducing WASM binary size", "switched_from": "", "story": "Ask HN: What Are You Working On? (July 2026)"}, {"id": 763128464, "item_id": 47695529, "url": "https://news.ycombinator.com/item?id=47695529", "by": "ted_dunning", "date": "2026-04-08", "stance": "recommend", "quote": "In tinygo, the idiom is to catch an interrupt and put the info into a channel", "excerpt": "In tinygo, the idiom is to catch an interrupt and put the info into a channel so that you can think about what is happening in go style. I use that capability, for instance, in go-wspr [1] to get very nice low-jitter timing for frequency corrections. [1] https://github.com/tdunning/go-wspr", "context": "", "use_case": "Go on embedded systems", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 762210992, "item_id": 47638187, "url": "https://news.ycombinator.com/item?id=47638187", "by": "ghoul2", "date": "2026-04-04", "stance": "recommend", "quote": "tinygo makes both of these use cases much more viable than regular go", "excerpt": "Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it: 1. go:embed supports \"all:<pattern\" while tinygo silently ignore it. I ripped my hair out trying to figure ", "context": "", "use_case": "embedded and Cloudflare Workers", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 762090848, "item_id": 47630678, "url": "https://news.ycombinator.com/item?id=47630678", "by": "carverauto", "date": "2026-04-03", "stance": "recommend", "quote": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both", "excerpt": "We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both if you're using golang.", "context": "builds ServiceRadar", "use_case": "WASM plugin system", "switched_from": "", "story": "Go on Embedded Systems and WebAssembly"}, {"id": 756613120, "item_id": 47288320, "url": "https://news.ycombinator.com/item?id=47288320", "by": "VLM", "date": "2026-03-07", "stance": "recommend", "quote": "just use tinygo its SO cool.  Its just fun.", "excerpt": "Its a small tech bit but a big architecture / management decision. Basically, who runs golang? The perfectionists are correct, UUIDs are awful and if there's a pile of standards that all have small problems the best thing you can do is make a totally new standard to add to the already too long list. The in-the-trenches system software devs want this BAD. Check out https://en.wikipedia.org/wiki/Universally_unique_iden", "context": "", "use_case": "microcontroller programming", "switched_from": "", "story": "UUID package coming to Go standard library"}, {"id": 742791856, "item_id": 46424491, "url": "https://news.ycombinator.com/item?id=46424491", "by": "gothink", "date": "2025-12-29", "stance": "recommend", "quote": "you should check out TinyGo [1] if you haven't already", "excerpt": "Looks like this is available (since Go 1.21 [0]), so no need to build from source anymore. Just did a quick 'hello world' test to verify and it worked: GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go wasmtime main.wasm If you're interested in wasm/wasi and niche hardware with Go, you should check out TinyGo [1] if you haven't already. [0] https://go.dev/blog/wasi [1] https://tinygo.org/docs/guides/webassembly/w", "context": "", "use_case": "Go on wasm/niche hardware", "switched_from": "", "story": "Libgodc: Write Go Programs for Sega Dreamcast"}]}