Dumber is a keyboard-driven web browser, built around panes, workspaces, and modal controls.
Tabs contain workspaces. Workspaces contain panes. Panes can be split, stacked, moved, resized, and closed from the keyboard.
The layout model is inspired by terminal multiplexers such as Zellij and tmux, but applied to web browsing this is particularly suited for Wayland compositors such as Niri or Hyprland.
Website · Documentation · Keybindings
dumber-h264.mp4
The demo shows split panes, stacked panes, modal navigation, and workspace switching.
Dumber uses three layout levels:
- Tabs group separate browser contexts.
- Workspaces hold a layout of panes.
- Panes display web pages and can be split, stacked, moved, resized, or closed.
Most browser-management actions are exposed through modal keybindings. Enter a mode, run one or more commands, then leave the mode. The default modes cover pane management, tabs, resizing, and session commands.
The browser chrome stays out of the way by default. Open the omnibox when you want to navigate; otherwise the pane is just the page or web app you are using. This makes Dumber work well as a side pane next to an editor, terminal, or another desktop application.
- No permanent tab bar, bookmark bar, or toolbar around the page
- Omnibox and browser commands appear through keyboard shortcuts
- Web apps can feel closer to desktop applications because the browser frame is not always visible
- Works well as a narrow side pane next to an editor, terminal, or other application
- Split panes horizontally or vertically
- Stack panes in the same area
- Move, resize, and close panes with modal keybindings
- Keep related pages together in a workspace
- Pane, tab, resize, and session modes
- Vim/Zellij-style navigation patterns
- Search bangs such as
!g,!gi, and!ddg - Launcher integration for
rofi,fuzzel, anddmenu
- Wayland-native on Sway, Hyprland, River, Niri, and similar compositors
- Floating pane with configurable profile shortcuts
- Single
config.tomlfile with hot reload
- Chromium Embedded Framework backend by default
- WebKit backend available as a fallback
- Built-in ad blocking based on uBlock filter lists
- GPU-accelerated video through VA-API/VDPAU where supported
- Snapshot-based restoration of tabs, workspaces, and pane layout
curl -fsSL https://dumber.bnema.dev/install | sh
dumber browseyay -S dumber-browser-bin # Pre-built binary
yay -S dumber-browser-git # Build from sourcewget https://github.com/bnema/dumber/releases/latest/download/dumber.flatpak
flatpak install --user dumber.flatpak
flatpak run dev.bnema.Dumber browseFor dependencies, distribution notes, and troubleshooting, see the installation documentation.
Dumber uses modal keybindings for browser management.
| Mode | Default key | Used for |
|---|---|---|
| Pane | Ctrl+P |
Split, stack, close, and move panes |
| Tab | Ctrl+T |
Create, close, switch, and rename tabs |
| Resize | Ctrl+N |
Resize panes with hjkl or arrow keys |
| Session | Ctrl+O |
Snapshot, restore, and browse sessions |
The floating pane is a temporary browser pane that can be toggled without changing the main workspace layout.
Alt+Ftoggles the floating pane and preserves its state while hidden.Ctrl+Wcloses the active pane; if the floating pane is active, it is fully released for a fresh next open.- Profile shortcuts such as
Alt+Gare optional and configured underworkspace.floating_pane.profiles. - Some
Alt+<key>bindings may conflict with WebKit shortcuts or desktop-level handlers.
See the floating pane reference for setup and behavior details.
Dumber is configured with a single TOML file.
[engine]
type = "cef"
[workspace.floating_pane]
enabled = trueThe config reloads while Dumber is running. See the configuration documentation for all options.
Dumber uses Chromium Embedded Framework by default. WebKitGTK is available as a fallback backend.
On Arch Linux, install the CEF runtime with:
sudo pacman -S cefFor hardware video decoding, cef-vaapi is also available from the AUR as an optional CEF build.
CEF runtime lookup order:
CEF_DIRengine.cef.cef_dir/usr/lib/cef~/.local/share/cef
Set engine.cef.cef_dir in config when CEF_DIR is unset:
[engine.cef]
cef_dir = "/custom/path"Or set the higher-precedence CEF_DIR environment variable:
CEF_DIR=/custom/path dumber browseWebKit can be selected explicitly:
[engine]
type = "webkit"CEF uses Dumber's GPU-first Wayland render stack by default: GDK DMABUF presentation with ANGLE/GSK Vulkan. For driver compatibility, switch to the EGL/OpenGL stack with engine.cef.render_stack = "egl"; the default is "vulkan".
CEF OSR frame rate adapts to the active Wayland monitor refresh rate when both engine.cef.adaptive_windowless_frame_rate = true and engine.cef.windowless_frame_rate = 0 are set, which are the defaults. Adaptive mode is capped by engine.cef.windowless_frame_rate_max = 240. Setting engine.cef.windowless_frame_rate to a positive value forces a fixed rate instead. This adaptive polling path is Wayland-specific; other platforms fall back to the configured fixed/default CEF behavior.
Arch Linux:
sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-vaDebian/Ubuntu:
sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-badUbuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
Dumber is usable for regular web browsing on Wayland compositors, with the main focus on panes, keyboard control, floating workflows, and desktop integration.
It is not a drop-in replacement for every mainstream browser workflow. Extension compatibility, engine behavior, and media support depend on the selected backend and system libraries.
Bug reports and reproducible Wayland/backend issues are welcome.
Dumber uses pure-Go bindings and requires GTK4/WebKitGTK runtime libraries for the GUI.
Set ENV=dev to use .dev/dumber/ for config and data instead of XDG paths.
Prerequisites:
- Go 1.25+
- Node.js 20+ for frontend assets
- WebKitGTK 6.0 and GTK4 development packages
git clone https://github.com/bnema/dumber
cd dumber
make build
./dist/dumber browse| Target | Description |
|---|---|
make build |
Build frontend and binary |
make build-quick |
Build binary only, skipping frontend |
make dev |
Run with go run |
make test |
Run tests |
make lint |
Run golangci-lint |
make flatpak-build |
Build Flatpak bundle |
Dumber is currently focused on stability, performance, browser-engine behavior, and core UI/UX polish.
Bug fixes, documentation improvements, packaging fixes, and targeted UX improvements are welcome. Larger feature ideas should start as issues before PRs.
See CONTRIBUTING.md for details.
MIT - See LICENSE for details.