Getting Started
Umbra works hard out of the box and bends completely to your config. Start with defaults; tear it down whenever you're ready.
- Launch Umbra from your applications menu or run the binary from the terminal (add
--safeto boot with all plugins and user config disabled). - On first launch, an interactive setup helps you choose your theme and layout combination with zero manual setup required.
- Everything is driven by a single config file at
~/.config/umbra/umbra.toml. The Settings GUI (Ctrl+,) writes this file under the hood. - The built-in ad/tracker blocker is enabled by default and removable, like every other component.
- Press
Ctrl+Kfor the command palette: searchable settings, actions, layouts, themes, and open tabs.
Configuration
Umbra's entire behavior lives in one TOML file at ~/.config/umbra/umbra.toml: theme preset and
custom design tokens, layout presets (compact, minimal, sidebar,
zen), keybindings, feature flags
(adblock, modal_mode, notify_reload, …), plugins, a new-tab page
section, and a User-Agent override.
- Hot reload: save the file and changes apply live via a filesystem watcher with zero restart.
- Validation & rollback: config is schema-validated before applying. Every successful reload snapshots a last-known-good copy; a broken edit rolls back automatically with a toast, so a typo never takes your browser down.
- Safe mode: launch with
--safeto disable all plugins and user config.
Themes & Packages
Theming works in layers: design tokens (colors, radius, blur, fonts, easing) handle most reskins with a
single file swap; full component replacement goes further for themes that need different rendering entirely.
Glassmorphism is the default aesthetic; built-in presets include glass (default), material (Material 3), gruvbox,
nord, catppuccin, and ocean.
Themes and plugins distribute as .umbrapkg packages: zip archives with a
manifest.toml, optional token overrides, components, scripts, and assets. Install one-click from
the community gallery (GitHub topics umbra-theme / umbra-plugin) or paste a GitHub URL
or local path in Settings → Plugins → Packages & Gallery. Every install shows a diff of exactly what will change
before it's applied.
Plugins
Plugins are sandboxed Lua (with a WASM tier for compiled extensions), each declaring capability flags in its
manifest: fs, net, ui. Nothing outside the declared
capabilities is granted. Per-plugin memory caps (32 MiB) and CPU budgets mean a runaway plugin errors out
instead of pegging your machine.
A plugin registers components into named slots (top-bar, tab-strip,
bookmarks-bar, sidebar-left/right, status-bar,
overlay) via the umbra.register_component{component=…, slot=…} API, plus
capability-gated hosts like umbra.net.request{…}. Plugin logs
and errors surface in the console panel (Ctrl+Shift+C).
Import & Sync
On first launch — or any time from Settings → Import — Umbra scans the default XDG paths for installed browser profiles and imports bookmarks and history from Chromium-family browsers (Chrome, Chromium, Brave, Edge, Vivaldi, Opera, Arc, Epiphany) and Firefox-family browsers (Firefox, LibreWolf, Zen, Waterfox, Floorp). Passwords are intentionally never imported.
Settings → Sync pushes and pulls umbra.toml + bookmarks.toml to a
private GitHub gist you configure with a personal-access token (stored with 0600 permissions).
Browsing data — history, tabs — is never synced.
Browser Identity
Umbra renders through WebKitGTK, but its default User-Agent presents as desktop Firefox on
Linux so sites don't treat it as an unknown mobile Safari. Presets (Firefox, Chrome, Edge, Brave, Safari) and
a free-text custom value live in Settings → Browser, persisted as user_agent in
umbra.toml. The UMBRA_USER_AGENT environment variable overrides both.
Control Socket
Umbra exposes a Unix socket at ~/.config/umbra/umbra.sock for external scripting,
hyprctl-style:
SOCK=~/.config/umbra/umbra.sock
echo "ping" | socat - UNIX-CONNECT:$SOCK # → pong
echo "tabs" | socat - UNIX-CONNECT:$SOCK # JSON list of tabs
echo "new https://example.com" | socat - UNIX-CONNECT:$SOCK
echo "layout sidebar" | socat - UNIX-CONNECT:$SOCK
echo "quit" | socat - UNIX-CONNECT:$SOCK
Commands include ping, tabs, open, new,
reload, layout, slots, plugins, bm,
safe, quit, and help.
Building from Source
See the Downloads page for the full guide. Short version: install the Rust
toolchain and Linux WebKitGTK dependencies, run npm --prefix umbra/ui install, then
cargo build --release from src-tauri/ (or use cargo tauri dev /
cargo tauri build).
FAQ
Is Umbra based on Firefox, LibreWolf, or Chromium?
No. Umbra is an independent browser: a Rust backend under Tauri v2, with pages rendered by WebKitGTK
(webkit2gtk-4.1). There is no Gecko, no LibreWolf, and no Chromium codebase involved — nothing
to compile for hours, and no upstream browser you have to rebase onto. The only Firefox-shaped thing is the
default User-Agent string, which is cosmetic and fully configurable.
Can I use Firefox or Chrome extensions?
No. Umbra's extensibility model is different: sandboxed Lua and WASM plugins with capability manifests, themes built on design tokens, and slot-based component replacement. Anything a traditional extension would do can be built as a plugin instead.
How do I report a bug?
Open an issue on the GitHub repository.
Does Umbra have auto-updates?
Not yet. For now, download new releases manually or rebuild from source by checking the GitHub releases page when updates ship.