Native C++/GTK4 desktop application for accessing and synchronizing files with Proton Drive on Linux.
- Full Cloud Explorer - Browse, search, and preview your Proton Drive files with a native GTK4 interface
- Full-Text Search - Instant search across all cloud files using SQLite FTS5
- File Details - View file metadata, creation dates, and version history
- Two-Way Sync - Automatic bidirectional synchronization between local folders and cloud
- Scheduled Sync - Configurable sync intervals (manual, 15-min, hourly, etc.)
- Conflict Resolution - Intelligent handling of files modified on both sides
- Delete Protection - Prevents accidental mass deletion with configurable thresholds
- Drag & Drop Upload - Drop files directly onto the cloud browser
- System Tray Icon - Minimalist D-Bus StatusNotifierItem with sync status
- Real-Time Notifications - Alerts for sync errors, completed jobs, and conflicts
- No Dependencies - Pure GTK4, no WebView, no Electronβfast and lightweight
- Secure Authentication - OAuth2 through Proton's official APIs
- Keyring Storage - Credentials stored in XDG Secret Service (system keyring)
- Search Privacy - Cloud filenames indexed locally, never exposed to plaintext
If you have Proton Sentinel enabled on your account, it may block this application from syncing.
- Symptom: Authentication works, but sync operations fail or get blocked
- Cause: Proton Sentinel flags third-party API access as suspicious activity
- Solution: Either disable Proton Sentinel in your account settings, OR contact Proton Support to whitelist this application
- Support Ticket: If you want to keep Sentinel enabled, you'll need to open a support ticket with Proton to request whitelisting for third-party rclone access
Note: This is a Proton security feature, not a bug in this application. Official Proton clients don't have this limitation.
This app uses rclone's polling mechanism for synchronization, which has an important limitation:
Cloud-to-Local Changes (Limited):
- β Changes made locally are uploaded to cloud immediately when detected
- β Changes made in the web app or other clients are NOT automatically downloaded to your local machine
- β±οΈ Cloud changes are only detected during scheduled sync intervals (default: every 15 minutes)
Why? Proton Drive has no real-time push notification API. rclone must poll the server periodically to detect cloud changes. This is a limitation of how Rclone works Proton's API, not this application.
Recommended Workaround:
- Set sync intervals to 5-10 minutes for active folders if you frequently make changes in the web app
- Or manually trigger sync from the app's sync panel when you know cloud changes have been made
Local-to-Cloud Sync is Fully Automatic:
- Files/folders added locally are uploaded within seconds of creation (inotify-based)
- File modifications are detected and uploaded automatically
- Deletions are synced (subject to delete protection rules)
Debian/Ubuntu:
sudo apt install build-essential cmake pkg-config \
libgtk-4-dev libcurl4-openssl-dev libsqlite3-dev libssl-devFedora/RHEL:
sudo dnf install gcc g++ cmake gtk4-devel libcurl-devel \
sqlite-devel openssl-develArch Linux:
sudo pacman -S base-devel cmake gtk4 curl sqlite openssl- GTK 4.0+ (libgtk-4-0)
- libcurl (libcurl4-openssl)
- SQLite 3 (libsqlite3-0)
- OpenSSL (libssl3)
- rclone 1.73+ with Proton Drive patch (for sync functionality)
git clone https://github.com/Xanderful/proton-drive-for-linux.git
cd proton-drive-for-linux
# Build release binary
mkdir -p src-native/build && cd src-native/build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
# Binary at: src-native/build/proton-drive
./proton-drivemake build # Build release binary
make dev # Build and run with debug output
make clean # Clean build artifacts
make help # Show all available targetsgit clone https://github.com/Xanderful/proton-drive-linux.git
cd proton-drive-linux
make build
sudo make install # Installs to /usr/local/bin# Build the AppImage
make build-appimage
# Or download from releases and run directly
chmod +x ProtonDrive-*.AppImage
./ProtonDrive-*.AppImage- Launch the application:
proton-drive - Click "Login" in the cloud browser panel
- Enter your Proton Account credentials
- Authenticate with OAuth2 (opens in browser)
- Authorization tokens are stored securely in your system keyring
# Option A: Via GUI (Recommended)
1. Click the sync icon in the sidebar
2. Click "Add Sync Job"
3. Select a local folder: ~/Documents (or any folder)
4. Select a cloud folder: /Backups (or any Proton Drive folder)
5. Choose sync type: Two-Way (recommended)
6. Set interval: 15 minutes (adjust as needed)
7. Enable and start sync
# Option B: Via CLI (Manual Sync)
proton-drive --sync-now ~/Documents /Backups- Sync Panel: Shows active jobs, progress, and status
- System Tray: Click icon for quick status overview
- Notifications: Alerts for errors, completion, conflicts
- Logs: View detailed logs in Preferences β Logs
src-native/
βββ src/
β βββ main_native.cpp # Application entry point
β βββ app_window.cpp # Main window (UI core)
β βββ app_window_*.cpp # UI features (cloud, sync, actions, etc.)
β βββ sync_manager.cpp # Sync orchestration & rclone integration
β βββ sync_job_metadata.cpp # Job registry & persistence
β βββ file_watcher.cpp # inotify-based local change detection
β βββ file_index.cpp # SQLite FTS5 cloud file search index
β βββ cloud_browser.cpp # Cloud explorer UI
β βββ tray_gtk4.cpp # D-Bus system tray integration
β βββ notifications.cpp # Desktop notifications
β βββ settings.cpp # User preferences persistence
β βββ logger.cpp # Debug logging to ~/.cache/proton-drive.log
β
βββ CMakeLists.txt # Build configuration
βββ packaging/
βββ proton-drive.desktop # Desktop integration
scripts/
βββ setup-rclone.sh # rclone configuration wizard
βββ setup-sync-service.sh # systemd user service setup
βββ manage-sync-job.sh # Sync job lifecycle management
βββ build-local-appimage.sh # AppImage packaging
docs/
βββ SYNC_SAFETY_FEATURES.md # Safety features & conflict resolution
βββ SYNC_CONFLICT_FIX.md # Conflict scenarios & resolution
βββ FOLDER_DELETION_HANDLING.md # Handling deleted sync folders
βββ PREVENTING_FALSE_POSITIVES.md # Cache management & validation
βββ FILE_INDEX_SECURITY.md # File search encryption details
βββ CROSS_DISTRO_TESTING.md # Testing matrix for distributions
| Component | Purpose |
|---|---|
app_window.cpp |
Main GTK4 window, UI state management, event handling |
sync_manager.cpp |
Orchestrates bisync jobs, manages rclone lifecycle |
file_watcher.cpp |
Monitors local filesystem changes with inotify |
file_index.cpp |
Caches cloud file metadata, provides instant search |
cloud_browser.cpp |
GTK4 widget tree for cloud file explorer |
tray_gtk4.cpp |
StatusNotifierItem D-Bus tray icon |
| Document | Purpose |
|---|---|
| SYNC_SETUP.md | Detailed rclone setup, troubleshooting, upload fixes |
| SYNC_SAFETY_FEATURES.md | Delete protection, conflict resolution, versioning |
| SYNC_CONFLICT_FIX.md | Understanding & resolving sync conflicts |
| FOLDER_DELETION_HANDLING.md | Recovering from accidental folder deletions |
| PREVENTING_FALSE_POSITIVES.md | Cache validation, stale lock cleanup |
| FILE_INDEX_SECURITY.md | Search privacy & encryption design |
| CROSS_DISTRO_TESTING.md | Compatibility matrix & distribution testing |
Problem: Login button stuck or browser doesn't open
Solution:
# Clear credentials from keyring
secret-tool delete service proton-drive
# Restart app and try login againProblem: Sync job not progressing
Solution:
# Check for stale rclone locks
rm -f ~/.cache/rclone/bisync/*cache*
# View detailed logs
tail -f ~/.cache/proton-drive/proton-drive.log
# Manually restart sync service
systemctl --user restart proton-drive-syncProblem: Files fail to upload with "422 Invalid Request"
Note: This requires rclone with Proton Drive patch. AppImage includes this; if building from source, see SYNC_SETUP.md
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit with clear messages describing changes
- Test on at least one supported distribution
- Push and submit a Pull Request
# Clone and build with debug symbols
git clone https://github.com/Xanderful/proton-drive-linux.git
make dev # Builds with --debug, shows detailed output- Include distribution (Debian, Fedora, Arch, etc.) and version
- Include logs from
~/.cache/proton-drive/proton-drive.log - Include steps to reproduce the issue
- Attach relevant screenshots or recordings
Licensed under the Apache License 2.0. See LICENSE for details.
This project is not affiliated with, endorsed by, or supported by Proton Technologies AG. Proton Drive is a trademark of Proton Technologies AG. This is a community-maintained integration for Linux users.