Dumber
[License: MIT] [Go Report Card]
A TTY-inspired web browser multiplexer for tiling window managers.
What is Dumber?
Dumber is a web browser that works like your terminal multiplexer. Tabs hold workspaces. Workspaces hold panes. Panes split and stack like Zellij.
Features:
- Zellij-style panes with modal keyboard navigation
- Floating workspace pane with profile shortcuts
- Wayland native (Sway, Hyprland, River, Niri)
- Session resurrection with auto-snapshots
- Built-in ad blocking (uBlock-based)
- GPU accelerated video (VA-API/VDPAU)
- Launcher integration (rofi/fuzzel/dmenu)
- Search bangs (!g, !gi, !ddg)
- Single config.toml with hot reload
Documentation
Full documentation is available at dumber.bnema.dev
Quick Start
# Install
curl -fsSL https://dumber.bnema.dev/install | sh
# Launch
dumber browse
Arch Linux (AUR)
yay -S dumber-browser-bin # Pre-built binary
yay -S dumber-browser-git # Build from source
Flatpak
wget https://github.com/bnema/dumber/releases/latest/download/dumber.flatpak
flatpak install --user dumber.flatpak
flatpak run dev.bnema.Dumber browse
Dependencies
Arch Linux:
sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
Debian/Ubuntu:
sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
⚠️ Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
Browser engine
Dumber uses the Chromium Embedded Framework engine by default. On Arch, install the CEF runtime with:
sudo pacman -S cef
For hardware video decoding, cef-vaapi is also available from the AUR as an optional CEF build.
CEF runtime precedence is deterministic: CEF_DIR wins first, then engine.cef.cef_dir, then /usr/lib/cef, then ~/.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 browse
WebKit remains available as a fallback:
[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 (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.
Keyboard-Driven
Four modal modes. Enter a mode, act, escape out. Vim and Zellij users already know this pattern.
| Mode |
Key |
Actions |
| Pane |
Ctrl+P |
Split · Stack · Close · Move |
| Tab |
Ctrl+T |
New · Close · Switch · Rename |
| Resize |
Ctrl+N |
Grow · Shrink · hjkl/arrows |
| Session |
Ctrl+O |
Save · Restore · Browse |
Floating Pane
Alt+F toggles the floating pane and preserves its state while hidden.
Ctrl+W closes the active pane; if the floating pane is active, it is fully released for a fresh next open.
- Profile shortcuts like
Alt+G are optional and configured under workspace.floating_pane.profiles.
- Some
Alt+<key> bindings may conflict with default WebKit shortcuts or desktop-level handlers.
See Floating Pane Reference for setup and behavior details.
Development
Dumber uses pure-Go bindings (no CGO) but requires GTK4/WebKitGTK runtime libraries for the GUI.
Environment
Set ENV=dev to use .dev/dumber/ for config/data instead of XDG paths.
Build From Source
Prerequisites:
- Go 1.25+
- Node.js 20+ (for frontend assets)
- WebKitGTK 6.0 and GTK4 dev packages
git clone https://github.com/bnema/dumber
cd dumber
make build
./dist/dumber browse
Make Targets
| Target |
Description |
make build |
Build frontend + binary |
make build-quick |
Build binary only (skip frontend) |
make dev |
Run with go run |
make test |
Run tests |
make lint |
Run golangci-lint |
make flatpak-build |
Build Flatpak bundle |
Contributing
We welcome bug fixes, performance/stability improvements, and WebUI/UX enhancements. We're not accepting new feature PRs.
All PRs must target the next branch. We test there first before releasing to main.
See CONTRIBUTING.md for details.
License
MIT - See LICENSE for details.
source
1# Dumber
2
3[](https://opensource.org/licenses/MIT) [](https://goreportcard.com/report/github.com/bnema/dumber)
4
5A TTY-inspired web browser multiplexer for tiling window managers.
6
7- Website: [dumber.bnema.dev](https://dumber.bnema.dev)
8- Documentation: [dumber.bnema.dev/docs](https://dumber.bnema.dev/docs)
9
10---
11
12## What is Dumber?
13
14Dumber is a web browser that works like your terminal multiplexer. Tabs hold workspaces. Workspaces hold panes. Panes split and stack like Zellij.
15
16https://github.com/user-attachments/assets/232822af-08e4-4a74-9416-87f79c96b118
17
18
19
20**Features:**
21- Zellij-style panes with modal keyboard navigation
22- Floating workspace pane with profile shortcuts
23- Wayland native (Sway, Hyprland, River, Niri)
24- Session resurrection with auto-snapshots
25- Built-in ad blocking (uBlock-based)
26- GPU accelerated video (VA-API/VDPAU)
27- Launcher integration (rofi/fuzzel/dmenu)
28- Search bangs (!g, !gi, !ddg)
29- Single config.toml with hot reload
30
31## Documentation
32
33Full documentation is available at **[dumber.bnema.dev](https://dumber.bnema.dev)**
34
35- [Documentation](https://dumber.bnema.dev/docs) - Installation, configuration, CLI reference
36- [Keybindings](https://dumber.bnema.dev/docs/reference/keybindings) - Keyboard shortcuts
37
38## Quick Start
39
40```bash
41# Install
42curl -fsSL https://dumber.bnema.dev/install | sh
43
44# Launch
45dumber browse
46```
47
48### Arch Linux (AUR)
49
50```bash
51yay -S dumber-browser-bin # Pre-built binary
52yay -S dumber-browser-git # Build from source
53```
54
55### Flatpak
56
57```bash
58wget https://github.com/bnema/dumber/releases/latest/download/dumber.flatpak
59flatpak install --user dumber.flatpak
60flatpak run dev.bnema.Dumber browse
61```
62
63### Dependencies
64
65**Arch Linux:**
66
67```bash
68sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
69```
70
71**Debian/Ubuntu:**
72
73```bash
74sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
75```
76
77> ⚠️ Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
78
79### Browser engine
80
81Dumber uses the Chromium Embedded Framework engine by default. On Arch, install the CEF runtime with:
82
83```bash
84sudo pacman -S cef
85```
86
87For hardware video decoding, `cef-vaapi` is also available from the AUR as an optional CEF build.
88
89CEF runtime precedence is deterministic: `CEF_DIR` wins first, then `engine.cef.cef_dir`, then `/usr/lib/cef`, then `~/.local/share/cef`.
90Set `engine.cef.cef_dir` in config when `CEF_DIR` is unset:
91
92```toml
93[engine.cef]
94cef_dir = "/custom/path"
95```
96
97Or set the higher-precedence `CEF_DIR` environment variable:
98
99```bash
100CEF_DIR=/custom/path dumber browse
101```
102
103WebKit remains available as a fallback:
104
105```toml
106[engine]
107type = "webkit"
108```
109
110CEF 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"`.
111
112CEF 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` (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.
113
114## Keyboard-Driven
115
116Four modal modes. Enter a mode, act, escape out. Vim and Zellij users already know this pattern.
117
118| Mode | Key | Actions |
119|------|-----|---------|
120| Pane | `Ctrl+P` | Split · Stack · Close · Move |
121| Tab | `Ctrl+T` | New · Close · Switch · Rename |
122| Resize | `Ctrl+N` | Grow · Shrink · hjkl/arrows |
123| Session | `Ctrl+O` | Save · Restore · Browse |
124
125## Floating Pane
126
127- `Alt+F` toggles the floating pane and preserves its state while hidden.
128- `Ctrl+W` closes the active pane; if the floating pane is active, it is fully released for a fresh next open.
129- Profile shortcuts like `Alt+G` are optional and configured under `workspace.floating_pane.profiles`.
130- Some `Alt+<key>` bindings may conflict with default WebKit shortcuts or desktop-level handlers.
131
132See [Floating Pane Reference](https://dumber.bnema.dev/docs/reference/floating-pane) for setup and behavior details.
133
134## Development
135
136Dumber uses pure-Go bindings (no CGO) but requires GTK4/WebKitGTK runtime libraries for the GUI.
137
138### Environment
139
140Set `ENV=dev` to use `.dev/dumber/` for config/data instead of XDG paths.
141
142### Build From Source
143
144**Prerequisites:**
145- Go 1.25+
146- Node.js 20+ (for frontend assets)
147- WebKitGTK 6.0 and GTK4 dev packages
148
149```bash
150git clone https://github.com/bnema/dumber
151cd dumber
152make build
153./dist/dumber browse
154```
155
156### Make Targets
157
158| Target | Description |
159|--------|-------------|
160| `make build` | Build frontend + binary |
161| `make build-quick` | Build binary only (skip frontend) |
162| `make dev` | Run with `go run` |
163| `make test` | Run tests |
164| `make lint` | Run golangci-lint |
165| `make flatpak-build` | Build Flatpak bundle |
166
167## Contributing
168
169We welcome bug fixes, performance/stability improvements, and WebUI/UX enhancements. We're not accepting new feature PRs.
170
171**All PRs must target the `next` branch.** We test there first before releasing to `main`.
172
173See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
174
175## Community
176
177- [Report bugs](https://github.com/bnema/dumber/issues)
178- [Releases](https://github.com/bnema/dumber/releases)
179
180## License
181
182MIT - See `LICENSE` for details.