<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v" -->

---
title: TinyGo 0.42: recoverable panics, Puya PY32 support, and more
description: TinyGo 0.42 adds recoverable runtime panics via defer/recover across platforms including Windows and riscv64, closing a long-standing gap with mainline Go...
canonical: https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: TinyGo 0.42: recoverable panics, Puya PY32 support, and more | daily.dev
og:description: TinyGo 0.42 adds recoverable runtime panics via defer/recover across platforms including Windows and riscv64, closing a long-standing gap with mainline Go...
og:url: https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v
og:image: https://api.daily.dev/og/posts/0DMazGi2V.png
og:image:alt: TinyGo 0.42: recoverable panics, Puya PY32 support, and more
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# TinyGo 0.42: recoverable panics, Puya PY32 support, and more

**[Collections](https://daily.dev/sources/collections)** · 3 min read · 2 upvotes · 0 comments

## Summary

TinyGo 0.42 adds recoverable runtime panics via defer/recover across platforms including Windows and riscv64, closing a long-standing gap with mainline Go behavior. The release also adds support for Puya PY32 32-bit Arm microcontrollers (87 chip configurations, both Cortex-M0+ and Cortex-M4 cores) with startup code, register definitions, and GPIO/UART/clock/timer support, plus two EmbedFire dev boards priced under $2. Additional updates include Go 1.27 support, LLVM 22 as the new default toolchain (with 19/20 still supported), a minimal UEFI target, and ESP32/STM32/USB improvements.

## Content

TinyGo 0.42 is out, and the headline feature is one that's been missing for a long time: runtime panics are now recoverable.

## Recover is finally real

You can now use `defer` and `recover` to catch nil pointer dereferences, divide-by-zero errors, out-of-bounds slice and map accesses, and channel panics - the same way you'd handle them in standard Go. This works on Windows and riscv64 too, closing what was probably the most frustrating gap between TinyGo and mainline Go for anyone writing anything resembling production embedded code.

The release also adds Go 1.27 support and moves to LLVM 22 as the default backend, while keeping compatibility with LLVM 19 and 20.

## UEFI target

There's a new UEFI target that lets Go programs run as pre-boot applications - before any OS loads. It's minimal, but it works, and it opens up some interesting possibilities for firmware tooling written in Go.

## Puya PY32 support: 87 chip variants

The other big addition is support for Puya's PY32 line of 32-bit Arm microcontrollers. The port covers 87 individual chip configurations across 40 device-definition families, ranging from Cortex-M0+ parts with 8 KB flash and 2 KB SRAM up to Cortex-M4 devices with 512 KB flash and 144 KB SRAM.

The port includes startup code, generated register definitions via the py32-svd repository, linker scripts, and machine-API support for GPIO, UART, clocks, and timers. ADC, I2C, SPI, and PWM don't have portable drivers yet.

Two EmbedFire development boards get dedicated TinyGo targets: the PY32F030 and PY32F002B, both available on AliExpress for under $2. They come with pin aliases for LEDs, buttons, and UART, and you can flash them with a single `tinygo` command via pyOCD.

The port was built by contributor Pavel Burgr, partly to support BleRiot - a low-power radio protocol for IoT nodes that report sensor values to a lightweight Registry service. Support for AT32 MCUs is reportedly next.

## ESP32 and STM32 improvements

ESP32 support expands with interrupts, ADC, WiFi, and Bluetooth. This builds on 0.41's native Wi-Fi/Bluetooth support for ESP32-C3/S3 via espradio and the espflasher deployment tool. STM32 gains new chip and board support, and USB handling improves across several boards.

## WebAssembly

TinyGo continues to produce compact WebAssembly/WASI binaries. One concrete example: Microsoft's typescript-go compiler was compiled entirely to Wasm using TinyGo.

## Hardware kit

Alongside the software release, TinyGo and Seeed Studio launched a TinyGo Starter Kit built around the XIAO ESP32-C3. It includes eleven modular Grove sensors and a companion tutorial series aimed at people new to embedded Go.

Overall, 0.42 feels like a release that's been quietly filling in the gaps - recoverable panics especially. It's the kind of thing that makes TinyGo feel less like a subset of Go and more like the real thing.

## Questions this post answers

### Does TinyGo 0.42 support recover() for runtime panics like nil pointer dereferences?

Yes, TinyGo 0.42 makes runtime panics recoverable via defer and recover, including nil pointer dereferences, divide by zero, out-of-range slice and map access, and channel panics. This works across platforms including Windows and riscv64, bringing TinyGo closer to mainline Go behavior and removing workarounds embedded developers previously needed.

_Track TinyGo release changes like this on daily.dev before they break your embedded build._

### Which microcontrollers does TinyGo 0.42 add support for?

TinyGo 0.42 adds support for Puya's PY32 line of 32-bit Arm microcontrollers, covering 87 chip configurations across 40 device-definition families with both Cortex-M0+ and Cortex-M4 cores, ranging from 8 KB flash / 2 KB SRAM up to 512 KB flash / 144 KB SRAM. Two EmbedFire boards, the PY32F030 and PY32F002B, get dedicated targets and cost under $2 on AliExpress.

_Developers picking cheap MCU targets can follow TinyGo's expanding chip support on daily.dev._

### What is the default LLVM version used by TinyGo 0.42?

TinyGo 0.42 makes LLVM 22 the default build toolchain, while still supporting LLVM 19 and 20. The release also adds Go 1.27 language support and introduces a minimal UEFI target that lets Go programs run as pre-boot applications.

_Keep tabs on toolchain shifts like this via daily.dev before upgrading a TinyGo build pipeline._

## Similar posts on daily.dev

- [TinyGo Boldly Goes Where No Go Ever Did Go Before](https://daily.dev/posts/tinygo-boldly-goes-where-no-go-ever-did-go-before-w2ipciafl) · Hackaday · 34 upvotes · 1 comments
- [Fuzix: Because Small Is Beautiful](https://daily.dev/posts/fuzix-because-small-is-beautiful-nyb6pwozi) · Hacker News · 2 upvotes · 0 comments
- [A "Pure Go" Linux environment, ported by Claude, inspired by Fabrice Bellard](https://daily.dev/posts/a-pure-go-linux-environment-ported-by-claude-inspired-by-fabrice-bellard-gzcuewm7h) · Lobsters · 0 upvotes · 0 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#golang](https://daily.dev/tags/golang), [#embedded](https://daily.dev/tags/embedded)

[View this post on daily.dev](https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"TinyGo 0.42: recoverable panics, Puya PY32 support, and more","url":"https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v"},"datePublished":"2026-09-04T08:04:02.009Z","dateModified":"2026-09-11T05:10:20.860Z","description":"TinyGo 0.42 adds recoverable runtime panics via defer/recover across platforms including Windows and riscv64, closing a long-standing gap with mainline Go...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/de3887c23fdf712411753644cedc6ff0?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/de3887c23fdf712411753644cedc6ff0?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collections","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collections","logo":"https://media.daily.dev/image/upload/s--fk_6ycEi--/f_auto,q_auto/v1780996001/logos/collections?_a=BAMAMiWQ0","url":"https://daily.dev/sources/collections"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"general-programming,golang,embedded","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collections","item":"https://daily.dev/sources/collections"},{"@type":"ListItem","position":3,"name":"TinyGo 0.42: recoverable panics, Puya PY32 support, and more"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/tinygo-0-42-recoverable-panics-puya-py32-support-and-more-0dmazgi2v#faq","mainEntity":[{"@type":"Question","name":"Does TinyGo 0.42 support recover() for runtime panics like nil pointer dereferences?","acceptedAnswer":{"@type":"Answer","text":"Yes, TinyGo 0.42 makes runtime panics recoverable via defer and recover, including nil pointer dereferences, divide by zero, out-of-range slice and map access, and channel panics. This works across platforms including Windows and riscv64, bringing TinyGo closer to mainline Go behavior and removing workarounds embedded developers previously needed. Track TinyGo release changes like this on daily.dev before they break your embedded build."}},{"@type":"Question","name":"Which microcontrollers does TinyGo 0.42 add support for?","acceptedAnswer":{"@type":"Answer","text":"TinyGo 0.42 adds support for Puya's PY32 line of 32-bit Arm microcontrollers, covering 87 chip configurations across 40 device-definition families with both Cortex-M0+ and Cortex-M4 cores, ranging from 8 KB flash / 2 KB SRAM up to 512 KB flash / 144 KB SRAM. Two EmbedFire boards, the PY32F030 and PY32F002B, get dedicated targets and cost under $2 on AliExpress. Developers picking cheap MCU targets can follow TinyGo's expanding chip support on daily.dev."}},{"@type":"Question","name":"What is the default LLVM version used by TinyGo 0.42?","acceptedAnswer":{"@type":"Answer","text":"TinyGo 0.42 makes LLVM 22 the default build toolchain, while still supporting LLVM 19 and 20. The release also adds Go 1.27 language support and introduces a minimal UEFI target that lets Go programs run as pre-boot applications. Keep tabs on toolchain shifts like this via daily.dev before upgrading a TinyGo build pipeline."}}]}
```

