Files

132 lines
4.8 KiB
Markdown

# 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-<UUID>`, `sshkey-<UUID>`.
- 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-<version>-macos-arm64.zip + .sha256
# → dist/RemminaMac-<version>-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`.