main
RemminaMac — SSH / RDP Client for macOS
Remmina-inspired connection manager for macOS, native Swift + SwiftUI.
Remmina-style layout: profile list with search + groups on the left, connection tabs on the right, status bar at the bottom.
Contents
- Features
- Layout
- Quick start
- Installation
- Usage
- Architecture
- SSH keys & security
- RDP / VNC on macOS
- Profile format
- Release binaries
- Error log
- Roadmap
- License
Features
- GUI in Remmina layout (
Views/ContentView.swift):- Sidebar: group picker, search, profile list, double-click = connect
- Detail: tabbed open sessions, connection details, status bar
- Toolbar: New / Edit / Duplicate / Connect / Quick-Connect / SSH keys / Info
- Load / save / duplicate / delete profiles
- JSON in
~/Library/Application Support/RemminaMac/profiles.json - Validation + trimming in the editor, copyable error reports
- JSON in
- Protocols: SSH, SFTP, RDP, VNC (
Models/ConnectionProfile.swift) - Full interactive terminal per tab (SwiftTerm emulator, Dracula themed):
cursor addressing, colors, scrollback, Tab completion, arrows, Ctrl+C,
full-screen apps (vim/htop). Real PTY + controlling terminal via
ctty-run. - Host-key fingerprint popup (accept/decline, MITM warning on change),
shared
~/.ssh/known_hostswith Terminal.app - SSH key management (
Views/SSHKeysView.swift): import from~/.ssh, file picker,ssh-keygenwrapper (ed25519) - Passwords/passphrases in macOS Keychain only, never in JSON
- Auto-login via
sshpass(if installed) or interactive prompt - TCP pre-check with plain-language diagnostics before connecting
- RDP via FreeRDP (
xfreerdp) or Microsoft Remote Desktop fallback - VNC via
vnc://scheme - About sheet with contributor + repository link
Layout
+-------------------------------------------------------------+
| Toolbar: [+][Edit][Copy][Key][i] | [▶ Connect][⚡Quick] |
+------+-------------------------------+--------------------+
| Group | Tab: Webserver | Office-PC | ... | Detail |
| Search +-------------------------------+ |
| - Webserver | Full terminal (SwiftTerm) | |
| - Office-PC | Connection details (cmd) | |
| - Fileserver +-------------------------------+ |
+------+-------------------------------+--------------------+
| Statusbar: ● Ready ... N profiles · M sessions |
+-------------------------------------------------------------+
Quick start
cd RemminaMac
swift build
swift run RemminaMac
# In Xcode:
open Package.swift
# Target RemminaMac → My Mac → Run
SSH keys & security
- Private key paths live in
sshkeys.json, passphrases in Keychain only. - Service name:
RemminaMac, accounts:profile-<UUID>,sshkey-<UUID>. - Keychain access:
Security/KeychainHelper.swift. - No secrets are committed to the repo (see
.gitignore). - Passwords reach ssh via
SSHPASSenv (with sshpass) or the interactive terminal prompt — never via command line or logs.
RDP / VNC on macOS
- Optional:
brew install freerdp - With FreeRDP:
xfreerdp /v:HOST:PORT /u:USER [/size:WxH | /f] - Without:
rdc://→ Microsoft Remote Desktop (install from App Store) - VNC:
open vnc://host:port
Profile format
[
{
"id": "UUID",
"name": "Webserver",
"protocol": "SSH",
"host": "192.168.1.10",
"port": 22,
"username": "admin",
"group": "Server",
"colorTag": "blue",
"resolution": "Automatic",
"sshKeyID": null,
"passwordAccount": "profile-UUID",
"extraArgs": "",
"lastConnected": null
}
]
Release binaries
Prebuilt binaries on Git releases (dist/ is built locally, never committed):
./scripts/build-release.sh 0.7.0
./scripts/build-app.sh 0.7.0 # RemminaMac.app for /Applications
./scripts/build-dmg.sh 0.7.0 # DMG with drag-and-drop to Applications
# → dist/RemminaMac-<version>-macos-arm64.zip + .sha256
# → dist/RemminaMac-<version>-macos-arm64.dmg + .sha256
ls dist/
Details: docs/INSTALL.md, docs/RELEASING.md.
Roadmap
- Embedded full terminal (SwiftTerm) — done in 0.7.0
- Embedded RDP (FreeRDP bridge) instead of external process
- Integrated SFTP browser
- Export/Import buttons in the GUI
- Tray / favorites / folder badges like Remmina
License
MIT — see LICENSE.