detached d7f16ad

docs(readme): refresh project overview

commit
d7f16ad420136acb31c9365a24233ea896172404
author
brice · · 2026-05-28 03:32 UTC
parent
3c51b4f
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +133 -65
M README.md +133 -65
@@ -2,50 +2,81 @@
22
33 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Go Report Card](https://goreportcard.com/badge/github.com/bnema/dumber)](https://goreportcard.com/report/github.com/bnema/dumber)
44
5-A TTY-inspired web browser multiplexer for tiling window managers.
5+Dumber is a keyboard-driven web browser for Wayland compositors, built around panes, workspaces, and modal controls.
66
7-- Website: [dumber.bnema.dev](https://dumber.bnema.dev)
8-- Documentation: [dumber.bnema.dev/docs](https://dumber.bnema.dev/docs)
7+The page is the interface. There are no permanent tab bars, bookmark bars, or browser chrome around the content. Navigation and browser commands appear when you ask for them with the keyboard.
98
10----
9+Tabs contain workspaces. Workspaces contain panes. Panes can be split, stacked, moved, resized, and closed from the keyboard.
1110
12-## What is Dumber?
11+The layout model is inspired by terminal multiplexers such as Zellij and tmux, but applied to browsing on tiling Wayland compositors.
1312
14-Dumber is a web browser that works like your terminal multiplexer. Tabs hold workspaces. Workspaces hold panes. Panes split and stack like Zellij.
13+[Website](https://dumber.bnema.dev) · [Documentation](https://dumber.bnema.dev/docs) · [Keybindings](https://dumber.bnema.dev/docs/reference/keybindings)
14+
15+## Demo
1516
1617 https://github.com/user-attachments/assets/232822af-08e4-4a74-9416-87f79c96b118
1718
19+The demo shows split panes, stacked panes, modal navigation, and workspace switching.
20+
21+## Overview
22+
23+Dumber uses three layout levels:
24+
25+- **Tabs** group separate browser contexts.
26+- **Workspaces** hold a layout of panes.
27+- **Panes** display web pages and can be split, stacked, moved, resized, or closed.
28+
29+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.
30+
31+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.
32+
33+## Features
1834
35+### Content-first browsing
1936
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
37+- No permanent tab bar, bookmark bar, or toolbar around the page
38+- Omnibox and browser commands appear through keyboard shortcuts
39+- Web apps can feel closer to desktop applications because the browser frame is not always visible
40+- Works well as a narrow side pane next to an editor, terminal, or other application
3041
31-## Documentation
42+### Pane-based browsing
3243
33-Full documentation is available at **[dumber.bnema.dev](https://dumber.bnema.dev)**
44+- Split panes horizontally or vertically
45+- Stack panes in the same area
46+- Move, resize, and close panes with modal keybindings
47+- Keep related pages together in a workspace
3448
35-- [Documentation](https://dumber.bnema.dev/docs) - Installation, configuration, CLI reference
36-- [Keybindings](https://dumber.bnema.dev/docs/reference/keybindings) - Keyboard shortcuts
49+### Keyboard workflow
3750
38-## Quick Start
51+- Pane, tab, resize, and session modes
52+- Vim/Zellij-style navigation patterns
53+- Search bangs such as `!g`, `!gi`, and `!ddg`
54+- Launcher integration for `rofi`, `fuzzel`, and `dmenu`
55+
56+### Desktop integration
57+
58+- Wayland-native on Sway, Hyprland, River, Niri, and similar compositors
59+- Floating pane with configurable profile shortcuts
60+- Single `config.toml` file with hot reload
61+
62+### Browser features
63+
64+- Chromium Embedded Framework backend by default
65+- WebKit backend available as a fallback
66+- Built-in ad blocking based on uBlock filter lists
67+- GPU-accelerated video through VA-API/VDPAU where supported
68+- Snapshot-based restoration of tabs, workspaces, and pane layout
69+
70+## Installation
71+
72+### Install script
3973
4074 ```bash
41-# Install
4275 curl -fsSL https://dumber.bnema.dev/install | sh
43-
44-# Launch
4576 dumber browse
4677 ```
4778
48-### Arch Linux (AUR)
79+### Arch Linux
4980
5081 ```bash
5182 yay -S dumber-browser-bin # Pre-built binary
@@ -60,25 +91,49 @@ flatpak install --user dumber.flatpak
6091 flatpak run dev.bnema.Dumber browse
6192 ```
6293
63-### Dependencies
94+For dependencies, distribution notes, and troubleshooting, see the [installation documentation](https://dumber.bnema.dev/docs).
6495
65-**Arch Linux:**
96+## Keyboard modes
6697
67-```bash
68-sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
69-```
98+Dumber uses modal keybindings for browser management.
7099
71-**Debian/Ubuntu:**
100+| Mode | Default key | Used for |
101+|------|-------------|----------|
102+| Pane | `Ctrl+P` | Split, stack, close, and move panes |
103+| Tab | `Ctrl+T` | Create, close, switch, and rename tabs |
104+| Resize | `Ctrl+N` | Resize panes with `hjkl` or arrow keys |
105+| Session | `Ctrl+O` | Snapshot, restore, and browse sessions |
72106
73-```bash
74-sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
107+## Floating pane
108+
109+The floating pane is a temporary browser pane that can be toggled without changing the main workspace layout.
110+
111+- `Alt+F` toggles the floating pane and preserves its state while hidden.
112+- `Ctrl+W` closes the active pane; if the floating pane is active, it is fully released for a fresh next open.
113+- Profile shortcuts such as `Alt+G` are optional and configured under `workspace.floating_pane.profiles`.
114+- Some `Alt+<key>` bindings may conflict with WebKit shortcuts or desktop-level handlers.
115+
116+See the [floating pane reference](https://dumber.bnema.dev/docs/reference/floating-pane) for setup and behavior details.
117+
118+## Configuration
119+
120+Dumber is configured with a single TOML file.
121+
122+```toml
123+[engine]
124+type = "cef"
125+
126+[workspace.floating_pane]
127+enabled = true
75128 ```
76129
77-> ⚠️ Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
130+The config reloads while Dumber is running. See the [configuration documentation](https://dumber.bnema.dev/docs) for all options.
131+
132+## Browser engine
78133
79-### Browser engine
134+Dumber uses Chromium Embedded Framework by default. WebKitGTK is available as a fallback backend.
80135
81-Dumber uses the Chromium Embedded Framework engine by default. On Arch, install the CEF runtime with:
136+On Arch Linux, install the CEF runtime with:
82137
83138 ```bash
84139 sudo pacman -S cef
@@ -86,7 +141,13 @@ sudo pacman -S cef
86141
87142 For hardware video decoding, `cef-vaapi` is also available from the AUR as an optional CEF build.
88143
89-CEF runtime precedence is deterministic: `CEF_DIR` wins first, then `engine.cef.cef_dir`, then `/usr/lib/cef`, then `~/.local/share/cef`.
144+CEF runtime lookup order:
145+
146+1. `CEF_DIR`
147+2. `engine.cef.cef_dir`
148+3. `/usr/lib/cef`
149+4. `~/.local/share/cef`
150+
90151 Set `engine.cef.cef_dir` in config when `CEF_DIR` is unset:
91152
92153 ```toml
@@ -100,51 +161,58 @@ Or set the higher-precedence `CEF_DIR` environment variable:
100161 CEF_DIR=/custom/path dumber browse
101162 ```
102163
103-WebKit remains available as a fallback:
164+WebKit can be selected explicitly:
104165
105166 ```toml
106167 [engine]
107168 type = "webkit"
108169 ```
109170
171+### Rendering notes
172+
110173 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"`.
111174
112-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.
175+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.
113176
114-## Keyboard-Driven
177+## Platform notes
115178
116-Four modal modes. Enter a mode, act, escape out. Vim and Zellij users already know this pattern.
179+### Dependencies
117180
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 |
181+**Arch Linux:**
124182
125-## Floating Pane
183+```bash
184+sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
185+```
126186
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.
187+**Debian/Ubuntu:**
131188
132-See [Floating Pane Reference](https://dumber.bnema.dev/docs/reference/floating-pane) for setup and behavior details.
189+```bash
190+sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
191+```
133192
134-## Development
193+> Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
135194
136-Dumber uses pure-Go bindings (no CGO) but requires GTK4/WebKitGTK runtime libraries for the GUI.
195+## Status
137196
138-### Environment
197+Dumber is usable for regular web browsing on Wayland compositors, with the main focus on panes, keyboard control, floating workflows, and desktop integration.
139198
140-Set `ENV=dev` to use `.dev/dumber/` for config/data instead of XDG paths.
199+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.
141200
142-### Build From Source
201+Bug reports and reproducible Wayland/backend issues are welcome.
202+
203+## Development
204+
205+Dumber uses pure-Go bindings and requires GTK4/WebKitGTK runtime libraries for the GUI.
206+
207+Set `ENV=dev` to use `.dev/dumber/` for config and data instead of XDG paths.
208+
209+### Build from source
143210
144211 **Prerequisites:**
212+
145213 - Go 1.25+
146-- Node.js 20+ (for frontend assets)
147-- WebKitGTK 6.0 and GTK4 dev packages
214+- Node.js 20+ for frontend assets
215+- WebKitGTK 6.0 and GTK4 development packages
148216
149217 ```bash
150218 git clone https://github.com/bnema/dumber
@@ -153,12 +221,12 @@ make build
153221 ./dist/dumber browse
154222 ```
155223
156-### Make Targets
224+### Make targets
157225
158226 | Target | Description |
159227 |--------|-------------|
160-| `make build` | Build frontend + binary |
161-| `make build-quick` | Build binary only (skip frontend) |
228+| `make build` | Build frontend and binary |
229+| `make build-quick` | Build binary only, skipping frontend |
162230 | `make dev` | Run with `go run` |
163231 | `make test` | Run tests |
164232 | `make lint` | Run golangci-lint |
@@ -166,9 +234,9 @@ make build
166234
167235 ## Contributing
168236
169-We welcome bug fixes, performance/stability improvements, and WebUI/UX enhancements. We're not accepting new feature PRs.
237+Dumber is currently focused on stability, performance, browser-engine behavior, and core UI/UX polish.
170238
171-**All PRs must target the `next` branch.** We test there first before releasing to `main`.
239+Bug fixes, documentation improvements, packaging fixes, and targeted UX improvements are welcome. Larger feature ideas should start as issues before PRs.
172240
173241 See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
174242
@@ -2,50 +2,81 @@
2 2
3 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Go Report Card](https://goreportcard.com/badge/github.com/bnema/dumber)](https://goreportcard.com/report/github.com/bnema/dumber)3 [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Go Report Card](https://goreportcard.com/badge/github.com/bnema/dumber)](https://goreportcard.com/report/github.com/bnema/dumber)
4 4
5-A TTY-inspired web browser multiplexer for tiling window managers.5+Dumber is a keyboard-driven web browser for Wayland compositors, built around panes, workspaces, and modal controls.
6 6
7-- Website: [dumber.bnema.dev](https://dumber.bnema.dev)7+The page is the interface. There are no permanent tab bars, bookmark bars, or browser chrome around the content. Navigation and browser commands appear when you ask for them with the keyboard.
8-- Documentation: [dumber.bnema.dev/docs](https://dumber.bnema.dev/docs)
9 8
10----9+Tabs contain workspaces. Workspaces contain panes. Panes can be split, stacked, moved, resized, and closed from the keyboard.
11 10
12-## What is Dumber?11+The layout model is inspired by terminal multiplexers such as Zellij and tmux, but applied to browsing on tiling Wayland compositors.
13 12
14-Dumber is a web browser that works like your terminal multiplexer. Tabs hold workspaces. Workspaces hold panes. Panes split and stack like Zellij.13+[Website](https://dumber.bnema.dev) · [Documentation](https://dumber.bnema.dev/docs) · [Keybindings](https://dumber.bnema.dev/docs/reference/keybindings)
14+
15+## Demo
15 16
16 https://github.com/user-attachments/assets/232822af-08e4-4a74-9416-87f79c96b11817 https://github.com/user-attachments/assets/232822af-08e4-4a74-9416-87f79c96b118
17 18
19+The demo shows split panes, stacked panes, modal navigation, and workspace switching.
20+
21+## Overview
22+
23+Dumber uses three layout levels:
24+
25+- **Tabs** group separate browser contexts.
26+- **Workspaces** hold a layout of panes.
27+- **Panes** display web pages and can be split, stacked, moved, resized, or closed.
28+
29+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.
30+
31+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.
32+
33+## Features
18 34
35+### Content-first browsing
19 36
20-**Features:**37+- No permanent tab bar, bookmark bar, or toolbar around the page
21-- Zellij-style panes with modal keyboard navigation38+- Omnibox and browser commands appear through keyboard shortcuts
22-- Floating workspace pane with profile shortcuts39+- Web apps can feel closer to desktop applications because the browser frame is not always visible
23-- Wayland native (Sway, Hyprland, River, Niri)40+- Works well as a narrow side pane next to an editor, terminal, or other application
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 41
31-## Documentation42+### Pane-based browsing
32 43
33-Full documentation is available at **[dumber.bnema.dev](https://dumber.bnema.dev)**44+- Split panes horizontally or vertically
45+- Stack panes in the same area
46+- Move, resize, and close panes with modal keybindings
47+- Keep related pages together in a workspace
34 48
35-- [Documentation](https://dumber.bnema.dev/docs) - Installation, configuration, CLI reference49+### Keyboard workflow
36-- [Keybindings](https://dumber.bnema.dev/docs/reference/keybindings) - Keyboard shortcuts
37 50
38-## Quick Start51+- Pane, tab, resize, and session modes
52+- Vim/Zellij-style navigation patterns
53+- Search bangs such as `!g`, `!gi`, and `!ddg`
54+- Launcher integration for `rofi`, `fuzzel`, and `dmenu`
55+
56+### Desktop integration
57+
58+- Wayland-native on Sway, Hyprland, River, Niri, and similar compositors
59+- Floating pane with configurable profile shortcuts
60+- Single `config.toml` file with hot reload
61+
62+### Browser features
63+
64+- Chromium Embedded Framework backend by default
65+- WebKit backend available as a fallback
66+- Built-in ad blocking based on uBlock filter lists
67+- GPU-accelerated video through VA-API/VDPAU where supported
68+- Snapshot-based restoration of tabs, workspaces, and pane layout
69+
70+## Installation
71+
72+### Install script
39 73
40 ```bash74 ```bash
41-# Install
42 curl -fsSL https://dumber.bnema.dev/install | sh75 curl -fsSL https://dumber.bnema.dev/install | sh
43-
44-# Launch
45 dumber browse76 dumber browse
46 ```77 ```
47 78
48-### Arch Linux (AUR)79+### Arch Linux
49 80
50 ```bash81 ```bash
51 yay -S dumber-browser-bin # Pre-built binary82 yay -S dumber-browser-bin # Pre-built binary
@@ -60,25 +91,49 @@ flatpak install --user dumber.flatpak
60 flatpak run dev.bnema.Dumber browse91 flatpak run dev.bnema.Dumber browse
61 ```92 ```
62 93
63-### Dependencies94+For dependencies, distribution notes, and troubleshooting, see the [installation documentation](https://dumber.bnema.dev/docs).
64 95
65-**Arch Linux:**96+## Keyboard modes
66 97
67-```bash98+Dumber uses modal keybindings for browser management.
68-sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
69-```
70 99
71-**Debian/Ubuntu:**100+| Mode | Default key | Used for |
101+|------|-------------|----------|
102+| Pane | `Ctrl+P` | Split, stack, close, and move panes |
103+| Tab | `Ctrl+T` | Create, close, switch, and rename tabs |
104+| Resize | `Ctrl+N` | Resize panes with `hjkl` or arrow keys |
105+| Session | `Ctrl+O` | Snapshot, restore, and browse sessions |
72 106
73-```bash107+## Floating pane
74-sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad108+
109+The floating pane is a temporary browser pane that can be toggled without changing the main workspace layout.
110+
111+- `Alt+F` toggles the floating pane and preserves its state while hidden.
112+- `Ctrl+W` closes the active pane; if the floating pane is active, it is fully released for a fresh next open.
113+- Profile shortcuts such as `Alt+G` are optional and configured under `workspace.floating_pane.profiles`.
114+- Some `Alt+<key>` bindings may conflict with WebKit shortcuts or desktop-level handlers.
115+
116+See the [floating pane reference](https://dumber.bnema.dev/docs/reference/floating-pane) for setup and behavior details.
117+
118+## Configuration
119+
120+Dumber is configured with a single TOML file.
121+
122+```toml
123+[engine]
124+type = "cef"
125+
126+[workspace.floating_pane]
127+enabled = true
75 ```128 ```
76 129
77-> ⚠️ Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.130+The config reloads while Dumber is running. See the [configuration documentation](https://dumber.bnema.dev/docs) for all options.
131+
132+## Browser engine
78 133
79-### Browser engine134+Dumber uses Chromium Embedded Framework by default. WebKitGTK is available as a fallback backend.
80 135
81-Dumber uses the Chromium Embedded Framework engine by default. On Arch, install the CEF runtime with:136+On Arch Linux, install the CEF runtime with:
82 137
83 ```bash138 ```bash
84 sudo pacman -S cef139 sudo pacman -S cef
@@ -86,7 +141,13 @@ sudo pacman -S cef
86 141
87 For hardware video decoding, `cef-vaapi` is also available from the AUR as an optional CEF build.142 For hardware video decoding, `cef-vaapi` is also available from the AUR as an optional CEF build.
88 143
89-CEF runtime precedence is deterministic: `CEF_DIR` wins first, then `engine.cef.cef_dir`, then `/usr/lib/cef`, then `~/.local/share/cef`.144+CEF runtime lookup order:
145+
146+1. `CEF_DIR`
147+2. `engine.cef.cef_dir`
148+3. `/usr/lib/cef`
149+4. `~/.local/share/cef`
150+
90 Set `engine.cef.cef_dir` in config when `CEF_DIR` is unset:151 Set `engine.cef.cef_dir` in config when `CEF_DIR` is unset:
91 152
92 ```toml153 ```toml
@@ -100,51 +161,58 @@ Or set the higher-precedence `CEF_DIR` environment variable:
100 CEF_DIR=/custom/path dumber browse161 CEF_DIR=/custom/path dumber browse
101 ```162 ```
102 163
103-WebKit remains available as a fallback:164+WebKit can be selected explicitly:
104 165
105 ```toml166 ```toml
106 [engine]167 [engine]
107 type = "webkit"168 type = "webkit"
108 ```169 ```
109 170
171+### Rendering notes
172+
110 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"`.173 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"`.
111 174
112-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.175+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.
113 176
114-## Keyboard-Driven177+## Platform notes
115 178
116-Four modal modes. Enter a mode, act, escape out. Vim and Zellij users already know this pattern.179+### Dependencies
117 180
118-| Mode | Key | Actions |181+**Arch Linux:**
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 182
125-## Floating Pane183+```bash
184+sudo pacman -S cef webkitgtk-6.0 gtk4 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugin-va
185+```
126 186
127-- `Alt+F` toggles the floating pane and preserves its state while hidden.187+**Debian/Ubuntu:**
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 188
132-See [Floating Pane Reference](https://dumber.bnema.dev/docs/reference/floating-pane) for setup and behavior details.189+```bash
190+sudo apt install libwebkitgtk-6.0-4 libgtk-4-1 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
191+```
133 192
134-## Development193+> Ubuntu 24.04 ships GLib 2.80, but Dumber requires GLib 2.84+. Use Arch, Fedora 41+, or the Flatpak.
135 194
136-Dumber uses pure-Go bindings (no CGO) but requires GTK4/WebKitGTK runtime libraries for the GUI.195+## Status
137 196
138-### Environment197+Dumber is usable for regular web browsing on Wayland compositors, with the main focus on panes, keyboard control, floating workflows, and desktop integration.
139 198
140-Set `ENV=dev` to use `.dev/dumber/` for config/data instead of XDG paths.199+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.
141 200
142-### Build From Source201+Bug reports and reproducible Wayland/backend issues are welcome.
202+
203+## Development
204+
205+Dumber uses pure-Go bindings and requires GTK4/WebKitGTK runtime libraries for the GUI.
206+
207+Set `ENV=dev` to use `.dev/dumber/` for config and data instead of XDG paths.
208+
209+### Build from source
143 210
144 **Prerequisites:**211 **Prerequisites:**
212+
145 - Go 1.25+213 - Go 1.25+
146-- Node.js 20+ (for frontend assets)214+- Node.js 20+ for frontend assets
147-- WebKitGTK 6.0 and GTK4 dev packages215+- WebKitGTK 6.0 and GTK4 development packages
148 216
149 ```bash217 ```bash
150 git clone https://github.com/bnema/dumber218 git clone https://github.com/bnema/dumber
@@ -153,12 +221,12 @@ make build
153 ./dist/dumber browse221 ./dist/dumber browse
154 ```222 ```
155 223
156-### Make Targets224+### Make targets
157 225
158 | Target | Description |226 | Target | Description |
159 |--------|-------------|227 |--------|-------------|
160-| `make build` | Build frontend + binary |228+| `make build` | Build frontend and binary |
161-| `make build-quick` | Build binary only (skip frontend) |229+| `make build-quick` | Build binary only, skipping frontend |
162 | `make dev` | Run with `go run` |230 | `make dev` | Run with `go run` |
163 | `make test` | Run tests |231 | `make test` | Run tests |
164 | `make lint` | Run golangci-lint |232 | `make lint` | Run golangci-lint |
@@ -166,9 +234,9 @@ make build
166 234
167 ## Contributing235 ## Contributing
168 236
169-We welcome bug fixes, performance/stability improvements, and WebUI/UX enhancements. We're not accepting new feature PRs.237+Dumber is currently focused on stability, performance, browser-engine behavior, and core UI/UX polish.
170 238
171-**All PRs must target the `next` branch.** We test there first before releasing to `main`.239+Bug fixes, documentation improvements, packaging fixes, and targeted UX improvements are welcome. Larger feature ideas should start as issues before PRs.
172 240
173 See [CONTRIBUTING.md](CONTRIBUTING.md) for details.241 See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
174 242

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close