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.
Download the latest DMG from Releases, open it, and drag Finite to Applications.
Requires macOS 15 (Sequoia) or later.
- 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.
