Skip to content

Repository files navigation

br0x

br0x logo: a blue ring with a parked-tab gap on dark charcoal

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.

Goals

  • 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.

Stack

  • Rust 2024 edition
  • GTK4 plus libadwaita for the shell
  • WebKitGTK 6.0 for page render
  • Flatpak for release builds, AUR for Arch installs

What works today

  • 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.open and target=_blank open 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/bench drives isolated tabs over a socket when br0x runs with BR0X_BENCH=1 (see crates/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

Keyboard shortcuts

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

Install

One command for every distro (needs curl and sudo):

curl -fsSL https://raw.githubusercontent.com/SachinD6/br0x/main/scripts/quick-install.sh | sh

It 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, then sudo pacman -Sy br0x (ships br0x, 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.gz from 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.sh for 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 stable

Run from source:

cargo run --release -p br0x-shell-gtk

Media sites need the GStreamer packages. Without them the web process crashes when a page initializes audio.

Measuring memory

./scripts/measure.py firefox br0x

Reports proportional set size (PSS) for each process tree, which counts shared pages once instead of once per process.

Project layout

  • crates/br0x-core: policy, lifecycle, session store, blocker, sampler. No GTK code here.
  • crates/br0x-shell-gtk: GTK4 window, tabs, address bar, park wiring. Calls br0x-core.
  • docs/adr/: architecture decisions.
  • packaging/: desktop entry, app metadata, and icon.
  • PKGBUILD: AUR package for Arch installs.
  • .flatpak/: Flatpak manifest for release builds.

Contributing

Read CONTRIBUTING.md, then open a small PR. Maintainers review within 7 days.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages