# RemminaMac — SSH / RDP Client for macOS ![RemminaMac Icon](docs/icon-preview.png) Remmina-inspired connection manager for macOS, native Swift + SwiftUI. ![Platform](https://img.shields.io/badge/platform-macOS%2014%2B-blue) ![Language](https://img.shields.io/badge/language-Swift%205.9-orange) ![UI](https://img.shields.io/badge/UI-SwiftUI-green) Remmina-style layout: **profile list with search + groups on the left, connection tabs on the right, status bar at the bottom.** ## Contents - [Features](#features) - [Layout](#layout) - [Quick start](#quick-start) - [Installation](docs/INSTALL.md) - [Usage](docs/USAGE.md) - [Architecture](docs/ARCHITECTURE.md) - [SSH keys & security](#ssh-keys--security) - [RDP / VNC on macOS](#rdp--vnc-on-macos) - [Profile format](#profile-format) - [Release binaries](#release-binaries) - [Error log](docs/ERRORS.md) - [Roadmap](#roadmap) - [License](#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 - 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_hosts` with Terminal.app - SSH key management (`Views/SSHKeysView.swift`): import from `~/.ssh`, file picker, `ssh-keygen` wrapper (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 ```bash 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-`, `sshkey-`. - Keychain access: `Security/KeychainHelper.swift`. - No secrets are committed to the repo (see `.gitignore`). - Passwords reach ssh via `SSHPASS` env (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 ```json [ { "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): ```bash ./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--macos-arm64.zip + .sha256 # → dist/RemminaMac--macos-arm64.dmg + .sha256 ls dist/ ``` Details: [docs/INSTALL.md](docs/INSTALL.md), [docs/RELEASING.md](docs/RELEASING.md). ## Roadmap - [x] 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`.