your hosts, everywhere.
our servers, nowhere.

A native SSH terminal manager for macOS, iPhone, and iPad. Hosts, credential identities, settings, and snippets sync over iCloud — credential secrets end-to-end encrypted. There is no account to create and no backend to run.

Requires macOS 14.0 or laterDeveloper ID signed, notarized, stapledMIT licensed
macOS/iPadOS/iOS
9:41Wi-Fi100%
prod-web-01⌘1
db-primary⌘2
bastion⌘3
zinger@prod-web-01 ~ % uptime
11:04 up 42 days, 3:17, 2 users, load average: 0.21 0.18 0.09
zinger@prod-web-01 ~ % systemctl is-active caterm-edge
active
zinger@prod-web-01 ~ % echo $TERM
xterm-ghostty
zinger@prod-web-01 ~ %
Pane 2 — db-primary
zinger@db-primary ~ % tail -f /var/log/pg.log
14:02:11 INFO checkpoint complete 12ms
14:02:11 INFO autovacuum: analyze 9ms
14:02:12 WARN replica lag 1.4s
14:02:14 INFO replica lag 0.2s
ProxyJump you → bastion → prod-web-01·ControlMaster active·iCloud synced 2s agoSFTP queue 0
HostsTerminalFilesSettings
What it does

Productivity, without a control plane

Caterm is SSH-first and individual-first. Everything below runs on your Mac, your iPhone, your iPad — and Apple's private CloudKit database in between.

Workspace — release-check
prod-web-01 · focused
$ tail -f app.log
INFO deploy 2.0.2 ok
prod-web-02
$ tail -f app.log
INFO deploy 2.0.2 ok
db-primary
$ psql -c 'select 1'
db-replica · reconnecting
Broadcast reviewsystemctl restart edge
3 recipients frozen · db-replica excluded (reconnecting)
Security model

Caterm syncs SSH credentials, so the encryption is deliberate

End-to-end encrypted credentials

Every credential field is sealed with AES-256-GCM, authenticated with associated data binding it to its host, field, and revision, before it leaves the device.

The master key lives only in your iCloud Keychain

A 256-bit symmetric key stored as a synchronizable Keychain item, so it propagates between your authorized devices through Apple's end-to-end-encrypted iCloud Keychain. Apple cannot read it.

Different data, different paths

Sealed credential blobs ride on CloudKit Host records; the master key rides iCloud Keychain. CloudKit sees only ciphertext and never holds the key to it.

Trust decisions stay on the device

Caterm syncs connection metadata, not host-key authorization. Each Mac, iPhone, and iPad verifies a server independently. Secure Enclave identities are device-bound and never exported.

There is no Caterm server and no Caterm account — nothing to breach on our side, because there is no our side.

Deliberate boundaries

What Caterm does not do

These are decisions, not gaps. Knowing them up front is worth more than a longer feature list.

No resumable remote sessions
Workspace templates describe fresh sessions, never a live PTY, socket, remote process, working directory, or terminal output. Use tmux or screen when the remote process must survive a disconnect.
No always-on iOS background work
iOS may suspend Caterm shortly after it backgrounds. Cached data stays available; terminals, tunnels, and transfers are not advertised as background services, and unfinished transfers cancel safely.
No shared trust between devices
An iCloud-synced Host does not carry another device's host-key decision. Each device performs its own verification.
SSH only
Telnet, Serial, Mosh, RDP, VNC, SCP, cloud-provider inventory, AI command generation, raw-keystroke broadcast, synchronized terminal output, and team collaboration are outside the current individual-user product.
No unverified claims
The Termius parity matrix records the evidence and disposition for every compared capability. Packaged releases may lag the feature inventory on main.
Open source

Build it yourself

A Swift Package Manager project split into focused modules — terminal engine, SSH command builder, session store, sync clients, SFTP, and the SwiftUI app targets. There is no backend service to stand up, because there isn't one.

Prerequisites: macOS 14.0+ with Xcode command-line tools (Swift 5.10+) and Homebrew zig@0.15 to build libghostty. See the signing notes for local development pitfalls.

zsh — ~/code/Caterm
$ git clone https://github.com/ZingerLittleBee/Caterm.git
$ cd Caterm

# init the Ghostty submodule, build GhosttyKit.xcframework
$ make ghostty-kit

# build + codesign + wrap in Caterm.app + launch
$ make run-app

# build the iOS app, boot the simulator, install, launch
$ make run-ios

$ make test      # swift test
$ make doctor    # toolchain / signing diagnostics
$ make help      # list all targets
Download

Start with your own machines

Open the DMG, drag Caterm to Applications, add your first Host. No sign-up screen stands between those three steps.

Caterm 2.0.2 for macOS.dmg

Prefer to compile it? Build from sourcemake run-app for the Mac, make run-ios for the simulator.

Version
2.0.2
Requires
macOS 14.0 or later
Signing
Developer ID · notarized · stapled
Updates
Sparkle, from 2.0.0 onward
iPhone & iPad
iOS 17.0+, built from source
License
MIT