nvrl 97743f17e3 test(fuse): add seeded simulation runs over the FakeDrive
The second half of the simulation harness in docs/MILESTONE-3.0.0.md
section 8.2. A run starts one or more real FUSE daemons on a shared
FakeDrive. Each client owns a folder `c<n>` that only it writes. A seed
then draws syscalls through the mounts, link flaps, restarts, pauses and
settles. Every syscall is checked against a model of the client's tree as
it happens. After the last step every link comes up and the run checks
no loss, POSIX behaviour, no false conflicts, convergence and liveness.

- sim::model is the POSIX model: the tree, what each call should answer,
  and how it changes the tree.
- sim::run has the profiles: one client on a good link, one on a flaky
  link with flaps and restarts, and three clients. PDFS_SIM_SEEDS sets
  how many seeds each runs, and PDFS_SIM_SEED replays one.
- sim::watchdog catches a call that never returns. It takes every
  thread's stack in the process, since no tracer can stop a thread
  blocked on a FUSE request. It then aborts the run's FUSE connections
  and writes the stacks next to the run's state.
- The daemons' logs at INFO and above are kept, so a known open bug is
  told apart from a new failure. Known bugs are counted, and the seed ends
  where the mount leaves the model behind. PDFS_SIM_KNOWN=fail fails on
  them instead.
- A restart retries opening the database while the last run still holds
  it.
- The FakeDrive restamps a node's modification time on a rename or move,
  as Drive does (B113).

The runs mount FUSE, so they are ignored by default. Run them with
`cargo test -p pdfs-fuse --lib sim:: -- --ignored --test-threads=1`.
Test-only; no behaviour change.
2026-10-03 07:47:01 +02:00
2026-09-28 23:35:53 +02:00
2026-07-19 20:49:02 +02:00
2026-10-01 21:39:05 +02:00
2026-06-30 03:27:13 +02:00

Proton Drive for Linux

Proton Drive on the Linux desktop. Your files as a folder that downloads on demand, synced local folders, Photos, sharing, and a native GTK4 app with tray and search launcher, plus a scriptable CLI.

proton-drive.narl.io

CI Release AUR License: MIT Rust 1.96+

My files in the Proton Drive app

Important

This is an unofficial, community-built client. It is not affiliated with, endorsed by, or supported by Proton AG. "Proton" and "Proton Drive" are trademarks of Proton AG, used here only to describe what the software talks to. Try it with data you have another copy of first, and read what survives a lost machine before you rely on it.

Features

Files

  • Your Drive as a folder. ~/ProtonDrive works with every program. Files download when they are opened, a block at a time, so a video starts playing and a large archive can be read without fetching all of it.
  • Available offline. Keep chosen files and folders fully downloaded; everything else is cached within a size limit you set.
  • Synced folders. Back up folders such as ~/Documents under your computer in Proton Drive, as a full two-way copy or online only. Gitignore-style .pdfsignore rules, conflict copies instead of overwrites, pause and bandwidth limits.
  • Safe writes. Changes are staged on disk and queued before they are acknowledged, so they survive a lost connection, a crash or a reboot and upload when they can.

Desktop app

  • Browse My files, Shared with me, Shared by me, Computers and Trash, with thumbnails (including camera RAW), drag and drop, details and version history.
  • Photos. Timeline with favorites, albums, and Places on a map; RAW+JPEG pairs shown as one photo; duplicate finder; slideshow; import from Google Photos (Takeout).
  • Sharing. Invite people as viewer, editor or admin, create public links with password and expiry, accept invitations.
  • Sync overview. What is uploading, what is waiting, what failed and why, and a history of what happened.
  • Tray icon with status, pause and quick actions, and a search launcher (pdfs-prompt) that searches Proton Drive and your home folder together, as its own window, through fuzzel, rofi or wofi, or live in fzf.
  • Restore a computer. Continue a backup on a new machine and bring its folders back in one step.
  • Sign-in with two-factor authentication and CAPTCHA; the session is kept in the system keyring.
  • Available in English, German, Spanish, French, Italian, Dutch, Polish and Brazilian Portuguese.

Command line

  • About 55 pdfs commands cover files, sync, sharing, Photos, Trash, versions and diagnostics. Query commands print JSON with --json.

Install

Distribution Package
Debian, Ubuntu 24.04 or newer .deb from the latest release
Fedora 44 or newer .rpm from the latest release
Arch Linux proton-drive-for-linux (also -bin and -git) in the AUR
Anything else Build from source
sudo apt install ./proton-drive-linux_*.deb        # Debian, Ubuntu
sudo dnf install ./proton-drive-linux-*.rpm        # Fedora
paru -S proton-drive-for-linux                     # Arch

Then open Proton Drive from your applications menu and sign in. The app starts the background service, and your files appear in ~/ProtonDrive.

Signing in from a terminal instead? pdfs login stores the session but does not start the service. Enable it once:

pdfs login
systemctl --user enable --now proton-drive.service
pdfs status

docs/INSTALL.md has the requirements, optional extras (tray on GNOME, RAW and video thumbnails), headless use and uninstalling.

Documentation

User guide Everything the app, tray and launcher do
Command-line reference Every pdfs command and scripting with --json
Configuration config.json, file locations, environment variables, the service
Troubleshooting Diagnosing problems and fixing common ones
Recovering on a new computer Getting your synced folders back after a reinstall or a lost machine
Changelog What changed in each release

For contributors: development guide, architecture, testing, translating, roadmap and the bug ledger. The documentation index lists everything.

Screenshots

My files
My files
Photos timeline
Photos
Photos places map
Places
Computers
Computers
Sync folders
Sync
Sync history showing resolved conflicts
Sync history
Search launcher
Search launcher
Search launcher in fzf
Search launcher in fzf
Sign in
Sign in

How it works

A background service (proton-drive.service, the pdfs daemon command) holds your session, mounts ~/ProtonDrive through FUSE, runs the upload queue and the sync engine, and follows Proton's event stream for changes made elsewhere. The app, the tray, the launcher and the CLI are clients of that service over a local socket. Everything is end-to-end encrypted with your Proton keys before it leaves the machine, through a Rust implementation of Proton's Drive SDK.

Files you open are decrypted into a local cache so programs can read them. What that means for the security of the machine is spelled out in the threat model.

Contributing

Bug reports, translations and patches are welcome. See CONTRIBUTING.md for the workflow and the checks CI runs, and SECURITY.md to report a vulnerability privately.

License

Released under the MIT License.

The Places map uses GeoNames data (CC BY 4.0) and Natural Earth outlines (public domain). The optional street map comes from OpenFreeMap, © OpenStreetMap contributors.

Proton Drive is a service of Proton AG. This project is an independent client and carries no affiliation with or endorsement from Proton AG.

S
Description
No description provided
Readme MIT
22 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 94.4%
Python 4.6%
Shell 0.6%
CSS 0.3%
Nix 0.1%