An open-source, full-fledged terminal and SSH connection manager for macOS. Fast GPU-accelerated terminal, a built-in host vault, SFTP/SCP file manager, SSH key & tunnel manager, and end-to-end-encrypted settings sync — in one native app.
Website · Features · How it compares · Security & Privacy · Install · Build · FAQ · Contributing · Credits
Most terminals make you choose: a fast native terminal or a connection manager (like the commercial SSH clients). Sarv Terminal aims to be both — a single, native macOS app where your terminal, your saved servers, your SSH keys, your tunnels, and your file transfers all live together, with your whole setup optionally synced between machines under your own end-to-end encryption.
It is built for developers and operators who live in the terminal and manage more than one server.
Everything Ghostty gives you — fast GPU rendering, ligatures, true color, native macOS feel — plus the Sarv Terminal layer. Each section below shows the feature in action.
- Saved hosts with a full SSH profile: user, port, identity file, agent forwarding, compression, keep-alives, proxy jump, host-key policy, and a startup command.
- Groups & tags — organize servers into a workspace → project folder tree.
- Per-host themes — each server can open with its own color theme so you always know where you are.
- Guided connect popup with auto-reconnect on network drops / wake-from-sleep, and clean inline error handling.
- Import hosts from your existing
~/.ssh/config(followingIncludes), iTerm2, CSV, PuTTY, MobaXterm, or SecureCRT. - Command palette / quick-connect to jump to any host or action.
- See every key in
~/.sshwith its type, size, fingerprint, and comment. - Generate new keys (Ed25519 / ECDSA / RSA-4096) with an optional passphrase and comment.
- Copy the public key in one click (to paste into a server's
authorized_keysor GitHub), copy the path, reveal in Finder, or delete safely.
- Save Local (
-L), Remote (-R), and Dynamic / SOCKS (-D) tunnels. - Each tunnel runs over one of your saved hosts; start/stop with a live status indicator and inline error reporting (e.g. "port already in use").
- A library of your most-used commands; run them straight into the focused terminal or copy them.
- Shell History — browse your recent shell commands (zsh / bash / fish) in a side panel and save any of them as a snippet in one click.
- Browse and manage
~/.ssh/known_hosts. - A running activity log of connections and session events.
- Embedded tabs and splits in a single window, with focus mode, input broadcasting across panes, tab colors & renaming, an all-tabs overview, and reopen-closed-tab.
- When a command fails, a one-click banner offers to explain the failure and suggest a fix — the suggested fix pastes straight into your terminal.
- Bring your own key, your choice of provider: Claude, OpenAI, or a local model via Ollama (fully offline). Your key is stored encrypted on your Mac and never synced — nothing is sent anywhere except the provider you choose.
- An Attach panel lists your running Docker containers and Kubernetes pods.
- Click to open an interactive shell inside a container/pod — in a new tab or the current one —
without hand-typing
docker exec -it …/kubectl exec -it ….
- Connect to a device over a USB-serial adapter (console cables for routers/switches, Raspberry Pi, microcontrollers, etc.) right from the Hosts screen or the command palette.
- Pick a detected
/dev/cu.*device and a baud rate; opens a session in a terminal tab (8-N-1, via the built-inscreen). - A built-in "report an issue" helper opens a pre-filled GitHub issue — serial behavior is hardware-specific, so this makes it easy to tell us your adapter/chipset when something's off.
- Transfers run over both SFTP and SCP — SFTP for local ⇄ remote browsing/transfer, and SCP for direct server-to-server (server ⇄ server) transfers.
- Browse local ⇄ remote side by side and transfer between them.
- Direct server-to-server transfers — copy a file from one server straight to another (via SCP) without it passing through your Mac, with an automatic relay-through-this-Mac fallback when the two servers can't reach each other directly.
- Live transfer progress (file name, size, speed, %, bytes) with a Cancel button, and a clear Server → Server vs Via this Mac indicator.
- In-app file viewer & editor for remote and config files.
- Two-way permissions editor — set permissions with
rwxcheckboxes or an octal field, kept in sync live.
- Appearance: themes, background image with adjustable opacity & blur.
- Font, cursor, window, tabs, and shell-integration settings.
- Fully rebindable app keybinds that never clobber Ghostty's defaults.
Most terminals are either a fast terminal or a connection manager. Sarv Terminal is both —
built on the Ghostty engine, with a local-first SSH client layered on top. Other terminals can run
ssh, but the connection-manager layer that makes servers easy to live with isn't built in:
| Sarv Terminal | Ghostty | iTerm2 | Warp | Terminal.app | WezTerm | |
|---|---|---|---|---|---|---|
| Saved-host vault (groups, per-host SSH profile) | ✅ | ⬜ | 🟡 | ⬜ | 🟡 | 🟡 |
| SSH key manager | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
| SFTP/SCP dual-pane file manager | ✅ | ⬜ | 🟡 | ⬜ | ⬜ | ⬜ |
| Port-forward / tunnel manager (GUI) | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
| Import hosts & settings from other apps | ✅ | ⬜ | 🟡 | ⬜ | ⬜ | 🟡 |
| End-to-end-encrypted settings sync | ✅ | ⬜ | 🟡 | 🟡 | ⬜ | ⬜ |
| AI explain/fix for failed commands (bring-your-own-key, local option) | ✅ | ⬜ | ⬜ | 🟡 | ⬜ | ⬜ |
| One-click Docker / Kubernetes container attach | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
| GPU-accelerated rendering | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| Local-first · no account · no telemetry | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ |
✅ built-in · 🟡 partial (runs ssh, but no GUI to manage it) · ⬜ not offered.
See the full comparison →
Sarv Terminal is local-first. Your hosts, keys, snippets, and tunnel rules are stored on your
machine under ~/.config/sarvterminal/; nothing is sent anywhere unless you explicitly enable sync.
Move your entire setup between machines under encryption only you can open:
- AES-256-GCM encryption with a key derived via PBKDF2-HMAC-SHA256 from a master password.
- The master password is stored only in the macOS Keychain, unlocked with Touch ID, marked this-device-only so it can never leave your Mac (not even via iCloud Keychain) — it is never synced.
- Choose your own backend: a private GitHub repository (public repos are rejected) or a local / cloud folder (iCloud Drive, Dropbox, Google Drive — any synced directory).
- Syncs your terminal config, app settings, keybinds, and saved hosts. Blank/default values are never synced and never overwrite a populated value on pull, so sync can't silently wipe data.
- A small plaintext manifest carries only version + timestamp so status can be shown without decrypting anything. Encryption is one-way: if you forget the master password, the synced data is unrecoverable (this is surfaced clearly in the UI).
- SSH passwords are fed to
ssh/scpout-of-band viaSSH_ASKPASS— never typed on the TTY and never echoed into the terminal or shell history. - Pre-flight host-key verification (out-of-band
ssh-keyscan) so trust prompts are explicit and can't be hijacked by the password helper. - Sensitive material lives in the macOS Keychain with this-device-only accessibility.
Note: saved-host passwords are currently stored in the local
hosts.json. Prefer SSH keys, and see the roadmap — moving host passwords into the Keychain is a tracked follow-up where help is welcome.
Homebrew (recommended):
brew install --cask sarv/tap/sarv-terminalThis taps Sarv/homebrew-tap and installs the latest signed,
notarized build. Upgrade later with brew upgrade --cask sarv-terminal (the app also self-updates).
Direct download: grab the latest SarvTerminal-<version>.dmg from the
Releases page, open it, and drag the app to
Applications.
Prefer to build it yourself? See build from source.
Requirements: macOS, Zig (matching the version in
build.zig / HACKING.md), and Xcode (for the macOS app bundle).
git clone https://github.com/Sarv/SarvTerminal.git
cd SarvTerminal
# Build the macOS app bundle
zig build
# The app is produced at:
open zig-out/SarvTerminal.appFor deeper build details and the core engine internals, see HACKING.md.
- ✅ macOS app — actively developed; all features above work today.
- 🐧 Linux UI — the big open item. The terminal engine (from Ghostty) is cross-platform, but the Sarv Terminal experience (Vaults, SFTP, Keychain, Port Forwarding, Sync) is currently built in SwiftUI for macOS only. A Linux UI is not yet built, and this is where we'd love help most. If you know GTK/Qt (or have ideas for a shared cross-platform UI), please jump in — see Contributing.
- ✅ Signed & notarized releases on GitHub + Homebrew (
brew install --cask sarv/tap/sarv-terminal). - 🔜 Move saved-host passwords into the Keychain; more sync providers.
Everyone is welcome — let's make this a wonderful, full-fledged open-source terminal together. 🎉
Whether you're fixing a bug, polishing the UI, improving docs, or taking on a big feature, your help matters. A few especially valuable areas:
- 🐧 A Linux UI — the single biggest opportunity. If you're a GTK/Qt developer, we'd love your help.
- 🔒 Security hardening — moving host passwords into the Keychain, audits, threat-model review.
- 🚀 Releases & packaging — CI, signed/notarized builds, Homebrew.
- 📸 Docs & screenshots — including the gallery above (see
assets/screenshots/).
How to get started:
- Open an issue or discussion describing the bug or idea before large changes, so we can align.
- Fork, branch, and send a focused pull request. Keep commits small and logically grouped, using
Conventional Commit messages (
feat:,fix:,docs:…). - Build locally with
zig buildand make sure the app launches. - See HACKING.md for engine/build internals and CONTRIBUTING.md for general guidelines.
Be kind and constructive — we want this to be a friendly community.
Sarv Terminal is a fork of Ghostty by Mitchell Hashimoto and the Ghostty contributors. The blazing-fast, GPU-accelerated terminal engine at the heart of this app is entirely their work, and we are deeply grateful for it. Sarv Terminal layers a connection-manager workflow (hosts, SFTP, keys, tunnels, encrypted sync) on top of that engine. Huge thanks to the Ghostty team — please consider supporting the upstream project. See Credits & License.
Sarv Terminal stands on the shoulders of Ghostty. The
core terminal engine, rendering, and libghostty are the work of Mitchell Hashimoto and the
Ghostty contributors, and Sarv Terminal would not exist without them. 🙏
This project — both the inherited Ghostty code and the Sarv Terminal additions — is released under the MIT License.
Ghostty: Copyright (c) Mitchell Hashimoto, Ghostty contributors
Sarv Terminal: Copyright (c) Sarv Terminal contributors
If you find Sarv Terminal useful, please ⭐ the repo, contribute, and consider supporting upstream Ghostty as well.










