← All tools

osirison/proton-drive-sync-engine

Popularity 75 Updated Development & Build

Two-way file sync between a local folder and Proton Drive on Linux — a fast Rust daemon, a scriptable control CLI, and a Tauri desktop app that previews every change before it runs.

githubauto-collected

Installation

A directly usable install command is not verified yet. Check the project documentation or releases.

<div align="center"

<img src="assets/icon.svg" alt="Proton Drive Sync" width="96" height="96"

Proton Drive Sync

Two-way file sync between a local folder and Proton Drive — for Linux.

A fast Rust daemon, a scriptable control CLI, and a desktop app that shows you every plan before it runs.

📖 Read the full documentation →

</div

---

[!CAUTION] This is an early prototype — test with disposable folders and backups first. Sync is bidirectional and deletions propagate: removing a synced file on one side removes it from the other. A file or folder deleted on Proton Drive is deleted from your local disk permanently — not moved to your OS trash — and folder deletions remove the whole subtree. Always preview with --dry-run and check destructiveactions before running unattended. (The very first sync of an existing remote is a non-destructive merge — nothing is deleted.) See Safety below.

What it is

Proton Drive Sync keeps a local folder and a Proton Drive folder in sync, both ways. It ships as three pieces backed by one Rust engine:

| Piece | Binary | What it is | | --- | --- | --- | | Daemon | proton-syncd | A background service that watches a local folder and reconciles it with Proton Drive. Also hosts the one-shot --dry-run planner. | | Control CLI | proton-sync | A thin client over a Unix socket — status, pause, resume, syncnow, history, and delete approvals. | | Desktop app | proton-sync-gui | A Tauri app: live status, activity, conflict resolution, dry-run review, settings, onboarding, and a tray icon. |

It uses Proton's own proton-drive CLI for every remote file operation (list, upload, download, delete), and reads Proton's volume-event stream directly over HTTPS — authenticated by reusing the CLI's login session rather than any credentials of its own. Either way, proton-drive must be installed, authenticated, and on your PATH first.

How it decides what to do

Every reconcile compares three sources of truth — the local files, the remote files, and the last-synced baseline in a local SQLite index — then plans and executes actions (upload, download, move, conflict, delete, …). Comparing all three, not just the two live sides, is what lets it tell a new file from a deleted one and an edit from a move. The index is committed only after every action in a pass succeeds, so a failure mid-plan never leaves half-recorded state. → How sync works

Quick setup

One command installs the engine, writes the config a background service reads, and starts syncing. You need a Rust toolchain (edition 2024 / Rust ≥ 1.85) and an authenticated proton-drive CLI on your PATH first — the engine drives it for every remote operation:

proton-drive filesystem list --json /Drive/RemoteFolder   # confirm the CLI works & is logged in
git clone https://github.com/osirison/proton-drive-sync-engine.git
cd proton-drive-sync-engine