br0x is a minimal browser for Linux. It uses Rust, GTK4, and WebKitGTK. It runs less on purpose: idle tabs release their memory, trackers are refused before they load, and your data stays on your machine.
- Use a fraction of the memory mainstream browsers need for the same tabs.
- Start fast and switch tabs instantly.
- Keep the UI native to GNOME.
- Stay offline first. No account. No telemetry.
- Rust 2024 edition
- GTK4 plus libadwaita for the shell
- WebKitGTK 6.0 for page render
- Flatpak for release builds, AUR for Arch installs
- Tabs with favicons, titles, close buttons, and a native tab bar (Ctrl+T, Ctrl+W)
- Built-in start page: search box, letter tiles, Frequent sites, quick links, your own pinnable shortcuts, engine aware
- Address bar with search fallback, live history suggestions, and a search engine picker (DuckDuckGo, Google, Brave, Bing, Startpage, Wikipedia)
- Lock icon for https, warning icon for http, magnifier on empty pages, clear button, bookmark star, pill shaped entry
- Bookmarks: star button, Ctrl+D, menu entry
- Back, forward, reload, stop, and zoom (single toast, no pile-up)
- Find in page with live match count (Ctrl+F)
window.openandtarget=_blankopen real tabs- Session save and restore. Only the selected tab loads at startup, the rest stay parked until you visit them
- Adaptive park policy: idle background tabs release their web process under memory pressure. Tabs that are audible, loading, blank, pinned, or recently restored are exempt. Parked tabs are marked
• Parked - Sleep tier: background tabs idle past the timeout (30 min default, adjustable) release their web process without waiting for pressure. Sleeping tabs are marked
• Sleeping - Settings panel (Ctrl+,): appearance (system, light, dark — internal pages match), sleep timeout, search engine, privacy lists, saved passwords
- Vertical sidebar tabs (F9): pinned tabs as icons, animated reveal, loading shimmer, keyboard reorder
- Hide-anything: dismiss any element for the site, and it stays hidden
- Reading mode: articles as one text column, no page chrome
- Tab palette: Ctrl+K, then type — fuzzy-ranked tabs, actions, history, bookmarks, trailing search
- Passwords in a private on-disk vault (owner-only file, never logged); OS keyring backend next. Per-site shield level
- Video pop-out: the playing video in its own window
- Script-driven testing:
scripts/benchdrives isolated tabs over a socket when br0x runs withBR0X_BENCH=1(seecrates/br0x-shell-gtk/BENCH_WIRING.md) - Reopen closed tab (Ctrl+Shift+T, last 10)
- Base tracker block list compiled once and attached to every view
- Memory pressure settings on the shared web context
- Modern Chrome user agent plus persistent cookies, so Google search works without captcha loops
| Keys | Action |
|---|---|
| Ctrl+T | New tab |
| Ctrl+W | Close tab |
| Ctrl+Shift+T | Reopen closed tab |
| Ctrl+L | Focus address bar |
| Ctrl+Shift+F | Focus mode (hide the chrome) |
| Ctrl+F | Find in page |
| Ctrl+G, Ctrl+Shift+G | Next, previous match |
| Ctrl+R, F5 | Reload |
| Escape | Close find bar, or stop loading |
| Alt+Left, Alt+Right | Back, forward |
| Ctrl+Plus, Ctrl+Minus, Ctrl+0 | Zoom in, out, reset |
| Ctrl+Tab, Ctrl+Shift+Tab | Next, previous tab |
| Ctrl+D | Bookmark this page |
| Ctrl+K, then type | Command palette (tabs, actions, history, search) |
| F9 | Sidebar tabs on/off |
| Ctrl+Shift+R | Reading mode |
| Ctrl+Shift+H | Hide the element under the cursor |
| Ctrl+Shift+O | Pop the playing video out |
| Ctrl+Shift+S | Per-site shield toggle |
| Ctrl+, | Settings |
| Ctrl+Shift+PageUp, Ctrl+Shift+PageDown | Move tab in the sidebar |
| Alt+Enter | Open address in new tab |
| Ctrl+Q | Quit |
One command for every distro (needs curl and sudo):
curl -fsSL https://raw.githubusercontent.com/SachinD6/br0x/main/scripts/quick-install.sh | shIt detects Arch, Fedora, Ubuntu and Debian, installs the build tools, then builds and registers the app. On Arch it runs a full system upgrade first, which Arch requires before installing anything new; the GStreamer media packages stay best-effort so a media-stack conflict never aborts the install. Ubuntu and Debian take the Flatpak build instead, since their system GTK is older than this codebase needs. Other options:
- Arch (pacman repo, no AUR account needed): add this to
/etc/pacman.conf, thensudo pacman -Sy br0x(shipsbr0x, a launcher entry, and an icon).[br0x] SigLevel = Never Server = https://github.com/SachinD6/br0x/releases/download/pacman
- Arch (AUR):
yay -S br0x, once AUR registration reopens and the package is submitted. - Release tarball: download
br0x-<version>-x86_64.tar.gzfrom GitHub Releases, then./install.sh --prefix ~/.local. The bundled binary is built for Arch; other distros should build from source. - Other distros: install the GTK dev packages, clone, and run the installer.
Fedora:
sudo dnf install gtk4-devel libadwaita-devel webkitgtk6.0-devel. Ubuntu's system GTK is older than this codebase needs, so Ubuntu users should take the Flatpak build below instead.git clone https://github.com/SachinD6/br0x.git cd br0x && ./scripts/install.sh
- Flatpak:
flatpak-builder --force-clean build-dir .flatpak/org.br0x.Browser.yml. - From source: install deps, then
./scripts/install.shfor a launcher entry.
Install deps on Arch:
sudo pacman -S --needed base-devel pkgconf gtk4 libadwaita webkitgtk-6.0 rustup \
gst-plugins-good gst-libav gst-plugins-bad
rustup default stableRun from source:
cargo run --release -p br0x-shell-gtkMedia sites need the GStreamer packages. Without them the web process crashes when a page initializes audio.
./scripts/measure.py firefox br0xReports proportional set size (PSS) for each process tree, which counts shared pages once instead of once per process.
crates/br0x-core: policy, lifecycle, session store, blocker, sampler. No GTK code here.crates/br0x-shell-gtk: GTK4 window, tabs, address bar, park wiring. Callsbr0x-core.docs/adr/: architecture decisions.packaging/: desktop entry, app metadata, and icon.PKGBUILD: AUR package for Arch installs..flatpak/: Flatpak manifest for release builds.
Read CONTRIBUTING.md, then open a small PR. Maintainers review within 7 days.
