Skip to content
pkhorenyanPublic

About

Native SSH client for macOS: a MobaXterm alternative with a session tree, jump hosts, SFTP and Keychain passwords.

Topics

Resources

Stars

21 stars

Watchers

0 watching

Forks

Repository files navigation

Termstead app icon

Termstead

Version 0.8.0 macOS 14 or later Universal: Apple Silicon and Intel Swift 6 License: GPL-3.0-or-later Homebrew: pkhorenyan/tap

A native macOS SSH, RDP and Telnet client for people who keep a lot of servers in their head — sessions in a tree, jump hosts, SFTP next to the terminal, remote desktops in tabs, your Mac's own shell beside them, and passwords in the macOS Keychain. Built for anyone coming from MobaXterm who wants the same way of working, as a real Mac app.

Termstead with a live session

Features

  • Sessions in a tree. Groups and subgroups, colors that the sessions inside take on, an icon per session, pinned favorites at the top, search, drag and drop to reorder — and the keyboard, as in Finder: arrows to move, Return to connect.
  • Tabs you can arrange. Each carries its session's icon in its group's color; drag tabs into any order, step through them with ⇧⌘[ and ⇧⌘], and right-click one to reconnect, duplicate or close the rest. When there are more than fit, the strip scrolls with the mouse wheel — and if you like, the tabs open at quit connect again the next time Termstead starts.
  • Split the window. Two panes side by side or stacked, or four, from the buttons beside the gear. Each pane has its own tabs; drag a tab onto another pane's strip to move it there. Broadcast input types into every visible pane at once — a yellow line marks each pane that takes it, and any pane can be left out.
  • Your Mac's own terminal, in a tab (⌥⌘T, or the terminal button beside the tab strip's +): your shell, at home, beside the servers — in any pane, part of broadcast input like the rest, with this Mac's files in the SFTP tab, following its cd.
  • Snippets. Commands you type often, kept in a Snippets tab beside Sessions and SFTP and sent with a double-click or ⌃1–⌃9 to the tab in front — or to every pane with broadcast input. A snippet can stop short of Return, to finish the command by hand.
  • Session logs. A tab's output to a plain-text file with the time on each line — no colors or control codes — for a session always, or for any tab when you choose.
  • Tabs come back by themselves. A connection dropped by sleep, Wi-Fi or a VPN reconnects on its own once there is a network again; exit stays closed.
  • Jump hosts. Chain as many as you need; a jump host can be a saved session, with its own user, key or password.
  • Remote desktops (RDP) in tabs. An RDP session opens as a tab like any other, in any pane, and through its jump hosts if it has them. The desktop fits the tab and follows it as the window is resized, sharp on Retina screens; zoom with ⌘+ and ⌘−. Text and files copy both ways — from Finder into Explorer and back — a Mac folder can be shared as a drive, and Ctrl+Alt+Del and the Windows key are in the Session menu. The server's certificate is checked as a browser would, and one you have not seen before is asked about in the tab.
  • Telnet for switches, routers and older gear, in a tab like the rest, with logs, snippets and broadcast input — macOS ships no telnet of its own any more, so Termstead brings one.
  • Port forwarding. Local, remote and SOCKS tunnels through every jump host on the way, started from a session's context menu on a connection of their own, with no terminal. Stop or start each one from the status bar.
  • Server load at a glance. The status bar shows the CPU, memory, disk and network of the Linux server in front, read over the connection already open.
  • Passwords and key passphrases in the Keychain, entered for you when ssh asks — and only for the host they were saved for.
  • SFTP beside the terminal. The SFTP tab browses the server over the connection that is already open, so it never asks for a password again, and the sidebar turns to it as soon as you are logged in. It can follow the terminal's current folder; drag files in to upload and out to download; open a remote file in its Mac app and it is uploaded again each time you save. In a local terminal it shows this Mac's files, following the shell's folder the same way.
  • Import from ~/.ssh/config — your existing hosts become sessions in one click.
  • Find in the output (⌘F), with the scrollback size of your choice.
  • Keyword highlighting of errors, warnings, IP addresses and URLs in output the server did not color itself — or, for network gear, interface names, up/down and MAC addresses too.
  • Eight themes — Graphite, Midnight, Ember, High contrast, Nord, Synthwave, Daylight, Sepia — following macOS light and dark mode if you like, any monospaced font, with or without its ligatures, copy on select, Option as Meta. Prompt icons (powerlevel10k, oh-my-zsh, Starship) show with no Nerd Font to install.
  • It is the real OpenSSH. Each tab runs the system ssh, so your agent, ~/.ssh/config, known_hosts and ProxyJump all work exactly as in Terminal.

