Version 0.3.4, released September 3, 2026
R2 Client is a desktop app for Cloudflare R2, AWS S3, MinIO, and RustFS. Browse and preview objects, move them between providers, or mount a bucket as a local drive.
brew install dickwu/tap/r2
Also for Windows and Linux. Free and open source under the MIT license.
The folder in Finder is the bucket, mounted as a drive. Save a file there and the app uploads it in the background.
Pick a bucket and a folder, and the bucket shows up in Finder, Explorer, or your file manager. Open, save, rename, and delete files there. Changes upload in the background, renames happen inside the bucket with no re-upload, and a toggle makes any mount read-only.
The app serves the mount itself over NFS on localhost, so there is nothing to install: no macFUSE, no WinFsp, no kernel extensions. Reads arrive in 4 MiB chunks with read-ahead and a per-mount cache, and every mount transfer shows live progress in the transfer dock.
Select files in one account and send them to another, even on a different provider. Moves within one provider copy server-side. Moves across providers stream through the app with no temp files and no local disk hit.
Up to five transfers run at once with four parallel parts each. Pause, resume, or cancel any of them, and the queue keeps going after you close the dialog.
Images, video, PDFs, Markdown, and code open inline without a download. Code uses the Monaco editor with syntax highlighting, and video thumbnails are generated with ffmpeg when it is installed.
Provider-aware sign-in, endpoints, path-style rules, and link builders.
Any other S3-compatible service works with the AWS or MinIO account type and a custom endpoint.
| Setting | R2Cloudflare R2 | S3AWS S3 | MMinIO | rsRustFS |
|---|---|---|---|---|
| Credentials | Account ID and API token, plus an access key pair. Several tokens per account, each with its own bucket access. | Access key pair for an IAM user with S3 permissions. | Access key pair from your deployment. | Access key pair from your deployment. |
| Endpoint | Derived from your account ID. | A region, or a custom endpoint for S3 clones. | Your host and port, http or https. | Your host and port, http or https. |
| Path-style | Not needed. | Optional. | Optional. | Always on. |
| Links | Signed URLs, and a public domain per bucket. | Signed URLs, and a public domain per bucket. | Signed URLs. | Signed URLs. |
Endpoint and domain fields accept full URLs and normalize them. Buckets can be fetched with one click or added by name.
Native builds for macOS, Windows, and Linux, with auto-updates on every platform.
Use Homebrew on macOS, or download the installer for your platform. Building from source needs Bun and Rust.
The Add Account dialog opens on first launch. Pick a provider, paste your credentials, and click Load to fetch your buckets.
Click a bucket in the sidebar to browse it. Upload, preview, rename, and copy signed or public links from the file list.
Open a bucket's menu and choose Mount as local drive to work in Finder, or select files and choose Batch Move to send them to another account.
# Install with Homebrew brew install dickwu/tap/r2 # Optional: ffmpeg enables video thumbnails brew install ffmpeg # Installed from the .dmg instead and macOS blocked it? # System Settings → Privacy & Security → Open Anyway, or: sudo xattr -d com.apple.quarantine /Applications/r2.app/
# Debian / Ubuntu sudo dpkg -i r2_*_amd64.deb # Fedora / RHEL sudo rpm -i r2-*.x86_64.rpm # Or run the AppImage directly chmod +x r2_*_amd64.AppImage && ./r2_*_amd64.AppImage # Optional: ffmpeg for video thumbnails, nfs-utils for mounting buckets sudo apt install ffmpeg nfs-common # Debian / Ubuntu sudo dnf install ffmpeg nfs-utils # Fedora
# Run the .msi or the -setup.exe installer, then launch R2 Client # from the Start menu. Auto-updates are on by default. # Optional: ffmpeg enables video thumbnails winget install Gyan.FFmpeg choco install ffmpeg # Optional: mounting buckets needs the Client for NFS feature (Pro / Enterprise) Enable-WindowsOptionalFeature -Online -FeatureName ServicesForNFS-ClientOnly
# Clone and install git clone https://github.com/dickwu/r2.git cd r2 bun install # Run the dev build bun run tauri dev # Or produce a release build bun run tauri build
The main changes from recent releases. Every release ships for all three platforms and installs itself through auto-update.
One folder the provider refuses to list no longer takes the whole sync down. The crawl skips it, finishes, and lists that folder live so it shows the real error instead of appearing empty. List requests retry transient failures with exponential backoff, a later successful sync clears an earlier failure, and error messages now carry the provider's own code and message.
A status-bar button, also in the command palette, opens a prefilled GitHub issue with your app version, OS, and the errors recorded this session. Credential-shaped strings are redacted as they are logged, you review the draft first, and nothing is filed until you press Submit on GitHub. S3 failures now report the provider's own error instead of a bare "service error".
Reads from a mounted bucket fetch 4 MiB chunks with read-ahead and a per-mount cache instead of one request per 128 KiB. Files copied into a mount show up in the transfer dock with live bytes, speed, and ETA. Mounting now works on Windows Pro and Enterprise through the built-in Client for NFS, with each bucket on its own drive letter.
Save, rename, move, and delete files right in a mounted folder. Changes upload in the background, renames happen server-side with no re-upload, and unmounting waits for pending uploads. Each mount has a read-only toggle, and a Settings panel manages every active mount.
Every bucket gets a Mount as local drive action. The app serves it as an NFSv3 filesystem on 127.0.0.1 and the OS's built-in NFS client mounts it. Works across R2, S3, MinIO, and RustFS with no macFUSE and no kernel extensions.
Uploading a folder preserves its nested directories on every OS, fixing a Windows bug where subfolders collapsed into backslash-prefixed names. The selected folder's own name stays as the top-level prefix, so site/ lands as site/css/app.css.
Parallel HTTP Range requests: files of 10 MB or more are split into 8 MB chunks with per-chunk progress and an always-visible status bar.
Every folder opens in under a second regardless of bucket size, on buckets with millions of objects across R2, AWS, and MinIO.
Something missing? Open an issue and it will be answered there.
Cloudflare R2, AWS S3, MinIO, and RustFS, plus any other S3-compatible service through a custom endpoint. You can add several accounts per provider, and R2 accounts can hold several API tokens with different bucket access.
Yes. It is free and open source under the MIT license, and no account is needed to download or use it. The source is at github.com/dickwu/r2.
macOS, Windows, and Linux, with native builds and auto-updates for each. On macOS you can also install it with Homebrew: brew install dickwu/tap/r2.
Yes. Pick a bucket, choose a folder, and it appears in Finder or your file manager as a writable drive; a toggle makes it read-only. The app serves the mount itself over NFS on localhost, so there is nothing else to install. macOS works out of the box, Linux needs nfs-utils, and Windows Pro or Enterprise uses the built-in Client for NFS and mounts to a drive letter.
Select files and choose Batch Move with another account as the destination. Moves within one provider copy server-side; moves across providers stream through the app without temp files. Up to five transfers run at once with four parallel parts each, and every transfer can be paused, resumed, or cancelled.
Images, video, PDFs, Markdown, and code open inline. Code uses the Monaco editor with syntax highlighting for more than 30 languages, and video thumbnails are generated with ffmpeg when it is installed.
The app opens a GitHub issue draft in your browser, prefilled with your app version, operating system, and the errors it recorded during the session. Access keys and secrets are redacted as each line is logged, you can review everything first, and nothing is sent until you submit the issue on GitHub.
No. R2 Client is a Tauri app with a Rust backend and a React frontend, so the binary is small and it opens quickly.
Native builds for every desktop OS. No account required, and updates install themselves.
.dmg for Apple Silicon and Intel, or brew install dickwu/tap/r2
Download
.msi or .exe installer, 64-bit
Download
.deb, .rpm, or .AppImage, x86_64
Download
Every build is signed for auto-update. MIT licensed. Older releases