A calm, workspace-oriented browser built on the Servo engine.
macOS today — Linux and Windows build from the same tag and are untested.
|
|
|
| Sidebar — navigation, workspaces, tabs and widgets in one column light · dark, full size |
Collapsed — navigation moves into a bar across the top light · dark, full size |
|
|
|
| Floating — put the bar wherever you like, including nowhere light · dark, full size |
Glass — the sidebar takes its light from what is behind it light · dark, full size |
All four are the same theme — Zervo, the default — in light and dark.
Appearance — every value the chrome is built from is a control, and the
specimen at the top is the real material rather than a picture of one:
it is wrong exactly when the chrome is wrong.
Zervo is a browser chrome — sidebar, workspaces, tabs, settings — wrapped around Servo, Mozilla's independent web engine written in Rust. There is no Chromium and no Gecko underneath: the page you are looking at is rendered by Servo.
It is an experiment, and an honest one: Servo is not yet a complete web engine, so some sites will not work. See Limitations.
- Sidebar-first, or bar-first. Everything lives in one collapsible sidebar: navigation, the address bar, pinned "essentials", workspaces and tabs. Collapse it and navigation moves into a bar across the top, with the address pill centred on the window and the sidebar left holding only tabs.
- A bar you arrange. Drag its buttons between the two sides, take them off, put them back. Drag the bar itself taller and it uncovers a shelf of widgets — a clock, now playing and transport controls — laid out on a grid, dropped where you like and resized by the corner.
- Workspaces. Tabs are grouped into named spaces, each with its own colour.
- Favourites and history. The star saves a page and hovering it opens the list; history is searchable and grouped by how long ago.
- Saved logins, kept in the system keychain rather than in Zervo's own files.
- It greets you rather than briefing you. The time, one search field, the session you actually left, and the three sites you use. A new tab is opened to go somewhere.
- Or a board of thirteen cards on a twelve-column grid — clock, world clocks, search, pinned tabs, most-visited, recent, favourites, downloads, now playing, a note, a to-do list, workspaces, the mark. One press away, and every card can be dragged, resized and taken off.
- Eight backdrops, chosen from the page's own header: Plain, Gradient, Grid, Mesh, Aurora, Waves, Particles, or a photograph fetched from Wikimedia Commons or Openverse and credited as its licence asks.
- Text that reads either way. Cards, the greeting, the clock and the photo credit each ask about their own patch of the picture rather than taking one answer for the page — a photograph is dark sky at the top and bright water at the bottom, and pale text set for the sky disappears into the water.
- Every surface is drawn through one material. Corner radii, fills, sheen, shadow reach and how far glass frosts are decided in one place and reach the whole application without a call site knowing a number. Surfaces have a class — card, menu, input — the way an element has one in CSS.
- And every number in it is a setting. Settings → Appearance has one
control per named field: the fill, the sheen, the blur, the edge, the corner
scale, the glow, the settle time, and how far the accent reaches into the
chrome. Save an arrangement under a name, or copy it out as the Rust
constyou would otherwise have written by hand. - Zervo's own material is the finished one. Four more presets — Candy, Flat, Liquid Glass, Material — came out of the same design study and are offered beside it, but they are experiments rather than settled work and are still being tuned.
- The seam between the chrome and the page is one setting with four steps, and each step brings the page transition its own geometry implies: a card recedes, a tint dissolves in place, a frame slides, a page under floating glass travels up while the glass stays put.
- Frosted, over anything. The chrome sits on real macOS vibrancy, and everything floating over a page frosts against a blurred copy of whatever that page is showing — so a menu over a website is the same glass as a card over a photograph. Two steps, Solid and Frosted, drive the window and everything on it together.
- Themed. Light/dark/auto following the system, ten accent presets plus a
colour of your own, and the accent is propagated into the engine so pages see
the matching
prefers-color-scheme.
The material system is the seam a theme for another platform is written
against — Windows, GTK, Android Material, Liquid Glass. Five arrangements ship,
and every value one is built from is a control on zervo://settings →
Appearance: the fill, the sheen, the blur, the edge, the corner scale, the
glow, the settle time, how far the accent reaches, and where the chrome ends
and the page begins. It is documented in docs/THEMING.md,
including what is still not there — palettes, and somewhere to save an
arrangement under a name of your own.
Zervo builds the Servo engine from source, so the first build is long (roughly an hour) and needs a lot of disk. Subsequent builds are incremental.
git clone https://github.com/goddv/zervo
cd zervo
cargo build --profile dev-fast
./target/dev-fast/zervoThe toolchain is pinned in rust-toolchain.toml and matches Servo's own.
rustup will install it automatically; if it complains about unavailable
components, install it explicitly:
rustup toolchain install 1.97.1 --profile minimal --component clippy,rustfmt
File downloads need a small patch to the engine, because Servo has no download
support of its own yet (servo#40210). See
docs/SERVO.md — it is one git apply and one Cargo line, and
then:
cargo build --profile dev-fast --features engine-downloads
Without the feature Zervo runs perfectly well; responses the engine cannot render simply are not offered for saving.
./scripts/bundle-macos.sh --dmg # macOS, this machine's architecture ./scripts/package-linux.sh --all # .deb, .rpm, AppImage, tarball, PKGBUILD pwsh scripts/package-windows.ps1 -Installer # Windows, .zip and a setup .exe
A release tag produces all of it: two .dmgs, one per Mac architecture; a
.deb; an .rpm for Fedora 44; an AppImage; a portable tarball; PKGBUILDs
for the AUR; a Windows zip and installer; and a SHA256SUMS covering the lot.
Nothing is signed. On macOS that means macOS will refuse to open the app until the quarantine flag is cleared, and on Windows it means SmartScreen shows a warning on first run. docs/PACKAGING.md covers exactly what a user sees on each platform, what signing would cost, and the traps — a link-time one on macOS if you have GStreamer installed, and the reason there is no Windows ARM64 build.
| Path | What lives there |
|---|---|
src/main.rs |
winit shell, the frame pipeline, input routing, shortcuts |
src/app.rs |
engine glue — owns Servo, implements WebViewDelegate |
src/state.rs |
workspaces, tabs, chrome state |
src/ui.rs |
the whole chrome, drawn with egui; emits UiActions |
zervo-core/src/theme.rs |
palettes, accents, and the material every surface is built from |
zervo-core/src/glass.rs |
the one place a surface is drawn |
src/backdrop.rs |
the blurred copy surfaces frost against, and the corner cut |
src/newtab.rs |
the new tab page: cards, grid, backdrops |
src/wallpaper.rs, zervo-core/src/net.rs |
wallpapers from Commons and Openverse |
src/widgets.rs |
toggles, sliders, segmented controls |
src/icons.rs, src/phosphor.rs |
Phosphor icon rendering |
src/downloads.rs |
download manager |
src/vibrancy.rs |
macOS NSVisualEffectView backdrop |
patches/servo/ |
engine patches Zervo can build against |
There is a longer tour in docs/ARCHITECTURE.md, including how the chrome and the engine share one GL context, and docs/THEMING.md describes the material system a theme for another platform would be written against.
Every release tag builds all of these. Only the first has been run.
| Platform | Package | State |
|---|---|---|
| macOS 11+, Apple Silicon | .dmg (arm64), GStreamer bundled |
✅ Used daily by its author |
| macOS 11+, Intel | .dmg (x86_64), GStreamer bundled |
|
| Ubuntu 26.04+ x86_64 | .deb |
|
| Fedora 44 x86_64 | .rpm |
|
| Any glibc 2.35+ x86_64 | .AppImage |
|
| Arch | PKGBUILD for the AUR, not yet published |
|
| Windows x64 | .zip and an installer |
|
| Windows ARM64 | — | ⛔ Blocked upstream; the x64 build runs under Prism |
macOS ships as two downloads, one per architecture, each built natively. They
could be one universal bundle — lipo will fuse them and the bundler takes
--universal — but each of these is roughly half the size, because a
single-architecture bundle has its GStreamer libraries thinned to match, and a
download that says which Mac it is for is worth more than one that runs on
both. Both need macOS 11 or later rather than 13.
Linux and Windows are x86_64 only. There is no technical obstacle to arm64 on Linux; there is simply nobody asking for it yet.
The .deb is built on Ubuntu 26.04 and so needs 26.04 or newer — glibc runs
old binaries on new systems and never the reverse. Anything older is what the
AppImage is for: it is built against glibc 2.35 so that it reaches back
further than any distribution package can.
Windows on ARM has no build because Servo does not have one: a float16_t
collision between MSVC's <arm_fp16.h> and the vendored glsl-optimizer, whose
fix is still unmerged both upstream and in Servo. The x64 build runs on those
machines through Prism, which emulates x64 user-mode code and does not emulate
the GPU path. See docs/PACKAGING.md.
Still a macOS release first. Every package comes from the same tag, and the material system itself is portable — it is drawn by egui and nothing else. But the window's frosted backdrop is an AppKit feature, and the corner compositing built on top of it has been tried nowhere else.
0.4.1 fixes the one thing Windows was known to do: die on startup, before any
window, reading GL_VERSION from a context surfman's WGL backend had never
made current. Windows now composites through ANGLE — EGL over Direct3D 11 —
which is what Servo's own Windows builds do. That is a fix made from the crash
log; nobody has watched it start.
Nobody has started Zervo on Linux at all either. The packages compile, package and install; whether a window opens is untested, and X11 versus Wayland and the GL setup have never been exercised. A report that it does not start is as useful as one that says it does — open an issue either way.
Two things macOS keeps that the others do not: the frosted vibrancy behind the chrome, which is AppKit's, and bundled media — GStreamer is an ordinary package on Linux and a piece of work not yet done on Windows.
- Servo is young. Expect broken layouts, missing APIs, and sites that
refuse the user agent. This is a property of the engine, not of Zervo — and
Zervo says so where it happens rather than in this list: a page the engine
cannot render gets
zervo://unsupported, which names what is missing and hands the page to another browser, and a content process that falls over getszervo://crashedrather than a frozen picture of itself. - Streaming video does not work. YouTube and the rest need Media Source Extensions, which Servo does not have. Local and progressive video plays.
- No extensions. The engine has none, so neither does the button.
- Passwords cannot be filled into web forms. The engine offers no hook for a submitted form, so saved logins are a vault plus HTTP authentication.
- No sync, no profiles. Not yet.
- Palettes are not themeable. How a surface is built is yours to set, and so is how far the accent reaches into it — and an arrangement can be saved under a name of your own. The colours the two themes start from are still constants. See docs/THEMING.md.
- 0.5.0 is a redesign, and it wants testing. The chrome, the new tab page, the error pages and the first run all changed. 0.6.0 is the polish pass; until then, open an issue for anything that reads wrong — and say which preset, theme and layout you were in, because most of what has been fixed so far only happened in one of them.
- Unsigned builds. See docs/PACKAGING.md.
Yes please — see CONTRIBUTING.md. docs/TODO.md is what is being worked on next; docs/PARITY.md is the full list of what still stands between Zervo and a browser you could use daily, in the order the gaps hurt, with where in the code each one lives. Most of it is embedder work, not engine work.
If you want to improve the engine, contribute to Servo directly. Note that Servo does not accept AI-generated contributions.
- Servo — the engine, MPL-2.0.
- Phosphor Icons — the icon set, MIT. Vendored in
assets/fonts/. - Zen Browser — the interaction design Zervo's chrome is modelled on. Zervo shares no code with Zen; it is a separate implementation on a different engine, and is not affiliated with or endorsed by it.
MPL-2.0, the same licence as Servo.