A fast and stable remote desktop control application built with Tauri 2 and Angular 18.
- Screen Sharing: Share your screen with remote users via WebRTC
- Remote Control: Mouse and keyboard input simulation
- File Transfer: Send files to the remote computer
- Clipboard Sync: Automatic clipboard synchronization
- Address Book: Save frequently connected partners
- Password Protection: Secure unattended access with password
- Multi-Screen Support: Choose which screen to share
- Cross-Platform: Windows, macOS, and Linux support
- Frontend: Angular 18 + Tailwind CSS
- Backend: Rust (Tauri 2)
- Screen Capture: xcap (Rust)
- Input Simulation: enigo (Rust)
- Real-time Communication: WebRTC (simple-peer)
- Signaling: Socket.IO
Windows:
- Microsoft Visual Studio C++ Build Tools
- WebView2 (usually pre-installed on Windows 10/11)
macOS:
- Xcode Command Line Tools
- Screen Recording permission (will be requested on first use)
Linux:
webkit2gtk-4.1andlibappindicator3-1- X11 or Wayland display server
# Clone the repository
git clone <repository-url>
cd remotecontrol-desktop
# Install Node.js dependencies
npm install
# Install Rust dependencies (automatic on first build)# Start development server (Angular + Tauri)
npm run tauri:dev
# Or run Angular and Tauri separately:
npm run dev # Angular dev server on port 4200
npm run tauri dev # Tauri development build# Production build
npm run tauri:build
# The installer will be created in:
# - Windows: src-tauri/target/release/bundle/nsis/
# - macOS: src-tauri/target/release/bundle/dmg/
# - Linux: src-tauri/target/release/bundle/appimage/remotecontrol-desktop/
├── src/ # Angular frontend
│ ├── app/
│ │ ├── core/services/ # Core services (Tauri, Socket, etc.)
│ │ └── shared/ # Shared components
│ ├── pages/ # Application pages
│ ├── assets/ # Static assets and i18n
│ └── environments/ # Environment configs
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── commands/ # Tauri commands
│ │ └── services/ # Background services
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
└── old/ # Previous Electron version (archived)
- Host captures screen using Rust (
xcapcrate) - Frames are encoded as JPEG and sent via Tauri events
- Frontend draws frames to canvas
- Canvas is converted to MediaStream using
captureStream() - MediaStream is sent to remote viewer via WebRTC
- Remote viewer captures mouse/keyboard events
- Events are sent via WebRTC data channel
- Host receives events and calls Rust commands
enigocrate simulates input on the host system
Settings are stored using tauri-plugin-store:
- Language preference
- Connection ID mode (random/permanent)
- Unattended access settings
- Auto-launch on startup
- Password-protected unattended access (bcrypt hashed)
- Permission dialog for manual connection approval
- Machine-unique IDs for permanent connections
- TURN server for NAT traversal
MIT License - See LICENSE file for details
- Built with Tauri
- UI powered by Angular and Tailwind CSS
- Screen capture by xcap
- Input simulation by enigo