← All posts

Rux v0.1.0 — it runs

The first release: a window, real CSS layout, text, inputs, scrolling, and hot reload. Plus the lesson that cost the most — every bug that mattered was invisible to the test suite.

Rux v0.1.0 is tagged. It opens a native window, lays a .rux file out with real flexbox and CSS grid, shapes text, edits inputs with a blinking caret, scrolls lists, draws images, and reloads live when you save. No browser, no webview, no JavaScript.

That's the announcement. The more useful part of this post is what building it taught, so let's do both.

What v0.1 is

Nine milestones' worth of runtime, in ten crates and about 6,000 lines:

56 tests pass. Every example has been driven on screen — which brings us to the thing worth writing down.

The lesson: tests didn't catch anything that mattered

For most of the build, Rux was verified by cargo test. The suite was green and growing, and it inspired a confidence that turned out to be completely unearned. The first time the examples were actually run and looked at, bugs fell out within seconds — and every single one had been invisible to the tests:

That last one is the pattern: the test checked the positive case and stopped. Tests protect against regression. They do not tell you it works. A feature is not done until it has been driven in the window — that's now the rule, and it has paid for itself in every release since.

The renderer upgrade that looked like a disaster

v0.1 needed OverflowWrap, WordBreak and a real text Cursor, none of which parley 0.2 had. So: vello 0.3 → 0.9, parley 0.2 → 0.11.

It exploded immediately with wgpu-hal errors that looked exactly like a windows-crate version split — the kind of dependency knot that eats a day. It wasn't. It was a stale lockfile: an old gpu-allocator pinned in place. cargo update -p gpu-allocator fixed the whole thing. The real API churn was confined to three crates, and the one genuine trap was that vello 0.9 dropped render_to_surface — you now render into the surface's intermediate target and blit, because rendering straight to a surface texture panics (Bgra8 vs Rgba8 storage).

What v0.1 is not

Being clear about this, because a first release invites the wrong expectations:

And the honest framing question, which a group of developers put bluntly when they saw it: this isn't novel. Flutter, Slint and Lynx all render GPU UI without a browser. That's true, and worth repeating on the front page rather than hiding: Rux's only real claim is the ergonomic one — literal CSS, pure Rust, no DSL, no JS. Whether that combination is genuinely nicer is the thing v0.1 exists to find out.

Next

v0.2: text selection and clipboard, the last two input types, scrolling polish, and a serious CSS push — starting with font-family, because "you cannot choose a font" is the most visible gap on the list.