Xo is experimental. The source is now public on GitHub, or try Xo in your browser.

Xo 0.19 release notes

released 2026-10-17 · tag v0.19.0 · all releases

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=go for programs that use go (decision 0248).
  • Contract fuzzing on the native backends (decision 0250), and xo dump of a running program’s tasks on SIGQUIT (decision 0251).
  • An execution trace: XO_TRACE and xo 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: hello builds 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 c link no C library. Xo’s ELF linker builds them as static binaries, also when cross built from a Mac (decision 0243).