BrowseCraft: a small web browser written in Rust, with tabs, a built-in ad blocker, and its own rendering engine.
Rust
39
41 commits
updated Oct 19, 2026

Part of Openfield Labs
An experimental open-source desktop browser written in Rust, with tabs, a built-in ad blocker and a custom HTML/CSS renderer.
BrowseCraft currently uses a hybrid rendering architecture, not Servo:
about:home), view-source: and the browsecraft:// pages (browsecraft://flags,
browsecraft://history). It parses HTML and CSS, runs the cascade, lays out the
page and rasterizes it in software. It also handles all headless screenshots
and fallback browsing. It does not execute JavaScript.wry, show regular websites using
WebView2 on Windows and WKWebView on macOS. On Linux, or when the native web
view cannot be initialized, pages use the custom engine with its limited
standards support.Windows browsing therefore still depends on Edge's Chromium-based WebView2; the current application is not yet independent of native browser engines.
The custom engine's pipeline is:
URL ─► net ─► html ─► DOM ─► css + style (cascade) ─► layout ─► display list ─► paint ─► window
The toolbar and tab sidebar are drawn with egui on the GPU when one is available, and by the engine otherwise.
The architecture decision selects Servo as the future independent website engine. Servo is not yet integrated or available as a selectable backend. The plan is to retain Rust and egui/winit for the application and reuse Servo's page engine rather than build a second general-purpose DOM, layout and JavaScript stack.
Existing native web views stay in place until the integration passes explicit compatibility, packaging and security gates. Windows renderer containment is an unresolved release blocker; this decision is not a production-readiness claim. Track the work in the engine roadmap.
Browser
browsecraft://historybrowsecraft://flags, saved in the per-user configuration folder (see Settings)Ctrl+Shift+S), plus a headless --screenshot modeShift+KAd blocking
filters/Rendering engine
<p>/<li>/table parts, entities and quirks-mode detection:not, :is, :nth-child, …), @media, @import, @supports, custom properties and var(), calc() basics!important, inline styles, inheritance and legacy HTML attributes (bgcolor, align, cellpadding, …)overflow: hiddenhttp(s), file:// (with directory listings) and data: URLsThe custom engine also handles headless screenshots and fallback browsing when an embedded web view is unavailable. It bounds selector complexity, matching work and cascade size, and caches sibling positions to avoid repeated scans. Selectors exceeding 64 compound parts (including nested pseudo-selector lists) are rejected; matching stops after 100,000 work steps per element, and the cascade keeps at most 65,536 declarations per element. Pages exceeding these limits may render with reduced styling. See architecture for the limits and the changelog for recent fixes.
BrowseCraft is developed and tested on Windows. Building it needs:
rustup update stable)On Windows, build.bat checks your toolchain, builds a release binary and
copies it into dist\ together with the filter lists:
build.bat :: release build into dist\browsecraft.exe
build.bat run :: build, then start BrowseCraft
build.bat debug :: faster build that keeps a console window for logs
build.bat test :: run the unit tests
build.bat clean :: remove target\ and dist\
Or use Cargo directly:
cargo run --release # opens Startpage
cargo run --release -- about:home # opens the built-in new-tab page
cargo run --release -- example.com # opens a URL or search
cargo run --release -- --screenshot page.png news.ycombinator.com 1200
cargo test
| Shortcut | Action |
|---|---|
Ctrl+L / F6 / Ctrl+S | Focus address bar |
Ctrl+T / Ctrl+W | New tab / close tab |
Ctrl+Tab / Ctrl+Shift+Tab | Next / previous tab |
Alt+Left / Alt+Right | Back / forward |
F5 / Ctrl+R | Reload |
Alt+Home | Home page (Startpage) |
Ctrl+H | History |
Ctrl+Plus / Ctrl+Minus / Ctrl+0 | Zoom in / out / reset |
Ctrl+U | View source |
Ctrl+Shift+S | Save a screenshot to Pictures |
Shift+K | Shortcut cheatsheet |
Ctrl+Q | Quit |
The full list is in docs/usage.md.
Open browsecraft://flags to change:
auto, egui (GPU) or engine (software). This one takes effect after a restart.Settings are saved atomically as key=value lines in the per-user configuration
folder: %APPDATA%\BrowseCraft\flags.txt on Windows,
~/Library/Application Support/BrowseCraft/flags.txt on macOS, or
$XDG_CONFIG_HOME/BrowseCraft/flags.txt on Linux (~/.config by default).
Old working-directory settings are no longer read. To retain them, close the
browser and copy your existing flags.txt to the new location once.
BrowseCraft builds its blocker from a built-in starter list plus every filters/*.txt
file it finds next to the executable or in the working directory. To block
more, add a list such as EasyList to filters/.
Some uBlock Origin features aren't supported: regex filters, $redirect,
$csp, $replace, scriptlets and procedural filters. Rules that use them are
skipped rather than applied loosely.
BrowseCraft is licensed under GPL-3.0-or-later. See LICENSE and third-party notices, including the uBlock Origin code adapted by the ad blocker.
BrowseCraft: a small web browser written in Rust, with tabs, a built-in ad blocker, and its own rendering engine.
Rust
39
41 commits
updated Oct 19, 2026

Part of Openfield Labs
An experimental open-source desktop browser written in Rust, with tabs, a built-in ad blocker and a custom HTML/CSS renderer.
BrowseCraft currently uses a hybrid rendering architecture, not Servo:
about:home), view-source: and the browsecraft:// pages (browsecraft://flags,
browsecraft://history). It parses HTML and CSS, runs the cascade, lays out the
page and rasterizes it in software. It also handles all headless screenshots
and fallback browsing. It does not execute JavaScript.wry, show regular websites using
WebView2 on Windows and WKWebView on macOS. On Linux, or when the native web
view cannot be initialized, pages use the custom engine with its limited
standards support.Windows browsing therefore still depends on Edge's Chromium-based WebView2; the current application is not yet independent of native browser engines.
The custom engine's pipeline is:
URL ─► net ─► html ─► DOM ─► css + style (cascade) ─► layout ─► display list ─► paint ─► window
The toolbar and tab sidebar are drawn with egui on the GPU when one is available, and by the engine otherwise.
The architecture decision selects Servo as the future independent website engine. Servo is not yet integrated or available as a selectable backend. The plan is to retain Rust and egui/winit for the application and reuse Servo's page engine rather than build a second general-purpose DOM, layout and JavaScript stack.
Existing native web views stay in place until the integration passes explicit compatibility, packaging and security gates. Windows renderer containment is an unresolved release blocker; this decision is not a production-readiness claim. Track the work in the engine roadmap.
Browser
browsecraft://historybrowsecraft://flags, saved in the per-user configuration folder (see Settings)Ctrl+Shift+S), plus a headless --screenshot modeShift+KAd blocking
filters/Rendering engine
<p>/<li>/table parts, entities and quirks-mode detection:not, :is, :nth-child, …), @media, @import, @supports, custom properties and var(), calc() basics!important, inline styles, inheritance and legacy HTML attributes (bgcolor, align, cellpadding, …)overflow: hiddenhttp(s), file:// (with directory listings) and data: URLsThe custom engine also handles headless screenshots and fallback browsing when an embedded web view is unavailable. It bounds selector complexity, matching work and cascade size, and caches sibling positions to avoid repeated scans. Selectors exceeding 64 compound parts (including nested pseudo-selector lists) are rejected; matching stops after 100,000 work steps per element, and the cascade keeps at most 65,536 declarations per element. Pages exceeding these limits may render with reduced styling. See architecture for the limits and the changelog for recent fixes.
BrowseCraft is developed and tested on Windows. Building it needs:
rustup update stable)On Windows, build.bat checks your toolchain, builds a release binary and
copies it into dist\ together with the filter lists:
build.bat :: release build into dist\browsecraft.exe
build.bat run :: build, then start BrowseCraft
build.bat debug :: faster build that keeps a console window for logs
build.bat test :: run the unit tests
build.bat clean :: remove target\ and dist\
Or use Cargo directly:
cargo run --release # opens Startpage
cargo run --release -- about:home # opens the built-in new-tab page
cargo run --release -- example.com # opens a URL or search
cargo run --release -- --screenshot page.png news.ycombinator.com 1200
cargo test
| Shortcut | Action |
|---|---|
Ctrl+L / F6 / Ctrl+S | Focus address bar |
Ctrl+T / Ctrl+W | New tab / close tab |
Ctrl+Tab / Ctrl+Shift+Tab | Next / previous tab |
Alt+Left / Alt+Right | Back / forward |
F5 / Ctrl+R | Reload |
Alt+Home | Home page (Startpage) |
Ctrl+H | History |
Ctrl+Plus / Ctrl+Minus / Ctrl+0 | Zoom in / out / reset |
Ctrl+U | View source |
Ctrl+Shift+S | Save a screenshot to Pictures |
Shift+K | Shortcut cheatsheet |
Ctrl+Q | Quit |
The full list is in docs/usage.md.
Open browsecraft://flags to change:
auto, egui (GPU) or engine (software). This one takes effect after a restart.Settings are saved atomically as key=value lines in the per-user configuration
folder: %APPDATA%\BrowseCraft\flags.txt on Windows,
~/Library/Application Support/BrowseCraft/flags.txt on macOS, or
$XDG_CONFIG_HOME/BrowseCraft/flags.txt on Linux (~/.config by default).
Old working-directory settings are no longer read. To retain them, close the
browser and copy your existing flags.txt to the new location once.
BrowseCraft builds its blocker from a built-in starter list plus every filters/*.txt
file it finds next to the executable or in the working directory. To block
more, add a list such as EasyList to filters/.
Some uBlock Origin features aren't supported: regex filters, $redirect,
$csp, $replace, scriptlets and procedural filters. Rules that use them are
skipped rather than applied loosely.
BrowseCraft is licensed under GPL-3.0-or-later. See LICENSE and third-party notices, including the uBlock Origin code adapted by the ad blocker.