A cross-platform desktop app for managing S3-compatible object storage.
s3Manager is a native-feeling desktop client for browsing and managing buckets and objects across Amazon S3, Hetzner Object Storage, and any S3-compatible provider. It keeps your access keys in the operating-system keychain and stores everything else in a local SQLite database — no cloud account, no telemetry.
- Multiple accounts & providers — Amazon S3, Hetzner Object Storage, or any custom S3-compatible endpoint, each with its own credentials and region.
- File browsing — navigate buckets, prefixes, and objects with breadcrumbs.
- Object operations — upload, download, delete, copy a presigned URL, move, rename, and create folders.
- Presigned upload links — generate time-limited PUT URLs for handing off uploads.
- Metadata editor — edit
Content-Type,Cache-Control,Content-Disposition, and customx-amz-meta-*headers. - CORS editor — view and edit a bucket's CORS configuration as JSON.
- Object Lock — bucket default retention plus per-object retention and legal hold.
- Visibility & ACLs — toggle objects public/private and edit per-grantee ACLs.
- Create bucket — with Object Lock and versioning options, in the account's region.
- Sync — bucket ↔ bucket and local ↔ bucket, with a global status indicator.
- Dashboard — a scan-free, click-through overview of your accounts and buckets.
See docs/ROADMAP.md for what's shipped and what's planned.
- Electron + Electron Forge (Vite plugin)
- React 19 + TypeScript + Tailwind CSS 4
- TanStack Query for data fetching/caching
- AWS SDK for JavaScript v3 (
@aws-sdk/client-s3) - node-sqlite3-wasm for local storage
- Credentials stored in the OS keychain
- Node.js 22 or newer
- npm
git clone https://github.com/NoiXdev/s3Manager.git
cd s3Manager
npm install
npm startnpm start launches the app in development mode with hot-reload for the renderer.
Note: changes to main-process IPC handlers require a full restart of
npm start— Vite only hot-reloads the renderer.
| Command | Description |
|---|---|
npm start |
Run the app in development mode |
npm test |
Run the test suite (Vitest) once |
npm run test:watch |
Run tests in watch mode |
npm run lint |
Lint with ESLint |
npm run package |
Package the app without creating installers |
npm run make |
Build distributable installers for the current platform |
npm run generate:icons |
Regenerate app/DMG icons from source |
npm run generate:licenses |
Regenerate the bundled third-party license list |
npm run makeElectron Forge produces platform-specific artifacts:
- macOS — DMG
- Windows — Squirrel installer
- Linux —
.deband.rpm
macOS code signing and notarization run automatically when the relevant Apple
credentials are present (e.g. in CI); a local npm run make produces an unsigned build.
See docs/macos-signing.md for details.
src/
├── main/ # Electron main process
│ ├── s3/ # S3 operations (buckets, objects, sync, CORS, object lock, …)
│ ├── storage/ # SQLite database & repositories
│ ├── settings/ # App settings
│ ├── ipc/ # IPC channel definitions & handler registration
│ └── shared/ # Code shared between main and renderer
└── renderer/ # React UI
├── components/ # Feature components (accounts, buckets, files, sync, …)
├── hooks/ # TanStack Query hooks
├── lib/ # Renderer utilities
└── types/ # Shared types
MIT © NoiX