A programmable, Niri-inspired desktop browser. The web engine is real Chromium (Helium/Chromium source is the planned backend); everything you see and touch is a Rust + GPUI shell driven by one Lua file.
- Pages are first-class surfaces on an infinite horizontal strip.
- Opening a page never resizes another page.
- Dynamic workspaces stacked vertically, niri style: one empty workspace
always waits at the bottom;
ctrl+u/ctrl+imove between them. - Resize a page like a niri column (presets, +/-10%, maximize) without
touching its neighbors;
ctrl+ozooms out to an overview of everything. - Pages can play audio; a note in the page bar shows it,
ctrl+mmutes. - Keyboard-first: prompt (
ctrl+k), palette (ctrl+p), no tab bar required. - The whole experience is
~/.config/strip-browser/browser.lua— hot reload on save. - Or configure it from the settings page (
ctrl+,): theme, behavior and keybindings, written back to that same file.
cargo run -p browser-ui --releaseRequires a Chromium-family browser on PATH (google-chrome, chromium,
chromium-browser). The engine spawns headless; the GPUI window is the
browser. Linux/Wayland first (niri-tested), X11 works via gpui's x11
backend.
| key | action |
|---|---|
ctrl+t / ctrl+shift+t |
new page / new page beside |
ctrl+w |
close page |
ctrl+h / ctrl+l |
focus left / right |
ctrl+shift+h / ctrl+shift+l |
move page left / right |
ctrl+n / ctrl+shift+n |
next / previous page |
alt+left / alt+right |
back / forward |
ctrl+r / ctrl+shift+r |
reload / reload bypassing cache |
ctrl+k |
prompt: URL, search, bookmark, or :command |
ctrl+d |
bookmark / unbookmark the page |
ctrl+p |
command palette |
ctrl+u / ctrl+i, ctrl+pagedown / ctrl+pageup |
focus workspace below / above |
ctrl+1..4 |
focus workspace n (counted from the top) |
ctrl+shift+u / ctrl+shift+i, ctrl+shift+pagedown / ctrl+shift+pageup |
move page to workspace below / above (focus follows) |
ctrl+shift+1..4 |
send page to workspace n (focus stays) |
ctrl+alt+r |
cycle page width presets (1/3, 1/2, 2/3) |
ctrl+alt+- / ctrl+alt+= |
page 10% narrower / wider |
ctrl+alt+f |
maximize page (toggle) |
ctrl+m |
mute / unmute page |
ctrl+o |
overview (see below) |
ctrl+, |
settings page (strip://settings) |
ctrl+shift+e |
reload browser.lua |
ctrl+q |
quit |
Overview: h j k l or the arrow keys move focus between pages and
workspaces, enter / escape / ctrl+o leave, a click focuses a page (or
workspace) and leaves, the wheel moves between workspaces.
All redefinable in browser.lua (keys = {} disables every default), or from the
settings page. A browser.lua written before ctrl+, existed has its own keys
table and needs { "ctrl+,", "settings.open" } added; :settings.open in the
prompt, the palette and the agent API work regardless.
- docs/ARCHITECTURE.md — data flow, crate map, reused vs new code, frame/input paths.
- docs/CONFIG.md — full
browser.luareference, including the settings page and the block it owns. - docs/AGENT_API.md — drive the browser over the control socket.
decisions.tsv— decision log with evidence.
GPL-3.0-or-later for this workspace's code. GPUI is Apache-2.0 (upstream notice in the crate). Chromium remains under its original licenses; no Chromium source is redistributed by this repository yet.