A native SSH client for macOS, written in Rust on GPUI.
Saved hosts, SFTP, splits and snippets, with passwords from your own password manager.
Website: https://tern.carrot-soft.tech
brew install --cask your-moon/tern/ternOr download the DMG from Releases. It is signed and notarised, so it opens without a warning.
tern does what Termius and Tabby do for a list of servers (saved hosts, ⌘K to any of them, SFTP, splits, snippets and port forwards), but as one small native process. One connected tab takes 76 MB where Tabby takes 580 MB (how I measured it).
Passwords come from your SSH key, from a password-manager command such as gopass show -o work/ssh/web-01, or from tern's age-encrypted vault. At a sudo prompt, ⌘\ types the password. It never types one on its own.
Hosts, snippets and settings sync to a private Git repository you own, encrypted on your Mac first. No account, no subscription.
- Connections: groups and tags, a one-time import from
~/.ssh/config, ProxyJump chains, local, remote and SOCKS forwards, agent forwarding, and two-factor logins. - Staying connected: automatic reconnect after a network drop, but never after you type
exit. A changed host key stops the connection and shows the exactssh-keygen -Rline to fix one you trust. - Terminal: tabs that reopen on launch, broadcast input to chosen tabs, ⌘-click links (including OSC 8), session logging, and a status line with latency.
- Vault: passwords and SSH keys in an age-encrypted file that unlocks with a PIN or the Keychain and locks when you're idle. A password command that arrives through sync must be approved once on each Mac.
- Sync: runs on its own, merges per host when both Macs changed, and only asks about a real conflict.
Every shortcut can be rebound in Settings. The full list, with the Windows and Linux keys, is in docs/keyboard.md.
- Host keys are checked against
~/.ssh/known_hosts. A changed key refuses the connection. - Secrets live in the vault (age, scrypt) or in your password manager. They are never written to logs, and never typed into the terminal unless you press ⌘\.
- Sync data is encrypted before it leaves your Mac. The repository sees
.agefiles and a plaintern-meta.json(hash and time, nothing else). - Losing a Mac doesn't lose your setup: see docs/recovery.md. Report vulnerabilities privately, as described in SECURITY.md.
Windows and Linux builds are on the Releases page as a preview: they pass CI but haven't been run on a real desktop yet, so reports are welcome. To build tern yourself on any platform, see docs/building.md. To contribute, start with CONTRIBUTING.md.
tern is young (0.1.3), and I use it every day. If it's missing the one thing that keeps you on Termius, or something breaks, open an issue. I read all of them. Small fixes are very welcome too: the issues labelled good first issue are a good place to start.
tern copies and adapts code from well-maintained projects rather than reinventing it, and each copied file names its origin (NOTICE.md): zeron's UI (MIT), russh (Apache-2.0), alacritty_terminal (Apache-2.0) and Zed's GPUI. Icons are Solar by 480 Design (CC BY 4.0), fonts are Geist (OFL), terminal themes come from iTerm2-Color-Schemes, and the wallpapers are from The Met Open Access (CC0).






