mrkeyoor.com_
Sat 17 Oct 13:33 UTC
Webevaluationupdated 26 Aug 2026

blitz review

Blitz is a modular Rust engine for parsing, laying out, and drawing HTML and CSS without embedding a full browser. It can render HTML or Markdown through a simple wrapper, and it provides an interactive native renderer for Dioxus applications by combining its DOM, layout, networking, window, accessibility, and paint crates.

+17stars / 7d
Verdict

Our Blitz checkout built in 10 seconds, but its 341-second cargo test run discovered 0 tests, so adoption should depend on your own rendered-page suite. Use it for controlled Rust or Dioxus interfaces where you can choose the supported HTML and CSS subset. Choose Servo or a system webview for arbitrary sites, JavaScript applications, or layouts that cannot tolerate beta rendering gaps.

We ran it

Lab card: what happened when we ran blitzScreenshot of blitz (blitz.is)
Install✓ · 83s1 packages
Build✓ · 10s
Tests✓ · 341s0 passed · 0 failed of 0 (cargo test)
Repo366 files~55,047 lines of source · 7.3 MB · 4 CI workflows · tests dir

Answers from our run

Does blitz build from source?

Dependencies installed in 83 seconds (1 packages), and the build succeeded in 10 seconds. We cloned commit aa41c30 into a clean Debian container with 3 CPUs and no project-specific setup.

Do blitz's tests pass?

Yes. The project's own test command finished in 341 seconds and reported 0 passed, 0 failed (cargo test).

Who should not use blitz?

Applications that require ordinary browser JavaScript: the roadmap lists JavaScript support in the backlog.

What are the alternatives to blitz?

Servo, Slint, Dioxus. Our Blitz checkout built in 10 seconds, but its 341-second cargo test run discovered 0 tests, so adoption should depend on your own rendered-page suite.

Setup4/583-second install and 10-second build, with graphics needed to try it
Docs4/5Crate boundaries, goals, examples, status, and roadmap are clear
Community4/54,069 stars and active layout and rendering work
Maturity2/5Beta status, no discovered tests, and major web features remain open

Discussed on

  1. hnBlitz: A lightweight, modular, extensible web renderer433 points

Who it’s for

Rust teams that need HTML and CSS rendering inside a native application without a full browser runtime.
Dioxus early adopters experimenting with the native renderer.
Tool builders who want to assemble their own DOM, network, window, or rendering components.
Developers prepared to test their exact CSS, accessibility, and input requirements against a beta engine.

Who it’s NOT for

Applications that require ordinary browser JavaScript: the roadmap lists JavaScript support in the backlog.
Teams depending on full web-platform APIs such as WebRTC, WebSockets, Bluetooth, or localStorage: the README intentionally excludes them from the core.
Production layouts using fixed or absolute positioning without visual regression tests: issue #764 reports incorrect containing blocks and displaced boxes.
Python, JavaScript, or C consumers today: the README says non-Rust bindings do not yet exist.

Setup reality

Our sandbox install succeeded in 83 seconds and recorded 1 installed package. The build then succeeded in 10 seconds. cargo test exited successfully after 341 seconds but reported 0 passed, 0 failed, and 0 total, so the green result supplied no test-case coverage.

Trying the repository needs a Rust toolchain and a graphical environment for the browser, Markdown viewer, TodoMVC, or WGPU examples. Application use also means selecting wrapper and component crates, plus a renderer and window integration.

Blitz is beta. The HTML wrapper lacks interactivity, JavaScript is absent, and several browser features are intentionally out of scope. A failed critical network resource can currently block painting forever according to issue #694.

Blitz renders HTML and CSS without carrying a whole browser

Blitz is a set of Rust crates for applications that want web-style documents or interfaces without Chromium or a complete web platform. The high-level blitz wrapper renders HTML and Markdown but currently has no interactivity. dioxus-native takes a Dioxus VirtualDom and adds event handling. Beneath them, separate crates handle DOM state, HTML parsing, resource loading, layout, paint commands, windows, menus, and accessibility. Teams can use the wrapper or assemble only the layers they need.

Our commit aa41c30 checkout contained 366 files, about 55,047 source lines, and occupied 7.3 MB. The dependency installation finished in 83 seconds and recorded 1 installed package in the harness. That small checkout makes the engine approachable as source, though graphical examples still pull together Winit, AccessKit, Vello or another renderer, HTTP support, Stylo for CSS, Taffy for box layout, and Parley for text. Modularity reduces coupling; it does not remove those moving parts.

The reduced scope is a product decision

