Skip to content
/ s3deck Public

A modern, cross-platform desktop application for managing S3-compatible object storage with drag & drop uploads, dark mode, and multi-bucket support

License

Notifications You must be signed in to change notification settings

ODudek/s3deck

Repository files navigation

S3 Deck

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.

Platforms License CI

✨ Features

  • 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

πŸ“Έ Preview

S3 Deck Demo

See S3 Deck in action - browse buckets, upload files, and manage your S3 storage with ease.

πŸš€ Quick Start

Prerequisites

  • Node.js 18+ and npm
  • Rust (for building Tauri apps)

Installation

πŸš€ One-Line Universal Installer

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

πŸ“¦ Manual Download

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
  1. Go to Releases and download for your platform
  2. macOS: If you see "app is damaged" error, run: xattr -cr S3Deck.app
  3. Windows: Run the installer (.msi or .exe)
  4. Linux: Install the .deb, .rpm, or .AppImage file

Build from Source:

Click to expand build instructions
  1. Clone the repository:

    git clone https://github.com/ODudek/s3deck.git
    cd s3deck
  2. Install dependencies:

    npm install
  3. Start the development environment:

    npm run start
    # or
    ./dev.sh

Building for Production

Build the desktop application:

npm run tauri build

This will create platform-specific installers in src-tauri/target/release/bundle/.

πŸ—οΈ Architecture

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  β”‚    β”‚                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ Development

Available Scripts

  • npm run dev - Start Vite development server
  • npm run dev:tauri - Start Tauri in development mode (includes Vite)
  • npm start - Start development environment
  • npm run build - Build frontend for production
  • npm run tauri build - Build desktop application

Project Structure

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
└── ...

βš™οΈ Configuration

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"
    }
  ]
}

Supported S3 Services

  • AWS S3
  • MinIO
  • DigitalOcean Spaces
  • Backblaze B2
  • Wasabi
  • Any S3-compatible service

πŸ”§ Tauri Commands

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

🎨 Themes

S3 Deck supports three theme modes:

  • Light - Clean, bright interface
  • Dark - Easy on the eyes
  • Auto - Follows system preference

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Tips:

  • 🎨 Leverage existing UI components from src/components/ui/
  • 🎣 Follow the modular hook pattern for new S3 functionality
  • πŸ“‹ Check CLAUDE.md for detailed development guidelines

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ› Bug Reports & Feature Requests

Please use GitHub Issues to report bugs or request features.

πŸ™ Acknowledgments

⭐ Support

If you find S3 Deck useful, please consider giving it a star on GitHub!


Made with ❀️ by the S3 Deck team

About

A modern, cross-platform desktop application for managing S3-compatible object storage with drag & drop uploads, dark mode, and multi-bucket support

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •