RemoteSessionMgr is a native macOS SwiftUI app for managing personal SSH and RDP sessions. It is inspired by the workflow of remote session managers like mRemoteNG, but this implementation is written from scratch for macOS and only targets SSH and RDP for v1.
- Create, edit, and delete SSH or RDP sessions
- Organize sessions into nested folders in a sidebar tree
- Search sessions by name, host, username, notes, or protocol
- Edit session details in a native SwiftUI detail pane
- Launch SSH connections in Terminal.app or iTerm2
- Launch RDP sessions through
xfreerdpor a custom command template - Persist sessions and settings locally as JSON
- Seed sample data on first launch
Sources/RemoteSessionMgr
├── Launchers
├── Models
├── Persistence
├── Utilities
├── ViewModels
└── Views
The app follows a lightweight MVVM structure:
Models: session, folder, selection, and settings typesViewModels: application state, mutations, persistence hooks, and launching actionsViews: sidebar, detail editors, settings, and empty statePersistence: JSON-backed local storageLaunchers: SSH and RDP process launch services
- Open Xcode.
- Choose
File > Open.... - Select
/Users/prashanth/Documents/Playground/Package.swift. - Let Xcode resolve and load the package.
- Run the
RemoteSessionMgrexecutable target onMy Mac.
swift build
swift runIf terminal builds fail because only Command Line Tools are installed or the local Apple toolchain is mismatched, switch to a full Xcode installation and select it with:
sudo xcode-select -s /Applications/Xcode.app/Contents/DeveloperSSH connections use the system ssh command. RemoteSessionMgr does not implement the SSH protocol itself.
For a session with:
- username:
alice - host:
server.example.com - port:
2222
the app builds and launches:
ssh 'alice@server.example.com' -p 2222The default SSH launcher is configurable in Settings:
Terminal.app: opens a new Terminal window/tab via AppleScript and runs the commandiTerm2: opens a new iTerm2 tab or window via AppleScript and runs the command
RDP is delegated to an external client. RemoteSessionMgr does not render RDP sessions natively.
By default, the app uses this command template:
xfreerdp /v:{host} /u:{username} /port:{port}Supported placeholders:
{host}{port}{username}{name}
If xfreerdp is not installed, either:
- install it locally, or
- change the RDP command template in Settings to another launcher command
Example custom template:
open -a "Microsoft Remote Desktop" "rdp://full%20address=s:{host}"The app stores JSON files in the user Application Support directory:
~/Library/Application Support/RemoteSessionMgr/sessions.json
~/Library/Application Support/RemoteSessionMgr/settings.json
On first launch, the app writes:
- sample folders
- sample SSH sessions
- sample RDP sessions
- default settings
- This project is intended for personal local use.
- It is not designed for App Store distribution.
- No heavy third-party dependencies are required for v1.