The Gosub browser engine
See the codeAn 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-sonar | Networking stack (async, streaming, priority-scheduled) — external crate |
gosub_lattice | CSS table layout |
gosub_render_pipeline | Render pipeline — layout (Taffy), 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:
TabCommandTabCommand flows in; EngineEvent (navigation, downloads, redraw, crashes) flows out on a control bus, with per-resource detail on a separate opt-in streamgosub_latticeEngineEvent::PickerRequesteddocs/status.md is the detailed version of this list — per component,
what works and what does not, with the numbers.
Not there yet: scripting is not wired into the engine. The V8 and web-API crates exist and
build, but no page runs JavaScript — see docs/javascript.md. WPT drives
the DOM through a separate test-only QuickJS binding (gosub_domjs).
docs/README.md indexes every page under /docs. The pages below are the
ones worth reading first.
Getting started
Reference
cargo run --bin … toolsArchitecture
ModuleConfiguration and the Has* traits
that wire the workspace togetherDefaultRenderConfig wires for you and how to go fully customgosub_css3 from text to computed valueConformance
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.
(top 24 of 80)
258 followers · starred Jul 2024
98 followers · starred Sep 2023
571 followers · starred Oct 2024
1,046 followers · starred Sep 2023
The Gosub browser engine
See the codeAn 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-sonar | Networking stack (async, streaming, priority-scheduled) — external crate |
gosub_lattice | CSS table layout |
gosub_render_pipeline | Render pipeline — layout (Taffy), 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:
TabCommandTabCommand flows in; EngineEvent (navigation, downloads, redraw, crashes) flows out on a control bus, with per-resource detail on a separate opt-in streamgosub_latticeEngineEvent::PickerRequesteddocs/status.md is the detailed version of this list — per component,
what works and what does not, with the numbers.
Not there yet: scripting is not wired into the engine. The V8 and web-API crates exist and
build, but no page runs JavaScript — see docs/javascript.md. WPT drives
the DOM through a separate test-only QuickJS binding (gosub_domjs).
docs/README.md indexes every page under /docs. The pages below are the
ones worth reading first.
Getting started
Reference
cargo run --bin … toolsArchitecture
ModuleConfiguration and the Has* traits
that wire the workspace togetherDefaultRenderConfig wires for you and how to go fully customgosub_css3 from text to computed valueConformance
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.
(top 24 of 80)
258 followers · starred Jul 2024
98 followers · starred Sep 2023
571 followers · starred Oct 2024
1,046 followers · starred Sep 2023