An open-source, cross-platform remote connection manager inspired by mRemoteNG but built from the ground up to work on Windows, Linux, macOS, iOS, and Android.
Pre-built binaries are available on the Releases page.
Latest: v0.11.1 (Windows x64 + Linux x64)
- Windows: Download
KRemote-v0.11.1-windows.zip, extract, and runkremote.exe - Linux: Download
KRemote-v0.11.1-linux-x64.tar.gz, extract, and run./kremote - No installation required (portable)
- New in v0.11.1: RDP xrdp compatibility fix — disable NLA (CredSSP) for xrdp servers, TLS-only connection support
- v0.11.0: RDP protocol foundation — IronRDP integration complete, protocol connection testing, domain field support, framebuffer API ready (UI coming next)
- v0.10.0: Dynamic window title (shows active connection name), delete confirmation dialogs for connections/folders
- v0.9.0: Connection timeout configuration — set custom timeout (1-300s) per connection, defaults to 30s
- v0.8.x: OS keyring integration for master password caching (auto-unlock on startup), Lock Vault bugfixes
- v0.7.0: SSH key passphrase prompt for encrypted private keys
- v0.6.0: Session tabs & reconnect — multiple terminals, per-tab reconnect banners
- v0.5.0: Jump host tunneling — route SSH through bastion hosts
- This is an early alpha — expect rough edges and breaking changes between releases
A unified connection manager supporting multiple protocols:
- SSH - Secure Shell terminal connections
- RDP - Remote Desktop Protocol
- VNC - Virtual Network Computing
- HTTP/HTTPS - Web protocols
- VPN - Virtual Private Networks (WireGuard integration planned)
- AnyDesk-style remote control (future milestone)
This is an active work-in-progress. What's working today:
- Encrypted credential vault with master password protection (Argon2id + AES-256-GCM)
- OS keyring integration for master password caching (Windows Credential Manager / Linux Secret Service) — opt-in auto-unlock
- Connection timeout configuration - set custom timeout (1-300s) per connection, defaults to 30s
- Cross-platform architecture using Flutter (UI) + Rust (crypto/network/protocol logic)
- Connection management: add, edit, delete, organize connections with folders and tags
- SSH interactive terminal with full PTY support (xterm emulation, hardware keyboard input)
- SSH session tabs - multiple terminals in one window with independent sessions and tab controls
- SSH session reconnect - per-tab reconnect banner recovers from connection loss without closing the window
- SSH jump host tunneling - route connections through bastion hosts with automatic TCP proxy
- SSH key passphrase prompt - connect with encrypted private keys via an on-demand passphrase dialog
- SSH connection testing via libssh2 (password and SSH key authentication)
- Multi-protocol support foundation (SSH, RDP, VNC, HTTP/HTTPS, VPN)
- Import/export functionality for connection backup and migration
- Vault operations: create, unlock, lock, auto-save on changes
- Modern UI with dark slate theme (#0F172A), protocol-specific icons/colors
- VNC client stub ready for libvncclient integration
- RDP client integration (via FreeRDP)
- VNC client integration (via LibVNCServer) - stub implemented
- HTTP/HTTPS launcher (URL launcher ready)
- VPN profile management (WireGuard)
- Session recording and audit logs
- Mobile apps (Android/iOS) - architecture is ready, UI needs mobile adaptation
- Team vaults with shared credentials (zero-knowledge sync)
- Plugin system for extending protocol support
┌─────────────────────────────────────┐
│ Flutter (Dart) │ <- Cross-platform UI
│ Windows / Linux / iOS / Android │
└──────────────┬──────────────────────┘
│ flutter_rust_bridge (FFI)
┌──────────────▼──────────────────────┐
│ Rust Core │ <- Business logic, crypto, protocols
│ • Vault (Argon2, AES-GCM) │
│ • SSH (libssh2) │
│ • RDP (FreeRDP - TODO) │
│ • VNC (libvncclient - TODO) │
└─────────────────────────────────────┘
- Flutter handles the UI layer and platform-specific packaging
- Rust handles encryption, credential storage, SSH/RDP/VNC protocol implementations
- flutter_rust_bridge generates type-safe FFI bindings automatically
- Flutter: Write UI once, deploy to Windows/Linux/iOS/Android
- Rust: Memory-safe, fast, excellent crypto/networking libraries (no need to reinvent RDP/SSH/VNC stacks)
- FRB: Seamless Dart↔Rust interop with async/await support
| Layer | Technology |
|---|---|
| UI Framework | Flutter 3.x |
| Core Logic | Rust (stable) |
| FFI Bridge | flutter_rust_bridge 2.x |
| Encryption | Argon2id (password hashing), AES-256-GCM (vault encryption) |
| SSH | libssh2 |
| RDP | FreeRDP (planned) |
| VNC | LibVNCServer/libvncclient (planned) |
| VPN | WireGuard (wireguard-go / wireguard-rs, planned) |
- Flutter SDK (3.13+): https://flutter.dev/docs/get-started/install
- Rust toolchain (stable): https://rustup.rs
- Platform-specific build tools:
- Windows: Visual Studio 2022 Build Tools (C++ desktop workload)
- Linux:
build-essential,libssh2-1-dev,pkg-config - macOS: Xcode command-line tools
- flutter_rust_bridge codegen:
cargo install flutter_rust_bridge_codegen
# Clone the repository
git clone https://github.com/z41hk/KRemote.git
cd KRemote
# Get Flutter dependencies
flutter pub get
# Generate Rust↔Dart bindings
flutter_rust_bridge_codegen generate
# Run on your platform
flutter run -d windows # Windows
flutter run -d linux # Linux
flutter run -d macos # macOS
# Build release binary
flutter build windows --release
flutter build linux --release
flutter build apk --release # Android
flutter build ios --release # iOS (requires macOS + Xcode)kremote/
├── lib/ # Flutter/Dart code
│ ├── main.dart # App entry point
│ ├── screens/ # UI screens
│ │ ├── home_screen.dart
│ │ ├── vault_screen.dart
│ │ └── connection_detail_screen.dart
│ └── src/rust/ # Auto-generated Rust bindings
│ ├── api/ # API surface (generated by FRB)
│ └── frb_generated.dart
├── rust/ # Rust core
│ ├── src/
│ │ ├── api/ # Public API exposed to Flutter
│ │ │ ├── app.rs # High-level app functions
│ │ │ ├── vault.rs # Vault operations
│ │ │ ├── models.rs # Data models (Connection, etc.)
│ │ │ ├── ssh.rs # SSH protocol (libssh2 wrapper)
│ │ │ ├── vnc.rs # VNC protocol stub
│ │ │ └── import.rs # Import/export functions
│ │ └── lib.rs
│ └── Cargo.toml
├── windows/ # Windows runner (C++)
├── linux/ # Linux runner (C++)
├── android/ # Android project
├── ios/ # iOS project
└── pubspec.yaml # Flutter dependencies
- Master password → Argon2id (time=3, memory=64MB, parallelism=4) → 32-byte key
- Data encryption: AES-256-GCM (authenticated encryption)
- Vault file format (JSON):
{ "version": 1, "salt": "<hex>", // 32-byte random salt for Argon2 "password_hash": "<hex>", // Argon2(password + salt) for verification "nonce": "<hex>", // 12-byte random nonce for AES-GCM "ciphertext": "<hex>", // Encrypted connections JSON "tag": "<hex>" // 16-byte GCM authentication tag } - No plaintext storage: Passwords are never written to disk unencrypted
- Memory protection: Sensitive data cleared on vault lock (Rust's
Droptrait)
- Protected against: offline vault file theft (strong encryption), casual inspection, memory dumps after lock
- Not protected against: keylogger capturing master password, memory dump while unlocked, malicious Rust/Flutter code in dependencies
- Keyring security: Cached master password (when "Remember master password" is enabled) is stored in OS-native credential stores (Windows Credential Manager uses DPAPI encryption, Linux Secret Service is encrypted per-session). This is equivalent in risk to any browser/app "remember me" feature — if an attacker has full access to your logged-in OS user account, they can retrieve stored credentials.
- Future: Hardware key support (FIDO2/YubiKey)
- Launch the app
- Create a new vault with a strong master password (min 8 characters)
- The vault file is saved to:
- Windows:
%APPDATA%\kremote\vault.enc - Linux:
~/.config/kremote/vault.enc - macOS:
~/Library/Application Support/kremote/vault.enc
- Windows:
- Click + Add Connection
- Fill in:
- Name: Display name (e.g., "Production Server")
- Protocol: SSH, RDP, VNC, HTTP, HTTPS, VPN
- Host: IP or hostname
- Port: Default is auto-filled per protocol
- Credentials: Username, password, or SSH private key path
- Timeout: Connection timeout in seconds (1-300s, defaults to 30s)
- Folder: Optional folder ID for organization
- Tags: Comma-separated tags (e.g., "production,linux,web")
- Jump Host: Optional bastion/jump host ID for tunneling
- Notes: Free-text notes for documentation
- Click Save to store the connection
- Click the ▶ (play) button on any connection card
- For SSH: attempts to connect and run
echo "Connection test successful" - Result shown in a snackbar (green = success, red = failure)
- Click the 🔒 lock icon in the app bar
- All decrypted data is cleared from memory
- You'll need to re-enter your master password to unlock (unless "Remember master password" is enabled, in which case it auto-unlocks again on the next launch — uncheck that box to require manual entry)
- Vault with AES-256-GCM encryption
- Connection CRUD (create, read, update, delete)
- SSH connection testing
- Windows build working
- Full SSH terminal emulation (interactive PTY with streaming I/O)
- Linux build verification
- RDP client integration (FreeRDP)
- VNC module scaffolded (stub - needs libvncclient FFI bindings)
- HTTP/HTTPS launcher (opens system browser)
- Jump host SSH tunneling (full TCP proxy via
channel_direct_tcpip- production ready) - Session tabs (multiple SSH terminals in tabbed interface)
- Android app (UI adaptation for touch)
- iOS app
- Mobile-specific features (biometric unlock)
- Connection folders (hierarchical, with rename/delete)
- Connection tags
- Import from mRemoteNG XML
- Export vault to plaintext JSON (manual backup)
- Session recording/playback
- Team vaults with cloud sync (E2E encrypted)
- WireGuard VPN profile management
- Plugin/extension system
- LDAP/AD integration
- Audit logs and compliance reports
- Role-based access control (RBAC)
- Self-hosted sync server
See STATUS.md for a detailed, up-to-date breakdown of what's implemented vs. stubbed vs. planned.
This project is fully open source! Contributions welcome:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Rust code: Run
cargo fmtandcargo clippybefore committing - Flutter code: Run
flutter analyzeanddart format . - Bindings: Regenerate with
flutter_rust_bridge_codegen generateafter changing Rust API - Testing: Add tests for new Rust modules (
cargo test)
MIT License - see LICENSE for details.
Inspired by:
- mRemoteNG - The original Windows-only connection manager
- Apache Guacamole - Clientless remote desktop gateway
- RustDesk - Open-source remote desktop solution
- Remmina - Linux GTK+ remote desktop client
Built with:
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Status: 🚧 Active Development | License: MIT | Platforms: Windows, Linux, macOS, iOS, Android (cross-platform)





