Skip to main content
cmux supports flexible split pane layouts within each workspace, allowing you to view multiple terminals and browsers side by side.

Creating splits

Terminal splits

Split the current terminal pane:
ShortcutDirection
DSplit right (vertical divider)
DSplit down (horizontal divider)
Or use the split buttons in the terminal UI:
  • Click the ”+” button and select split direction
  • Right-click the terminal tab bar for split options

Browser splits

Create a browser in a split pane:
ShortcutDirection
DSplit browser right
DSplit browser down
This is useful for viewing your dev server alongside the terminal running the build.
Browser splits inherit the Ghostty terminal background color and opacity for a unified appearance.
Move focus between split panes using directional shortcuts:
ShortcutDirection
Focus pane left
Focus pane right
Focus pane up
Focus pane down
Pane focus is directional and wraps around edges. If you’re in the rightmost pane and press , focus moves to the leftmost pane.

Pane zoom

Temporarily maximize a pane to full screen:
  • Press to toggle zoom
  • The zoomed pane fills the entire workspace
  • Press the shortcut again to restore the split layout
Pane zoom is useful when you need to focus on a single terminal or browser without closing other panes.

Flash focused panel

If you lose track of which pane has focus in a complex split layout:
  • Press H to flash the focused panel
  • The active pane briefly highlights so you can see where focus is

Divider manipulation

Adjust split pane sizes by dragging the divider between panes:
  1. Hover over the divider between two panes
  2. Click and drag to resize
  3. Release to set the new size
Divider positions are saved in session state and restored on app relaunch.

Closing panes

Close a split pane:
  • Press W to close the active surface
  • Click the close button (×) on the tab
  • Use the CLI: cmux close-surface
When you close a pane:
  • The adjacent pane expands to fill the space
  • If only one pane remains, it fills the entire workspace
  • The last pane in a workspace cannot be closed (cmux creates a new terminal automatically)
cmux does not allow closing the last pane in a workspace. If you close all surfaces, a new terminal is created automatically to keep the workspace alive.

Split layouts

cmux supports arbitrarily nested splits:
┌─────────────┬──────────┐
│             │          │
│   Terminal  │ Browser  │
│             │          │
├─────────────┴──────────┤
│                        │
│   Terminal (full width)│
│                        │
└────────────────────────┘
Create complex layouts by:
  1. Starting with a single pane
  2. Splitting horizontally or vertically
  3. Splitting the new panes again as needed
Each pane can contain multiple surfaces (tabs), so you can have horizontal tabs within each split section.

Tabs within panes

Each split pane can contain multiple surfaces as tabs:
  • Press T to create a new tab in the active pane
  • Drag tabs between panes to reorganize
  • Click tabs to switch between surfaces in the same pane
This gives you flexibility to organize related tasks together while keeping unrelated tasks in separate panes.

Font size and zoom

Terminal font size is inherited when you create splits:
  • Zoom in/out with + / -
  • Reset with 0
  • New splits inherit the current terminal’s font size
This ensures consistent text size across related panes even if you zoom the parent terminal before splitting.

CLI for split management

Create splits programmatically via the socket API:
# Split the active pane right
cmux new-split right

# Split down
cmux new-split down

# Create a browser pane
cmux new-pane --type browser --direction right
This is useful for scripting workspace layouts:
#!/bin/bash
# Set up a full-stack dev workspace
cmux new-workspace
cmux new-pane --type browser --direction right
cmux send "npm run dev\n"

Drag and drop

Reorganize panes by dragging tabs:
  • Drag a tab to another pane to move it
  • Drag a tab to the edge of a pane to create a new split
  • Drag a tab out of the window to detach it to a new window (if enabled)
Tab drag-and-drop uses custom UTTypes declared in Info.plist for internal transfers. External drops are not supported.