An embeddable, async browser engine written in Rust.
Join us on our development Zulip chat, or our Discord server for general chat. If you'd like to contribute, start with the contribution guide.
Gosub is a modular, embeddable browser engine. The primary entry point is GosubEngine in the
gosub_engine crate. You provide a render backend and a compositor; the
engine owns a multi-zone/tab model, an async networking stack, cookie and storage isolation per
zone, and an event bus. Your user-agent (UA) drives everything via TabCommand and reacts to
EngineEvent.
Core components:
| Crate | Role |
|---|---|
gosub_engine |
GosubEngine — the unified entry point |
gosub_interface |
Shared traits wiring the components together (the config system) |
gosub_html5 |
HTML5 tokenizer / parser |
gosub_css3 |
CSS3 tokenizer / parser |
gosub_net |
Networking stack (async, streaming, per-zone) |
gosub_taffy |
Flexbox / grid layout (Taffy) |
gosub_lattice |
CSS table layout |
gosub_render_pipeline |
Render pipeline — stages, tiling, compositor |
gosub_renderer_cairo |
Cairo render backend (CPU) |
gosub_renderer_skia |
Skia render backend (CPU / GPU) |
gosub_renderer_vello |
Vello / wgpu render backend (GPU) |
gosub_fontmanager |
Font system — text shaping and measurement |
gosub_jsapi |
Browser Web API implementations (console, fetch, DOM, …) |
gosub_v8 |
V8 JavaScript engine bindings |
gosub_config |
Configuration store |
For the full crate listing see docs/crates.md.
The engine is under active development. What works today:
- Multi-zone / multi-tab model — zones isolate cookies and storage; tabs are controlled via
TabCommand - Async networking — streaming HTTP fetcher with priority queues, inflight coalescing, redirect handling, and per-zone cookie isolation
- Event-driven UA interface —
EngineEvent(navigation, resource, redraw) flows out;TabCommand/EngineCommandflow in - HTML5 and CSS3 parsing — spec-compliant parsers for both
- Pluggable render backends — Null (headless), Cairo (GTK4), Skia, Vello (wgpu)
Start here, then dig into the topic you need.
Getting started
- Tutorial — start the engine, open a tab, navigate, handle events
- Configuration — choosing a render backend and font system
- Running the examples — headless, GUI (winit / GTK4 / egui), and component tools
- WebAssembly — compile and run the engine in the browser
- Development — tests and benchmarks
Reference
- Crates — the workspace crate layout
- Component tools — the standalone
cargo run --bin …tools
Architecture
- Networking — architecture and design notes
- Cookies
- Storage (local / session)
- Pump — moving HTTP stream data to targets
- Render pipeline
We welcome contributions. Because the engine is still taking shape, a lot of work is exploratory — building proofs-of-concept, reading specs, and making architectural decisions — rather than pure coding.
Join us on Zulip or Discord before diving in; it will save you time and help us keep things coordinated. See CONTRIBUTING.md for the details.