Body:
Hi everyone,
I'm excited to share a project I've been working on: sol, a self-contained browser kernel written in Rust.
Unlike modern browser wrappers that rely on Chromium or Blink, sol implements the entire core browser pipeline from scratch.
We do use mature Rust libraries for infrastructure (e.g., ureq/rustls for networking, rustybuzz for text shaping, tiny-skia for rasterization), but the heavy lifting of the browser engine is entirely in-tree.
The pipeline:
fetch → HTML parse → CSS cascade → layout → display list → raster → PNG (with JS eval and DOM mutation triggering refreshes)
What is implemented in-tree:
· sol_html: Full HTML5 tokenizer and tree builder (insertion modes, adoption agency, foster parenting).
· sol_css: General token/component AST, selector engine, cascade/inheritance, custom properties, media/supports conditions, math.
· sol_layout: Box-tree builder; block, inline/IFC, floats, flexbox, table, abs/fixed positioning.
· sol_js: An ES-subset interpreter with a tree-walk evaluator, mark-sweep GC, regex engine, microtasks, and DOM/window bindings.
· sol_dom: Arena-based DOM with generational IDs and dirty-flag subtrees.
· sol_img: Bounded PNG, GIF, and BMP decoders (no external image crates).
It's a massive undertaking (about 31k lines of Rust), and it's built with safety and strict bounds in mind.We have enforced memory limits for decoding, font parsing, and network I/O to prevent OOMs.
Try it out:
The CLI allows you to render a viewport to PNG, dump the DOM, or even serve a remote window for headless machines (sol surf):
cargo build -p sol
./target/debug/sol shot demo/page.html /tmp/sol-demo.png 1000x640
Known Limits (Being honest):
· No CSS Grid yet (Flex/Table/Block are supported).
· JS implements a working ES subset (closures, classes, promises, etc.), not full ES2024.
· Images: No JPEG/WebP yet.
· Network: HTTP/1.1 only, no HTTP/2/3.
Repo: GitHub - UnionRepos/sol: A modular, self-contained browser kernel in Rust with HTML, CSS, JavaScript, layout, and software rendering · GitHub
I'd love to hear your feedback on the architecture, the module boundaries, or the JS GC implementation.
I'm also happy to answer any questions about writing a layout engine in Rust!
2 posts - 1 participant
Read full topic
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | I made a Vibe-Coded Reusable Application Runtime For Any Digital Domain (Office apps, Digital Painter, Graph nodes based apps..etc) | 0 | 17.83 | 12-10-2026 |
| 2 | Zaxis 0.0.5: immediate-mode GUI on wgpu, embeddable in a host's wgpu pass, with an real overlay layer for other processes | 0 | 10.2 | 11-10-2026 |
| 3 | FerroProve - C-to-Rust lifter emitting #![forbid(unsafe_code)] crates with a differential oracle | 0 | 15.51 | 17-10-2026 |
| 4 | My state lib PurrGress | 0 | 12.62 | 13-08-2026 |
| 5 | I wrote a small library for exclusive component filtering in bevy | 0 | 14.93 | 13-10-2026 |
| 6 | FUI-RS: retained Rust UI for WebAssembly and native desktop without a WebView | 0 | 11.54 | 30-07-2026 |
| 7 | Sping 1.5.5 — a cross-platform network diagnostics CLI written in Rust | 0 | 9.19 | 10-10-2026 |
| 8 | [Show] swift-topomap: Silicon-aware TUI and eBPF metrics engine | 0 | 11.87 | 27-07-2026 |
| 9 | Hotcode: easy to use hot-reload | 0 | 9.84 | 09-10-2026 |
| 10 | Blog: gRPC-Rust Preview Release | 0 | 9.58 | 28-05-2026 |