A new project called Cruller has forked the last Zig-based release of the Bun JavaScript runtime, trimming it down to the components needed to serve already-built production JavaScript and porting the result to vanilla Zig 0.16.
What Stayed and What Got Cut
Cruller keeps the parts of Bun needed to actually run a server: JavaScriptCore as the engine, HTTP/1 through HTTP/3 support, WebSockets, streaming, and Bun's module resolver for prebuilt JavaScript. Everything oriented toward local development gets removed, including the package manager, bundler and transpiler, shell, test runner, most CLI tooling, N-API bindings, SQL clients, and archive handling.
Why Build a Runtime, Not a Bun Replacement
The core design decision behind Cruller is scope discipline: it positions itself as a runtime for shipping pre-built JavaScript, not a general-purpose alternative to Bun. Anything requiring package installation, bundling, or TypeScript transformation sits outside its intended use.
The more technically interesting part of the port involved detaching the runtime from Bun's older, patched Zig build tooling. Cruller now runs on a standard Zig 0.16 build graph, with compatibility shims covering API changes introduced since Zig 0.15, plus a generated-code embedding step so release builds stay self-contained rather than pulling generated JavaScript from a build directory at runtime.
Where It Stands Today
Early benchmarking against V8 on a pure-JS crypto workload showed roughly parity, with Cruller's median performance about 2% higher, within normal run-to-run variance. The project describes itself as still a work in progress, though Zig semantic checks, release builds, CommonJS and ESM entrypoints, Node path compatibility tests, and a basic HTTP smoke test currently pass. The maintainers note that AI assistance was used for parts of the Zig 0.16 migration and debugging work, but that architecture decisions and verification remained maintainer-directed rather than AI-generated.