The project aims to support modern layout, complex selectors, media queries, CSS variables, form controls, accessibility, and custom widgets. It does not intend to bundle WebRTC, WebSockets, Bluetooth, localStorage, and every other browser feature by default. In a native app, the maintainers expect ordinary Rust crates to provide much of that functionality. This is a sensible boundary for a renderer embedded in a controlled application.

It is a poor boundary for arbitrary web content. JavaScript support remains in the roadmap backlog, along with C bindings and other language bindings. The 10-second build in our environment does not change that compatibility picture. A website that depends on client-side rendering, storage, browser extensions, video, or a full DOM API will need another engine. Blitz is easier to evaluate when the application owns the markup and can restrict its component set.

What happened when we ran it

Our sandbox installed the Rust project in 83 seconds and built it successfully in 10 seconds. The test command ran for 341 seconds and exited successfully, yet Cargo reported 0 passed, 0 failed, and 0 total. A green exit with no cases is compilation work, not behavioral evidence that pages render correctly.

The repository scan found 4 CI workflow files, no Dockerfile, and a tests directory. Our run used an unprivileged Debian container with 3 CPUs and 12 GB of RAM. It did not open the browser UI, draw a page, compare screenshots, test input, or measure accessibility output. We also measured no startup time, frame rate, memory use, or standards coverage. Those would require a graphical harness and representative documents rather than extrapolation from a 10-second build.

Fixed and absolute boxes can land in the wrong place

Issue #764 reports that absolute and fixed elements resolve against their DOM parent's flow position instead of the correct containing block or viewport. In one minimal case, a fixed box expected at coordinates 0,0 appeared at 8,16 because of the default body margin and flow position. Another case placed an absolute child at 45,6 instead of 15,5. Headers, tooltips, menus, and overlays are exactly the elements that rely on this behavior.

The roadmap still lists static and fixed positioning under the work toward 1.0, while active pull requests are changing out-of-flow hoisting and stacking-context behavior. That is healthy engineering activity, but it also means layout internals are moving. Use screenshot comparisons for every supported viewport and interaction state. Our 341-second zero-test result cannot stand in for those visual regressions, particularly when a current issue demonstrates coordinate errors in ordinary CSS.

A failed stylesheet request can leave the window blank

Issue #694 describes a network failure path where the resource handler is dropped without a callback. If the missing resource is a render-blocking stylesheet, its identifier remains in the set of pending critical resources, and painting stays blocked forever. Browsers ordinarily treat a failed stylesheet as loaded with no rules and continue. An embedded UI needs the same failure policy or a bad URL can become a permanently empty window.

This is more serious than an unsupported CSS property because it prevents fallback content from appearing. A production wrapper should add timeouts, surface resource failures, and exercise offline or 404 cases until the upstream path is fixed. Blitz networking is optional, so applications with their own resource provider also need to ensure every request completes with success or error. A silent drop is unsafe for any item that can block first paint.

Beta is accurate despite daily development

GitHub showed 4,069 stars, a dual Apache-2.0 and MIT license, and 173 combined issues and pull requests. The repository was pushed on August 26, 2026. GitHub returned no latest release object, while the README labels the engine beta and the roadmap tracks a 0.3 beta milestone before 1.0. The open queue includes selector work, tables, stacking contexts, SVG, font settings, pictures, and JavaScript compatibility tests.

Blitz has a coherent reason to exist: controlled native applications often need HTML and CSS layout, not an entire browser. Its crate boundaries and 10-second build make architectural evaluation easy. Its browser-compatibility gaps and absent discovered tests make production approval harder. Start with a fixed set of application screens, add pixel and accessibility baselines, simulate failed resources, and pin the exact Git revision. If the input is the public web rather than your own markup, use a broader engine.

Alternatives

ProjectWhat it isPick it when
Servo gh↗A broader embeddable web engine written in Rust.pick this instead when wider web-platform compatibility matters more than Blitz's small modular surface.
Slint gh↗A declarative native UI toolkit with Rust, C++, JavaScript, and Python APIs.pick this instead when you control the interface and do not need HTML or CSS as the layout language.
Dioxus gh↗A Rust application framework for web, desktop, and mobile targets.pick this instead when you want the full application framework and can use its established render targets.

What people are saying

  1. [github-trending] DioxusLabs/blitz

Sources

  1. Blitz README
  2. Blitz roadmap
  3. Issue 764: incorrect containing blocks
  4. Issue 694: failed resources block painting
  5. Issue 193: picture element support

More web reviews

dioramas · elpis · deepseek-whale-girl · floorplan-3d · taro · driver.js · the whole board →