Xo 0.19 release notes
Introduction
Xo 0.19 makes native code the default, links Linux programs with no C library, makes servers much smaller, runs the playground on Xo’s own compiler, and makes tasks faster.
Tools
- Native is the default backend: arm64 on arm64 hosts, LLVM elsewhere.
Use
--backend=gofor programs thatuse go(decision 0248). - Contract fuzzing on the native backends
(decision 0250),
and
xo dumpof a running program’s tasks on SIGQUIT (decision 0251). - An execution trace:
XO_TRACEandxo trace(decision 0240). - The profiler is gated in release builds and samples on Windows too;
its writers moved to
xo prof(decision 0245). - DWARF types and variables for arm64, first stages (decision 0252).
- The browser playground runs on Xo’s WebAssembly backend (decision 0242).
- Lazy runtime bodies:
hellobuilds in 622 ms instead of 947 ms (decision 0247).
Runtime
- Single thread task spawn went from about 4.8 to 1.13 times tokio current_thread’s cycles.
- RWMutex readers stay on the worker that granted them: the rwmutex benchmark went from 90 to 40 ms, and HTTP p99 latency from 1,536 to 1,328 us.
Compiler
- Smaller binaries: TLS and HTTP/2 are linked only when a program calls
with_tls, so a JSON server went from 2.51 to 0.94 MB on arm64 (decision 0244), and code for other targets is folded away (decision 0246). - arm64: if-conversion, carry intrinsics inlined, constant folding of
*,/and%, and cold slow paths kept out of line. - The first part of Xo’s own x86-64 backend: its assembler (decision 0254).
Standard library
- Time zones ship with the standard library (IANA 2026e); no Go needed.
Ports
- Linux without C: programs that do not
use clink no C library. Xo’s ELF linker builds them as static binaries, also when cross built from a Mac (decision 0243).