DeskPro is a powerful, cross-platform remote desktop application built with Flutter that allows you to remotely access and control devices over the internet. Similar to AnyDesk, it provides high-quality screen streaming, full mouse and keyboard control, file sharing, and more!
- π Session ID Connection - Easy 9-digit session ID for quick connections
- π Password Protection - Optional password authentication with local storage
- πΊ High-Resolution Streaming - Support for up to 4K resolution
- π±οΈ Full Input Control - Complete mouse and keyboard control
- π File Sharing - Transfer files between devices
- β‘ Low Latency - Optimized WebRTC streaming for minimal delay
- π Real-time Statistics - Monitor connection quality, FPS, bitrate
- π¨ Modern UI - Beautiful light blue theme, responsive design
- WebRTC for peer-to-peer video streaming
- Adaptive bitrate (250kbps - 5Mbps)
- Configurable frame rate (15-60 FPS)
- Hardware-accelerated encoding
- Session history tracking
- QR code sharing for easy connection
- Connection statistics and monitoring
- Flutter SDK (3.0+)
- Android Studio / VS Code
- For Android: Android SDK 21+
- For Windows: Windows 10+
- Node.js (for signaling server)
-
Clone the repository
git clone https://github.com/yourusername/deskpro.git cd deskpro -
Install Flutter dependencies
flutter pub get
-
Set up the Signaling Server
cd signaling_server npm install npm start -
Update Server URL
Edit
lib/core/constants/app_constants.dart:static const String signalingServerUrl = 'https://your-server-url.com';
-
Run the app
# For Android flutter run # For Windows flutter run -d windows
- Open DeskPro and tap "Share Screen"
- Set an optional password for security
- Tap "Start Sharing"
- Share your Session ID or QR code with the person you want to connect with
- They can now see and control your screen
- Open DeskPro and tap "Connect"
- Enter the 9-digit Session ID provided by the host
- Enter the password if required
- Tap "Connect"
- You can now view and control the remote screen
lib/
βββ core/
β βββ constants/ # App constants and configurations
β βββ theme/ # Light blue theme definitions
β βββ utils/ # Utility functions
βββ data/
β βββ models/ # Data models (Session, FileTransfer, etc.)
β βββ services/ # Core services
β βββ signaling_service.dart # WebRTC signaling
β βββ webrtc_service.dart # Video streaming
β βββ file_transfer_service.dart # File sharing
β βββ storage_service.dart # Local storage
β βββ platform_service.dart # Native platform integration
βββ presentation/
βββ providers/ # State management
βββ screens/ # UI screens
β βββ home_screen.dart
β βββ host_screen.dart
β βββ client_screen.dart
β βββ control_screen.dart
βββ widgets/ # Reusable widgets
signaling_server/
βββ server.js # Node.js signaling server
βββ package.json # Server dependencies
βββ README.md # Server setup guide
Edit lib/core/constants/app_constants.dart to adjust quality:
// Video Resolution Presets
static const Map<String, Map<String, int>> videoResolutions = {
'low': {'width': 1280, 'height': 720}, // 720p
'medium': {'width': 1920, 'height': 1080}, // 1080p (default)
'high': {'width': 2560, 'height': 1440}, // 1440p
'ultra': {'width': 3840, 'height': 2160}, // 4K
};
// Bitrate Configuration
static const int minBitrate = 250000; // 250kbps
static const int maxBitrate = 5000000; // 5Mbps
static const int defaultBitrate = 2000000; // 2Mbps
// Frame Rate
static const int minFrameRate = 15;
static const int maxFrameRate = 60;
static const int defaultFrameRate = 30;Permissions are already configured in android/app/src/main/AndroidManifest.xml:
- Internet access
- Camera and microphone
- Storage access
- Screen capture
Windows permissions are handled at runtime through the application.
cd signaling_server
heroku login
heroku create deskpro-signaling
git push heroku main- Go to https://railway.app
- Create new project from GitHub repo
- Railway auto-deploys the signaling server
- Go to https://render.com
- Create new Web Service
- Connect GitHub repo
- Deploy automatically
- End-to-end encrypted data channels
- Password protection with SHA-256 hashing
- Session timeout after 24 hours
- No data stored on signaling server
- Direct peer-to-peer connections
Edit lib/core/theme/app_theme.dart:
static const Color primaryBlue = Color(0xFF4FC3F7);
static const Color accentBlue = Color(0xFF29B6F6);
// Customize more colors...The architecture is modular and easy to extend:
- Add new services in
lib/data/services/ - Create new screens in
lib/presentation/screens/ - Add models in
lib/data/models/
flutter_webrtc- WebRTC streamingsocket_io_client- Signaling communicationshared_preferences- Local storagepermission_handler- Runtime permissionsfile_picker- File selectionprovider- State managementqr_flutter- QR code generationcrypto- Encryption
express- Web serversocket.io- WebSocket signalingcors- Cross-origin support
- Android Input Injection: Requires accessibility service (not implemented yet)
- iOS Support: Not yet implemented (iOS has restrictions on screen capture)
- Background Mode: Screen sharing stops when app is minimized
- NAT Traversal: May require TURN server for some network configurations
- Ensure signaling server is running and accessible
- Check firewall settings
- Verify internet connection on both devices
- Grant screen capture permissions on Android
- Ensure app has necessary permissions
- Increase bitrate in settings
- Check network bandwidth
- Reduce resolution if needed
- iOS support
- Clipboard synchronization
- Multi-monitor support
- Recording sessions
- Chat feature
- Accessibility service for input injection
- TURN server integration for better NAT traversal
- Dark theme
- Multiple language support
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Your Name - @yourhandle
- Flutter team for the amazing framework
- WebRTC community
- AnyDesk for inspiration
For questions or support, please open an issue or contact your-email@example.com
β If you find this project helpful, please give it a star!