A native S3 browser for macOS. Browse, preview, share, and manage the objects in your buckets.
Website: bucketdeck.com
Bucketdeck is an early macOS app for Amazon S3 and S3-compatible object stores. It was formerly called OpenBucket. Every connection is read-only until you turn on Allow changes for it. It uses SwiftUI, the macOS 26 Liquid Glass appearance, and Soto behind a replaceable S3 adapter. It stays focused on S3 rather than adding unrelated file protocols.
Use the Download for macOS button above: it always fetches the newest signed and notarized Bucketdeck-macOS.dmg from GitHub Releases. Open the DMG, drag Bucketdeck to Applications, and launch it from there. Bucketdeck runs on Apple silicon and Intel Macs with macOS 26 or later; every release lists its changes and a SHA-256 checksum. See how releases are prepared.
Or install it with Homebrew from Koative's tap, which follows each new release:
brew trust koative/tap
brew install --cask koative/tap/bucketdeckThe screenshots show a real Bucketdeck window connected to a local Garage server, seeded with the fictional demo objects from docs/demo-assets.
| Area | Current behavior |
|---|---|
| Connections | Multiple profiles; endpoint shapes for Amazon S3, Cloudflare R2, Backblaze B2, Wasabi, DigitalOcean Spaces and Hetzner Object Storage, so they need only a region or an R2 account ID; any other HTTP or HTTPS endpoint with region and addressing style; access keys with an optional session token or a named AWS CLI profile (static keys, roles, IAM Identity Center after aws sso login) |
| Restricted accounts | Open a known bucket without account-wide ListBuckets permission; start in a chosen folder |
| Browsing | Grid and sortable native table, breadcrumb path, folder navigation, s3:// links (also opened from other apps) and S3 console URLs in Go to Location, favorites and recent folders per connection, filter and search below the current folder, refresh, incremental ListObjectsV2 loading |
| Selection and commands | Native multi-selection in grid and list (⌘A, ⇧-click, ⌘-click); menu commands and shortcuts for the enclosing folder (⌘↑), back and forward (⌘[ ⌘]), grid and list (⌘1 ⌘2), Find (⌘F) and the Info panel (⌥⌘I); context menus; Copy S3 URI |
| Media and details | Image and video thumbnails with a Show Previews toggle; Quick Look with Space or ⌘Y; inline video playback; HEAD details, user metadata, tags and photo EXIF in the Info panel |
| Versions | Version history per file with Quick Look, download and restore; Show Deleted Files (⇧⌘.) and Browse As Of a date on versioned buckets |
| Downloads and links | File, batch and whole-folder downloads with byte progress, cancellation and failed-key reporting; several transfers at once, each moving four files at a time; drag files out to Finder; presigned share links (15 minutes to 7 days) with QR code |
| Changes | With Allow changes on: upload files and folders (⌘U, toolbar or Finder drop; large files in multipart parts), New Folder (⇧⌘N), rename, Move To or drag items onto a folder, a parent in the path bar or a sidebar folder (hold ⌥ to copy instead), Delete (⌘⌫), restore versions and deleted files, edit content headers, metadata and tags. Existing names prompt Replace, Keep Both or Skip |
| Insight and sync | Storage Overview: treemap of a folder by size and kind, storage classes and largest files. Compare with Local Folder: checks a local copy against S3 by size and checksum, then optionally Update S3 or Update Mac with the new and changed files; nothing is deleted on either side, and replaced local files go to the Trash |
| Shortcuts | App Intents for opening a favorite or an s3:// location and copying a share link; favorites appear in Spotlight |
| Secrets | Access keys and session tokens in macOS Keychain; non-secret connection settings in a user-only profile file |
Continuous or two-way sync, Finder mounting, bucket management, permanent deletion of individual versions and non-S3 protocols are outside this preview. Compatibility details document endpoint paths, the S3 operations used, and provider test status; security details explain local storage, temporary files, and what changes S3.
After installing the app:
- Choose Add Connection.
- Pick the Provider and enter its region (for Cloudflare R2, the account ID instead); the endpoint fills in. For anything else, choose Other S3-compatible and enter the endpoint URL and region. For a custom service such as Garage, choose Path style if its buckets live beneath the endpoint path.
- Enter an access key and secret. Set Known bucket when the key cannot list all buckets. Starting folder is optional and opens a folder inside that bucket.
- Test the connection, save it, and browse. Use the toolbar's location action to jump directly to
s3://bucket/folder/. To upload or change files, edit the connection and turn on Allow changes.
The endpoint URL path and the starting folder are separate. For example, endpoint https://store.example.com/s3/, known bucket photos, and starting folder 2026/travel/ address objects under the bucket without dropping /s3/ from the signed request. A proxy must preserve the signed request path. See endpoint behavior.
Building from source requires macOS 26 or later and Xcode 27. Open Bucketdeck.xcodeproj, select the Bucketdeck scheme, and run it on your Mac. The Xcode project is committed; XcodeGen is needed only after changing project.yml:
xcodegen generate --spec project.ymlswift format lint --strict --recursive App AppTests Packages/Bucketdeck/Sources Packages/Bucketdeck/Tests
xcodebuild test -project Bucketdeck.xcodeproj -scheme Bucketdeck -destination 'platform=macOS' -derivedDataPath DerivedData -disableAutomaticPackageResolution CODE_SIGNING_ALLOWED=NO
swift test --package-path Packages/BucketdeckUnit tests need no AWS account. The optional live S3 test uses an isolated bucket and environment variables documented in compatibility testing. For every change outside site/, GitHub Actions runs the format check, app tests, package tests, and a check that the committed Xcode project matches project.yml on an Xcode 27 runner.
The website at bucketdeck.com lives in site/ and is built with Astro and Bun 1.4.3 or later:
cd site && bun install && bun run dev.github/workflows/site.yml builds it and deploys it to GitHub Pages on pushes to main that touch site/ (or the screenshots and app icon it uses), and again when a release is published so the page shows the newest version.
flowchart LR
UI[SwiftUI app] --> Core[BucketdeckCore]
UI --> Local[Profiles + Keychain]
Core --> Port[S3Repository protocol]
Port --> Adapter[BucketdeckS3 adapter]
Adapter --> Soto[Soto]
Soto --> Store[(S3 endpoint)]
BucketdeckCore owns S3 values and browsing state. BucketdeckS3 adapts Soto and keeps SDK types outside the UI. App contains SwiftUI and macOS storage; BucketdeckApp wires them together. The adapter boundary allows the SDK implementation to change without reshaping the browser.
Contributions are welcome; read CONTRIBUTING.md. Report vulnerabilities privately as described in SECURITY.md.
Copyright © 2026 Koative LLC. Bucketdeck is free software: you can redistribute and modify it under the terms of the GNU General Public License, version 3. Anyone who distributes a modified version must publish its source code under the same license. Releases up to and including v0.2.3 were published under the MIT License, and those releases keep it.
The Bucketdeck name and app icon identify Koative LLC's builds and are not covered by the license; a distributed fork needs its own name and icon.
Made by koative


