The problem
Managing remote servers and homelab nodes frequently requires juggling separate, heavy desktop clients (PuTTY, WinSCP, RDP clients) and clunky, ad-supported mobile apps when on the move. Most modern cross-platform attempts use Electron, introducing massive memory overhead and poor mobile adaptability.
What I built
I engineered SubTerm to bring native terminal performance and multi-protocol remote management into a unified workspace. By leveraging Tauri v2 and Rust, the core networking and cryptography routines remain native, secure, and fast, while the interface adapts seamlessly between wide desktop screens and mobile touch targets.
Architecture
┌────────────────────────────────────────────────────────┐
│ Responsive UI (TypeScript / TSX) │
└───────────────────────────┬────────────────────────────┘
│ IPC / FFI Bridge
┌───────────────────────────▼────────────────────────────┐
│ Rust Core (Tauri v2) │
│ ├── Async SSH / SFTP Session Multiplexing │
│ ├── RDP Protocol Bridge & Terminal Emulation Engine │
│ └── Secure Credential Storage & Keystore │
└───────────────────────────┬────────────────────────────┘
│ Native Compilation
┌──────────────┴──────────────┐
▼ ▼
Windows / Linux Native Android APK (NDK + Kotlin)
Engineering challenges & trade-offs
The primary challenge was managing cross-compilation and conditional API compilation for Android mobile targets. Native desktop APIs (such as window management and local filesystem hooks) had to be carefully scoped behind feature flags and custom Kotlin JNI glue, ensuring the Android build runs natively without bringing in unsupported desktop subsystems.
Key takeaways
Rust and Tauri v2 offer an incredible foundation for system utilities. Decoupling the protocol engine from platform-specific UI bindings makes it possible to maintain a single core that delivers genuine native speed on both workstations and mobile devices.