Workspace

Keybinds

Every default keybind in Verde, plus how to remap or disable each binding in verde.json.

Default keybinds

These are the defaults, read from packages/desktop/src/keybinds.zig. Override any of them under keybinds in your Verde config — see Remapping below.

App

Combo Action
Ctrl+Shift+P / Cmd+Shift+P Command palette
Ctrl+T / Cmd+T New chat thread
Ctrl+W / Cmd+W, Alt+X Close the focused pane
Ctrl+Shift+W / Cmd+Shift+W Close the current workspace (reopen from the command palette)
Ctrl+R / Cmd+R, Ctrl+Shift+R, F5 Refresh / reload app
Alt+O Open the default project
Ctrl+Shift+O Open in external editor
Combo Action
Ctrl+S / Cmd+S Toggle the sidebar (visible ↔ icon)
Ctrl+Shift+S Toggle the sidebar's hidden mode
Ctrl+B Toggle the embedded browser pane
Tab Inside a chat pane, focus the prompt box
Alt+1 … Alt+9, Alt+0 Jump between workspaces by sidebar order
Alt+↑ / Alt+↓ Cycle to the previous / next workspace

Focus (vim-style)

Combo Action
Ctrl+H Focus the pane to the left
Ctrl+L Focus the pane to the right
Ctrl+K Focus the pane above
Ctrl+J Focus the pane below

Alt+arrow combos are no longer focus aliases — Alt+↑ / Alt+↓ now cycle between workspaces (see the sidebar table above).

Swap (rearrange the tiling)

Combo Action
Ctrl+Shift+H Swap focused pane with the left one
Ctrl+Shift+L Swap focused pane with the right one
Ctrl+Shift+K Swap focused pane with the one above
Ctrl+Shift+J Swap focused pane with the one below

Resize (grow)

Combo Action
Alt+Shift+← Grow the focused pane left
Alt+Shift+→ Grow the focused pane right
Alt+Shift+↑ Grow the focused pane up
Alt+Shift+↓ Grow the focused pane down

Zoom

Combo Action
Alt+Z Zoom the focused pane to fill the workspace; toggle again to restore

Workspace splits

Combo Action
Ctrl+Shift+T / Cmd+Shift+T Split a terminal pane next to the focus

Vertical / horizontal chat splits, terminal-vertical splits, and minimize have no default keybind. Use the pane header buttons: C| / C- for chat vertical / horizontal, T| / T- for terminal vertical / horizontal, and the minimize button. You can bind these actions yourself — see the table of binding keys below.

Terminal (inside a focused terminal pane)

Combo Action
Ctrl+Alt+T / Cmd+Alt+T New terminal tab
Ctrl+Shift+R / Cmd+Shift+R Rename the active terminal tab
Ctrl+Shift+PageUp Previous terminal tab
Ctrl+Shift+PageDown Next terminal tab
Ctrl+Alt+↑ / Cmd+Alt+↑ Focus the terminal split above
Ctrl+Alt+↓ / Cmd+Alt+↓ Focus the terminal split below
Ctrl+Alt+← / Cmd+Alt+← Focus the terminal split left
Ctrl+Alt+→ / Cmd+Alt+→ Focus the terminal split right
Ctrl+- / Ctrl+= Per-terminal zoom out / in

Chat transcript scrolling

Combo Action
Scroll up one line
Scroll down one line
PageUp Scroll up one page
PageDown Scroll down one page

Transcript scrolling is direct — no inertia or velocity decay. When input stops, the view stops. Do not expect a multi-frame glide.

Remapping

Override any binding under keybinds in your verde.json. On Unix it is under $XDG_CONFIG_HOME/verde or ~/.config/verde; on Windows it is under %APPDATA%\Verde. Use a string for one shortcut, or a string array for multiple shortcuts on the same action:

json
{
  "keybinds": {
    "new_thread": "CommandOrControl+T",
    "browser": "Ctrl+B",
    "workspace": {
      "close_current": "CommandOrControl+Shift+W",
      "focus_up": "Ctrl+K",
      "focus_down": "Ctrl+J",
      "focus_left": "Ctrl+H",
      "focus_right": "Ctrl+L",
      "previous": "Alt+Up",
      "next": "Alt+Down",
      "move_left": "Ctrl+Shift+H",
      "move_right": "Ctrl+Shift+L",
      "move_up": "Ctrl+Shift+K",
      "move_down": "Ctrl+Shift+J",
      "toggle_maximize": "Alt+Z",
      "close": ["CommandOrControl+W", "Alt+X"],
      "select": ["Alt+1", "Alt+2", "Alt+3", "Alt+4", "Alt+5", "Alt+6", "Alt+7", "Alt+8", "Alt+9", "Alt+0"]
    },
    "terminal": {
      "new_tab": "CommandOrControl+Alt+T",
      "close": "CommandOrControl+Shift+W",
      "rename_tab": "CommandOrControl+Shift+R",
      "tab_previous": "CommandOrControl+Shift+PageUp",
      "tab_next": "CommandOrControl+Shift+PageDown",
      "focus_up": "CommandOrControl+Alt+Up",
      "focus_down": "CommandOrControl+Alt+Down",
      "focus_left": "CommandOrControl+Alt+Left",
      "focus_right": "CommandOrControl+Alt+Right"
    }
  }
}

Disabling a binding

Set the binding to null, an empty string, or an empty array to disable it:

json
{
  "keybinds": {
    "terminal": {
      "toggle": null,
      "split_up": null,
      "split_down": null,
      "split_left": null,
      "split_right": null
    }
  }
}

Binding keys reference

The keybinds config uses the same accelerator grammar as the desktop defaults. The top-level keys group actions by surface; the inner values are one shortcut or an array of shortcuts.

Group Keys (subset)
top refresh, open_default, open_editor, new_thread, command_palette, toggle_sidebar, toggle_sidebar_hidden, toggle_browser, toggle_terminal
chat chat_up, chat_down, chat_page_up, chat_page_down
workspace split_chat_vertical, split_chat_horizontal, split_terminal_vertical, split_terminal_horizontal, toggle_maximize, minimize, close, close_current, focus_left, focus_right, focus_up, focus_down, focus_prompt, move_*, grow_*, select, previous, next
terminal new_tab, close, rename_tab, tab_previous, tab_next, split_up, split_down, split_left, split_right, focus_up, focus_down, focus_left, focus_right

Keybinds are loaded on startup and on app refresh. See Configuration & state for the full verde.json schema and where state lives.

Edit this page on GitHub →