Skip to content

rescenedev/termina

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Termina icon

Termina

A native macOS SSH & SFTP manager with a Terminus-style UI — powered by libghostty.

platform swift engine license

Website · Download · Report an issue


Termina is a fast, native SSH/SFTP client: a dark sidebar of saved hosts, tabbed terminal sessions rendered by libghostty (Ghostty's GPU terminal core), a built-in remote file browser, persistent tmux sessions, and a live view of your SSH tunnels.

Install

brew install --cask rescenedev/tap/termina

Or grab the latest Termina.app from the Releases page.

Termina is ad-hoc signed (not notarized), so Gatekeeper may block the first launch. If macOS says the app can't be opened, clear the quarantine flag:

xattr -dr com.apple.quarantine "/Applications/Termina.app"

…or right-click the app in Finder and choose Open.

Features

  • libghostty terminal — each session renders with Ghostty's Metal-accelerated core (the same engine as the Ghostty app), with SwiftTerm as a fallback engine you can switch to (Terminal ▸ Engine).
  • Works with your real ssh — sessions run the system ssh, so everything you already have just works: rsa-sha2, ssh-agent, ProxyJump, and your full ~/.ssh/config. Password hosts prompt right in the terminal.
  • tmux auto-attach — sessions attach tmux new-session -A by default so your work survives disconnects (gracefully falls back to a login shell when tmux isn't installed). Per-host toggle.
  • SSH tunnels with health — per-connection -L/-R/-D port forwards, plus a live tunnels panel in the sidebar showing every forward (from → to) and whether its local port is actually LISTENing. Click a local forward to open it in the browser.
  • SFTP file browser — breadcrumb navigation, upload/download, new folder, rename, delete, hidden-file toggle.
  • Import from disk — pull hosts (and their LocalForward/RemoteForward rules) from ~/.ssh/config, plus /etc/hosts. Auto-syncs config tunnels on launch.
  • Connection management — grouped, searchable sidebar with accent tags; a management sheet with ⇧/⌘-click multi-select, bulk delete, and one-click duplicate removal. Secrets live in the macOS Keychain, never on disk.

Keyboard shortcuts

Shortcut Action
⌘N New connection
⌘T New session tab (current/selected host)
⌘W Close current tab
⌃Tab / ⌃⇧Tab Next / previous session
⌘= / ⌘- / ⌘0 Resize / reset terminal font (persists as the default)
⇧⌘I Import from ~/.ssh/config & /etc/hosts

Build from source

Requires macOS 15+ and a Swift 6 toolchain (Command Line Tools is enough for the app itself).

# Run
swift run

# Build a signed Termina.app bundle (with icon)
./Scripts/bundle.sh release
open dist/Termina.app

Building libghostty (Vendor/GhosttyKit.xcframework)

The terminal engine is a prebuilt GhosttyKit.xcframework that is not checked in (it's a large build artifact). To produce it you need full Xcode + the Metal Toolchain and Zig 0.15.2:

xcodebuild -downloadComponent MetalToolchain   # one-time
mise install zig@0.15.2                         # ghostty pins this exact version
./Scripts/build-libghostty.sh                   # builds & drops the xcframework into Vendor/

The script works around a Zig-0.15.2-vs-macOS-26-SDK linker issue by pointing Zig's SDK detection at the macOS 15 SDK (see comments in the script). If the xcframework is absent, the app still builds and runs — it simply uses the SwiftTerm engine.

Architecture

Sources/Termina/
├── App/        TerminaApp, AppModel, SessionTab
├── Models/     SSHConnection, AuthKind, PortForward
├── Store/      ConnectionStore (JSON), KeychainStore
├── SSH/        SSHTerminalSession, SFTPSession, SSHConfigImporter,
│               ListenPortScanner (tunnel health)
├── Terminal/   Ghostty/ (libghostty embedding), SwiftTerm backend,
│               TerminalBackend toggle
├── SFTP/       SFTPItem, SFTPBrowserView
├── UI/         Sidebar, TunnelsPanel, Editor, ManageConnections, …
└── Util/       Palette + soft rounded styling

The terminal backend is chosen at runtime behind a small seam, so libghostty and SwiftTerm are interchangeable.

Notes & limitations

  • Host keys are accepted on first use (StrictHostKeyChecking=accept-new); no known-hosts pinning yet.
  • The SFTP browser uses Citadel (pure-Swift SSH), which currently signs RSA keys with legacy ssh-rsa only — so SFTP may fail on RSA-key hosts that require rsa-sha2. The terminal is unaffected (it uses system ssh).

Credits

Built on libghostty, SwiftTerm, and Citadel. MIT licensed — see LICENSE.

About

Native macOS SSH & SFTP manager with a Terminus-style UI, powered by libghostty — tmux auto-attach, live SSH tunnel health, SFTP browser.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors