cmux Cheatsheet
Keybinds
Use this cmux reference while you build software engineering projects, review code, or refresh the syntax you reach for most.
Two keymaps, not one
cmux splits shortcut ownership cleanly, and knowing which side owns a key saves a lot of hunting.
| Layer | Owns | Configure in |
|---|---|---|
| Ghostty | terminal keybindings, copy and paste inside the terminal, scrollback | ~/.config/ghostty/config |
| cmux | workspaces, panes, surfaces, sidebar, browser, notifications | Settings > Keyboard Shortcuts or cmux.json |
cmux shortcuts # open Settings at Keyboard Shortcuts
cmux settings shortcutsHolding ⌘ or ⌃ shows hint chips over the UI, controlled by
shortcuts.showModifierHoldHints.
App and window
| Shortcut | Action |
|---|---|
⌘, | Settings |
⌘⇧, | Reload configuration |
⌘⇧P | Command palette |
⌘P | Go to workspace, the switcher |
⌥⌘F | Global search |
⌃⌥⌘. | Show or hide all cmux windows, system wide |
⌘⇧N | New window |
⌃⌘W | Close window |
⌃⌘F | Toggle full screen |
⌘O | Open folder |
⌘⇧O | Reopen previous session |
⌘Q | Quit |
Workspaces
| Shortcut | Action |
|---|---|
⌘N | New workspace |
⌥⌘N | New browser workspace |
⌘1–⌘8 | Jump to workspace 1–8 |
⌘9 | Jump to last workspace |
⌃⌘] / ⌃⌘[ | Next / previous workspace |
⌃⌥⌘[ / ⌃⌥⌘] | Move workspace up / down |
⌘⇧W | Close workspace |
⌘⇧R | Rename workspace |
⌥⌘E | Edit workspace description |
⌃⌘S | Save the layout as a template |
⌘B | Toggle sidebar |
⌥⌘B | Toggle right sidebar |
⌘⇧E | Toggle right sidebar focus |
Surfaces and splits
| Shortcut | Action |
|---|---|
⌘T | New surface |
⌘⇧] / ⌘⇧[ | Next / previous surface |
⌃Tab / ⌃⇧Tab | Next / previous surface |
⌃1–⌃8 | Jump to surface 1–8 |
⌃9 | Jump to last surface |
⌘W | Close surface |
⌘⇧T | Reopen last closed |
⌘D | Split right |
⌘⇧D | Split down |
⌥⌘←→↑↓ | Focus pane directionally |
⌃⇧H ⌃⇧J ⌃⇧K ⌃⇧L | Resize pane left, down, up, right |
⌘⇧↩ | Toggle split zoom |
⌘⇧H | Flash the focused panel |
Focus previous and next pane exist as actions but ship unbound. A Ghostty
goto_split:previous keybind also cycles panes.
Browser, find, notifications, terminal
| Shortcut | Action |
|---|---|
⌘⇧L | Open a browser in a split |
⌘L | Focus the address bar |
⌘[ / ⌘] | Back / forward, browser history or focus history |
⌘R | Reload page |
⌥⌘I / ⌥⌘C | Developer tools / JavaScript console |
⌘F | Find |
⌘⇧F | Find in directory |
⌘G / ⌥⌘G | Find next / previous |
⌥⌘⇧F | Hide the find bar |
⌘E | Use selection for find |
⌘I | Notifications panel |
⌘⇧U | Jump to latest unread |
⌥⌘U | Toggle unread on the current item |
⌃⌘U | Mark as oldest unread and jump to the next |
⌘K | Clear scrollback |
⌘⇧K | Clear screen, keep scrollback |
⌘⇧M | Toggle terminal copy mode |
⌘C / ⌘V | Copy with a selection / paste |
⌘+ / ⌘- / ⌘0 | Font size up, down, reset |
Mark all notifications read and clear all notifications are actions with no default binding. Browser devtools shortcuts follow Safari defaults.
Rebinding in cmux.json
shortcuts.bindings is keyed by cmux action id. A string is a single stroke, a
two-element array is a chord, and several spellings unbind.
{
"shortcuts": {
"showModifierHoldHints": true,
"bindings": {
"splitRight": "cmd+shift+e",
"splitDown": "ctrl+shift+o",
"toggleSidebar": ["ctrl+b", "s"],
"commandPalettePrevious": "none",
"globalSearch": null
}
}
}- Modifiers: cmd, command, shift, opt, option, alt, ctrl, control,
ctl, or the glyphs ⌘ ⇧ ⌥ ⌃, joined with +.
- The first stroke must include a modifier, except for Space.
- Keys accept letters, digits, punctuation, f1–f20, arrows by name or glyph,
tab, return, enter, space, and media keys.
- Unbind with null, "", none, clear, unbound, or disabled.
- A chord is at most two strokes, for example ["ctrl+b", "c"].
Action ids come from the schema, which is worth fetching for completion in an editor:
curl -fsSL https://raw.githubusercontent.com/manaflow-ai/cmux/main/web/data/cmux.schema.json \ -o ~/.config/cmux/cmux.schema.json
Scoping a binding with when
shortcuts.when takes VS Code style predicates keyed by the same action ids, so one
key can behave differently depending on focus.
{
"shortcuts": {
"when": {
"selectWorkspaceByNumber": "!sidebarFocus",
"selectSurfaceByNumber": "sidebarMode == 'find' && paneCount > 1"
}
}
}Boolean context keys: sidebarFocus, browserFocus, markdownFocus,
filePreviewTextEditorFocus, simulatorFocus, terminalFocus,
commandPaletteVisible, terminalFindVisible, workspaceCanvasLayout. Typed keys:
the string sidebarMode (files, find, sessions, feed, dock) and the
integers paneCount and workspaceCount. Operators are ==, !=, =~, <,
<=, >, >=, and in [a, b], combined with !, &&, ||, and parentheses. An
unknown or absent key reads as false, and the shortcut only fires, and only conflicts
with other shortcuts, while the clause holds.
Run cmux reload-config after editing, no restart needed.