Horizon is a GPU-accelerated terminal board that puts all your sessions
on an infinite canvas. Organize, pan, zoom, and never lose a terminal again.
Tabbed terminals hide your work. Tiled terminals box you in. Horizon gives you a canvas — an infinite 2D surface where every terminal lives as a panel you can place, resize, and group however you want.
Think of it as a whiteboard for your terminal sessions. Keep your frontend, backend, logs, and AI agents all visible at once — across multiple color-coded workspaces — and navigate between them with a minimap.
|
Pan and zoom freely across a boundless workspace surface. Place terminals anywhere. A minimap in the corner keeps you oriented — click it to jump. |
Group related panels into color-coded workspaces. Auto-arrange with five layout modes — rows, columns, grid, stack, cascade — or drag panels freely. |
|
24-bit color, mouse reporting, scrollback, alt-screen, and Kitty keyboard protocol. Powered by the Alacritty terminal engine — the same one behind the fastest terminal on the planet. |
First-class Claude Code and Codex integration. Sessions persist and auto-resume. A live usage dashboard tracks token spend across agents. |
|
A built-in git status panel watches your repo in the background. See changed files, inline diffs, and hunk-level detail — no context switching. |
Ctrl+click a URL to open it. Hover a file path and click to jump to it. Horizon sees what your terminal prints and makes it interactive. |
|
Ctrl+Shift+H opens a fast overlay that discovers hosts from SSH config and Tailscale. Search, filter, and connect instantly. Type user@filter to override the SSH user. Connected sessions are grouped into a Remote Sessions grid workspace. |
Open the config with Ctrl+Shift+, — a side panel with YAML syntax highlighting and live preview. Every change applies instantly to the canvas behind it. |
|
Close Horizon, come back tomorrow. Your workspaces, panel positions, scroll positions, and terminal history are restored exactly as you left them. |
Drop a |
Grab the latest binary from Releases — no dependencies needed.
| Platform | Asset | |
|---|---|---|
| Linux x64 | horizon-linux-x64.tar.gz |
Extract, chmod +x, run |
| macOS arm64 | horizon-osx-arm64.tar.gz |
Extract, chmod +x, run |
| macOS x64 | horizon-osx-x64.tar.gz |
Extract, chmod +x, run |
| Windows x64 | horizon-windows-x64.exe |
Download and run |
git clone https://github.com/peters/horizon.git
cd horizon
git lfs install
git lfs pull
cargo run --releaseRequires Git LFS for bundled assets and Rust 1.88+. Linux needs system headers for GPU rendering — see AGENTS.md for per-distro install commands.
All app shortcuts use Ctrl+Shift to avoid conflicts with shell programs (Ctrl+C, Ctrl+K, Ctrl+B, etc.) and OS-level bindings. They are configurable through the shortcuts: block in your config file and editable from the built-in settings panel.
Duplicate or overlapping bindings are rejected, including near-conflicts such as Ctrl+B and Ctrl+Shift+B.
| Shortcut | What it does |
|---|---|
| Ctrl+Shift+K | Quick-navigate to any workspace |
| Ctrl+Shift+N | New terminal panel |
| Ctrl+Shift+H | Open Remote Hosts overlay |
| Ctrl+Shift+B | Toggle sidebar |
| Ctrl+Shift+U | Toggle HUD |
| Ctrl+Shift+M | Toggle minimap |
| Ctrl+Shift+A | Align visible attached workspaces into a horizontal row |
| Ctrl+Shift+, | Open settings editor |
| Ctrl+Shift+0 | Reset canvas view |
| Ctrl+Shift+Plus | Zoom canvas in |
| Ctrl+Shift+Minus | Zoom canvas out |
| F11 | Fullscreen the active panel |
| Escape | Exit active panel fullscreen |
| Ctrl+Shift+F11 | Toggle window fullscreen |
| Ctrl+Shift+S | Save the active Markdown editor |
| Interaction | What it does |
|---|---|
| Ctrl+Scroll | Zoom around the cursor |
| Ctrl+Click | Open URL or file path under cursor |
| Ctrl+double-click canvas | Create a new workspace |
| Ctrl+double-click inside a workspace | Add a new terminal |
On macOS, substitute Cmd for Ctrl.
The settings editor writes back to the same config file Horizon loaded. By default that is ~/.horizon/config.yaml, and config.yml is also supported when discovered or passed explicitly. You can define workspaces, panel presets, feature flags, and keyboard shortcuts:
shortcuts:
command_palette: Ctrl+Shift+K
new_terminal: Ctrl+Shift+N
open_remote_hosts: Ctrl+Shift+H
toggle_sidebar: Ctrl+Shift+B
toggle_hud: Ctrl+Shift+U
toggle_minimap: Ctrl+Shift+M
align_workspaces_horizontally: Ctrl+Shift+A
toggle_settings: Ctrl+Shift+Comma
reset_view: Ctrl+Shift+0
zoom_in: Ctrl+Shift+Plus
zoom_out: Ctrl+Shift+Minus
fullscreen_panel: F11
exit_fullscreen_panel: Escape
fullscreen_window: Ctrl+Shift+F11
save_editor: Ctrl+Shift+S
workspaces:
- name: Backend
cwd: ~/projects/api
panels:
- kind: shell
- kind: claude
- kind: git_changes
- name: Frontend
cwd: ~/projects/web
panels:
- kind: shell
- kind: shell
presets:
- name: Shell
alias: sh
kind: shell
- name: Claude Code
alias: cc
kind: claude
- name: Git Changes
alias: gc
kind: git_changes
# Optional: disable the default attention feed
features:
attention_feed: falseUse key names like Plus, Minus, Comma, Escape, and F11 in YAML instead of punctuation-only shortcut components such as Ctrl++.
| Rust | Edition 2024, safe and fast |
| eframe / egui | Immediate-mode UI framework |
| wgpu | GPU rendering — Vulkan, Metal, DX12, OpenGL |
| alacritty_terminal | Battle-tested terminal emulation |
| Catppuccin Mocha | Dark color palette |
See AGENTS.md for development setup, architecture, coding standards, and CI requirements. Release instructions live in docs/release-flow.md. Manual smoke-test plans live under docs/testing, including the workspace close smoke test.
cargo fmt --all -- --check
cargo test --workspace
cargo clippy --all-targets --all-features -- -D warningsMIT License
