Zero Browser — Roadmap & Risk Register
Version: 0.3 Last updated: 2026-09-18
Where it stands. Phases 0 and 1 are done except for the multi-process shell, and most of Phase 2 landed with them: flexbox, grid, floats,
overflowclipping,opacity/z-index, the 2Dtransformfunctions withtransform-origin,filter/backdrop-filter,text-shadow,@keyframes,@supports, CSS counters and generated content, the full HTML character reference table, sibling and structural selectors, CSS comments, WebP, an SVG rasterizer (gradients, patterns, clip paths,<use>,<text>), and promises/await/JSONin the script engine. On the product side: split view, spaces (separate profiles), sync as a sealed file, an HTTP cache that survives a restart, an English/Hindi interface with IME input, and encryption at rest on all three platforms.What is genuinely not built, and why it is not a matter of polish:
- Multi-process + sandbox (R5). Partly built. Startup mitigations apply to every process, and page content renders in a separate, privilege-dropped renderer with no network of its own — interactive tabs included: every tab gets one, and the shell keeps a spare already warmed so opening a tab does not wait for a process. Site isolation (renderer per site, not per tab) and a filesystem jail (restricted token / AppContainer) are what is left.
- GPU compositing. Measured, on a real page at 1280x900: 25 ms to render the page, 1.5 ms to composite the frame. Presenting that same CPU-rastered frame through the GPU competes for the 1.5 ms and cannot touch the 25 ms — so the dependency is not worth its weight until rasterization itself moves, which is the engine work, not a presenting change. (The compositing pass got 2.6x faster for free once it stopped doing per-pixel coordinate arithmetic at zoom 1.)
zero-jsbytecode VM and JIT. Still a tree-walking interpreter — but 4–18x faster than it was, because measuring found the cost was never the AST walk (seecrates/zero-engine/examples/jsbench.rs). A VM buys resolved variable slots next; worth doing when a real page's scripts are what is slow.- The compat bridge. Embedding another engine remains unbuilt, and is being questioned rather than scheduled:
Ctrl+Shift+Ohands the page to the browser the system already has, which keeps the promise nobody is stuck — without a second engine to ship, sandbox and keep current. If that proves insufficient in use, the bridge is the answer; until then it is 200 MB of speculation.- CSS transitions and animations. Both animated:
anim.rskeeps the previous value per element, the document carries a clock, and@keyframesruns off the same clock with the standard easing functions. The chrome does not use transitions — it is rebuilt from scratch each frame, so there is no previous value to interpolate from — but a page's own do, and a spinner spins. Animation: Off holds each animation at its fill state rather than freezing it mid-cycle.What is next is tracked as milestones, not phases: the phases below are the strategy, and the milestones are the ordered work. They were set by opening real sites and writing down what broke, so they lead with the things that make Zero unusable rather than the things that are furthest from spec. See https://github.com/vedantnimbarte/zero/milestones.
This roadmap is deliberately honest about the biggest fact of the project: a from-scratch browser engine is a multi-year effort. The plan front-loads shippable value (shell + AI + a real, if limited, engine) and grows web compatibility in phases, with a compat bridge so early users are never stuck.
Durations are relative effort bands, not calendar promises — they depend on team size (a from-scratch engine with a small team runs long; contributors accelerate it).
Phase 0 — Foundation & spike (proof it's real)
Goal: stand up the workspace, process model, and a "hello web" render.
- Cargo workspace + crate skeletons (§9 of Architecture).
- Multi-process shell: browser process + one sandboxed renderer + IPC.
wgpuwindow + minimal UI chrome; render a solid color, then a rectangle, then text.zero-htmltokenizer + DOM for a trivial page;zero-cssfor a handful of properties;zero-layoutblock layout;zero-paint+zero-compositorrender a static HTML page.- Networking: fetch a URL over HTTPS (
rustls) and display its (very simple) HTML. - Exit criteria: a sandboxed renderer displays a hand-picked static HTML page, on all 3 OSes.
Deliverable: internal demo. Proves the pipeline end-to-end.
Phase 1 — Usable minimal browser (private alpha)
Goal: a real, if limited, browser you can daily-drive for simple sites + our own surfaces.
Engine
- HTML parsing to WHATWG conformance (the hard malformed-input cases).
- CSS: full box model, inline/block, colors, backgrounds, basic positioning.
- Text: Latin + Indic shaping (
rustybuzz), font fallback, line breaking. - Images: PNG/JPEG (partial).
zero-jsinterpreter — ES subset; DOM bindings for basic interactivity.- Compat bridge available (opt-in) for sites outside the subset.
Shell / product
- Vertical tabs (reorder, pin, close/undo, groups-lite), collapsible sidebar.
- Command/address bar (navigate, search, history/bookmark suggestions).
- New-tab page (per reference image 2), light + dark themes.
- Downloads, history, bookmarks (basic); session restore; settings (privacy-first).
- Privacy: tracker/ad blocking in network service, HTTPS-first, local encrypted storage.
AI (v1 core)
- AI service process; command-bar AI intents.
- "Chat with this page" (summarize/ask) via sanitized page context.
- On-device model option + consented cloud; privacy indicator.
Localization
- English + Hindi UI; Indic IME in inputs; ₹/date/number formatting.
Exit criteria: contributors can use Zero for a defined set of everyday simple sites + all Zero surfaces; the rest fall back to the bridge with clear labeling.
Milestone: Private Alpha.
Phase 2 — Real-world capable (public beta)
Goal: most mainstream sites are pleasant on the Zero engine.
Engine
- CSS flexbox; transforms/transitions (partial); more paint fidelity (shadows, gradients, radii).
- Images: WebP + basic SVG.
zero-jsbytecode VM + inline caches (real-world speed); more Web APIs (fetch, events, timers, storage,localStorage/IndexedDB-lite).- Perf baseline established; memory harness; background-tab sleeping.
Product
- Split view (2 panes) with draggable divider + context menu (reference image 1).
- Spaces & profiles (separate storage jars, per-space accent).
- Encrypted sync (optional, E2E, self-hostable).
- Agentic AI actions with confirmation gate; cross-tab context (Should).
- More Indian languages (target: +4).
Exit criteria: a broad site corpus renders correctly on the Zero engine; bridge usage drops sharply; perf budgets met on reference hardware.
Milestone: Public Beta.
Phase 3 — Compatibility & hardening (1.0)
Goal: the browser is trustworthy and compatible enough for a general launch.
Engine
- CSS grid; fuller animations;
<video>/<audio>(partial). - Site isolation for cross-site iframes; renderer-per-site.
zero-jsbaseline JIT (hardened); GC to generational if profiling demands.- WPT subset pass-rate target; Test262 subset target.
Product & trust
- Security audit + fuzzing hardening; bug-bounty program.
- Signed auto-update with rollback protection.
- Accessibility audit (WCAG AA) pass.
- Data-passport, transparency report, India-hosted services live.
- Extensions: limited, safe extension API (content blocking, themes) — not full Chrome parity.
Exit criteria: stable, secure, compatible with the large majority of real sites; crash-free ≥ 99.5%; bridge is opt-in/legacy only.
Milestone: 1.0 Public Launch — "India's first from-scratch browser."
Phase 4+ — Scale & differentiate (post-1.0)
- Optimizing JIT; HTTP/3/QUIC; more media/codecs; PWA support.
- Deeper India integrations (UPI awareness, DigiLocker, gov services).
- Mobile (Android first) — a large, separate track.
- Broader extension ecosystem; developer tools.
- Retire the compat bridge for general web use.
Cross-cutting workstreams (run throughout)
- Testing/CI: conformance corpus, screenshot diffs, fuzzing, perf CI, 3-OS matrix.
- Security: sandbox parity per OS,
unsafeaudits, threat-model reviews. - Community: public roadmap, RFCs, contributor guide, good-first-issues, Discord/Matrix.
- Design: hi-fi prototype → design system in
zero-ui→ per-screen implementation. - Localization: grow language coverage each phase.
Risk register
| # | Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|---|
| R1 | From-scratch engine takes far longer than hoped | High | High | Phasing + compat bridge; ship shell/AI value early; grow contributors |
| R2 | JS engine can't reach usable perf | Med | High | Interpreter→VM→JIT staged; Test262; defer optimizing JIT |
| R3 | Web-compat long tail never "done" | High | Med | Accept phased subset publicly; bridge covers the tail; be transparent |
| R4 | Small team / contributor drop-off | Med | High | Modular crates, docs, OSS governance, grants/funding |
| R5 | Cross-OS sandbox complexity | Med | Med | zero-sandbox per OS; lean on OS primitives; security review |
| R6 | Indic text shaping bugs | Med | Med | Proven shaper + large script test corpus |
| R7 | GPU/driver variance breaks rendering | Med | Med | wgpu multi-backend + software fallback |
| R8 | AI privacy misstep erodes trust | Low | High | On-device default, explicit consent, no retention, audits |
| R9 | Funding runs out before 1.0 | Med | High | Bootstrap+grants; OSS cloud-services revenue; scope discipline |
| R10 | "India's first" claim challenged | Low | Med | Qualify precisely: first from-scratch, sovereign, Rust browser |
What "shippable at each phase" means (anti-vaporware guardrail)
Each phase ends with a thing a real person can install and use, not a bigger TODO:
- P0: internal demo (renders a static page).
- P1: private alpha (daily-drive simple sites + Zero surfaces; bridge for the rest).
- P2: public beta (most mainstream sites on our engine).
- P3: 1.0 (general web, secure, audited).
If a phase can't hit its exit criteria, we cut scope, not honesty.