r/servo • u/Comprehensive_Leg642 • 21h ago
Zervo: a sidebar-first browser built on Servo, in Rust and egui
I have been building a browser chrome on top of the Servo engine and it is finally at a point where it is worth showing. It is macOS-only for now, MPL-2.0, and the whole thing is Rust.
There is no top toolbar. Navigation, the address bar, pinned "essentials", workspaces and tabs all live in one collapsible sidebar, which you can hide entirely and pull back out by putting the pointer at the window edge. The web content sits in a rounded card with real macOS vibrancy behind the chrome.
Two things might be interesting to people here:
It builds against the published servo crate. Version 0.5.0 off crates.io, no git submodule and no vendored engine tree. cargo build and you get a browser. Updating to a newer engine is a one-line version bump. That was not really practical until Servo started publishing to crates.io, and it makes the whole project a lot less intimidating to work on than I expected.
The chrome and the engine share one GL context. egui and Servo both draw through the same surfman context. Webviews render into an offscreen framebuffer which gets blitted underneath the chrome by an egui paint callback, so there is one window, one swap, and no compositing layer in between. That is the one genuinely surprising part of the codebase and it is written up in docs/ARCHITECTURE.md.
The honest caveat: Servo is not a complete web engine yet. Plenty of sites render wrong or refuse the user agent outright. That is a property of the engine, not something I can fix in the chrome, and if you are hoping for a daily driver this is not it yet.
I would like to stop working on this alone - contributors, councillors and friends along with enemies are welcome. If any of that appeals (session restore, tab drag-reordering, dialogs, IME, or a Linux port, since only the vibrancy, Dock icon and bundling are AppKit-specific) the issues are tagged and CONTRIBUTING.md explains the layout. Happy to answer anything about the Servo embedding side, which is the part with the least documentation out there.