A spatial terminal multiplexer for macOS. Terminals live on an infinite canvas that you can pan, zoom, and arrange freely.
Built on Ghostty's terminal engine via libghostty.
- macOS 15 (Sequoia) or later
- Xcode 16 or later
- Zig (
brew install zig)
Ghostty is included as a git submodule and cloned automatically with --recurse-submodules.
git clone --recurse-submodules https://github.com/ceIia/finite.git
cd finite/Finite
make setup # builds GhosttyKit, copies headers and resources
make build # debug build
make release # release build, installs to /Applicationsmake setup builds the GhosttyKit framework from the bundled Ghostty source, caches it by commit SHA, symlinks it into the Xcode project, and copies terminfo and shell-integration resources.
The canvas is infinite. Pan with the trackpad or scroll wheel, zoom with pinch gestures. Double-click empty space to zoom to fit all terminals.
Scroll direction is detected automatically: horizontal scrolling pans the canvas, vertical scrolling goes to the terminal under the cursor. Hold Ctrl to force canvas panning.
| Action | Shortcut |
|---|---|
| New Terminal | Cmd+N |
| Duplicate Terminal | Cmd+Shift+D |
| Close Terminal | Cmd+W |
New terminals are placed automatically next to the focused terminal without overlapping. Duplicating copies the terminal's config and working directory.
| Action | How |
|---|---|
| Select | Click a terminal |
| Multi-select | Cmd+Click |
| Range select | Shift+Click in sidebar |
| Marquee select | Drag on empty canvas |
| Deselect all | Escape |
Selected terminals can be moved as a group, closed together, or tidied into a grid with Cmd+Opt+T.
Drag terminals by their title bar, or Opt+Drag from anywhere on the terminal. Resize from any edge or corner. Snap guides appear when edges align with other terminals. Hold Cmd to disable snapping. A cell size indicator shows during resize.
| Shortcut | Action |
|---|---|
Cmd+Opt+Arrow |
Move focus to nearest terminal in that direction |
Cmd+Opt+F |
Zoom to fit focused terminal |
Cmd+Opt+0 |
Zoom to fit all |
Toggle with Cmd+Opt+S. Lists all terminals with status indicators: focused (blue), selected (faded blue), activity (pulsing orange), running process (bolt icon). Hovering a row briefly pulses the terminal on the canvas.
Toggle with Cmd+Opt+M. Shows a thumbnail overview of all terminals and the current viewport in the bottom-right corner.
Window position, canvas transform, terminal layout, and working directories are saved on quit and restored on next launch. State is stored at ~/.config/finite/state.json.
| Shortcut | Action |
|---|---|
Cmd+N |
New Terminal |
Cmd+Shift+D |
Duplicate Terminal |
Cmd+W |
Close Terminal |
Cmd+Opt+S |
Toggle Sidebar |
Cmd+Opt+M |
Toggle Minimap |
Cmd+Opt+0 |
Zoom to Fit All |
Cmd+Opt+F |
Zoom to Fit Terminal |
Cmd+Opt+T |
Tidy Selection |
Cmd+Opt+Arrow |
Navigate |
Escape |
Deselect All |
Cmd+Click |
Toggle selection |
Opt+Drag |
Move terminal from anywhere |
Ctrl+Scroll |
Force canvas pan |
Cmd (while dragging) |
Disable snap guides |
See LICENSE.
