Gosub Engine is a modular, embeddable browser engine written in Rust that can be integrated into applications by providing a render backend and compositor.
The engine addresses the need for a browser implementation that can be embedded and controlled programmatically rather than used as a standalone application. It works by exposing a unified entry point through the GosubEngine struct, which manages multiple zones and tabs with isolated cookies and storage. Applications drive the engine via TabCommand and EngineCommand, receiving EngineEvent notifications for navigation, resource loading, and redraw events. The engine handles HTML5 and CSS3 parsing with spec compliance, async networking with priority queuing and request coalescing, layout through Taffy with support for block, inline, flex, grid, floats, and absolute positioning, and painting through pluggable render backends including Cairo, Skia, and Vello.
Adoption suits projects that need a headless or embedded browser component rather than a full user-facing browser application. The modular architecture means you only integrate the components you need, and the pluggable render backend system lets you choose between CPU rendering with Cairo or Skia, GPU rendering with Vello, or headless operation. The event-driven interface gives your application full control over navigation, resource fetching, and UI interactions like form pickers. A significant limitation is that JavaScript execution is not yet wired into the engine; the V8 bindings and web API implementations exist but no page currently runs scripts, though the engine uses a separate test binding for DOM testing.
Development shows active work across the modular crate structure with ongoing implementation of layout and rendering features. The project maintains conformance measurement through gated web-platform-tests runs and a reftest runner, indicating attention to standards compliance. Documentation is detailed, with separate guides covering crate organization, JavaScript status, and web-platform-test results, suggesting the maintainers prioritize clarity about what works and what remains incomplete.