Skip to content

Mount cloud storage as native macOS volumes. Backblaze B2 buckets as Finder volumes via Apple FSKit. Pure Swift.

License

Notifications You must be signed in to change notification settings

ebreen/cloudmount

Repository files navigation

CloudMount -- Mount cloud storage as native macOS volumes.

Pure Swift macOS 26+ menu bar app that mounts Backblaze B2 buckets as local Finder volumes using Apple's FSKit framework. Browse, read, write, and delete files as if they were on a local disk. No FUSE, no kernel extensions, no Electron.

Install

Requirements

  • macOS 26 (Tahoe) or later
  • Enable the FSKit extension after install: System Settings -> General -> Login Items & Extensions -> CloudMount

Homebrew

brew install ebreen/cloudmount/cloudmount

GitHub Releases

Download the latest DMG: https://github.com/ebreen/cloudmount/releases

Open the DMG and drag CloudMount to Applications.

Build from source

brew install xcodegen create-dmg
xcodegen generate
xcodebuild archive \
  -project CloudMount.xcodeproj \
  -scheme CloudMount \
  -configuration Release \
  -archivePath build/CloudMount.xcarchive

First run

  • Launch CloudMount -- it appears in your menu bar (no Dock icon).
  • If the FSKit extension isn't enabled, an onboarding screen guides you to System Settings.
  • Open Settings -> Credentials and add your Backblaze B2 application key ID + key.
  • Add a bucket in Settings -> Buckets, choose a mount point (default: /Volumes/<bucket>).
  • Click Mount. Your bucket appears in Finder.

CLI

mount -t b2 b2://my-bucket /Volumes/my-bucket
diskutil unmount /Volumes/my-bucket

Features

  • Mount B2 buckets as native macOS volumes visible in Finder and diskutil.
  • Browse directories, open files, drag-and-drop -- it's a regular folder.
  • Read files on open, write back to B2 on close (download-on-open / write-on-close).
  • Delete files and create directories through Finder.
  • On-disk file cache with LRU eviction (default 1 GB, ~/Library/Caches/CloudMount/).
  • In-memory metadata cache reduces B2 API calls (default 5 min TTL).
  • macOS metadata suppression (.DS_Store, ._*, .Spotlight-V100, etc.) to minimize API noise.
  • Secure credential storage in macOS Keychain -- never in config files.
  • Automatic B2 token refresh with retry on auth expiry.
  • Upload retry with fresh upload URL on transient failures.
  • Sparkle auto-updates -- checks for new versions automatically.
  • Launch at Login option in Settings.
  • Signed, notarized, and stapled for Gatekeeper.
  • No Dock icon, minimal UI, lives entirely in the menu bar.

Architecture

CloudMount is a three-target Xcode project generated by XcodeGen:

CloudMount.app
├── CloudMount              Menu bar app (SwiftUI)
│   Manages accounts, settings, mount/unmount via Process,
│   monitors volume events via NSWorkspace notifications.
│
├── CloudMountExtension     FSKit filesystem extension (XPC)
│   Implements FSUnaryFileSystem for the b2:// URL scheme.
│   Handles all file operations: lookup, enumerate, read,
│   write, create, delete, rename. Runs sandboxed.
│
└── CloudMountKit           Shared framework
    B2 API client, auth manager, credential store,
    metadata cache, file cache, shared config.

The extension runs as an XPC service managed by macOS. When you mount a b2:// URL, the kernel routes filesystem operations to the extension. No daemon process, no socket IPC, no polling -- it's native.

File operations

Operation Strategy
Read Download to local staging on open, read from disk
Write Write to local staging, upload to B2 on close
Delete b2_delete_file_version (permanent)
Mkdir Zero-byte marker with application/x-directory content type
Rename Server-side copy + delete original
Dir rename Not supported (B2 limitation)

Known limitations

  • Backblaze B2 only -- S3-compatible providers planned.
  • Directory rename not supported -- B2 has no rename primitive; file rename uses copy+delete.
  • No symlinks or hard links -- B2 is a flat object store.

Privacy

CloudMount reads/writes only to the Keychain (credentials), App Group UserDefaults (mount configs), and your chosen mount points. No telemetry, no analytics, no network calls except to the B2 API and Sparkle update feed.

Related

  • Mountain Duck -- Commercial alternative that inspired this project.
  • rclone -- CLI tool for cloud storage (sync approach, not native mount).

License

MIT -- Eirik Breen (ebreen)

About

Mount cloud storage as native macOS volumes. Backblaze B2 buckets as Finder volumes via Apple FSKit. Pure Swift.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages