Why Horizon?
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 with a structured workflow on top. Start with color-coded workspaces, launch preset panels, jump with Quick Nav, and fit the active workspace whenever you want a clean overview.
Highlights
Infinite Canvas
Pan and zoom freely across a boundless workspace surface. Place terminals anywhere. A minimap in the corner keeps you oriented — click it to jump.
Workspaces
Group related panels into color-coded workspaces. Auto-arrange with three layout modes — rows, columns, grid — or drag panels freely.
Full Terminal Emulation
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.
AI Agent Panels
First-class Claude Code, Codex, OpenCode, Gemini CLI, and KiloCode integration. Session persistence and resume work where the underlying agent CLI supports it. A live usage dashboard tracks token spend across agents.
Git Integration
A built-in git status panel watches your repo in the background. See changed files, inline diffs, and hunk-level detail — no context switching.
Smart Detection
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.
Remote Hosts
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.
Live Settings Editor
Open the config with Ctrl+Shift+, — a side panel with YAML syntax highlighting and live preview. Toggle between light and dark themes or follow the system; every change applies instantly to the canvas behind it.
Session Persistence
Close Horizon, come back tomorrow. By default, your sessions, panel layouts, scroll positions, and terminal history are restored exactly as you left them. An opt-in setting can organize attached workspaces into a horizontal row after restore.
Markdown Editor
Drop a .md file onto the canvas or create one from the command palette. Split view with syntax highlighting and live preview, saved with Ctrl+Shift+S.
Install
Download (fastest)
Grab the latest release from Releases — no dependencies needed.
Platform Raw binary Surge installer
Linux x64
horizon-linux-x64.tar.gz
horizon-installer-linux-x64.bin
Extract and run, or use the installer for managed stable updates
macOS arm64
horizon-osx-arm64.tar.gz
horizon-installer-osx-arm64.bin
Extract and run, or use the installer for managed stable updates
macOS x64
horizon-osx-x64.tar.gz
horizon-installer-osx-x64.bin
Extract and run, or use the installer for managed stable updates
Windows x64
horizon-windows-x64.exe
horizon-installer-win-x64.exe
Run the raw binary directly, or use the installer for managed stable updates
Homebrew and other package-manager installs keep using the package manager's own upgrade flow. Horizon only offers the in-app update prompt for installs created by the Surge installer.
Homebrew
Stable releases are available through the peters/horizon tap on macOS and Linux x64:
brew install peters/horizon/horizon
If you prefer to add the tap explicitly first:
brew tap peters/horizon
brew install horizon
To update or remove it later:
brew upgrade horizon
brew uninstall horizon
brew untap peters/horizon
WinGet
Stable releases are submitted to the official Windows Package Manager catalog. After a release's manifest PR is approved, install, upgrade, or remove Horizon with:
winget install Peters.Horizon
winget upgrade Peters.Horizon
winget uninstall Peters.Horizon
Snap
Stable releases are also published to the Snap Store on Linux x64 as a classic snap:
sudo snap install horizon-ui --classic
snap refresh horizon-ui
snap remove horizon-ui
Classic confinement is intentional. Horizon launches host shells and host tools such as ssh, git, xdg-open, pgrep, lsof, and optional tailscale helpers, so a strict sandbox would compromise core workflows.
Build from source
git clone https://github.com/peters/horizon.git
cd horizon
git lfs install
git lfs pull
cargo run --release
Requires Git LFS for bundled assets and Rust 1.95+. Linux needs system headers for GPU rendering — see AGENTS.md for per-distro install commands.
Quick Tour
Keyboard Shortcuts
Most app shortcuts use Ctrl+Shift to avoid conflicts with shell programs (Ctrl+C, Ctrl+K, Ctrl+B, etc.) and OS-level bindings. Canvas zoom keeps the standard Ctrl/Cmd+0, Ctrl/Cmd+Plus, and Ctrl/Cmd+Minus 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+W Focus the active workspace at the current zoom
Ctrl+Shift+9 Fit the active workspace into view
Ctrl+Shift+H Open Remote Hosts overlay
Ctrl+Shift+J Open the sessions picker
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+F Focus the terminal search bar
Ctrl+0 Reset canvas zoom to 100%
Ctrl+Plus Zoom canvas in
Ctrl+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
Ctrl+Shift+C Copy the current terminal selection
Ctrl+Shift+V Paste into the focused terminal
Ctrl+Shift+R Reconnect the focused disconnected SSH panel
Structured Workflow
If you do not want to start by dragging panels around the canvas, use Horizon like this:
-
Create a workspace from the toolbar or with Ctrl+double-click on the canvas.
-
Add a terminal from your first preset with Ctrl+Shift+N.
-
Jump between workspaces with Quick Nav using Ctrl+Shift+K.
-
Use Ctrl+Shift+W to refocus the current workspace or Ctrl+Shift+9 to fit it into view.
-
Use the workspace header controls for Rows, Cols, or Grid when you want a structured layout without leaving the canvas.
Mouse Actions
Interaction What it does
Middle-mouse drag Pan the canvas
Space + Left-click drag Pan the canvas
Minimap click-and-drag Jump to that area of the canvas
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. Copy and paste use the standard Cmd+C / Cmd+V bindings, and on Windows you can also use Ctrl+Insert / Shift+Insert. The SSH reconnect shortcut is contextual and is disabled if another global shortcut overlaps with Ctrl+Shift+R.
Configuration
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:
appearance:
theme: auto # auto, light, or dark
shortcuts:
command_palette: Ctrl+Shift+K
new_terminal: Ctrl+Shift+N
focus_active_works