PackageTrack
Sign in Get early access

github.com/tinygo-org/tinygo

v0.41.1 #162 most downloaded on Go modules tinygo-org/tinygo

What this package is like to depend on

Last release 3 days ago

21 Aug 2026

Ships fairly regularly

a new release about every 1 weeks

Nearly every release is documented

notes for 47 of 49 stable releases

Nothing withdrawn

no release was ever pulled

8 years old

162 releases · first in 2019

76 releases in the last 12 months

see the full history below

Release timeline

162 releases · Feb 2019 to Aug 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 162
  1. v0.41.2-0.20260821001124-f71b63053cf1 21 Aug 2026 pre-release

    Nothing published for this version

  2. v0.41.2-0.20260812190852-c4219439eb93 12 Aug 2026 pre-release

    Nothing published for this version

  3. v0.41.2-0.20260809191159-7a9c649268ff 09 Aug 2026 pre-release

    Nothing published for this version

  4. v0.41.2-0.20260730000313-c2346570fbda 30 Jul 2026 pre-release

    Nothing published for this version

  5. v0.41.2-0.20260725154201-b0298c6a6903 25 Jul 2026 pre-release

    Nothing published for this version

  6. v0.41.2-0.20260720144534-babdfc9e10da 20 Jul 2026 pre-release

    Nothing published for this version

  7. v0.41.2-0.20260718064246-b8adb803c462 18 Jul 2026 pre-release

    Nothing published for this version

  8. v0.41.2-0.20260716123147-f1c39e8356d0 16 Jul 2026 pre-release

    Nothing published for this version

  9. v0.41.2-0.20260701102640-30355cec9f35 01 Jul 2026 pre-release

    Nothing published for this version

  10. v0.41.2-0.20260619185532-6f686d12afb5 19 Jun 2026 pre-release

    Nothing published for this version

  11. v0.41.2-0.20260518113127-18033ebc363b 18 May 2026 pre-release

    Nothing published for this version

  12. v0.41.2-0.20260428100648-1a1506ef79a6 28 Apr 2026 pre-release

    Nothing published for this version

  13. v0.41.2-0.20260424164848-e9d78a78ea74 24 Apr 2026 pre-release

    Nothing published for this version

  14. v0.41.1 22 Apr 2026
    Release notes

    This point release has a few very important fixes for you all that could not wait.

    • machine
      • esp32c3: correct pin interrupt setup call that was overlooked from #5320
    • runtime
      • esp32s3: wait for TIMG0 update register to clear before reading timer registers
    • net
      • update net module to a version that is backwards compatible with Go 1.25.x to fix #5332
    Open source →
    Release notes
    • machine
      • esp32c3: correct pin interrupt setup call that was overlooked from #5320
    • runtime
      • esp32s3: wait for TIMG0 update register to clear before reading timer registers
    • net
      • update net module to a version that is backwards compatible with Go 1.25.x to fix #5332
    Open source →
  15. v0.41.0 21 Apr 2026
    Release notes

    This release is the most feature packed yet with over 150 commits to our main repo alone. We added Go 1.26 support to keep you up to date with the latest work from the mothership. We also have many improvements to our developer tooling and compatibility. And some big additions when it comes to hardware support, with ESP32 wireless, and the new Arduino UNO Q board too.

    • general
      • go.mod, compiler: bump minimum Go version to 1.23
      • builder: support Go 1.26 now
      • feat: add inheritable-only field to filter processor-level targets (#5270)
      • feature: add esp32flash flash method for esp32s3/esp32c3/esp32/esp8266
      • flashing: introduce flash method 'esp32jtag' for esp32c3/esp32s3 targets
      • fashing: add "adb" flash method using Android Debug Bridge
      • main: auto-use best available flashing options on esp32
      • espflasher: update to espflasher 0.6.0
    • compiler
      • implement method-set based AssignableTo and Implements (#5304)
      • simplify createObjectLayout
      • implement copy directly
      • fix min/max on floats by using intrinsics
      • add element layout to sliceAppend
      • add intrinsic for crypto/internal/constanttime.boolToUint8
      • fix SyscallN handling for Windows on Go 1.26+
    • core
      • reflect: add TypeAssert
      • reflect: fix TypeAssert for structs
      • sync: add WaitGroup.Go
      • os: add UserCacheDir and UserConfigDir
      • os: implement Lchown function for changing file ownership (#5161)
      • testing: add b.ReportMetric()
      • errors: add errors package to passing list
      • internal/gclayout: use correct lengths
      • internal/abi: add EscapeNonString, EscapeToResultNonString
      • internal, runtime: add internal fips bool
      • internal/itoa: resurrect from Go stdlib
      • internal/syscall/unix: implement GetRandom for WASI targets
      • interp: make ptrtoint size mismatch a recoverable error
      • loader: support "all:" prefix in //go:embed patterns
      • loader, crypto/internal/entropy: fix 32 MiB RAM overflow on microcontrollers
      • loader, unicode/utf8: fix hiBits overflow on 16-bit AVR targets
      • builder: order embedded files deterministically
      • builder: fix panic in findPackagePath when using -size short
      • builder: fix SIGSEGV when stripping duplicate function definitions
      • builder, runtime: fix duplicate symbol error with Go 1.26+ on Windows
      • builder: use target-specific -march for RISC-V library compilation
      • transform: modify output format from the -print-allocs flag to match the go coverage tool format
      • cgo: allow for changes to short-enums flag
      • wasm: add more stubbed file operations
    • machine
      • esp32c3: implement BlockDevice for esp32c3 flash
      • esp32c3: clear GPIO STATUS before dispatching pin callbacks
      • esp32c3: implement USBDevice using interrupts
      • esp32c3: add Enable stub for QEMU test target
      • esp32c3: fix interrupt disable handling
      • esp32c3: clear MCAUSE after handling interrupt
      • esp32c3: map missing IRAM sections in linker script
      • esp32c3: fix to use PROVIDE() for WiFi/BLE ROM function addresses to allow blob overrides
      • esp32c3: add WiFi/BLE ROM linker support
      • esp32c3: use TIMG0 alarm interrupt for sleepTicks instead of busy-waiting
      • esp32s3: implement Pin.SetInterrupt for GPIO pin change interrupts
      • esp32s3: use edge-triggered CPU interrupt for GPIO pin interrupts
      • esp32s3: add interrupt support (#5244)
      • esp32s3: switch USB implementation to use interrupts instead of polling
      • esp32s3: replace inline ISR with full interrupt vector handler
      • esp32s3: use TIMG0 alarm interrupt for sleepTicks
      • esp32s3: improve exception handlers, add procPin/procUnpin, and linker wrap flags
      • esp32s3: fix Xtensa register window spill using recursive call4 in task switching
      • esp32s3: update linker script and boot assembly for multi-page flash XIP mapping
      • esp32s3: add flash XIP boot assembly with cache/MMU init
      • esp32s3: implement SPI (#5169)
      • esp32s3: implement I2C interface (#5210)
      • esp32s3: implement RNG based on onboard hardware random number generator
      • esp32s3,esp32c3: add USB serial support
      • esp32s3,esp32c3: add txStalled flag to skip USB serial spin when no host
      • esp32s3,esp32c3: make USB Serial/JTAG writes non-blocking when FIFO is full
      • esp32c3/esp32s3: refactor ADC implementation to reduce code duplication
      • esp32s3,esp32c3: add ADC support (#5231)
      • esp32s3,esp32c3: add PWM support (#5215)
      • esp32c3/esp32s3: refactoring and corrections for SPI implementation
      • esp32xx: add WASM simulator support for ESP32-C3/ESP32-S3 targets
      • esp32: default SPI CS pin to NoPin when unset
      • esp: fix tinygo_scanCurrentStack to spill register windows
      • stm32: fix UART interrupt storm caused by uncleared overrun error
      • stm32: fix PWM problem due to register shifting
      • stm32: add STM32U585 target definition and runtime
      • stm32: add STM32U5 GPIO, pin interrupts, and UART support
      • stm32: add STM32U5 I2C support
      • stm32: add STM32U5 SPI support
      • stm32u585: implement ADC
      • stm32g0b1: add support (#5150)
      • stm32g0b1: add Watchdog + ADC support (#5158)
      • stm32l0: add flash support
      • stm32l0x1,l0x2: TIM: adapt to 32-bit register access
      • stm32g0: sync with updated stm32 device files
      • attiny85: add USI-based SPI support (#5181)
      • attiny85: add PWM support (#5171)
      • rp: add Close function to UART to allow for removing all system resources/power usage
      • rp: use blockReset() and unresetBlockWait() helper functions for peripheral reset/unreset
      • rp2: prevent PWM Period method overflow
      • rp2: add per-byte timeout budget for I2C (#5189)
      • feather-m0: export UART0 and pins
      • usb/cdc: better ring buffer implementation (#5209)
      • fix: replace ! with ~ for register mask
      • atmega328p_simulator: add correct build tag for arduino_uno after renaming
    • net
      • update to Go 1.26.2 net package with UDP and JS improvements
    • runtime
      • implement fminimum/fmaximum
      • make timeoffset atomic
      • add MemStats.HeapObjects
      • handle GODEBUG on wasip2 (#5312)
      • fix Darwin syscall return value truncation and lost arguments
      • add syscall.runtimeClearenv for Go 1.26
      • split syscall functions for darwin changes for 1.26
      • fix: init heap before random number seed on wasm platforms
    • targets
      • add esp32s3-supermini board target
      • add support for Seeedstudio Xiao-RP2350 board
      • add Shrike Lite board (#5170)
      • rename arduino target to arduino-uno
      • add pins/setup for Arduino UNO Q board QWIIC connector
      • correct pin mapping for Arduino UNO Q STM32 MCU
      • add stm32u585 openocd commands for flashing on Arduino UNO Q
      • correct name/tag use for esp32s3-wroom1 board
      • modify esp32, esp32s3, esp32c3, & esp8266 targets to use built-in esp32flash
      • switch rp2040/rp2350 to default to tasks scheduler
      • change default stack size for esp32c3 and esp32s3 to 8196
      • swan: rename group build tag stm32l4x5 => stm32l4y5 to avoid clash with stm32 device name
      • nucleo-f722ze: add build-tag stm32f722
      • fix: set stm32u5x clock rate to default
      • create generic targets for esp32 boards
    • libs
      • stm32-svd: update submodule
      • update tools/gen-device-svd for recent changes to stm32-svd file structure (#5212)
    • build/test
      • build: use Golang 1.26 for all builds
      • build: actually use the version of llvm we are supposed to be testing by using brew link command
      • build: let scoop run updates to resolve binaryen install failures on Windows
      • ci: don't double zip release artifacts
      • test: increase default timeout from 1 to 2 minutes to prevent spurious CI fails
      • testdata: fix flaky timers test by draining ticker channel after Stop
      • testdata: more corpus entries (#5182)
      • add soypat/lneto to corpus
      • GNUmakefile: add context and expvar to stdlib tests
      • GNUmakefile: add encoding/xml to stdlib tests on Linux
      • main (test): skip mipsle test if the emulator is missing
      • make: remove machine without board from smoketest
      • stm32: add Arduino UNO Q to smoketests
      • flake: bump to nixpkgs 25.11
      • chore: update all github actions to latest versions
      • fix: use external 7zip for scoop installs on Windows
    Open source →
    Release notes
    • general
      • go.mod, compiler: bump minimum Go version to 1.23
      • builder: support Go 1.26 now
      • feat: add inheritable-only field to filter processor-level targets (#5270)
      • feature: add esp32flash flash method for esp32s3/esp32c3/esp32/esp8266
      • flashing: introduce flash method 'esp32jtag' for esp32c3/esp32s3 targets
      • fashing: add "adb" flash method using Android Debug Bridge
      • main: auto-use best available flashing options on esp32
      • espflasher: update to espflasher 0.6.0
    • compiler
      • implement method-set based AssignableTo and Implements (#5304)
      • simplify createObjectLayout
      • implement copy directly
      • fix min/max on floats by using intrinsics
      • add element layout to sliceAppend
      • add intrinsic for crypto/internal/constanttime.boolToUint8
      • fix SyscallN handling for Windows on Go 1.26+
    • core
      • reflect: add TypeAssert
      • reflect: fix TypeAssert for structs
      • sync: add WaitGroup.Go
      • os: add UserCacheDir and UserConfigDir
      • os: implement Lchown function for changing file ownership (#5161)
      • testing: add b.ReportMetric()
      • errors: add errors package to passing list
      • internal/gclayout: use correct lengths
      • internal/abi: add EscapeNonString, EscapeToResultNonString
      • internal, runtime: add internal fips bool
      • internal/itoa: resurrect from Go stdlib
      • internal/syscall/unix: implement GetRandom for WASI targets
      • interp: make ptrtoint size mismatch a recoverable error
      • loader: support "all:" prefix in //go:embed patterns
      • loader, crypto/internal/entropy: fix 32 MiB RAM overflow on microcontrollers
      • loader, unicode/utf8: fix hiBits overflow on 16-bit AVR targets
      • builder: order embedded files deterministically
      • builder: fix panic in findPackagePath when using -size short
      • builder: fix SIGSEGV when stripping duplicate function definitions
      • builder, runtime: fix duplicate symbol error with Go 1.26+ on Windows
      • builder: use target-specific -march for RISC-V library compilation
      • transform: modify output format from the -print-allocs flag to match the go coverage tool format
      • cgo: allow for changes to 'short-enums' flag
      • wasm: add more stubbed file operations
    • machine
      • esp32c3: implement BlockDevice for esp32c3 flash
      • esp32c3: clear GPIO STATUS before dispatching pin callbacks
      • esp32c3: implement USBDevice using interrupts
      • esp32c3: add Enable stub for QEMU test target
      • esp32c3: fix interrupt disable handling
      • esp32c3: clear MCAUSE after handling interrupt
      • esp32c3: map missing IRAM sections in linker script
      • esp32c3: fix to use PROVIDE() for WiFi/BLE ROM function addresses to allow blob overrides
      • esp32c3: add WiFi/BLE ROM linker support
      • esp32c3: use TIMG0 alarm interrupt for sleepTicks instead of busy-waiting
      • esp32s3: implement Pin.SetInterrupt for GPIO pin change interrupts
      • esp32s3: use edge-triggered CPU interrupt for GPIO pin interrupts
      • esp32s3: add interrupt support (#5244)
      • esp32s3: switch USB implementation to use interrupts instead of polling
      • esp32s3: replace inline ISR with full interrupt vector handler
      • esp32s3: use TIMG0 alarm interrupt for sleepTicks
      • esp32s3: improve exception handlers, add procPin/procUnpin, and linker wrap flags
      • esp32s3: fix Xtensa register window spill using recursive call4 in task switching
      • esp32s3: update linker script and boot assembly for multi-page flash XIP mapping
      • esp32s3: add flash XIP boot assembly with cache/MMU init
      • esp32s3: implement SPI (#5169)
      • esp32s3: implement I2C interface (#5210)
      • esp32s3: implement RNG based on onboard hardware random number generator
      • esp32s3,esp32c3: add USB serial support
      • esp32s3,esp32c3: add txStalled flag to skip USB serial spin when no host
      • esp32s3,esp32c3: make USB Serial/JTAG writes non-blocking when FIFO is full
      • esp32c3/esp32s3: refactor ADC implementation to reduce code duplication
      • esp32s3,esp32c3: add ADC support (#5231)
      • esp32s3,esp32c3: add PWM support (#5215)
      • esp32c3/esp32s3: refactoring and corrections for SPI implementation
      • esp32xx: add WASM simulator support for ESP32-C3/ESP32-S3 targets
      • esp32: default SPI CS pin to NoPin when unset
      • esp: fix tinygo_scanCurrentStack to spill register windows
      • stm32: fix UART interrupt storm caused by uncleared overrun error
      • stm32: fix PWM problem due to register shifting
      • stm32: add STM32U585 target definition and runtime
      • stm32: add STM32U5 GPIO, pin interrupts, and UART support
      • stm32: add STM32U5 I2C support
      • stm32: add STM32U5 SPI support
      • stm32u585: implement ADC
      • stm32g0b1: add support (#5150)
      • stm32g0b1: add Watchdog + ADC support (#5158)
      • stm32l0: add flash support
      • stm32l0x1,l0x2: TIM: adapt to 32-bit register access
      • stm32g0: sync with updated stm32 device files
      • attiny85: add USI-based SPI support (#5181)
      • attiny85: add PWM support (#5171)
      • rp: add Close function to UART to allow for removing all system resources/power usage
      • rp: use blockReset() and unresetBlockWait() helper functions for peripheral reset/unreset
      • rp2: prevent PWM Period method overflow
      • rp2: add per-byte timeout budget for I2C (#5189)
      • feather-m0: export UART0 and pins
      • usb/cdc: better ring buffer implementation (#5209)
      • fix: replace ! with ~ for register mask
      • atmega328p_simulator: add correct build tag for arduino_uno after renaming
    • net
      • update to Go 1.26.2 net package with UDP and JS improvements
    • runtime
      • implement fminimum/fmaximum
      • make timeoffset atomic
      • add MemStats.HeapObjects
      • handle GODEBUG on wasip2 (#5312)
      • fix Darwin syscall return value truncation and lost arguments
      • add syscall.runtimeClearenv for Go 1.26
      • split syscall functions for darwin changes for 1.26
      • fix: init heap before random number seed on wasm platforms
    • targets
      • add esp32s3-supermini board target
      • add support for Seeedstudio Xiao-RP2350 board
      • add Shrike Lite board (#5170)
      • rename arduino target to arduino-uno
      • add pins/setup for Arduino UNO Q board QWIIC connector
      • correct pin mapping for Arduino UNO Q STM32 MCU
      • add stm32u585 openocd commands for flashing on Arduino UNO Q
      • correct name/tag use for esp32s3-wroom1 board
      • modify esp32, esp32s3, esp32c3, & esp8266 targets to use built-in esp32flash
      • switch rp2040/rp2350 to default to tasks scheduler
      • change default stack size for esp32c3 and esp32s3 to 8196
      • swan: rename group build tag stm32l4x5 => stm32l4y5 to avoid clash with stm32 device name
      • nucleo-f722ze: add build-tag stm32f722
      • fix: set stm32u5x clock rate to default
      • create generic targets for esp32 boards
    • libs
      • stm32-svd: update submodule
      • update tools/gen-device-svd for recent changes to stm32-svd file structure (#5212)
    • build/test
      • build: use Golang 1.26 for all builds
      • build: actually use the version of llvm we are supposed to be testing by using brew link command
      • build: let scoop run updates to resolve binaryen install failures on Windows
      • ci: don't double zip release artifacts
      • test: increase default timeout from 1 to 2 minutes to prevent spurious CI fails
      • testdata: fix flaky timers test by draining ticker channel after Stop
      • testdata: more corpus entries (#5182)
      • add soypat/lneto to corpus
      • GNUmakefile: add context and expvar to stdlib tests
      • GNUmakefile: add encoding/xml to stdlib tests on Linux
      • main (test): skip mipsle test if the emulator is missing
      • make: remove machine without board from smoketest
      • stm32: add Arduino UNO Q to smoketests
      • flake: bump to nixpkgs 25.11
      • chore: update all github actions to latest versions
      • fix: use external 7zip for scoop installs on Windows
    Open source →
  16. v0.40.2-0.20260420054154-94ebddbdfeb3 20 Apr 2026 pre-release

    Nothing published for this version

  17. v0.40.2-0.20260419094804-aa1ca2778911 19 Apr 2026 pre-release

    Nothing published for this version

  18. v0.40.2-0.20260414065709-894839484c26 14 Apr 2026 pre-release

    Nothing published for this version

  19. v0.40.2-0.20260409151933-8161b766d34f 09 Apr 2026 pre-release

    Nothing published for this version

  20. v0.40.1 18 Dec 2025
    Release notes

    An important point release with some critical fixes and improvements that just could not wait. Thank you very much to our global team of humans who joined together so quickly to get this out for all of us!

    • machine
      • nrf: fix flash writes when SoftDevice is enabled
    • runtime
      • runtime: avoid fixed math/rand sequence on RP2040/RP2350 (#5124)
      • runtime: add calls to initRand() during run() for all schedulers
      • runtime: call initRand() before initHeap() during initialization
      • runtime: use rand_hwrng hardwareRand for RP2040/RP2350 (#5135)
    • libs
      • picolibc: use updated location for git repo
    Open source →
    Release notes
    • machine
      • nrf: fix flash writes when SoftDevice is enabled
    • runtime
      • runtime: avoid fixed math/rand sequence on RP2040/RP2350 (#5124)
      • runtime: add calls to initRand() during run() for all schedulers
      • runtime: call initRand() before initHeap() during initialization
      • runtime: use rand_hwrng hardwareRand for RP2040/RP2350 (#5135)
    • libs
      • picolibc: use updated location for git repo
    Open source →
  21. v0.40.0 15 Dec 2025
    Release notes

    Our final release for 2025 includes a number of really excellent improvements to close out the year. We have plenty of bugfixes and stability enhancements to make your life better and easier. For example, new updates to the GC that are up to 10% faster! Not to mention fixing some very tricky race conditions. Of course we have new hardware support, like the Xiao ESP32-S3 board.

    • general
      • all: add full LLVM 20 support
      • core: feat: enable //go:linkname pragma for globals
      • core: feature: Add flag to ignore go compatibility matrix (#5078)
    • compiler
      • emit an error when the actual arch doesn't match GOARCH
      • mark string parameters as readonly
      • use Tarjan's SCC algorithm to detect loops for defer
      • lower "large stack" limit to 16kb
    • core
      • shrink bdwgc library
      • Fix linker errors for runtime.vgetrandom and crypto/internal/sysrand.fatal
      • fix: add TryLock to sync.RWMutex
      • fix: correct linter issues exposed by the fix in #4679
      • fix: don't hardcode success return state
      • fix: expand RTT debugger compatibility
      • internal/task (threads): save stack bounds instead of scanning under a lock
      • internal/task: create detached threads and fix error handling
      • interp: better errors when debugging interp
      • transform (gc): create stack slots in callers of external functions
      • internal/task: prevent semaphore resource leak for threads scheduler
    • machine
      • cortexm: optimize code size for the HardFault_Handler
      • fe310: add I2C pins for the HiFive1b
      • clarify WriteAt semantics of BlockDevice
      • fix deprecated AsmFull comment (#5005)
      • make sure DMA buffers do not escape unnecessarily
      • only enable USB-CDC when needed
      • use larger SPI MAXCNT on nrf52833 and nrf52840
      • fix: update m.queuedBytes when clamping output to avoid corrupting sentBytes
      • fix: use int64 in ReadTemperature to avoid overflow
      • fix(rp2): disable DBGPAUSE on startup
      • fix(rp2): possible integer overflow while computing factors for SPI baudrate
      • fix(rp2): reset spinlocks at startup
      • fix(rp2): switch spinlock busy loop to wfe
      • fix(rp2): use side-effect-free spinlocks
      • nrf: add ADC_VDDH which is an ADC pin for VDDH
      • nrf: don't block SPI transfer
      • nrf: don't set PSELN, it's ignored in single ended mode anyway
      • nrf: fix typo in ADC configuration
      • nrf: refactor SoftDevice enabled check
      • nrf: rename pwmPin to adcPin
      • nrf: support flash operations while the SoftDevice is enabled
      • rp2040: allow writing to the UART inside interrupts
      • machine,nrf528: stop the bus only once on I2C bus error and ensures the first error is returned
    • net
      • update submodule to latest commits
    • runtime
      • (avr): fix infinite longjmp loop if stack is aligned to 256 bytes
      • (gc_blocks.go): clear full size of allocation
      • (gc_blocks.go): make sweep branchless
      • (gc_blocks.go): simplify scanning logic
      • (gc_blocks.go): use a linked stack to scan marked objects
      • (gc_blocks.go): use best-fit allocation
      • (gc_boehm.go): fix world already stopped check
      • (wasm): scan the system stack
      • fix sleep duration for long sleeps
      • remove copied code for nrf52840
      • src/syscall: update src buffer after write
      • wasm: fix C realloc and optimize it a bit
    • targets
      • add xiao-esp32s3 board target
      • Add ESP32-S3 support (#5091)
      • Added Gopher ARCADE board
      • Create "pico2-ice" target board (#5062)
    • build/test
      • Add testing.T.Context() and testing.B.Context()
      • create separate go.mod file for testing dependencies for wasm tests that use Chromium headless browser to avoid use of older incompatible version.
      • go back to normal scheduler instead of tasks scheduler for macos CI
      • update CI to use Go 1.25.5
      • update macOS GH actions builds to handle sunset of macOS 13
      • use task scheduler on macOS builds to avoid test race condition lockups
      • update all CI builds to use latest stable Go release. Also update some of the actions to their latest releases.
      • update GH actions builds to use Go 1.25.4
      • uninstall cmake before install
      • fix: point the submodule for musl-lib to a mirror in the TinyGo GitHub org
      • fix: remove macOS 15 from CI build matrix (conflicts with macOS 14 build)
      • fix: separate host expected bytes from device intended bytes
      • fix/typo: makeESPFirmwareImage
      • make: GNUmakefile: shrink TinyGo binaries on Linux
      • move the directory list into a variable
      • several improvements to the macOS GH actions build
      • Fix for #4678: top-level 'make lint' wasn't working
      • fix: increase the timeout for chromedp to connect to the headless browser used for running the wasm tests.
      • testdata: some more packages for the test corpus
    Open source →
    Release notes
    • general
      • all: add full LLVM 20 support
      • core: feat: enable //go:linkname pragma for globals
      • core: feature: Add flag to ignore go compatibility matrix (#5078)
      • chore: update version for 0.40 development cycle
    • compiler
      • emit an error when the actual arch doesn't match GOARCH
      • mark string parameters as readonly
      • use Tarjan's SCC algorithm to detect loops for defer
      • lower "large stack" limit to 16kb
    • core
      • shrink bdwgc library
      • Fix linker errors for runtime.vgetrandom and crypto/internal/sysrand.fatal
      • fix: add TryLock to sync.RWMutex
      • fix: correct linter issues exposed by the fix in #4679
      • fix: don't hardcode success return state
      • fix: expand RTT debugger compatibility
      • internal/task (threads): save stack bounds instead of scanning under a lock
      • internal/task: create detached threads and fix error handling
      • interp: better errors when debugging interp
      • transform (gc): create stack slots in callers of external functions
      • internal/task: prevent semaphore resource leak for threads scheduler
    • machine
      • cortexm: optimize code size for the HardFault_Handler
      • fe310: add I2C pins for the HiFive1b
      • clarify WriteAt semantics of BlockDevice
      • fix deprecated AsmFull comment (#5005)
      • make sure DMA buffers do not escape unnecessarily
      • only enable USB-CDC when needed
      • use larger SPI MAXCNT on nrf52833 and nrf52840
      • fix: update m.queuedBytes when clamping output to avoid corrupting sentBytes
      • fix: use int64 in ReadTemperature to avoid overflow
      • fix(rp2): disable DBGPAUSE on startup
      • fix(rp2): possible integer overflow while computing factors for SPI baudrate
      • fix(rp2): reset spinlocks at startup
      • fix(rp2): switch spinlock busy loop to wfe
      • fix(rp2): use side-effect-free spinlocks
      • nrf: add ADC_VDDH which is an ADC pin for VDDH
      • nrf: don't block SPI transfer
      • nrf: don't set PSELN, it's ignored in single ended mode anyway
      • nrf: fix typo in ADC configuration
      • nrf: refactor SoftDevice enabled check
      • nrf: rename pwmPin to adcPin
      • nrf: support flash operations while the SoftDevice is enabled
      • rp2040: allow writing to the UART inside interrupts
      • machine,nrf528: stop the bus only once on I2C bus error and ensures the first error is returned
    • net
      • update submodule to latest commits
    • runtime
      • (avr): fix infinite longjmp loop if stack is aligned to 256 bytes
      • (gc_blocks.go): clear full size of allocation
      • (gc_blocks.go): make sweep branchless
      • (gc_blocks.go): simplify scanning logic
      • (gc_blocks.go): use a linked stack to scan marked objects
      • (gc_blocks.go): use best-fit allocation
      • (gc_boehm.go): fix world already stopped check
      • (wasm): scan the system stack
      • fix sleep duration for long sleeps
      • remove copied code for nrf52840
      • src/syscall: update src buffer after write
      • wasm: fix C realloc and optimize it a bit
    • targets
      • add xiao-esp32s3 board target
      • Add ESP32-S3 support (#5091)
      • Added Gopher ARCADE board
      • Create "pico2-ice" target board (#5062)
    • build/test
      • Add testing.T.Context() and testing.B.Context()
      • create separate go.mod file for testing dependencies for wasm tests that use Chromium headless browser to avoid use of older incompatible version.
      • go back to normal scheduler instead of tasks scheduler for macos CI
      • update CI to use Go 1.25.5
      • update macOS GH actions builds to handle sunset of macOS 13
      • use task scheduler on macOS builds to avoid test race condition lockups
      • update all CI builds to use latest stable Go release. Also update some of the actions to their latest releases.
      • update GH actions builds to use Go 1.25.4
      • uninstall cmake before install
      • fix: point the submodule for musl-lib to a mirror in the TinyGo GitHub org
      • fix: remove macOS 15 from CI build matrix (conflicts with macOS 14 build)
      • fix: separate host expected bytes from device intended bytes
      • fix/typo: makeESPFirmwareImage
      • make: GNUmakefile: shrink TinyGo binaries on Linux
      • move the directory list into a variable
      • several improvements to the macOS GH actions build
      • Fix for #4678: top-level 'make lint' wasn't working
      • fix: increase the timeout for chromedp to connect to the headless browser used for running the wasm tests.
      • testdata: some more packages for the test corpus
    Open source →
  22. v0.39.1-0.20251004091901-aedaf7d92525 04 Oct 2025 pre-release

    Nothing published for this version

  23. v0.39.0 19 Aug 2025
    Release notes

    This release has what you need the most right now, which is Go 1.25 support! Of course it has other new features, such as adding multicore support for the RP2350 family of processors as well as for macOS. We've also got fixes, and as always further improvements for reflect support and stdlib packages. Plus a couple of new boards too!

    • general
      • all: add Go 1.25 support
      • net: update to latest tinygo net package
      • docs: clarify build verification step for macOS users
      • Add flag to skip Renesas SVD builds
    • build
      • Makefile: install missing dlmalloc files
      • flash: add -o flag support to save built binary (Fixes #4937) (#4942)
      • fix: update version of clang to 17 to accommodate latest Go 1.25 docker base image
    • ci
      • chore: update all CI builds to test Go 1.25 release
      • fix: disable test-newest since CircleCI seems unable to download due to rate-limits on Dockerhub
      • ci: rename some jobs to avoid churn on every Go/LLVM version bump
      • ci: make the goroutines test less racy
      • tests: de-flake goroutines test
    • compiler
      • compiler: implement internal/abi.Escape
    • main
      • main: show the compiler error (if any) for tinygo test -c
      • chore: correct GOOS=js name in error messages for WASM
    • machine
      • machine: add international keys
      • machine: remove some unnecessary "// peripherals:" comments
      • machine: add I2C pin comments
      • machine: standardize I2C errors with "i2c:" prefix
      • machine: make I2C usable in the simulator
      • fix: add SPI and I2C to teensy 4.1 (#4943)
      • rp2: use the correct channel mask for rp2350 ADC; hold lock during read (#4938)
      • rp2: disable digital input for analog inputs
    • runtime
      • runtime: ensure time.Sleep(d) sleeps at least d
      • runtime: stub out weak pointer support
      • runtime: implement dummy AddCleanup
      • runtime: enable multi-core scheduler for rp2350
      • internal/task: use -stack-size flag when starting a new thread
      • internal/task: add SA_RESTART flag to GC interrupts
      • internal/task: a few small correctness fixes
      • internal/gclayout: make gclayout values constants
      • darwin: add threading support and use it by default
    • standard library
      • sync: implement sync.Swap
      • reflect: implement Method.IsExported
    • testing
      • testing: stub out testing.B.Loop
    • targets
      • stm32: add support for the STM32L031G6U6
      • add metro-rp2350 board definition (#4989)
      • rp2040/rp2350: set the default stack size to 8k for rp2040/rp2350 based boards where this was not already the case
    Open source →
    Release notes
    • general
      • all: add Go 1.25 support
      • net: update to latest tinygo net package
      • docs: clarify build verification step for macOS users
      • Add flag to skip Renesas SVD builds
    • build
      • Makefile: install missing dlmalloc files
      • flash: add -o flag support to save built binary (Fixes #4937) (#4942)
      • fix: update version of clang to 17 to accommodate latest Go 1.25 docker base image
    • ci
      • chore: update all CI builds to test Go 1.25 release
      • fix: disable test-newest since CircleCI seems unable to download due to rate-limits on Dockerhub
      • ci: rename some jobs to avoid churn on every Go/LLVM version bump
      • ci: make the goroutines test less racy
      • tests: de-flake goroutines test
    • compiler
      • compiler: implement internal/abi.Escape
    • main
      • main: show the compiler error (if any) for tinygo test -c
      • chore: correct GOOS=js name in error messages for WASM
    • machine
      • machine: add international keys
      • machine: remove some unnecessary "// peripherals:" comments
      • machine: add I2C pin comments
      • machine: standardize I2C errors with "i2c:" prefix
      • machine: make I2C usable in the simulator
      • fix: add SPI and I2C to teensy 4.1 (#4943)
      • rp2: use the correct channel mask for rp2350 ADC; hold lock during read (#4938)
      • rp2: disable digital input for analog inputs
    • runtime
      • runtime: ensure time.Sleep(d) sleeps at least d
      • runtime: stub out weak pointer support
      • runtime: implement dummy AddCleanup
      • runtime: enable multi-core scheduler for rp2350
      • internal/task: use -stack-size flag when starting a new thread
      • internal/task: add SA_RESTART flag to GC interrupts
      • internal/task: a few small correctness fixes
      • internal/gclayout: make gclayout values constants
      • darwin: add threading support and use it by default
    • standard library
      • sync: implement sync.Swap
      • reflect: implement Method.IsExported
    • testing
      • testing: stub out testing.B.Loop
    • targets
      • stm32: add support for the STM32L031G6U6
      • add metro-rp2350 board definition (#4989)
      • rp2040/rp2350: set the default stack size to 8k for rp2040/rp2350 based boards where this was not already the case
    Open source →
  24. v0.38.0 14 Jun 2025
    Release notes

    This release includes some very exciting new features, in particular our first multicore support! Initially available on the RP2040 microcontrollers, now TinyGo can use both cores at the same time for true concurrency in hardware. Another very powerful new capability added in this release is USB Mass Storage Device (MSD) support on the RP2040/RP2350, SAMD21, and SAMD51 series of processors. We have also added experimental Boehm garbage collector for WebAssembly to speed up your production code.

    • general
      • go.*: upgrade golang.org/x/tools to v0.30.0
      • all: add support for LLVM 20
    • build
      • go back to using MinoruSekine/setup-scoop for Windows CI builds
      • flake.*: upgrade to nixpkgs 25.05, LLVM 20
      • Makefile: only detect ccache command when needed
      • Makefile: create random filename inside rule
      • Makefile: don't set GOROOT
      • Makefile: call uname at most once
      • Makefile: only read NodeJS version when it is needed
    • compiler
      • add support for GODEBUG=gotypesalias=1
      • interp: fix copy() from/to external buffers
      • add -nobounds (similar to -gcflags=-B)
      • compileopts: add library version to cached library path
      • builder: build wasi-libc inside TinyGo
      • builder: simplify bdwgc libc dependency
      • builder: don't use precompiled libraries
      • compileopts: enable support for GOARCH=wasm in tinygo test
    • fixes
      • rp2350: Fix DMA to SPI transmits on RP2350 (#4903)
      • microbit v2: use OpenOCD flash method on microbit v2 when using Nordic Semi SoftDevice
      • main: display all of the current GC options for the -gc flag
      • Remove duplicated error handling
      • sync: fix TestMutexConcurrent test
      • fix race condition in testdata/goroutines.go
      • fix build warnings on Windows ARM
    • machine
      • usb: add USB mass storage class support
      • implement usb receive message throttling
      • declare usb endpoints per-platform
      • samd21: implement watchdog
      • samd51: write to flash memory in 512 byte long chunks
      • samd21: write to flash memory in 64 byte long chunks
      • don't inline RTT WriteByte everywhere
      • rp2: unexport machine-specific errors
      • rp2: discount scheduling delays in I2C timeouts (#4876)
      • use pointer receiver in simulated PWM peripherals
      • add simulated PWM/timer peripherals
      • rp2: expose usb endpoint stall handling
      • arm: clear pending interrupts before enabling them
      • rp2: merge common usb code (#4856)
    • main
      • add "cores" and "threads" schedulers to help text
      • add StartPos and EndPos to -json build output
      • change -json flag to match upstream Go
    • runtime
      • don't lock the print output inside interrupts
      • don't try to interrupt other cores before they are started
      • implement NumCPU for the multicore scheduler
      • add support for multicore scheduler
      • refactor obtaining the system stack
      • interrupt: add Checkpoint type
      • add exportedFuncPtr
      • avoid an allocation in (*time.Timer).Reset
      • stub runtime signal functions for os/signal on wasip1
      • move timeUnit to a single place
      • implement NumCPU for -scheduler=threads
      • move mainExited boolean
      • internal/task: rename tinygo_pause to tinygo_task_exit
      • map every goroutine to a new OS thread
      • refactor timerQueue
      • make conservative and precise GC MT-safe
      • internal/task: implement atomic primitives for preemptive scheduling
      • Use diskutil on macOS to extract volume name and path for FAT mounts #4928
    • standard library
      • net: update submodule to latest commits
      • runtime/debug: add GC related stubs
      • metrics: flesh out some of the metric types
      • reflect: Chan related stubs
      • os: handle relative and abs paths in Executable()
      • os: add os.Executable() for Darwin
      • sync: implement RWMutex using futexes
      • reflect: Add SliceOf, ArrayOf, StructOf, MapOf, FuncOf
    • targets
      • rp2040: add multicore support
      • riscv32: use gdb binary as a fallback
      • add target for Microbit v2 with SoftDevice S140 support for both peripheral and central
      • windows: use MSVCRT.DLL instead of UCRT on i386
      • windows: add windows/386 support
      • arm64: remove unnecessary .section directive
      • riscv-qemu: actually sleep in time.Sleep()
      • riscv: define CSR constants and use them where possible
      • darwin: support Boehm GC (and use by default)
      • windows: add support for the Boehm-Demers-Weiser GC
      • windows: fix wrong register for first parameter
    • wasm
      • add Boehm GC support
      • refactor/modify stub signal handling
      • don't block //go:wasmexport because of running goroutines
      • use int64 instead of float64 for the timeUnit
    • boards
      • Add board support for BigTreeTech SKR Pico (#4842)
    Open source →
    Release notes
    • general
      • go.*: upgrade golang.org/x/tools to v0.30.0
      • all: add support for LLVM 20
    • build
      • go back to using MinoruSekine/setup-scoop for Windows CI builds
      • flake.*: upgrade to nixpkgs 25.05, LLVM 20
      • Makefile: only detect ccache command when needed
      • Makefile: create random filename inside rule
      • Makefile: don't set GOROOT
      • Makefile: call uname at most once
      • Makefile: only read NodeJS version when it is needed
    • compiler
      • add support for GODEBUG=gotypesalias=1
      • interp: fix copy() from/to external buffers
      • add -nobounds (similar to -gcflags=-B)
      • compileopts: add library version to cached library path
      • builder: build wasi-libc inside TinyGo
      • builder: simplify bdwgc libc dependency
      • builder: don't use precompiled libraries
      • compileopts: enable support for GOARCH=wasm in tinygo test
    • fixes
      • rp2350: Fix DMA to SPI transmits on RP2350 (#4903)
      • microbit v2: use OpenOCD flash method on microbit v2 when using Nordic Semi SoftDevice
      • main: display all of the current GC options for the -gc flag
      • Remove duplicated error handling
      • sync: fix TestMutexConcurrent test
      • fix race condition in testdata/goroutines.go
      • fix build warnings on Windows ARM
    • machine
      • usb: add USB mass storage class support
      • implement usb receive message throttling
      • declare usb endpoints per-platform
      • samd21: implement watchdog
      • samd51: write to flash memory in 512 byte long chunks
      • samd21: write to flash memory in 64 byte long chunks
      • don't inline RTT WriteByte everywhere
      • rp2: unexport machine-specific errors
      • rp2: discount scheduling delays in I2C timeouts (#4876)
      • use pointer receiver in simulated PWM peripherals
      • add simulated PWM/timer peripherals
      • rp2: expose usb endpoint stall handling
      • arm: clear pending interrupts before enabling them
      • rp2: merge common usb code (#4856)
    • main
      • add "cores" and "threads" schedulers to help text
      • add StartPos and EndPos to -json build output
      • change -json flag to match upstream Go
    • runtime
      • don't lock the print output inside interrupts
      • don't try to interrupt other cores before they are started
      • implement NumCPU for the multicore scheduler
      • add support for multicore scheduler
      • refactor obtaining the system stack
      • interrupt: add Checkpoint type
      • add exportedFuncPtr
      • avoid an allocation in (*time.Timer).Reset
      • stub runtime signal functions for os/signal on wasip1
      • move timeUnit to a single place
      • implement NumCPU for -scheduler=threads
      • move mainExited boolean
      • internal/task: rename tinygo_pause to tinygo_task_exit
      • map every goroutine to a new OS thread
      • refactor timerQueue
      • make conservative and precise GC MT-safe
      • internal/task: implement atomic primitives for preemptive scheduling
      • Use diskutil on macOS to extract volume name and path for FAT mounts #4928
    • standard library
      • net: update submodule to latest commits
      • runtime/debug: add GC related stubs
      • metrics: flesh out some of the metric types
      • reflect: Chan related stubs
      • os: handle relative and abs paths in Executable()
      • os: add os.Executable() for Darwin
      • sync: implement RWMutex using futexes
      • reflect: Add SliceOf, ArrayOf, StructOf, MapOf, FuncOf
    • targets
      • rp2040: add multicore support
      • riscv32: use gdb binary as a fallback
      • add target for Microbit v2 with SoftDevice S140 support for both peripheral and central
      • windows: use MSVCRT.DLL instead of UCRT on i386
      • windows: add windows/386 support
      • arm64: remove unnecessary .section directive
      • riscv-qemu: actually sleep in time.Sleep()
      • riscv: define CSR constants and use them where possible
      • darwin: support Boehm GC (and use by default)
      • windows: add support for the Boehm-Demers-Weiser GC
      • windows: fix wrong register for first parameter
    • wasm
      • add Boehm GC support
      • refactor/modify stub signal handling
      • don't block //go:wasmexport because of running goroutines
      • use int64 instead of float64 for the timeUnit
    • boards
      • Add board support for BigTreeTech SKR Pico (#4842)
    Open source →
  25. v0.37.1-0.20250501130808-edaf87705611 01 May 2025 pre-release

    Nothing published for this version

  26. v0.37.1-0.20250424072452-de532643b1cf 24 Apr 2025 pre-release

    Nothing published for this version

  27. v0.37.1-0.20250422143119-922ba6a4a346 22 Apr 2025 pre-release

    Nothing published for this version

  28. v0.37.0 19 Mar 2025
    Release notes

    This is probably our fastest time in-between full releases, especially given all of the excellent work that has made it in. A few highlights are updated compatibility with the latest WASI work from the Bytecode Alliance, faster speed and PIO support for the RP2350, and a new garbage collector option for Linux. Plus a bunch of critical fixes to make your life better!

    • general
      • add the Boehm-Demers-Weiser GC on Linux
    • ci
      • add more tests for wasm and baremetal
    • compiler
      • crypto/internal/sysrand is allowed to use unsafe signatures
    • examples
      • add goroutine benchmark to examples
    • fixes
      • ensure use of pointers for SPI interface on atsam21/atsam51 and other machines/boards that were missing implementation (#4798)
      • replace loop counter with hw timer for USB SetAddressReq on rp2040 (#4796)
    • internal
      • update to [email protected] in GNUmakefile and internal/wasm-tools
      • exclude certain files when copying package in internal/cm
      • update to go.bytecodealliance.org/[email protected] in internal/cm
      • remove old reflect.go in internal/reflectlite
    • loader
      • use build tags for package iter and iter methods on reflect.Value in loader, iter, reflect
      • add shim for go1.22 and earlier in loader, iter
    • machine
      • bump rp2040 to 200MHz (#4768)
      • correct register address for Pin.SetInterrupt for rp2350 (#4782)
      • don't block the rp2xxx UART interrupt handler
      • fix RP2040 Pico board on the playground
      • add flash support for rp2350 (#4803)
    • os
      • add stub Symlink for wasm
    • refactor
      • use *SPI everywhere to make consistent for implementations. Fixes #4663 "in reverse" by making SPI a pointer everywhere, as discussed in the comments.
    • reflect
      • add Value.SetIter{Key,Value} and MapIter.Reset in reflect, internal/reflectlite
      • embed reflectlite types into reflect types in reflect, internal/reflectlite
      • add Go 1.24 iter.Seq[2] methods
      • copy reflect iter tests from upstream Go
      • panic on Type.CanSeq[2] instead of returning false
      • remove strconv.go
      • remove unused go:linkname functions
    • riscv-qemu
      • add VirtIO RNG device
      • increase stack size
    • runtime
      • only allocate heap memory when needed
      • remove unused file func.go
      • use package reflectlite
    • transform
    Open source →
    Release notes
    • general
      • add the Boehm-Demers-Weiser GC on Linux
    • ci
      • add more tests for wasm and baremetal
    • compiler
      • crypto/internal/sysrand is allowed to use unsafe signatures
    • examples
      • add goroutine benchmark to examples
    • fixes
      • ensure use of pointers for SPI interface on atsam21/atsam51 and other machines/boards that were missing implementation (#4798)
      • replace loop counter with hw timer for USB SetAddressReq on rp2040 (#4796)
    • internal
      • update to [email protected] in GNUmakefile and internal/wasm-tools
      • exclude certain files when copying package in internal/cm
      • update to go.bytecodealliance.org/[email protected] in internal/cm
      • remove old reflect.go in internal/reflectlite
    • loader
      • use build tags for package iter and iter methods on reflect.Value in loader, iter, reflect
      • add shim for go1.22 and earlier in loader, iter
    • machine
      • bump rp2040 to 200MHz (#4768)
      • correct register address for Pin.SetInterrupt for rp2350 (#4782)
      • don't block the rp2xxx UART interrupt handler
      • fix RP2040 Pico board on the playground
      • add flash support for rp2350 (#4803)
    • os
      • add stub Symlink for wasm
    • refactor
      • use *SPI everywhere to make consistent for implementations. Fixes #4663 "in reverse" by making SPI a pointer everywhere, as discussed in the comments.
    • reflect
      • add Value.SetIter{Key,Value} and MapIter.Reset in reflect, internal/reflectlite
      • embed reflectlite types into reflect types in reflect, internal/reflectlite
      • add Go 1.24 iter.Seq[2] methods
      • copy reflect iter tests from upstream Go
      • panic on Type.CanSeq[2] instead of returning false
      • remove strconv.go
      • remove unused go:linkname functions
    • riscv-qemu
      • add VirtIO RNG device
      • increase stack size
    • runtime
      • only allocate heap memory when needed
      • remove unused file func.go
      • use package reflectlite
    • transform
      • cherry-pick from #4774
    Open source →
  29. v0.36.1-0.20250313153943-4f7c64cb2485 13 Mar 2025 pre-release

    Nothing published for this version

  30. v0.36.0 03 Mar 2025
    Release notes
    • general
      • add initial Go 1.24 support
      • add support for LLVM 19
      • update license for 2025
      • make small corrections for README regarding wasm
      • use GOOS and GOARCH for building wasm simulated boards
      • only infer target for wasm when GOOS and GOARCH are set correctly, not just based on file extension
      • add test-corpus-wasip2
      • use older image for cross-compiling builds
      • update Linux builds to run on ubuntu-latest since 20.04 is being retired
      • ensure build output directory is created
      • add NoSandbox flag to chrome headless that is run during WASM tests, since this is now required for Ubuntu 23+ and we are using Ubuntu 24+ when running Github Actions
      • update wasmtime used for CI to 29.0.1 to fix issue with install during CI tests
      • update to use Get-CimInstance as wmic is being deprecated on WIndows
      • remove unnecessary executable permissions
      • goenv: update to new v0.36.0 development version
    • compiler
      • builder: fix parsing of external ld.lld error messages
      • cgo: mangle identifier names
      • interp: correctly mark functions as modifying memory
      • add buildmode=wasi-legacy to support existing base of users who expected the older behavior for wasi modules to not return an exit code as if they were reactors
    • standard library
      • crypto/tls: add Dialer.DialContext() to fix websocket client
      • crypto/tls: add VersionTLS constants and VersionName(version uint16) method that turns it into a string, copied from big go
      • internal/syscall/unix: use our own version of this package
      • machine: replace hard-coded cpu frequencies on rp2xxx
      • machine: bump rp2350 CPUFrequency to 150 MHz
      • machine: compute rp2 clock dividers from crystal and target frequency
      • machine: remove bytes package dependency in flash code
      • machine/usb/descriptor: avoid bytes package
      • net: update to latest submodule with httptest subpackage and ResolveIPAddress implementation
      • os: add File.Chdir support
      • os: implement stub Chdir for non-OS systems
      • os/file: add file.Chmod
      • reflect: implement Value.Equal
      • runtime: add FIPS helper functions
      • runtime: manually initialize xorshift state
      • sync: move Mutex to internal/task
      • syscall: add wasip1 RandomGet
      • testing: add Chdir
      • wasip2: add stubs to get internal/syscall/unix to work
    • fixes
      • correctly handle calls for GetRNG() when being made from nrf devices with SoftDevice enabled
      • fix stm32f103 ADC
      • wasm: correctly handle id lookup for finalizeRef call
      • wasm: avoid total failure on wasm finalizer call
      • wasm: convert offset as signed int into unsigned int in syscall/js.stringVal in wasm_exec.js
    • targets
      • rp2350: add pll generalized solution; fix ADC handles; pwm period fix
      • rp2350: extending support to include the rp2350b
      • rp2350: cleanup: unexport internal USB and clock package variable, consts and types
      • nrf: make ADC resolution changeable
      • turn on GC for TKey1 device, since it does in fact work
      • match Pico2 stack size to Pico
    • boards
      • add support for Pimoroni Pico Plus2
      • add target for pico2-w board
      • add comboat_fw tag for elecrow W5 boards with Combo-AT Wifi firmware
      • add support for Elecrow Pico rp2350 W5 boards
      • add support for Elecrow Pico rp2040 W5 boards
      • add support for NRF51 HW-651
      • add support for esp32c3-supermini
      • add support for waveshare-rp2040-tiny
    • examples
      • add naive debouncing for pininterrupt example
    Open source →
    Release notes
    • general
      • add initial Go 1.24 support
      • add support for LLVM 19
      • update license for 2025
      • make small corrections for README regarding wasm
      • use GOOS and GOARCH for building wasm simulated boards
      • only infer target for wasm when GOOS and GOARCH are set correctly, not just based on file extension
      • add test-corpus-wasip2
      • use older image for cross-compiling builds
      • update Linux builds to run on ubuntu-latest since 20.04 is being retired
      • ensure build output directory is created
      • add NoSandbox flag to chrome headless that is run during WASM tests, since this is now required for Ubuntu 23+ and we are using Ubuntu 24+ when running Github Actions
      • update wasmtime used for CI to 29.0.1 to fix issue with install during CI tests
      • update to use Get-CimInstance as wmic is being deprecated on WIndows
      • remove unnecessary executable permissions
      • goenv: update to new v0.36.0 development version
    • compiler
      • builder: fix parsing of external ld.lld error messages
      • cgo: mangle identifier names
      • interp: correctly mark functions as modifying memory
      • add buildmode=wasi-legacy to support existing base of users who expected the older behavior for wasi modules to not return an exit code as if they were reactors
    • standard library
      • crypto/tls: add Dialer.DialContext() to fix websocket client
      • crypto/tls: add VersionTLS constants and VersionName(version uint16) method that turns it into a string, copied from big go
      • internal/syscall/unix: use our own version of this package
      • machine: replace hard-coded cpu frequencies on rp2xxx
      • machine: bump rp2350 CPUFrequency to 150 MHz
      • machine: compute rp2 clock dividers from crystal and target frequency
      • machine: remove bytes package dependency in flash code
      • machine/usb/descriptor: avoid bytes package
      • net: update to latest submodule with httptest subpackage and ResolveIPAddress implementation
      • os: add File.Chdir support
      • os: implement stub Chdir for non-OS systems
      • os/file: add file.Chmod
      • reflect: implement Value.Equal
      • runtime: add FIPS helper functions
      • runtime: manually initialize xorshift state
      • sync: move Mutex to internal/task
      • syscall: add wasip1 RandomGet
      • testing: add Chdir
      • wasip2: add stubs to get internal/syscall/unix to work
    • fixes
      • correctly handle calls for GetRNG() when being made from nrf devices with SoftDevice enabled
      • fix stm32f103 ADC
      • wasm: correctly handle id lookup for finalizeRef call
      • wasm: avoid total failure on wasm finalizer call
      • wasm: convert offset as signed int into unsigned int in syscall/js.stringVal in wasm_exec.js
    • targets
      • rp2350: add pll generalized solution; fix ADC handles; pwm period fix
      • rp2350: extending support to include the rp2350b
      • rp2350: cleanup: unexport internal USB and clock package variable, consts and types
      • nrf: make ADC resolution changeable
      • turn on GC for TKey1 device, since it does in fact work
      • match Pico2 stack size to Pico
    • boards
      • add support for Pimoroni Pico Plus2
      • add target for pico2-w board
      • add comboat_fw tag for elecrow W5 boards with Combo-AT Wifi firmware
      • add support for Elecrow Pico rp2350 W5 boards
      • add support for Elecrow Pico rp2040 W5 boards
      • add support for NRF51 HW-651
      • add support for esp32c3-supermini
      • add support for waveshare-rp2040-tiny
    • examples
      • add naive debouncing for pininterrupt example
    Open source →
  31. v0.35.0 20 Dec 2024
    Release notes

    This is our last release of the year, and we've got plenty of presents for all of us tiny gophers!
    We are happy to show improved error messages, and also a new HTML size report to help figure out what exactly is ending up in that binary.
    There are several CGo improvements, such as support for function-like macros.
    We've got a whole slew of improvements for reflection and runtime support, alongside several fixes and improvements for WASM.
    New hardware! Support for the new RP2350 microcontroller, with the Raspberry Pi Pico2 and Pimoroni Tiny2350 boards.
    And we are excited to bring our first software RISC-V running on FPGA to TinyGo with the newly added Tillitis TKey hardware device.

    • general
      • update cmsis-svd library
      • use default UART settings in the echo example
      • goenv: also show git hash with custom build of TinyGo
      • goenv: support parsing development versions of Go
      • main: parse extldflags early so we can report the error message
    • compiler
      • builder: whitelist temporary directory env var for Clang invocation to fix Windows bug
      • builder: fix cache paths in -size=full output
      • builder: work around incorrectly escaped DWARF paths on Windows (Clang bug)
      • builder: fix wasi-libc path names on Windows with -size=full
      • builder: write HTML size report
      • cgo: support C identifiers only referred to from within macros
      • cgo: support function-like macros
      • cgo: support errno value as second return parameter
      • cgo: add support for #cgo noescape lines
      • compiler: fix bug in interrupt lowering
      • compiler: allow panic directly in defer
      • compiler: fix wasmimport -> wasmexport in error message
      • compiler: support //go:noescape pragma
      • compiler: report error instead of crashing when instantiating a generic function without body
      • interp: align created globals
    • standard library
      • machine: modify i2s interface/implementation to better match specification
      • os: implement StartProcess
      • reflect: add Value.Clear
      • reflect: add interface support to NumMethods
      • reflect: fix AssignableTo for named + non-named types
      • reflect: implement CanConvert
      • reflect: handle more cases in Convert
      • reflect: fix Copy of non-pointer array with size > 64bits
      • runtime: don't call sleepTicks with a negative duration
      • runtime: optimize GC scanning (findHead)
      • runtime: move constants into shared package
      • runtime: add runtime.fcntl function for internal/syscall/unix
      • runtime: heapptr only needs to be initialized once
      • runtime: refactor scheduler (this fixes a few bugs with -scheduler=none)
      • runtime: rewrite channel implementation to be smaller and more flexible
      • runtime: use SA_RESTART when registering a signal for os/signal
      • runtime: implement race-free signals using futexes
      • runtime: run deferred functions in Goexit
      • runtime: remove Cond which seems to be unused
      • runtime: properly handle unix read on directory
      • runtime/trace: stub all public methods
      • sync: don't use volatile in Mutex
      • sync: implement WaitGroup using a (pseudo)futex
      • sync: make Cond parallelism-safe
      • syscall: use wasi-libc tables for wasm/js target
    • targets
      • mips: fix a bug when scanning the stack
      • nintendoswitch: get this target to compile again
      • rp2350: add support for the new RP2350
      • rp2040/rp2350 : make I2C implementation shared for rp2040/rp2350
      • rp2040/rp2350 : make SPI implementation shared for rp2040/rp2350
      • rp2040/rp2350 : make RNG implementation shared for rp2040/rp2350
      • wasm: revise and simplify wasmtime argument handling
      • wasm: support //go:wasmexport functions after a call to time.Sleep
      • wasm: correctly return from run() in wasm_exec.js
      • wasm: call process.exit() when go.run() returns
      • windows: don't return, exit via exit(0) instead to flush stdout buffer
    • boards
      • add support for the Tillitis TKey
      • add support for the Raspberry Pi Pico2 (based on the RP2040)
      • add support for Pimoroni Tiny2350
    Open source →
    Release notes
    • general
      • update cmsis-svd library
      • use default UART settings in the echo example
      • goenv: also show git hash with custom build of TinyGo
      • goenv: support parsing development versions of Go
      • main: parse extldflags early so we can report the error message
    • compiler
      • builder: whitelist temporary directory env var for Clang invocation to fix Windows bug
      • builder: fix cache paths in -size=full output
      • builder: work around incorrectly escaped DWARF paths on Windows (Clang bug)
      • builder: fix wasi-libc path names on Windows with -size=full
      • builder: write HTML size report
      • cgo: support C identifiers only referred to from within macros
      • cgo: support function-like macros
      • cgo: support errno value as second return parameter
      • cgo: add support for #cgo noescape lines
      • compiler: fix bug in interrupt lowering
      • compiler: allow panic directly in defer
      • compiler: fix wasmimport -> wasmexport in error message
      • compiler: support //go:noescape pragma
      • compiler: report error instead of crashing when instantiating a generic function without body
      • interp: align created globals
    • standard library
      • machine: modify i2s interface/implementation to better match specification
      • os: implement StartProcess
      • reflect: add Value.Clear
      • reflect: add interface support to NumMethods
      • reflect: fix AssignableTo for named + non-named types
      • reflect: implement CanConvert
      • reflect: handle more cases in Convert
      • reflect: fix Copy of non-pointer array with size > 64bits
      • runtime: don't call sleepTicks with a negative duration
      • runtime: optimize GC scanning (findHead)
      • runtime: move constants into shared package
      • runtime: add runtime.fcntl function for internal/syscall/unix
      • runtime: heapptr only needs to be initialized once
      • runtime: refactor scheduler (this fixes a few bugs with -scheduler=none)
      • runtime: rewrite channel implementation to be smaller and more flexible
      • runtime: use SA_RESTART when registering a signal for os/signal
      • runtime: implement race-free signals using futexes
      • runtime: run deferred functions in Goexit
      • runtime: remove Cond which seems to be unused
      • runtime: properly handle unix read on directory
      • runtime/trace: stub all public methods
      • sync: don't use volatile in Mutex
      • sync: implement WaitGroup using a (pseudo)futex
      • sync: make Cond parallelism-safe
      • syscall: use wasi-libc tables for wasm/js target
    • targets
      • mips: fix a bug when scanning the stack
      • nintendoswitch: get this target to compile again
      • rp2350: add support for the new RP2350
      • rp2040/rp2350 : make I2C implementation shared for rp2040/rp2350
      • rp2040/rp2350 : make SPI implementation shared for rp2040/rp2350
      • rp2040/rp2350 : make RNG implementation shared for rp2040/rp2350
      • wasm: revise and simplify wasmtime argument handling
      • wasm: support //go:wasmexport functions after a call to time.Sleep
      • wasm: correctly return from run() in wasm_exec.js
      • wasm: call process.exit() when go.run() returns
      • windows: don't return, exit via exit(0) instead to flush stdout buffer
    • boards
      • add support for the Tillitis TKey
      • add support for the Raspberry Pi Pico2 (based on the RP2040)
      • add support for Pimoroni Tiny2350
    Open source →
  32. v0.34.1-0.20241119065158-0087d4c6bf13 19 Nov 2024 pre-release

    Nothing published for this version

  33. v0.34.0 25 Oct 2024
    Release notes

    This release adds support for //go:wasmexport that is a standardized way to export WebAssembly functions to the host, improves garbage collection performance (especially on wasm), adds big-endian MIPS support (GOOS=mips), and adds two new boards! It also contains a number of smaller improvements and bug fixes.

    • general
      • fix GOOS=wasip1 for tinygo test
      • add -C DIR flag
      • add initial documentation for project governance
      • add -ldflags='-extldflags=...' support
      • improve usage message with tinygo help and when passing invalid parameters
    • compiler
      • builder: remove environment variables when invoking Clang, to avoid the environment changing the behavior
      • builder: check for the Go toolchain version used to compile TinyGo
      • cgo: add C.CBytes implementation
      • compiler: fix passing weirdly-padded structs as parameters to new goroutines
      • compiler: support pragmas on generic functions
      • compiler: do not let the slice buffer escape when casting a []byte or []rune to a string, to help escape analysis
      • compiler: conform to the latest iteration of the wasm types proposal
      • loader: don't panic when main package is not named 'main'
      • loader: make sure we always return type checker errors even without type errors
      • transform: optimize range over []byte(string)
    • standard library
      • crypto/x509: add package stub to build crypto/x509 on macOS
      • machine/usb/adc/midi: fix PitchBend
      • os: add Truncate stub for baremetal
      • os: add stubs for os.File deadlines
      • os: add internal net.newUnixFile for the net package
      • runtime: stub runtime_{Before,After}Exec for linkage
      • runtime: randomize map accesses
      • runtime: support maps.Clone
      • runtime: add more fields to MemStats
      • runtime: implement newcoro, coroswitch to support package iter
      • runtime: disallow defer in interrupts
      • runtime: add support for os/signal on Linux and MacOS
      • runtime: add gc layout info for some basic types to help the precise GC
      • runtime: bump GC mark stack size to avoid excessive heap rescans
    • targets
      • darwin: use Go standard library syscall package instead of a custom one
      • fe310: support GPIO PinInput
      • mips: fix compiler crash with GOMIPS=softfloat and defer
      • mips: add big-endian (GOARCH=mips) support
      • mips: use MIPS32 (instead of MIPS32R2) as the instruction set for wider compatibility
      • wasi: add relative and absolute --dir options to wasmtime args
      • wasip2: add wasmtime -S args to support network interfaces
      • wasm: add //go:wasmexport support (for all WebAssembly targets)
      • wasm: use precise instead of conservative GC for WebAssembly (including WASI)
      • wasm-unknown: add bulk memory flags since basically every runtime has it now
    • boards
    Open source →
    Release notes
    • general
      • fix GOOS=wasip1 for tinygo test
      • add -C DIR flag
      • add initial documentation for project governance
      • add -ldflags='-extldflags=...' support
      • improve usage message with tinygo help and when passing invalid parameters
    • compiler
      • builder: remove environment variables when invoking Clang, to avoid the environment changing the behavior
      • builder: check for the Go toolchain version used to compile TinyGo
      • cgo: add C.CBytes implementation
      • compiler: fix passing weirdly-padded structs as parameters to new goroutines
      • compiler: support pragmas on generic functions
      • compiler: do not let the slice buffer escape when casting a []byte or []rune to a string, to help escape analysis
      • compiler: conform to the latest iteration of the wasm types proposal
      • loader: don't panic when main package is not named 'main'
      • loader: make sure we always return type checker errors even without type errors
      • transform: optimize range over []byte(string)
    • standard library
      • crypto/x509: add package stub to build crypto/x509 on macOS
      • machine/usb/adc/midi: fix PitchBend
      • os: add Truncate stub for baremetal
      • os: add stubs for os.File deadlines
      • os: add internal net.newUnixFile for the net package
      • runtime: stub runtime_{Before,After}Exec for linkage
      • runtime: randomize map accesses
      • runtime: support maps.Clone
      • runtime: add more fields to MemStats
      • runtime: implement newcoro, coroswitch to support package iter
      • runtime: disallow defer in interrupts
      • runtime: add support for os/signal on Linux and MacOS
      • runtime: add gc layout info for some basic types to help the precise GC
      • runtime: bump GC mark stack size to avoid excessive heap rescans
    • targets
      • darwin: use Go standard library syscall package instead of a custom one
      • fe310: support GPIO PinInput
      • mips: fix compiler crash with GOMIPS=softfloat and defer
      • mips: add big-endian (GOARCH=mips) support
      • mips: use MIPS32 (instead of MIPS32R2) as the instruction set for wider compatibility
      • wasi: add relative and absolute --dir options to wasmtime args
      • wasip2: add wasmtime -S args to support network interfaces
      • wasm: add //go:wasmexport support (for all WebAssembly targets)
      • wasm: use precise instead of conservative GC for WebAssembly (including WASI)
      • wasm-unknown: add bulk memory flags since basically every runtime has it now
    • boards
      • add RAKwireless RAK4631
      • add WaveShare ESP-C3-32S-Kit
    Open source →
  34. v0.33.0 20 Aug 2024
    Release notes
    • general
      • use latest version of x/tools
      • add chromeos 9p support for flashing
      • sort compiler error messages by source position in a package
      • don't include prebuilt libraries in the release to simplify packaging and reduce the release tarball size
      • show runtime panic addresses for tinygo run
      • support Go 1.23 (including all new language features)
      • test: support GOOS/GOARCH pairs in the -target flag
      • test: remove message after test binary built
    • compiler
      • remove unused registers for x86_64 linux syscalls
      • remove old atomics workaround for AVR (not necessary in modern LLVM versions)
      • support golang.org/x/sys/unix syscalls
      • builder: remove workaround for generics race condition
      • builder: add package ID to compiler and optimization error messages
      • builder: show better error messages for some common linker errors
      • cgo: support preprocessor macros passed on the command line
      • cgo: use absolute paths for error messages
      • cgo: add support for printf
      • loader: handle go list errors inside TinyGo (for better error messages)
      • transform: fix incorrect alignment of heap-to-stack transform
      • transform: use thinlto-pre-link passes (instead of the full pipeline) to speed up compilation speed slightly
    • standard library
      • crypto/tls: add CipherSuiteName and some extra fields to ConnectionSTate
      • internal/abi: implement initial version of this package
      • machine: use new internal/binary package
      • machine: rewrite Reply() to fix sending long replies in I2C Target Mode
      • machine/usb/descriptor: Reset joystick physical
      • machine/usb/descriptor: Drop second joystick hat
      • machine/usb/descriptor: Add more HID... functions
      • machine/usb/descriptor: Fix encoding of values
      • machine/usb/hid/joystick: Allow more hat switches
      • os: add Chown, Truncate
      • os/user: use stdlib version of this package
      • reflect: return correct name for the unsafe.Pointer type
      • reflect: implement Type.Overflow* functions
      • runtime: implement dummy getAuxv to satisfy golang.org/x/sys/
      • runtime: don't zero out new allocations for -gc=leaking when they are already zeroed
      • runtime: simplify slice growing/appending code
      • runtime: print a message when a fatal signal like SIGSEGV happens
      • runtime/debug: add GoVersion to debug.BuildInfo
      • sync: add Map.Clear()
      • sync/atomic: add And* and Or* compiler intrinsics needed for Go 1.23
      • syscall: add Fork and Execve
      • syscall: add all MacOS errno values
      • testing: stub out T.Deadline
      • unique: implement custom (naive) version of the unique package
    • targets
      • arm: support GOARM=*,softfloat (softfloat support for ARM v5, v6, and v7)
      • mips: add linux/mipsle (and experimental linux/mips) support
      • mips: add GOMIPS=softfloat support
      • wasip2: add WASI preview 2 support
      • wasm/js: add node: prefix in require() call of wasm_exec.js
      • wasm-unknown: make sure the os package can be imported
      • wasm-unknown: remove import-memory flag
    Open source →
  35. v0.32.1-0.20240817161639-16950780d389 17 Aug 2024 pre-release

    Nothing published for this version

  36. v0.32.0 16 Jun 2024
    Release notes
    • general

      • fix wasi-libc include headers on Nix
      • apply OpenOCD commands after target configuration
      • fix a minor race condition when determining the build tags
      • support UF2 drives with a space in their name on Linux
      • add LLVM 18 support
      • drop support for Go 1.18 to be able to stay up to date
    • compiler

      • move -panic=trap support to the compiler/runtime
      • fix symbol table index for WebAssembly archives
      • fix ed25519 build errors by adjusting the alias names
      • add aliases to generic AES functions
      • fix race condition by temporarily applying a proposed patch
      • builder: keep un-wasm-opt'd .wasm if -work was passed
      • builder: make sure wasm-opt command line is printed if asked
      • cgo: implement shift operations in preprocessor macros
      • interp: checking for methodset existence
    • standard library

      • machine: add __tinygo_spi_tx function to simulator
      • machine: fix simulator I2C support
      • machine: add GetRNG support to simulator
      • machine: add TxFifoFreeLevel for CAN
      • os: add Link
      • os: add FindProcess for posix
      • os: add Process.Release for unix
      • os: add SetReadDeadline stub
      • os, os/signal: add signal stubs
      • os/user: add stubs for Lookup{,Group} and Group
      • reflect: use int in StringHeader and SliceHeader on non-AVR platforms
      • reflect: fix NumMethods for Interface type
      • runtime: skip negative sleep durations in sleepTicks
    • targets

      • esp32: add I2C support
      • rp2040: move UART0 and UART1 to common file
      • rp2040: make all RP2040 boards available for simulation
      • rp2040: fix timeUnit type
      • stm32: add i2c Frequency and SetBaudRate function for chips that were missing implementation
      • wasm-unknown: add math and memory builtins that LLVM needs
      • wasip1: replace existing -target=wasi support with wasip1 as supported in Go 1.21+
    • boards

      • adafruit-esp32-feather-v2: add the Adafruit ESP32 Feather V2
      • badger2040-w: add support for the Badger2040 W
      • feather-nrf52840-sense: fix lack of LXFO
      • m5paper: add support for the M5 Paper
      • mksnanov3: limit programming speed to 1800 kHz
      • nucleol476rg: add stm32 nucleol476rg support
      • pico-w: add the Pico W (which is near-idential to the pico target)
      • thingplus-rp2040, waveshare-rp2040-zero: add WS2812 definition
      • pca10059-s140v7: add this variant to the PCA10059 board
    Open source →
  37. v0.31.3-0.20240404173401-90b0bf646c27 04 Apr 2024 pre-release

    Nothing published for this version

  38. v0.31.3-0.20240319061222-78775007fa47 19 Mar 2024 pre-release

    Nothing published for this version

  39. v0.31.2 10 Mar 2024
    Release notes
    • general

      • update the net submodule to updated version with Buffers implementation
    • compiler

      • syscall: add wasm_unknown tag to some additional files so it can compile more code
    • standard library

      • runtime: add Frame.Entry field
    Open source →
  40. v0.31.1 28 Feb 2024
    Release notes
    • general

      • fix Binaryen build in make task
      • update final build stage of Docker dev image to go1.22
      • only use GHA cache for building Docker dev image
      • update the net submodule to latest version
    • compiler

      • interp: make getelementptr offsets signed
      • interp: return a proper error message when indexing out of range
    Open source →
  41. v0.31.0 26 Feb 2024
    Release notes
    • general
      • remove LLVM 14 support
      • add LLVM 17 support, and use it by default
      • add Nix flake support
      • update bundled Binaryen to version 116
      • add ports subcommand that lists available serial ports for -port and -monitor
      • support wasmtime version 14
      • add -serial=rtt for serial output over SWD
      • add Go 1.22 support and use it by default
      • change minimum Node.js version from 16 to 18
    • compiler
      • use the new LLVM pass manager
      • allow systems with more stack space to allocate larger values on the stack
      • build: fix a crash due to sharing GlobalValues between build instances
      • cgo: add C._Bool type
      • cgo: fix calling CGo callback inside generic function
      • compileopts: set purego build tag by default so that more packages can be built
      • compileopts: force-enable CGo to avoid build issues
      • compiler: fix crash on type assert on interfaces with no methods
      • interp: print LLVM instruction in traceback
      • interp: support runtime times by running them at runtime
      • loader: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod)
      • transform: fix bug in StringToBytes optimization pass
    • standard library
      • crypto/tls: stub out a lot of functions
      • internal/task, machine: make TinyGo code usable with "big Go" CGo
      • machine: implement I2C.SetBaudRate consistently across chips
      • machine: implement SPI.Configure consistently across chips
      • machine: add DeviceID for nrf, rp2040, sam, stm32
      • machine: use smaller UART buffer size on atmega chips
      • machine/usb: allow setting a serial number using a linker flag
      • math: support more math functions on baremetal (picolibc) systems
      • net: replace entire net package with a new one based on the netdev driver
      • os/user: add bare-bones implementation of this package
      • reflect: stub CallSlice and FuncOf
      • reflect: add TypeFor[T]
      • reflect: update IsZero to Go 1.22 semantics
      • reflect: move indirect values into interface when setting interfaces
      • runtime: stub Breakpoint
      • sync: implement trylock
    • targets
      • atmega: use UART double speed mode for fewer errors and higher throughput
      • atmega328pb: refactor to enable extra uart
      • avr: don't compile large parts of picolibc (math, stdio) for LLVM 17 support
      • esp32: switch over to the official SVD file
      • esp32c3: implement USB_SERIAL for USBCDC communication
      • esp32c3: implement I2C
      • esp32c3: implement RNG
      • esp32c3: add more ROM functions and update linker script for the in-progress wifi support
      • esp32c3: update to newer SVD files
      • rp2040: add support for UART hardware flow control
      • rp2040: add definition for machine.PinToggle
      • rp2040: set XOSC startup delay multiplier
      • samd21: add support for UART hardware flow control
      • samd51: add support for UART hardware flow control
      • wasm: increase default stack size to 64k for wasi/wasm targets
      • wasm: bump wasi-libc version to SDK 20
      • wasm: remove line of dead code in wasm_exec.js
    • new targets/boards
      • qtpy-esp32c3: add Adafruit QT Py ESP32-C3 board
      • mksnanov3: add support for the MKS Robin Nano V3.x
      • nrf52840-generic: add generic nrf52840 chip support
      • thumby: add support for Thumby
      • wasm: add new wasm-unknown target that doesn't depend on WASI or a browser
    • boards
      • arduino-mkrwifi1010, arduino-nano33, nano-rp2040, matrixportal-m4, metro-m4-airlift, pybadge, pyportal: add ninafw build tag and some constants for BLE support
      • gopher-badge: fix typo in USB product name
      • nano-rp2040: add UART1 and correct mappings for NINA via UART
      • pico: bump default stack size from 2kB to 8kB
      • wioterminal: expose UART4
    Open source →
  42. v0.30.1-0.20231219071640-534b3b0c0be2 19 Dec 2023 pre-release

    Nothing published for this version

  43. v0.30.0 21 Sep 2023
    Release notes
    • general
      • add LLVM 16 support, use it by default
    • compiler
      • build: work around a race condition by building Go SSA serially
      • compiler: fix a crash by not using the LLVM global context types
      • interp: don't copy unknown values in runtime.sliceCopy to fix miscompile
      • interp: fix crash in error report by not returning raw LLVM values
    • standard library
      • machine/usb/adc/midi: various improvements and API changes
      • reflect: add support for [...]T[]T in reflect
    • targets
      • atsamd21, atsamd51: add support for USB INTERRUPT OUT
      • rp2040: always use the USB device enumeration fix, even in chips that supposedly have the HW fix
      • wasm: increase default stack size to 32k for wasi/wasm
    • boards
      • gobadge: add GoBadge target as alias for PyBadge :)
      • gemma-m0: add support for the Adafruit Gemma M0
    Open source →
  44. v0.29.0 25 Aug 2023
    Release notes
    • general
      • Go 1.21 support
      • use https for renesas submodule #3856
      • ci: rename release-double-zipped to something more useful
      • ci: update Node.js from version 14 to version 16
      • ci: switch GH actions builds to use Go 1.21 final release
      • docker: update clang to version 15
      • docker: use Go 1.21 for Docker dev container build
      • main: add target JSON file in tinygo info output
      • main: improve detection of filesystems
      • main: use go env instead of doing all detection manually
      • make: add make task to generate Renesas device wrappers
      • make: add task to check NodeJS version before running tests
      • add submodule for Renesas SVD file mirror repo
      • update to go-serial package v1.6.0
      • testing: add Testing function
      • tools/gen-device-svd: small changes needed for Renesas MCUs
    • compiler
      • builder: update message for max supported Go version
      • compiler,reflect: NumMethods reports exported methods only
      • compiler: add compiler-rt and wasm symbols to table
      • compiler: add compiler-rt to wasm.json
      • compiler: add min and max builtin support
      • compiler: implement clear builtin for maps
      • compiler: implement clear builtin for slices
      • compiler: improve panic message when a runtime call is unavailable
      • compiler: update .ll test output
      • loader: merge go.env file which is now required starting in Go 1.21 to correctly get required packages
    • standard library
      • os: define ErrNoDeadline
      • reflect: Add FieldByNameFunc
      • reflect: add SetZero
      • reflect: fix iterating over maps with interface{} keys
      • reflect: implement Value.Grow
      • reflect: remove unnecessary heap allocations
      • reflect: use .key() instead of a type assert
      • sync: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues
    • targets
      • machine: UART refactor (#3832)
      • machine/avr: pin change interrupt
      • machine/macropad_rp2040: add machine.BUTTON
      • machine/nrf: add I2C timeout
      • machine/nrf: wait for stop condition after reading from the I2C bus
      • machine/nRF52: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877)
      • machine/rp2040: add missing suffix to CMD_READ_STATUS
      • machine/rp2040: add NoPin support
      • machine/rp2040: move flash related functions into separate file from C imports for correct - LSP. Fixes #3852
      • machine/rp2040: wait for 1000 us after flash reset to avoid issues with busy USB bus
      • machine/samd51,rp2040,nrf528xx,stm32: implement watchdog
      • machine/samd51: fix i2cTimeout was decreasing due to cache activation
      • machine/usb: Add support for HID Keyboard LEDs
      • machine/usb: allow USB Endpoint settings to be changed externally
      • machine/usb: refactor endpoint configuration
      • machine/usb: remove usbDescriptorConfig
      • machine/usb/hid,joystick: fix hidreport (3) (#3802)
      • machine/usb/hid: add RxHandler interface
      • machine/usb/hid: rename Handler() to TxHandler()
      • wasi: allow zero inodes when reading directories
      • wasm: add support for GOOS=wasip1
      • wasm: fix functions exported through //export
      • wasm: remove i64 workaround, use BigInt instead
      • example: adjust time offset
      • example: simplify pininterrupt
    • boards
      • targets: add AKIZUKI DENSHI AE-RP2040
      • targets: adding new uf2 target for PCA10056 (#3765)
    Open source →
  45. v0.28.2-0.20230819180410-e3bc6da9e4d3 19 Aug 2023 pre-release

    Nothing published for this version

  46. v0.28.1 11 Jun 2023

    Nothing published for this version

  47. v0.28.0 10 Jun 2023
    Release notes
    • general
      • fix parallelism in the compiler on Windows by building LLVM with thread support
      • support qemu-user debugging
      • make target JSON msd-volume-name an array
      • print source location when a panic happens in -monitor
      • test: don't print ok for a successful compile-only
    • compiler
      • builder: remove non-ThinLTO build mode
      • builder: fail earlier if Go is not available
      • builder: improve -size=full in a number of ways
      • builder: implement Nordic DFU file writer in Go
      • cgo: allow LDFLAGS: --export=...
      • compiler: support recursive slice types
      • compiler: zero struct padding during map operations
      • compiler: add llvm.ident metadata
      • compiler: remove unsafe.Pointer(uintptr(v) + idx) optimization (use unsafe.Add instead)
      • compiler: add debug info to //go:embed data structures for better -size output
      • compiler: add debug info to string constants
      • compiler: fix a minor race condition
      • compiler: emit correct alignment in debug info for global variables
      • compiler: correctly generate reflect data for local named types
      • compiler: add alloc attributes to runtime.alloc, reducing flash usage slightly
      • compiler: for interface maps, use the original named type if available
      • compiler: implement most math/bits functions as LLVM intrinsics
      • compiler: ensure all defers have been seen before creating rundefers
    • standard library
      • internal/task: disallow blocking inside an interrupt
      • machine: add CPUReset
      • machine/usb/hid: add MediaKey support
      • machine/usb/hid/joystick: move joystick under HID
      • machine/usb/hid/joystick: allow joystick settings override
      • machine/usb/hid/joystick: handle case where we cannot find the correct HID descriptor
      • machine/usb/hid/mouse: add support for mouse back and forward
      • machine/usb: add ability to override default VID, PID, manufacturer name, and product name
      • net: added missing TCPAddr and UDPAddr implementations
      • os: add IsTimeout function
      • os: fix resource leak in (*File).Close
      • os: add (*File).Sync
      • os: implement (*File).ReadDir for wasi
      • os: implement (*File).WriteAt
      • reflect: make sure null bytes are supported in tags
      • reflect: refactor this package to enable many new features
      • reflect: add map type methods: Elem and Key
      • reflect: add map methods: MapIndex, MapRange/MapIter, SetMapIndex, MakeMap, MapKeys
      • reflect: add slice methods: Append, MakeSlice, Slice, Slice3, Copy, Bytes, SetLen
      • reflect: add misc methods: Zero, Addr, UnsafeAddr, OverflowFloat, OverflowInt, OverflowUint, SetBytes, Convert, CanInt, CanFloat, CanComplex, Comparable
      • reflect: add type methods: String, PkgPath, FieldByName, FieldByIndex, NumMethod
      • reflect: add stubs for Type.Method, CanConvert, ArrayOf, StructOf, MapOf
      • reflect: add stubs for channel select routines/types
      • reflect: allow nil rawType to call Kind()
      • reflect: ensure all ValueError panics have Kind fields
      • reflect: add support for named types
      • reflect: improve Value.String()
      • reflect: set Index and PkgPath field in Type.Field
      • reflect: Type.AssignableTo: you can assign anything to interface{}
      • reflect: add type check to Value.Field
      • reflect: let TypeOf(nil) return nil
      • reflect: move StructField.Anonymous field to match upstream location
      • reflect: add UnsafePointer for Func types
      • reflect: MapIter.Next needs to allocate new keys/values every time
      • reflect: fix IsNil for interfaces
      • reflect: fix Type.Name to return an empty string for non-named types
      • reflect: add VisibleFields
      • reflect: properly handle embedded structs
      • reflect: make sure PointerTo works for named types
      • reflect: Set: convert non-interface to interface
      • reflect: Set: fix direction of assignment check
      • reflect: support channel directions
      • reflect: print struct tags in Type.String()
      • reflect: properly handle read-only values
      • runtime: allow custom-gc SetFinalizer and clarify KeepAlive
      • runtime: implement KeepAlive using inline assembly
      • runtime: check for heap allocations inside interrupts
      • runtime: properly turn pointer into empty interface when hashing
      • runtime: improve map size hint usage
      • runtime: zero map key/value on deletion to so GC doesn't see them
      • runtime: print the address where a panic happened
      • runtime/debug: stub SetGCPercent, BuildInfo.Settings
      • runtime/metrics: add this package as a stub
      • syscall: Stat_t timespec fields are Atimespec on darwin
      • syscall: add Timespec.Unix() for wasi
      • syscall: add fsync using libc
      • testing: support -test.count
      • testing: make test output unbuffered when verbose
      • testing: add -test.skip
      • testing: move runtime.GC() call to runN to match upstream
      • testing: add -test.shuffle to order randomize test and benchmark order
    • targets
      • arm64: fix register save/restore to include vector registers
      • attiny1616: add support for this chip
      • cortexm: refactor EnableInterrupts and DisableInterrupts to avoid arm.AsmFull
      • cortexm: enable functions in RAM for go & cgo
      • cortexm: convert SystemStack from AsmFull to C inline assembly
      • cortexm: fix crash due to wrong stack size offset
      • nrf: samd21, stm32: add flash API
      • nrf: fix memory issue in ADC read
      • nrf: new peripheral type for nrf528xx chips
      • nrf: implement target mode
      • nrf: improve ADC and add oversampling, longer sample time, and reference voltage
      • rp2040: change calling order for device enumeration fix to do first
      • rp2040: rtc delayed interrupt
      • rp2040: provide better errors for invalid pins on I2C and SPI
      • rp2040: change uart to allow for a single pin
      • rp2040: implement Flash interface
      • rp2040: remove SPI DataBits property
      • rp2040: unify all linker scripts using LDFLAGS
      • rp2040: remove SPI deadline for improved performance
      • rp2040: use 4MHz as default frequency for SPI
      • rp2040: implement target mode
      • rp2040: use DMA for send-only SPI transfers
      • samd21: rearrange switch case for get pin cfg
      • samd21: fix issue with WS2812 driver by making pin accesses faster
      • samd51: enable CMCC cache for greatly improved performance
      • samd51: remove extra BK0RDY clear
      • samd51: implement Flash interface
      • samd51: use correct SPI frequency
      • samd51: remove extra BK0RDY clear
      • samd51: fix ADC multisampling
      • wasi: allow users to set the runtime_memhash_tsip or runtime_memhash_fnv build tags
      • wasi: set WASMTIME_BACKTRACE_DETAILS when running in wasmtime.
      • wasm: implement the //go:wasmimport directive
    • boards
      • gameboy-advance: switch to use register definitions in device/gba
      • gameboy-advance: rename display and make pointer receivers
      • gopher-badge: Added Gopher Badge support
      • lorae5: add needed definition for UART2
      • lorae5: correct mapping for I2C bus, add pin mapping to enable power
      • pinetime: update the target file (rename from pinetime-devkit0)
      • qtpy: fix bad pin assignment
      • wioterminal: fix pin definition of BCM13
      • xiao: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0.
      • xiao: add DefaultUART
    Open source →
  48. v0.27.1-0.20230531192450-ee90bdebfff4 31 May 2023 pre-release

    Nothing published for this version

  49. v0.27.1-0.20230403174020-19e4db45db86 03 Apr 2023 pre-release

    Nothing published for this version

  50. v0.27.0 11 Feb 2023
    Release notes
    • general
      • all: update musl
      • all: remove "acm:"` prefix for USB vid/pid pair
      • all: add support for LLVM 15
      • all: use DWARF version 4
      • all: add initial (incomplete) support for Go 1.20
      • all: add -gc=custom option
      • main: print ldflags including ThinLTO flags with -x
      • main: fix error message when a serial port can't be accessed
      • main: add -timeout flag to allow setting how long TinyGo will try looking for a MSD volume for flashing
      • test: print PASS on pass when running standalone test binaries
      • test: fix printing of benchmark output
      • test: print package name when compilation failed (not just when the test failed)
    • compiler
      • refactor to support LLVM 15
      • builder: print compiler commands while building a library
      • compiler: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only)
      • compiler: allow map keys and values of ≥256 bytes
      • cgo: add support for C.float and C.double
      • cgo: support anonymous enums included in multiple Go files
      • cgo: add support for bitwise operators
      • interp: add support for constant icmp instructions
      • transform: fix memory corruption issues
    • standard library
      • machine/usb: remove allocs in USB ISR
      • machine/usb: add Port() and deprecate New() to have the API better match the singleton that is actually being returned
      • machine/usb: change HID usage-maximum to 0xFF
      • machine/usb: add USB HID joystick support
      • machine/usb: change to not send before endpoint initialization
      • net: implement Pipe
      • os: add stub for os.Chtimes
      • reflect: stub out Type.FieldByIndex
      • reflect: add Value.IsZero method
      • reflect: fix bug in .Field method when the field fits in a pointer but the parent doesn't
      • runtime: switch some panic() calls in the gc to runtimePanic() for consistency
      • runtime: add xorshift-based fastrand64
      • runtime: fix alignment for arm64, arm, xtensa, riscv
      • runtime: implement precise GC
      • runtime/debug: stub PrintStack
      • sync: implement simple pooling in sync.Pool
      • syscall: stubbed Setuid, Exec and friends
      • syscall: add more stubs as needed for Go 1.20 support
      • testing: implement t.Setenv
      • unsafe: add support for Go 1.20 slice/string functions
    • targets
      • all: do not set stack size per board
      • all: update picolibc to v1.7.9
      • atsame5x: fix CAN extendedID handling
      • atsame5x: reduce heap allocation
      • avr: drop GNU toolchain dependency
      • avr: fix .data initialization for binaries over 64kB
      • avr: support ThinLTO
      • baremetal: implements calloc
      • darwin: fix syscall.Open on darwin/arm64
      • darwin: fix error with tinygo lldb
      • esp: use LLVM Xtensa linker instead of Espressif toolchain
      • esp: use ThinLTO for Xtensa
      • esp32c3: add SPI support
      • linux: include musl getpagesize function in release
      • nrf51: add ADC implementation
      • nrf52840: add PDM support
      • riscv: add "target-abi" metadata flag
      • rp2040: remove mem allocation in GPIO ISR
      • rp2040: avoid allocating clock on heap
      • rp2040: add basic GPIO support for PIO
      • rp2040: fix USB interrupt issue
      • rp2040: fix RP2040-E5 USB errata
      • stm32: always set ADC pins to pullups floating
      • stm32f1, stm32f4: fix ADC by clearing the correct bit for rank after each read
      • stm32wl: Fix incomplete RNG initialisation
      • stm32wlx: change order for init so clock speeds are set before peripheral start
      • wasi: makes wasmtime "run" explicit
      • wasm: fix GC scanning of allocas
      • wasm: allow custom malloc implementation
      • wasm: remove -wasm-abi= flag (use -target instead)
      • wasm: fix scanning of the stack
      • wasm: fix panic when allocating 0 bytes using malloc
      • wasm: always run wasm-opt even with -scheduler=none
      • wasm: avoid miscompile with ThinLTO
      • wasm: allow the emulator to expand {tmpDir}
      • wasm: support ThinLTO
      • windows: update mingw-w64 version to avoid linker warning
      • windows: add ARM64 support
    • boards
      • Add Waveshare RP2040 Zero
      • Add Arduino Leonardo support
      • Add Adafruit KB2040
      • Add Adafruit Feather M0 Express
      • Add Makerfabs ESP32C3SPI35 TFT Touchscreen board
      • Add Espressif ESP32-C3-DevKit-RUST-1 board
      • lgt92: fix OpenOCD configuration
      • xiao-rp2040: fix D9 and D10 constants
      • xiao-rp2040: add pin definitions
    Open source →
  51. v0.26.1-0.20230203153840-9027c50405b1 03 Feb 2023 pre-release

    Nothing published for this version

  52. v0.26.1-0.20221021071646-42e4a75319ce 21 Oct 2022 pre-release

    Nothing published for this version

  53. v0.26.0 29 Sep 2022
    Release notes
    • general
      • remove support for LLVM 13
      • remove calls to deprecated ioutil package
      • move from os.IsFoo to errors.Is(err, ErrFoo)
      • fix for builds using an Android host
      • make interp timeout configurable from command line
      • ignore ports with VID/PID if there is no candidates
      • drop support for Go 1.16 and Go 1.17
      • update serial package to v1.3.5 for latest bugfixes
      • remove GOARM from tinygo info
      • add flag for setting the goroutine stack size
      • add serial port monitoring functionality
    • compiler
      • cgo: implement support for static functions
      • cgo: fix panic when FuncType.Results is nil
      • compiler: add aliases for edwards25519/field.feMul and field.feSquare
      • compiler: fix incorrect DWARF type in some generic parameters
      • compiler: use LLVM math builtins everywhere
      • compiler: replace some math operation bodies with LLVM intrinsics
      • compiler: replace math aliases with intrinsics
      • compiler: fix unsafe.Sizeof for chan and map values
      • compileopts: use tags parser from buildutil
      • compileopts: use backticks for regexp to avoid extra escapes
      • compileopts: fail fast on duplicate values in target field slices
      • compileopts: fix windows/arm target triple
      • compileopts: improve error handling when loading target/*.json
      • compileopts: add support for stlink-dap programmer
      • compileopts: do not complain about -no-debug on MacOS
      • goenv: support GOOS=android
      • interp: fix reading from external global
      • loader: fix link error for crypto/internal/boring/sig.StandardCrypto
    • standard library
      • rename assembly files to .S extension
      • machine: add PWM peripheral comments to pins
      • machine: improve UARTParity slightly
      • machine: do not export DFU_MAGIC_* constants on nrf52840
      • machine: rename PinInputPullUp/PinInputPullDown
      • machine: add KHz, MHz, GHz constants, deprecate TWI_FREQ_* constants
      • machine: remove level triggered pin interrupts
      • machine: do not expose RESET_MAGIC_VALUE
      • machine: use NoPin constant where appropriate (instead of 0 for example)
      • net: sync net.go with Go 1.18 stdlib
      • os: add SyscallError.Timeout
      • os: add ErrProcessDone error
      • reflect: implement CanInterface and fix string Index
      • runtime: make MemStats available to leaking collector
      • runtime: add MemStats.TotalAlloc
      • runtime: add MemStats.Mallocs and Frees
      • runtime: add support for time.NewTimer and time.NewTicker
      • runtime: implement resetTimer
      • runtime: ensure some headroom for the GC to run
      • runtime: make gc and scheduler asserts settable with build tags
      • runtime/pprof: add WriteHeapProfile
      • runtime/pprof: runtime/trace: stub some additional functions
      • sync: implement Map.LoadAndDelete
      • syscall: group WASI consts by purpose
      • syscall: add WASI {D,R}SYNC, NONBLOCK FD flags
      • syscall: add ENOTCONN on darwin
      • testing: add support for -benchmem
    • targets
      • remove USB vid/pid pair of bootloader
      • esp32c3: remove unused UARTStopBits constants
      • nrf: implement GetRNG function
      • nrf: rp2040: add machine.ReadTemperature
      • nrf52: cleanup s140v6 and s140v7 uf2 targets
      • rp2040: implement semi-random RNG based on ROSC based on pico-sdk
      • wasm: add summary of wasm examples and fix callback bug
      • wasm: do not allow undefined symbols (--allow-undefined)
      • wasm: make sure buffers returned by malloc are kept until free is called
      • windows: save and restore xmm registers when switching goroutines
    • boards
      • add Pimoroni's Tufty2040
      • add XIAO ESP32C3
      • add Adafruit QT2040
      • add Adafruit QT Py RP2040
      • esp32c3-12f: matrixportal-m4: p1am-100: remove duplicate build tags
      • hifive1-qemu: remove this emulated board
      • wioterminal: add UART3 for RTL8720DN
      • xiao-ble: fix usbpid
    Open source →
  54. v0.25.1-0.20220915170704-9e4e182615cd 15 Sep 2022 pre-release

    Nothing published for this version

  55. v0.25.0 02 Aug 2022
    Release notes
    • command line
      • change to ignore PortReset failures
    • compiler
      • compiler: darwin/arm64 is aarch64, not arm
      • compiler: don't clobber X18 and FP registers on darwin/arm64
      • compiler: fix issue with methods on generic structs
      • compiler: do not try to build generic functions
      • compiler: fix type names for generic named structs
      • compiler: fix multiple defined function issue for generic functions
      • compiler: implement unsafe.Alignof and unsafe.Sizeof for generic code
    • standard library
      • machine: add DTR and RTS to Serialer interface
      • machine: reorder pin definitions to improve pin list on tinygo.org
      • machine/usb: add support for MIDI
      • machine/usb: adjust buffer alignment (samd21, samd51, nrf52840)
      • machine/usb/midi: add NoteOn, NoteOff, and SendCC methods
      • machine/usb/midi: add definition of MIDI note number
      • runtime: add benchmarks for memhash
      • runtime: add support for printing slices via print/println
    • targets
      • avr: fix some apparent mistake in atmega1280/atmega2560 pin constants
      • esp32: provide hardware pin constants
      • esp32: fix WDT reset on the MCH2022 badge
      • esp32: optimize SPI transmit
      • esp32c3: provide hardware pin constants
      • esp8266: provide hardware pin constants like GPIO2
      • nrf51: define and use P0_xx constants
      • nrf52840, samd21, samd51: unify bootloader entry process
      • nrf52840, samd21, samd51: change usbSetup and sendZlp to public
      • nrf52840, samd21, samd51: refactor handleStandardSetup and initEndpoint
      • nrf52840, samd21, samd51: improve usb-device initialization
      • nrf52840, samd21, samd51: move usbcdc to machine/usb/cdc
      • rp2040: add usb serial vendor/product ID
      • rp2040: add support for usb
      • rp2040: change default for serial to usb
      • rp2040: add support for machine.EnterBootloader
      • rp2040: turn off pullup/down when input type is not specified
      • rp2040: make picoprobe default openocd interface
      • samd51: add support for DAC1
      • samd51: improve TRNG
      • wasm: stub runtime.buffered, runtime.getchar
      • wasi: make leveldb runtime hash the default
    • boards
      • add Challenger RP2040 LoRa
      • add MCH2022 badge
      • add XIAO RP2040
      • clue: remove pins D21..D28
      • feather-rp2040, macropad-rp2040: fix qspi-flash settings
      • xiao-ble: add support for flash-1200-bps-reset
      • gopherbot, gopherbot2: add these aliases to simplify for newer users
    Open source →
  56. v0.25.0-beta1 28 Jul 2022 pre-release

    Nothing published for this version

  57. v0.24.0 30 Jun 2022
    Release notes
    • command line
      • remove support for go 1.15
      • remove support for LLVM 11 and LLVM 12
      • add initial Go 1.19 beta support
      • test: fix package/... syntax
    • compiler
      • add support for the embed package
      • builder: improve error message for "command not found"
      • builder: add support for ThinLTO on MacOS and Windows
      • builder: free LLVM objects after use, to reduce memory leaking
      • builder: improve -no-debug error messages
      • cgo: be more strict: CGo now requires every Go file to import the headers it needs
      • compiler: alignof(func) is 1 pointer, not 2
      • compiler: add support for type parameters (aka generics)
      • compiler: implement recover() built-in function
      • compiler: support atomic, volatile, and LLVM memcpy-like functions in defer
      • compiler: drop support for macos syscalls via inline assembly
      • interp: do not try to interpret past task.Pause()
      • interp: fix some buggy localValue handling
      • interp: do not unroll loops
      • transform: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly
    • standard library
      • os: enable os.Stdin for baremetal target
      • reflect: add Value.UnsafePointer method
      • runtime: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switch
      • runtime: add per-map hash seeds
      • runtime: handle nil map write panics
      • runtime: add stronger hash functions
      • syscall: implement Getpagesize
    • targets
      • atmega2560: support UART1-3 + example for uart
      • avr: use compiler-rt for improved float64 support
      • avr: simplify timer-based time
      • avr: fix race condition in stack write
      • darwin: add support for GOARCH=arm64 (aka Apple Silicon)
      • darwin: support -size=short and -size=full flag
      • rp2040: replace sleep 'busy loop' with timer alarm
      • rp2040: align api for PortMaskSet, PortMaskClear
      • rp2040: fix GPIO interrupts
      • samd21, samd51, nrf52840: add support for USBHID (keyboard / mouse)
      • wasm: update wasi-libc version
      • wasm: use newer WebAssembly features
    • boards
      • add Badger 2040
      • matrixportal-m4: attach USB DP to the correct pin
      • teensy40: add I2C support
      • wioterminal: fix I2C definition
    Open source →
  58. v0.23.0 28 Apr 2022
    Release notes
    • command line
      • add -work flag
      • add Go 1.18 support
      • add LLVM 14 support
      • run: add support for command-line parameters
      • build: calculate default output path if -o is not specified
      • build: add JSON output
      • test: support multiple test binaries with -c
      • test: support flags like -v on all targets (including emulated firmware)
    • compiler
      • add support for ThinLTO
      • use compiler-rt from LLVM
      • builder: prefer GNU build ID over Go build ID for caching
      • builder: add support for cross compiling to Darwin
      • builder: support machine outlining pass in stacksize calculation
      • builder: disable asynchronous unwind tables
      • compileopts: fix emulator configuration on non-amd64 Linux architectures
      • compiler: move allocations > 256 bytes to the heap
      • compiler: fix incorrect unsafe.Alignof on some 32-bit architectures
      • compiler: accept alias for slice cap builtin
      • compiler: allow slices of empty structs
      • compiler: fix difference in aliases in interface methods
      • compiler: make RawSyscall an alias for Syscall
      • compiler: remove support for memory references in AsmFull
      • loader: only add Clang header path for CGo
      • transform: fix poison value in heap-to-stack transform
    • standard library
      • internal/fuzz: add this package as a shim
      • os: implement readdir for darwin and linux
      • os: add DirFS, which is used by many programs to access readdir.
      • os: isWine: be compatible with older versions of wine, too
      • os: implement RemoveAll
      • os: Use a uintptr for NewFile
      • os: add stubs for exec.ExitError and ProcessState.ExitCode
      • os: export correct values for DevNull for each OS
      • os: improve support for Signal by fixing various bugs
      • os: implement File.Fd method
      • os: implement UserHomeDir
      • os: add exec.ProcessState stub
      • os: implement Pipe for darwin
      • os: define stub ErrDeadlineExceeded
      • reflect: add stubs for more missing methods
      • reflect: rename reflect.Ptr to reflect.Pointer
      • reflect: add Value.FieldByIndexErr stub
      • runtime: fix various small GC bugs
      • runtime: use memzero for leaking collector instead of manually zeroing objects
      • runtime: implement memhash
      • runtime: implement fastrand
      • runtime: add stub for debug.ReadBuildInfo
      • runtime: add stub for NumCPU
      • runtime: don't inline runtime.alloc with -gc=leaking
      • runtime: add Version
      • runtime: add stubs for NumCgoCall and NumGoroutine
      • runtime: stub {Lock,Unlock}OSThread on Windows
      • runtime: be able to deal with a very small heap
      • syscall: make Environ return a copy of the environment
      • syscall: implement getpagesize and munmap
      • syscall: wasi: define MAP_SHARED and PROT_READ
      • syscall: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targets
      • syscall: darwin: more complete list of signals
      • syscall: wasi: more complete list of signals
      • syscall: stub WaitStatus
      • syscall/js: allow copyBytesTo(Go|JS) to use Uint8ClampedArray
      • testing: implement TempDir
      • testing: nudge type TB closer to upstream; should be a no-op change.
      • testing: on baremetal platforms, use simpler test matcher
    • targets
      • atsamd: fix usbcdc initialization when -serial=uart
      • atsamd51: allow higher frequency when using SPI
      • esp: support CGo
      • esp32c3: add support for input pin
      • esp32c3: add support for GPIO interrupts
      • esp32c3: add support to receive UART data
      • rp2040: fix PWM bug at high frequency
      • rp2040: fix some minor I2C bugs
      • rp2040: fix incorrect inline assembly
      • rp2040: fix spurious i2c STOP during write+read transaction
      • rp2040: improve ADC support
      • wasi: remove --export-dynamic linker flag
      • wasm: remove heap allocator from wasi-libc
    • boards
      • circuitplay-bluefruit: move pin mappings so board can be compiled for WASM use in Playground
      • esp32-c3-12f: add the ESP32-C3-12f Kit
      • m5stamp-c3: add pin setting of UART
      • macropad-rp2040: add the Adafruit MacroPad RP2040 board
      • nano-33-ble: typo in LPS22HB peripheral definition and documentation (#2579)
      • teensy41: add the Teensy 4.1 board
      • teensy40: add ADC support
      • teensy40: add SPI support
      • thingplus-rp2040: add the SparkFun Thing Plus RP2040 board
      • wioterminal: add DefaultUART
      • wioterminal: verify written data when flashing through OpenOCD
      • xiao-ble: add XIAO BLE nRF52840 support
    Open source →
  59. v0.22.0 25 Jan 2022
    Release notes
    • command line
      • add asyncify to scheduler flag help
      • support -run for tests
      • remove FreeBSD target support
      • add LLVM 12 and LLVM 13 support, use LLVM 13 by default
      • add support for ARM64 MacOS
      • improve help
      • check /run/media as well as /media on Linux for non-debian-based distros
      • test: set cmd.Dir even when running emulators
      • info: add JSON output using the -json flag
    • compiler
      • builder: fix off-by-one in size calculation
      • builder: handle concurrent library header rename
      • builder: use flock to avoid double-compiles
      • builder: use build ID as cache key
      • builder: add -fno-stack-protector to musl build
      • builder: update clang header search path to look in /usr/lib
      • builder: explicitly disable unwind tables for ARM
      • cgo: add support for C.CString and related functions
      • compiler: fix ranging over maps with particular map types
      • compiler: add correct debug location to init instructions
      • compiler: fix emission of large object layouts
      • compiler: work around AVR atomics bugs
      • compiler: predeclare runtime.trackPointer
      • interp: work around AVR function pointers in globals
      • interp: run goroutine starts and checks at runtime
      • interp: always run atomic and volatile loads/stores at runtime
      • interp: bump timeout to 180 seconds
      • interp: handle type assertions on nil interfaces
      • loader: eliminate goroot cache inconsistency
      • loader: respect $GOROOT when running go list
      • transform: allocate the correct amount of bytes in an alloca
      • transform: remove switched func lowering
    • standard library
      • crypto/rand: show error if platform has no rng
      • device/*: add *_Msk field for each bit field and avoid duplicates
      • device/*: provide Set/Get for each register field described in the SVD files
      • internal/task: swap stack chain when switching goroutines
      • internal/task: remove -scheduler=coroutines
      • machine: add Device string constant
      • net: add bare Interface implementation
      • net: add net.Buffers
      • os: stub out support for some features
      • os: obey TMPDIR on unix, TMP on Windows, etc
      • os: implement ReadAt, Mkdir, Remove, Stat, Lstat, CreateTemp, MkdirAll, Chdir, Chmod, Clearenv, Unsetenv, Setenv, MkdirTemp, Rename, Seek, ExpandEnv, Symlink, Readlink
      • os: implement File.Stat
      • os: fix IsNotExist on nonexistent path
      • os: fix opening files on WASI in read-only mode
      • os: work around lack of syscall.seek on 386 and arm
      • reflect: make sure indirect pointers are handled correctly
      • runtime: allow comparing interfaces
      • runtime: use LLVM intrinsic to read the stack pointer
      • runtime: strengthen hashmap hash function for structs and arrays
      • runtime: fix float/complex hashing
      • runtime: fix nil map dereference
      • runtime: add realloc implementation to GCs
      • runtime: handle negative sleep times
      • runtime: correct GC scan bounds
      • runtime: remove extalloc GC
      • rumtime: implement __sync libcalls as critical sections for most microcontrollers
      • runtime: add stubs for Func.FileLine and Frame.PC
      • sync: fix concurrent read-lock on write-locked RWMutex
      • sync: add a package doc
      • sync: add tests
      • syscall: add support for Mmap and Mprotect
      • syscall: fix array size for mmap slice creation
      • syscall: enable Getwd in wasi
      • testing: add a stub for CoverMode
      • testing: support -bench option to run benchmarks matching the given pattern.
      • testing: support b.SetBytes(); implement sub-benchmarks.
      • testing: replace spaces with underscores in test/benchmark names, as upstream does
      • testing: implement testing.Cleanup
      • testing: allow filtering subbenchmarks with the -bench flag
      • testing: implement -benchtime flag
      • testing: print duration
      • testing: allow filtering of subtests using -run
    • targets
      • all: change LLVM features to match vanilla Clang
      • avr: use interrupt-based timer which is much more accurate
      • nrf: fix races in I2C
      • samd51: implement TRNG for randomness
      • stm32: pull-up on I2C lines
      • stm32: fix timeout for i2c comms
      • stm32f4, stm32f103: initial implementation for ADC
      • stm32f4, stm32f7, stm32l0x2, stm32l4, stm32l5, stm32wl: TRNG implementation in crypto/rand
      • stm32wl: add I2C support
      • windows: add support for the -size= flag
      • wasm: add support for tinygo test
      • wasi, wasm: raise default stack size to 16 KiB
    • boards
      • add M5Stack
      • add lorae5 (stm32wle) support
      • add Generic Node Sensor Edition
      • add STM32F469 Discovery
      • add M5Stamp C3
      • add Blues Wireless Swan
      • bluepill: add definitions for ADC pins
      • stm32f4disco: add definitions for ADC pins
      • stm32l552ze: use supported stlink interface
      • microbit-v2: add some pin definitions
    Open source →
  60. v0.21.1-0.20220124172340-a29e1d43f151 24 Jan 2022 pre-release

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive