cwbrowser — a browser engine written from scratch in Zig
preview

cwbrowser

A web browser with a rendering engine written completely from scratch in Zig, paired with Google’s V8 for JavaScript. Two years of solo work — extremely lightweight, and about 2× faster than Chrome in early testing.

No Chromium, no WebKit, no Gecko. The HTML parser, CSS cascade, layout engine, and paint pipeline are all hand-written in Zig; only the JavaScript virtual machine is borrowed from Google’s V8. The result is a browser small enough to reason about end to end, and fast enough to beat the mainstream engines on the same hardware.

100 / 100
Acid3 conformance
test — a perfect
score
~2×
faster than Google
Chrome in early
benchmarking
From scratch
parser, CSS, layout,
paint — all
hand-written in Zig
2 years
of solo engineering
on the rendering
engine
Acid3 100/100 As of today, cwbrowser passes the Acid3 test with a perfect 100/100 — the same conformance bar the mainstream engines cleared, met by a from-scratch engine.
⤓  Download — coming soon
macOS · Apple Silicon
A public build is being prepared. Want to be told when it lands? Email me and I’ll send you the link.
cwbrowser running the Acid3 test at acid3.acidtests.org and showing a perfect 100/100 score, with the coloured animation rectangles rendered correctly and a status bar reading 'Loaded http://acid3.acidtests.org/ — 2265 ms, 481 px'
cwbrowser on acid3.acidtests.org — a clean 100/100, rendered by its own engine. Note the status bar: full page loaded and laid out in 2265 ms.

What it is

cwbrowser is a desktop web browser built on a rendering engine I wrote from nothing over the last two years. Where Chrome ships Blink, Safari ships WebKit, and Firefox ships Gecko, cwbrowser ships an engine of its own: the tokenizer, DOM, CSS parser and cascade, the box-model layout pass, and the painting stage are all original code in Zig — a small, fast, memory-careful systems language.

The one piece it doesn’t reinvent is the JavaScript engine. Re-implementing a modern, JIT-compiling JS VM is a decade-scale project, so cwbrowser embeds Google’s V8 — the same engine inside Chrome and Node — and wires it to the from-scratch DOM. You get a real, standards-following browser where the parts that decide how the web looks are entirely hand-built.

How it’s built

LanguageZig for the whole rendering engine — manual memory management, no garbage collector, no hidden runtime.
HTML & DOMA from-scratch tokenizer and tree builder producing a live DOM the engine and V8 both operate on.
CSSOriginal parser and cascade — selectors, specificity, inheritance, the box model — feeding the layout pass.
Layout & paintHand-written block/inline layout and a paint pipeline that renders pixel-for-pixel to match the Acid3 reference.
JavaScriptGoogle’s V8, embedded and bound to the DOM — the same VM that powers Chrome and Node.
PerformanceRoughly 2× Chrome on the same machine in early tests; the whole engine is lightweight by design.

Why build a browser from scratch?

The modern web runs on three rendering engines, all enormous, and all descended from code written more than twenty years ago. cwbrowser is a bet that a browser engine can be rebuilt today — smaller, faster, and understandable by one person — using a modern systems language and only borrowing the one component (the JS VM) that genuinely isn’t worth reinventing. Passing Acid3 at 100/100 is the first proof the approach holds up against real standards.

Download

A public preview build for macOS on Apple Silicon is on the way. It isn’t posted here yet — when it is, this is where it’ll live.

⤓  Download — coming soon
macOS · Apple Silicon
Email haojng@gmail.com to be notified when the beta is available.