Four servers in four panes, with broadcast input on

A remote desktop in a tab, reached through a jump host, next to ssh sessions

The SFTP tab next to a session Session settings with a jump host

Install

Termstead needs macOS 14 Sonoma or later, on Apple silicon or Intel.

Homebrew:

brew install --cask pkhorenyan/tap/termstead

Or download the latest Termstead.dmg from Releases, open it and drag Termstead to Applications.

Termstead keeps itself up to date: it looks for a new version once a day, and Termstead ▸ Check for Updates… does it on demand. Every update is verified against the project's signing key before it is installed.

Security and privacy

  • Termstead has no SSH code of its own. Connections, keys, host verification and encryption are all OpenSSH's, as shipped with macOS.
  • Passwords and passphrases are kept in your login Keychain. A password is handed to ssh only for the exact user@host it was saved for, and each saved secret is offered once — if the server refuses it, you are asked in the terminal as usual.
  • The ssh configuration for each connection is written to a private temporary folder, readable only by you, and deleted when the tab closes.
  • Remote desktops are drawn by FreeRDP in a process of its own: a crash in it ends the remote desktops, not Termstead or its ssh sessions. A shared Mac folder is the only one a remote desktop sees. A server that offers no TLS, and so cannot prove who it is, is not logged in to. Your clipboard reaches a remote desktop only while you are typing in it.
  • Telnet is not encrypted — passwords included — and the session form says so. Use it for gear that speaks nothing else, on a network you trust.
  • Session logs are written only when you ask, to a folder you choose (~/Documents/Termstead Logs at first), readable only by you.
  • Sessions and snippets are stored in ~/Library/Application Support/Termstead/ (sessions.json, snippets.json). Nothing is sent anywhere: no accounts, no analytics.

Keyboard shortcuts

New session / New group ⌘N / ⇧⌘N
Connect to the selected session ⌘O
Session settings ⌘I
Quick connect by address ⌘K
New tab / Close tab ⌘T / ⌘W
New local terminal ⌥⌘T
Send snippet 1–9 ⌃1 – ⌃9
Previous / next tab ⇧⌘[ / ⇧⌘]
Split vertically / horizontally ⌘D / ⇧⌘D
Previous / next pane ⌘[ / ⌘]
Broadcast input to the visible panes ⌥⌘I
Hide / show the sidebar ⌃⌘S
Find / Next / Previous ⌘F / ⌘G / ⇧⌘G
Text size in the tab — or a remote desktop's zoom: bigger / smaller / default ⌘+ / ⌘− / ⌘0
Settings ⌘,

Double-click a session to connect. A closed tab keeps its output — press Return to reconnect, or choose Reconnect from the tab's menu. Drag a tab to move it; the middle mouse button closes it.

Once you click in the session tree, the keyboard moves through it:

Move up / down; extend the selection ↑ / ↓; ⇧↑ / ⇧↓
Open a group, or go into it / close it, or go up → / ←
Connect every selected session; open or close a group Return
Delete the selection ⌫
Back to the terminal Esc

↓ in the search field goes to the first session found, so typing a few letters and Return is enough to connect.

Build from source

brew install xcodegen cmake ninja
scripts/build-rdp-deps.sh   # FreeRDP and OpenSSL for the RDP engine, once
xcodegen generate
xcodebuild -project Termstead.xcodeproj -scheme Termstead -configuration Release \
  -derivedDataPath build build
open build/Build/Products/Release/Termstead.app

Architecture, tests and development notes are in CLAUDE.md.

License

Copyright © 2026 Pavel Khorenyan.

Termstead is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but without any warranty; see the LICENSE for details.

The Termstead name and the app icon are not covered by that license. Forks are welcome, under a name and an icon of their own, so that nobody mistakes them for this app.

It includes SwiftTerm by Miguel de Icaza (MIT), vendored with small patches, Sparkle for updates (MIT), FreeRDP for remote desktops and OpenSSL under it (both Apache-2.0; FreeRDP is built with small patches, in scripts/rdp-patches), and the typefaces JetBrains Mono and IBM Plex Sans, both under the SIL Open Font License 1.1, with the icons of Nerd Fonts' Symbols Nerd Font (MIT, its icons from projects under MIT, CC BY 4.0, Apache-2.0 and OFL). Their license texts travel inside the app, in Contents/Resources/Licenses.

About

Native SSH client for macOS: a MobaXterm alternative with a session tree, jump hosts, SFTP and Keychain passwords.

Topics

Resources

Stars

21 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages