No description
Find a file
devops-bot 4b55b3a42d
Some checks failed
Pipeline / verify (push) Has been skipped
Pipeline / orchestrate (push) Failing after 2m41s
Add loading progress bar and insert-mode indicator UI
2026-08-18 20:07:32 -04:00
.forgejo/workflows Drop rebuild from bottle and strip stray rebuild lines 2026-08-18 16:44:21 -04:00
.github
res
resources
src Add loading progress bar and insert-mode indicator UI 2026-08-18 20:07:32 -04:00
.gitignore
Cargo.lock
Cargo.toml chore: bump version to v0.0.208 2026-08-18 23:02:13 +00:00
LICENSE
README.md

Iron Browser

A GTK4 keyboard-driven web browser for the BlueAK Linux distribution, written in Rust.

Build status

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)

  1. Install the binary (e.g. via Homebrew or from the GitHub release)
  2. Copy the .desktop file into your writable app directory:
    mkdir -p ~/.local/share/applications
    cp /path/to/org.blueak.iron.desktop ~/.local/share/applications/
    
  3. Register Iron as the system default browser:
    xdg-settings set default-url-scheme-handler https org.blueak.iron.desktop
    
    (If you get "exited with code 2", the .desktop file isn't visible to xdg — make step 2 was done and run update-desktop-database ~/.local/share/applications/)
  4. You can now open links with iron https://example.com or 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::ApplicationWindow with webkit6::WebView rendering live pages
  • Noctalia theme integration (token loading, CSS generation, file-watch live reload)
  • WebKit CSS injection (form controls themed, dark/light color-scheme hint)
  • Keyboard-driven hint mode (f key, 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 QUERY via WebKit FindController)
  • 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 / :hist overlay, :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-open folder 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-ready NetworkSession
  • History (SQLite via rusqlite, :history command)
  • Bookmarks (SQLite, :bookmark command, 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:

  1. Review the code logic manually
  2. Check for syntax errors by reading the files
  3. Push to GitHub and wait for the CI results

Inspiration

Iron is inspired by Titanium, qutebrowser, and Vimperator.

License

MIT