Hi everyone,
I’ve been working on sol, an experimental browser engine written in Rust.
The goal is to build a modular browser engine with its own implementations of the major parts of the rendering pipeline, rather than embedding an existing browser engine.
The project currently includes:
- An HTML5 tokenizer and tree builder
- A CSS parser, selector engine, cascade, and computed styles
- An arena-based DOM
- Block, inline, flexbox, table, and positioned layout
- Text shaping, bidirectional text handling, and software rasterization
- An interpreter for a subset of JavaScript, with DOM bindings and timers
- HTTP/HTTPS resource loading, image decoding, and a page orchestration layer
It can load local HTML files or URLs, render pages to PNG, dump the resulting DOM, and expose a small Rust API for embedding.
The project is still experimental. CSS Grid is not implemented, JavaScript support is incomplete, and some browser behaviors are approximations. It is not intended to be a replacement for a production browser at this stage.
Recent development has focused on improving code quality and correctness. The workspace currently passes Clippy with -D warnings, formatting checks, and all 164 tests, including new regression tests.
I’d appreciate feedback from people familiar with Rust architecture or browser internals, especially on:
- Whether the crate boundaries and public APIs make sense
- How best to organize CSS conformance testing and incremental implementation
- Potential correctness or architectural problems in the DOM, layout, and rendering pipeline
- Which parts would benefit most from focused testing or external contributions
I’m particularly interested in concrete criticism and suggestions rather than just feature requests.
Thanks for taking a look.