Version 0.3.4, released September 3, 2026

Every bucket you own, in one native app.

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.

Download for macOS
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.

Mount a bucket as a local drive.

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.

  • macOSWorks out of the box, no extra software.
  • LinuxNeeds nfs-utils. If your distro wants root for NFS mounts, the app shows the exact command to run once.
  • WindowsPro and Enterprise mount to a drive letter through the built-in Client for NFS. New in 0.3.2.
assets-prod
Cloudflare R2
reads, cached in 4 MiB chunks
saves, uploaded in the background
assets-prod
~/CloudMounts/assets-prod
NFS on 127.0.0.1, never reachable from the network Read-only toggle per mount Manage mounts in Settings

Move files between providers.

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.

production / photos
Cloudflare R2
streamed, no temp files
archive / photos
AWS S3
2026/launch/launch-trailer.mp4done
2026/launch/press-kit.pdfpart 3 of 4
2026/launch/hero-background.webppaused

Preview files where they live.

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.

Imagesjpg png gif webp svg bmp ico
Videomp4 webm mov m4v ogg thumbnails with ffmpeg
Documentspdf md txt rst log csv
Codets tsx js jsx css scss html vue svelte json yaml toml xml sql sh ps1 and more, in Monaco

Also in the box.

  • Resumable multipart uploadsDrop a 10 GB file, close the laptop, and pick up where you left off. Parts upload in parallel.
  • Fast browsing on huge bucketsFolders open in under a second on buckets with millions of objects, backed by a local cache. Since 0.3.4, sync keeps going when one folder cannot be listed.
  • Batch operationsSelect hundreds of files and download, move, delete, or rename them at once, with pause, resume, and cancel.
  • Several accounts and tokensAdd as many accounts as you like. An R2 account can hold several API tokens, each limited to its own buckets.
  • Signed and public linksCopy a provider-aware URL with one shortcut. Custom domains per bucket on R2 and S3.
  • Report a problemOne click opens a GitHub issue draft with your version, OS, and recent app errors, secrets redacted. Nothing is sent until you submit it.
  • Native, not ElectronA Tauri app with a Rust backend: small binary, quick launch, low memory.
  • Auto-updates and themesIn-app update checks, a Homebrew tap on macOS, and light and dark themes.

Four providers, configured the way each one expects.

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.

Install in a minute.

Native builds for macOS, Windows, and Linux, with auto-updates on every platform.

  1. Install R2 Client

    Use Homebrew on macOS, or download the installer for your platform. Building from source needs Bun and Rust.

  2. Add an account

    The Add Account dialog opens on first launch. Pick a provider, paste your credentials, and click Load to fetch your buckets.

  3. Browse, preview, and share

    Click a bucket in the sidebar to browse it. Upload, preview, rename, and copy signed or public links from the file list.

  4. Mount or move

    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/

What changed recently.

The main changes from recent releases. Every release ships for all three platforms and installs itself through auto-update.

  1. v0.3.4
    September 3, 2026
    Latest

    Background sync survives a folder it cannot list

    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.

  2. v0.3.3
    September 2, 2026

    Report a problem

    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".

  3. v0.3.2
    August 28, 2026

    Faster mounts, live mount progress, Windows mounting

    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.

  4. v0.3.1
    August 7, 2026

    Mounted buckets are writable

    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.

  5. v0.3.0
    August 6, 2026

    Mount buckets as local drives

    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.

  6. v0.2.17
    June 9, 2026

    Folder uploads keep their structure

    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.

  7. v0.1.71
    March 22, 2026

    Multi-threaded download engine

    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.

  8. v0.1.68
    March 18, 2026

    Progressive lazy sync

    Every folder opens in under a second regardless of bucket size, on buckets with millions of objects across R2, AWS, and MinIO.

All releases on GitHub

Questions people ask.

Something missing? Open an issue and it will be answered there.

What providers does R2 Client support?

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.

Is R2 Client free and open source?

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.

Which operating systems does it run on?

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.

Can I mount a bucket as a local drive?

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.

How does it move files between providers?

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.

What file types can it preview?

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.

What happens when I use Report a problem?

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.

Is it built on Electron?

No. R2 Client is a Tauri app with a Rust backend and a React frontend, so the binary is small and it opens quickly.

Get R2 Client.

Native builds for every desktop OS. No account required, and updates install themselves.

Every build is signed for auto-update. MIT licensed. Older releases