A modern, cross-platform desktop application for managing S3-compatible object storage. Built with Tauri and React, S3 Deck provides an intuitive file manager interface for browsing, uploading, and managing files in your S3 buckets.
- Multi-bucket Management: Connect to multiple S3-compatible services
- Drag & Drop Upload: Easy file and folder uploads with progress tracking
- File Browser: Navigate through your buckets like a local file system
- Dark Mode Support: Beautiful light and dark themes
- Cross-platform: Available for Windows, macOS, and Linux
- S3-Compatible: Works with AWS S3, MinIO, DigitalOcean Spaces, and more
- Auto-refresh: Real-time updates of your bucket contents
- File Properties: View detailed metadata and object information
- Folder Operations: Create, navigate, and manage folders
- Search & Filter: Find files quickly with built-in search
- Smart Context Menus: Right-click actions with intelligent positioning
- File & Folder Rename: Rename files and folders with smart content-type detection
- Settings Management: Customizable app preferences
- Upload Progress: Real-time upload status and error reporting
- Modern UI: Built with Tailwind CSS v4 for enhanced performance and styling
See S3 Deck in action - browse buckets, upload files, and manage your S3 storage with ease.
- Node.js 18+ and npm
- Rust (for building Tauri apps)
Works on all platforms - no prerequisites required:
# Install latest version
curl -fsSL https://raw.githubusercontent.com/ODudek/s3deck/main/install.sh | bash
# Install specific version
curl -fsSL https://raw.githubusercontent.com/ODudek/s3deck/main/install.sh | bash -s -- -v v0.3.0
This installer will:
- β Auto-detect your OS and architecture
- β Download the correct pre-built binary
- β Fix macOS security warnings automatically
- β Install to the right location for your platform
- β Create shortcuts and verify installation
- β No prerequisites - just works out of the box!
Installation locations:
- π macOS:
/Applications/S3Deck.app
- π§ Linux:
~/.local/bin/s3deck
+ desktop entry - πͺ Windows: Launches MSI installer
Alternatively, download directly from Releases:
- πͺ Windows:
.msi
installer - π macOS Intel:
.dmg
(x64) - π macOS Apple Silicon:
.dmg
(aarch64) - π§ Linux:
.AppImage
or.deb
packages
macOS Note: If you see "app is damaged" warning, it's normal for unsigned apps. The installer fixes this automatically.
Manual Installation:
Click to expand manual installation instructions
- Go to Releases and download for your platform
- macOS: If you see "app is damaged" error, run:
xattr -cr S3Deck.app
- Windows: Run the installer (.msi or .exe)
- Linux: Install the .deb, .rpm, or .AppImage file
Build from Source:
Click to expand build instructions
-
Clone the repository:
git clone https://github.com/ODudek/s3deck.git cd s3deck
-
Install dependencies:
npm install
-
Start the development environment:
npm run start # or ./dev.sh
Build the desktop application:
npm run tauri build
This will create platform-specific installers in src-tauri/target/release/bundle/
.
S3 Deck uses a modern desktop application architecture:
- Frontend: React + Vite + Tailwind CSS v4
- Backend: Rust with AWS S3 SDK
- Desktop Shell: Tauri (Rust-based)
- Communication: Direct Tauri IPC
- Configuration: JSON-based local storage
- UI Framework: Organized component system with reusable UI components
βββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β React UI βββββΆβ Tauri + Rust β
β (Frontend) β β (Desktop + S3 Operations) β
β - Modular β β β
β - Organized β β β
β - Reusable UI β β β
βββββββββββββββββββ ββββββββββββββββββββββββββββββββ
npm run dev
- Start Vite development servernpm run dev:tauri
- Start Tauri in development mode (includes Vite)npm start
- Start development environmentnpm run build
- Build frontend for productionnpm run tauri build
- Build desktop application
s3deck/
βββ src/ # React frontend (REFACTORED)
β βββ components/ # Modular component architecture
β β βββ layout/ # Layout components (MainLayout, AppHeader)
β β βββ navigation/ # Navigation (Breadcrumbs, SearchInput)
β β βββ object/ # Object management (ObjectsList, dragdrop/)
β β βββ bucket/ # Bucket management components
β β βββ ui/ # Reusable UI (Button, Modal, Input, etc.)
β β βββ modals/ # Modal dialogs
β β βββ common/ # Shared components (ViewManager)
β β βββ ... # Legacy components
β βββ hooks/ # Custom React hooks
β β βββ s3/ # S3-specific hooks (useBuckets, useObjects, etc.)
β β βββ ui/ # UI hooks (useContextMenu)
β β βββ ... # Other hooks
β βββ contexts/ # React contexts
β βββ utils/ # Utility functions (formatters, errorUtils)
β βββ ...
βββ src-tauri/ # Tauri application (UNCHANGED)
β βββ src/ # Rust backend
β β βββ main.rs # Entry point
β β βββ lib.rs # Library entry point
β β βββ commands.rs # Tauri commands
β β βββ s3_client.rs # S3 operations
β β βββ config.rs # Configuration management
β β βββ models.rs # Data models
β βββ Cargo.toml # Rust dependencies
β βββ tauri.conf.json # Tauri configuration
βββ REFACTORING_PLAN.md # Detailed refactoring documentation
βββ ...
S3 Deck stores bucket configurations in ~/.s3deck/config.json
:
{
"buckets": [
{
"id": "unique-id",
"name": "my-bucket",
"displayName": "My S3 Bucket",
"region": "us-east-1",
"accessKey": "YOUR_ACCESS_KEY",
"secretKey": "YOUR_SECRET_KEY",
"endpoint": "https://s3.amazonaws.com"
}
]
}
- AWS S3
- MinIO
- DigitalOcean Spaces
- Backblaze B2
- Wasabi
- Any S3-compatible service
The Rust backend provides the following Tauri commands for the frontend:
Command | Description |
---|---|
get_buckets |
List configured buckets |
add_bucket |
Add bucket configuration |
update_bucket |
Update bucket configuration |
delete_bucket_config |
Delete bucket configuration |
list_objects |
List objects in bucket |
upload_files |
Upload files to bucket |
delete_object |
Delete object or folder |
get_object_metadata |
Get object metadata |
rename_object |
Rename files and folders |
count_files |
Count files for upload progress |
S3 Deck supports three theme modes:
- Light - Clean, bright interface
- Dark - Easy on the eyes
- Auto - Follows system preference
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- π¨ Leverage existing UI components from
src/components/ui/
- π£ Follow the modular hook pattern for new S3 functionality
- π Check
CLAUDE.md
for detailed development guidelines
This project is licensed under the MIT License - see the LICENSE file for details.
Please use GitHub Issues to report bugs or request features.
- Built with Tauri
- UI powered by React and Tailwind CSS
- Backend powered by Rust and AWS SDK for Rust
If you find S3 Deck useful, please consider giving it a star on GitHub!
Made with β€οΈ by the S3 Deck team