- Rust 100%
| .forgejo/workflows | ||
| .github | ||
| res | ||
| resources | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Iron Browser
A GTK4 keyboard-driven web browser for the BlueAK Linux distribution, written in Rust.
Iron is a spiritual successor to the Titanium browser, rebuilt from scratch on the modern GTK4 stack (GTK4, libadwaita, and WebKit 6.0). It is designed to feel native to the BlueAK/Noctalia desktop — not a port, not an afterthought.
Installation
brew install Akinus21/homebrew-tap/iron
BlueAK / Fedora SilverBlue (atomic)
- Install the binary (e.g. via Homebrew or from the GitHub release)
- Copy the
.desktopfile into your writable app directory:mkdir -p ~/.local/share/applications cp /path/to/org.blueak.iron.desktop ~/.local/share/applications/ - Register Iron as the system default browser:
(If you get "exited with code 2", thexdg-settings set default-url-scheme-handler https org.blueak.iron.desktop.desktopfile isn't visible to xdg — make step 2 was done and runupdate-desktop-database ~/.local/share/applications/) - You can now open links with
iron https://example.comor via xdg-open
What's different from Titanium?
| Titanium (GTK3) | Iron (GTK4) |
|---|---|
| gtk 0.16, gdk, relm 0.24 | gtk4 0.11, libadwaita 0.9, relm4 (planned) |
| webkit2gtk 1.0 (GTK3 WebKit) | webkit6 0.6 (GTK4 WebKit) |
| mg/minigui for UI chrome | adw::ApplicationWindow + adw::ToolbarView |
| Hardcoded colors | Noctalia theme tokens (no hardcoded hex values) |
Current status
Done
adw::ApplicationWindowwithwebkit6::WebViewrendering live pages- Noctalia theme integration (token loading, CSS generation, file-watch live reload)
- WebKit CSS injection (form controls themed, dark/light
color-schemehint) - Keyboard-driven hint mode (
fkey, qutebrowser-style link navigation) - Enhanced command overlay — three-column layout (commands left, history center, keybindings right), fuzzy filtering, Up/Down navigation for commands and history, Tab/Space to commit selection, Enter to execute raw text
- Keybinding config layer (TOML file at
~/.config/iron/config.toml) - Settings overlay with keybinding editor (add/remove bindings, protected defaults, fullscreen overlay like command bar)
- New-window-open command (
:new-window-open URL/:nwo URL) - xdg-open / default browser handling
- CAC / smart-card access — status check command (
:cac-status), PKCS#11 readiness detection - Search engines (
:search,:search-add,:search-del, default engine in config) - Find-in-page (
/or:find QUERYvia WebKitFindController) - Duplicate window (
:duplicate/Ctrl+d) — clones current window with same page - Copy address to clipboard (
:copy-address/:cpa) — copies current URL - SQLite browsing history — auto-tracked on page load, fuzzy-searchable in overlay,
:history/:histoverlay,:clear-history/:ch,:delete-history URL/:dh URL - Settings overlay (
:settings/:set) — fullscreen overlay with keybinding editor, no modal window
ToDo
- Download manager — intercept WebKit downloads, auto-save to XDG_DOWNLOAD_DIR, uniquify filenames, Gio desktop notification,
xdg-openfolder action - Session management — persistent cookies (SQLite
cookies.sqlite), third-party cookie blocking, WebKit-native credential storage via libsecret/keyring,:clear-site-data/:csd,:clear-cookies/:cc, incognito-readyNetworkSession - History (SQLite via
rusqlite,:historycommand) - Bookmarks (SQLite,
:bookmarkcommand, completions in command overlay) - Ad blocker (content-blocking rules)
- User scripts & user stylesheets
- Pop-up blocker (blacklist/whitelist)
- relm4 app architecture
- Zoom controls (
Ctrl+/Ctrl-/Ctrl0) - Fullscreen mode (
F11) - Private browsing / incognito mode
- Flatpak packaging
Theming
Iron targets Noctalia, BlueAK's GTK4/adwaita theme system. All UI widgets use standard GTK4 widget classes and adwaita CSS conventions so Noctalia's color scheme cascades automatically. No hardcoded hex values anywhere.
On startup, Iron loads ~/.config/noctalia/colors.json, maps the tokens to GTK CSS variables, and injects a CSS provider. A file watcher (inotify) picks up theme changes live.
Building
GitHub Actions handles all building automatically. The CI workflow builds the binary on ubuntu-latest, creates versioned GitHub releases, and updates the homebrew tap.
If you need to verify code changes locally without building:
- Review the code logic manually
- Check for syntax errors by reading the files
- Push to GitHub and wait for the CI results
Inspiration
Iron is inspired by Titanium, qutebrowser, and Vimperator.