A keyboard-first terminal workspace manager for macOS
Split panes. Tabbed surfaces. Sidebar status. Automation-ready.
kmux reimagines your terminal as a full workspace manager β not just a tabbed shell. Organize sessions into named workspaces, split panes freely, keep multiple surface tabs per pane, and let the smart sidebar track your context automatically.
|
Split your terminal horizontally or vertically with a single keystroke. Each pane can hold multiple surface tabs, so you can group related sessions (server, logs, tests) right next to each other without clutter. |
Create dedicated workspaces per project. Each workspace remembers its own layout, splits, and surfaces. Switch instantly with |
|
The smart sidebar shows each workspace's cwd, git branch, active ports, and an unread badge β all at a glance. Notifications, status pills, progress bars, and log feeds live here too. |
Drive everything programmatically via the built-in CLI and Unix socket API. Create workspaces, send keystrokes, set sidebar status, and trigger notifications β perfect for scripting and AI coding agents. |
| Feature | Description |
|---|---|
| Workspaces | Named, persistent workspaces with full layout restore on launch |
| Split Panes | Horizontal and vertical splits with directional keyboard navigation |
| Surface Tabs | Multiple tabs per pane β group related shells together |
| Smart Sidebar | Auto-detected cwd, git branch, port info, unread badges |
| Notifications | In-app notification center with attention indicators |
| Command Palette | Quick-access command palette (β β§ P) |
| Terminal Search | Find in terminal with β F, navigate matches with β G |
| Copy Mode | Vim-style copy mode for keyboard-only text selection |
| Session Restore | Full workspace + layout persistence across restarts |
| Automation Socket | JSON-RPC over Unix domain socket for external scripting |
| CLI | kmux CLI to manage workspaces, surfaces, and notifications |
| macOS Native | Proper title bar integration, native look and feel |
Apple Silicon (M1/M2/M3/M4) β download the
arm64build
Intel Mac β download thex64build
- Download the latest
.dmgfrom the Releases page - Open the
.dmgand drag kmux into yourApplicationsfolder - On first launch, macOS may ask you to confirm β click Open
# Clone
git clone https://github.com/kkd927/kmux.git
cd kmux
# Install dependencies
npm install
# Launch in development mode
npm run dev
# Or build the production .dmg
npm run package:macRequirements: Node.js 22+, npm 10+, macOS 13+
- Launch kmux β open the app or run
npm run dev - Create a workspace β press
β N - Split a pane β
β D(vertical) orβ β§ D(horizontal) - Add a surface tab β
β Tinside any pane - Toggle sidebar β
β Bto see workspace context and status - Search terminal β
β Fto find text in scrollback
| Shortcut | Action |
|---|---|
β N |
New workspace |
β ] |
Next workspace |
β [ |
Previous workspace |
β 1β9 |
Switch to workspace by number |
β β§ R |
Rename workspace |
β β§ W |
Close workspace |
β B |
Toggle sidebar |
| Shortcut | Action |
|---|---|
β D |
Split right (vertical) |
β β§ D |
Split down (horizontal) |
β₯ β β β β β |
Focus pane directionally |
β₯ β§ β β β β β |
Resize pane |
β₯ β K |
Close pane |
| Shortcut | Action |
|---|---|
β T |
New surface tab |
β Tab |
Next surface |
β β§ Tab |
Previous surface |
β 1β9 |
Switch to surface by number |
β W |
Close surface |
β β W |
Close other surfaces |
| Shortcut | Action |
|---|---|
β β§ P |
Command palette |
β F |
Search terminal |
β G / β β§ G |
Find next / previous |
β C |
Copy |
β V |
Paste |
β β§ M |
Copy mode |
β I |
Toggle notifications |
β , |
Toggle settings |
kmux exposes a JSON-RPC API over Unix domain socket and a companion CLI for scriptable workflows.
# Build the CLI
npm run build
# System
kmux system ping
kmux system capabilities
# Workspaces
kmux workspace list
kmux workspace create --name "my-project"
kmux workspace select --id <workspace-id>
kmux workspace current
# Surfaces
kmux surface split --direction right
kmux surface send-text --text "npm run dev\n"
kmux surface send-key --key Enter
# Notifications
kmux notification create --title "Build complete" --body "All tests passed"
# Sidebar
kmux sidebar set-status --text "deploying..." --style warning
kmux sidebar set-progress --value 75
kmux sidebar log --message "Step 3/5 complete"Connect directly to the Unix domain socket for programmatic control:
KMUX_SOCKET_PATH=/tmp/kmux-<uid>.sock
The socket accepts JSON-RPC 2.0 messages. See the full API surface in the product spec.
apps/
desktop/
src/main/ # Electron main β state, persistence, socket API
src/preload/ # Typed IPC bridge
src/pty-host/ # node-pty + headless terminal runtime
src/renderer/ # xterm.js UI, split layout, sidebar
packages/
core/ # Domain state, reducers, layout transforms
proto/ # IPC and socket contracts
persistence/ # File-store persistence helpers and app paths
metadata/ # Git, ports, cwd detection
cli/ # kmux automation CLI
ui/ # Shared UI tokens and helpers
Key design decisions:
- The renderer never owns PTY sessions β all terminal lifetime is managed by
pty-host - Visible-only rendering β hidden surfaces don't keep DOM terminals mounted
- Single-writer state β all mutations flow through the main-process reducer
- Attach + snapshot β switching surfaces re-attaches with full scrollback, no re-creation
For the full architecture rationale, see the ADR.
Contributions are welcome! Please read the Contributing Guide before opening a PR.
# Development workflow
npm install # Install deps
npm run dev # Launch dev mode
npm run test # Run unit tests
npm run lint # Lint
npm run build # Full production build
npm run test:e2e # End-to-end testsSee docs/development.md for the full developer guide.
| π Product Spec | docs/product-spec.md |
| ποΈ Architecture ADR | docs/adr/0002-electron-xterm-mvp-architecture.md |
| π οΈ Development Guide | docs/development.md |
| π€ Contributing | CONTRIBUTING.md |
| π Code of Conduct | CODE_OF_CONDUCT.md |
| π Security Policy | SECURITY.md |
kmux is built with β€οΈ using Electron, xterm.js, and node-pty.
macOS only Β· Pre-release Β· Actively developed