Notable changes in Io over the past twelve months.
Io uses date-based versioning. This page collects the notable changes of the last twelve months — a period in which the VM was rewritten around a stackless evaluator and re-targeted from native binaries to WebAssembly. Entries marked tagged correspond to release tags in the repository; the rest are development milestones on the road between them. For the longer arc, see the Timeline.
Changes on master since the WASM merge, not yet part of a tagged release.
make component builds the VM as a WebAssembly component (wasm32-wasip2) alongside the core WASI module.wait parks the calling coroutine on a timer queue instead of busy-spinning; timed coroutines run concurrently and the VM idles in a single host wait until the next deadline.future/stream) once host and toolchain support land.Tagged 2026.04.20-native-final. The WASM branch merged to master (#495); WebAssembly/WASI is now the default and only build target. The final native build — CMake, Eerie, and DynLib — is frozen at this tag, with ongoing native work on the native branch.
Vector primitive gains a WebAssembly SIMD128 backend, restoring AltiVec-era vector acceleration on modern hardware and in the browser.Map implements comparison for equality (#28).asJson added to nil, true, and false (#27).isKindOf fix — ancestor checks use identity comparison (#201).Tagged 2026.03.06-stackless-alpha. The first alpha of the stackless VM, together with the initial WebAssembly port and a new JavaScript integration model.
BigInt — arbitrary-precision integers with transparent round-tripping across the Io↔JS bridge.The recursive, C-stack-based evaluator was replaced with a heap-allocated frame state machine — the foundation the WASM port builds on. With no native C stack to switch, the platform-specific coroutine assembly is no longer needed.
callcc, behind the IO_CALLCC build flag).if branches.setjmp/longjmp.signal / withHandler: a handler can resume at the signal site, fall through, or unwind.Native ARM64 coroutine support for Apple Silicon and modern Linux (#476) — the last major addition to the native-era coroutine implementation before the stackless rewrite made platform-specific coroutine code unnecessary.