Fast. Private. Zero bloat.
A Rust-native, ad-free macOS browser built for people who want speed without compromise.
Most browsers are Chromium wrappers β they carry Google's rendering engine, telemetry hooks, and memory overhead whether you want them or not. Blaze takes a different path:
- No Chromium. The core is pure Rust. The macOS shell uses Apple's WebKit as the rendering backend today, isolated behind a clean abstraction layer β and a real Servo v0.4.0 embedding already implements the same interface behind a feature flag, so the fully independent Rust engine can be swapped in without touching a single line of UI code.
- No ads, ever. A Brave-style Rust adblock engine runs natively in-process. Lists compile to a binary trie at startup β filter matching is sub-microsecond (p99 < 1 Β΅s in benchmarks) with zero network round-trips.
- No telemetry, period. Zero data collection, zero crash reporting, zero analytics. What you browse stays on your device.
- Memory efficient. Tabs you haven't visited in a while are automatically suspended, freeing their memory. Background tabs cost almost nothing.
- π₯ Sub-microsecond ad blocking - Rust-native filter engine, no extension overhead
- πͺΆ Lightweight - Tab suspension frees memory automatically
- π« Zero telemetry - No data ever leaves your device
- π Dark & light mode - Follows macOS system appearance instantly
- π Full tab management - Create, close, pin, mute, reorder, move between windows
- π Bookmarks - Toolbar, bookmarks bar, and full manager
- β¬οΈ Downloads - Native download engine with pause/resume/progress
- π¬ Video & audio - YouTube, streaming sites, and any HTML5 media
- π Per-site ad-block exceptions - Allowlist individual domains with one click
- π Session restore - All windows and tabs come back exactly where you left them
- βΎοΈ Multiple windows - Drag tabs out to new windows, merge them back
- π Smart address bar - URLs, searches, and bookmarks in one field
Blaze is not tied to any single rendering engine. The Rust core defines a single WebEngine trait:
pub trait WebEngine: Send {
fn navigate(&mut self, url: &Url);
fn go_back(&mut self);
fn go_forward(&mut self);
fn reload(&mut self);
fn stop(&mut self);
fn apply_blocking(&mut self, artifacts: BlockingArtifacts);
fn set_muted(&mut self, muted: bool);
fn suspend(&mut self);
fn resume(&mut self, url: &Url);
fn poll_title(&self) -> Option<String>;
}Today, WebKitBackend implements this trait using Apple's WKWebView β giving full compatibility with every website while the native engine matures. Alongside it, EmbeddedServoEngine implements the same trait on a real embedded Servo v0.4.0 (blaze-engine-servo --features servo): each tab runs Servo on a dedicated engine thread with headless rendering, native request interception wired straight into the ad-block matcher, scriptlet/cosmetic-filter injection, and popup denial. Switching engines is a single line of configuration. The Swift UI, the tab manager, the ad blocker, and the download engine have no knowledge of which backend is running.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β macOS SwiftUI Shell β
β TabStrip Β· Toolbar Β· Bookmarks Β· Settings β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ
β FFI (uniffi / Swift)
ββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β blaze-core (Rust) β
β Tab manager Β· Session Β· Downloads Β· Events β
ββββββββββββ¬ββββββββββββββββββββββββ¬ββββββββββββββββββ
β β
ββββββββββββΌβββββββββββ βββββββββ-βΌβββββββββββββββββββ
β WebKitBackend β β EmbeddedServoEngine β
β WKWebView via FFI β β Servo v0.4.0, pure Rust β
βββββββββββββββββββββββ ββββββββββββββββββββββββββββ-β
β
ββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββ
β blaze-adblock (Rust) β
β Brave-compatible filter engine Β· < 1 Β΅s p99 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
blaze-browser/
βββ crates/
β βββ blaze-core # Tab, window, session, downloads, bookmarks
β βββ blaze-engine # WebEngine trait + shared types
β βββ blaze-engine-servo# Servo v0.4.0 embedding (--features servo) + simulated engine for parity tests
β βββ blaze-adblock # Brave-style filter engine
β βββ blaze-net # HTTP, range requests, download worker
β βββ blaze-storage # SQLite profile: history, bookmarks, settings
β βββ blaze-media # Audio/video state tracking
β βββ blaze-ffi # uniffi bindings for Swift
βββ platforms/
β βββ macos/ # SwiftUI shell + XcodeGen project
βββ fuzz/ # cargo-fuzz harnesses
βββ scripts/
βββ build-dmg.sh # Universal (arm64 + x86_64) DMG builder
| Metric | Result | Gate |
|---|---|---|
| Ad filter match (p99) | 917 ns | < 100 Β΅s |
| Filter engine cache load | 3.5 ms | β |
| Cold browser start | < 500 ms | β |
| 10-page RSS growth | < 64 MiB | β |
Benchmarks run with BLAZE_PERF_GATE=1 cargo bench -p blaze-adblock.
- Download the latest
Blaze-x.x.x.dmgfrom Releases. - Open the DMG, drag Blaze.app to Applications.
- Right-click β Open on first launch (unsigned build β Gatekeeper will ask once).
- If the Dock icon looks stale after update, run
killall Dock.
Blaze is currently macOS 13+ only (Apple Silicon and Intel, universal binary). Linux, Windows, Android, and iOS platform stubs are in the architecture but not yet wired up.
Pull requests are welcome. The toolchain is pinned to Rust 1.95.0 (the version Servo v0.4.0 is built with) via rust-toolchain.toml β rustup picks it up automatically. Please run cargo clippy --workspace --all-targets -- -D warnings and cargo test --workspace before opening a PR. The CI pipeline also runs AddressSanitizer, ThreadSanitizer, and fuzz smoke tests on every push.
MIT β see LICENSE.

