A desktop S3 Browser built with Electron, Node.js, Express, React, Vite, TypeScript, TailwindCSS, Zustand, and AWS SDK v3.
- Multiple encrypted S3 connection profiles for AWS S3, Cloudflare R2, MinIO, Wasabi, DigitalOcean Spaces, and custom S3-compatible endpoints.
- Bucket navigation, folder browsing, breadcrumbs, searchable sortable file table, multi-select, context menus, dark/light/system theme.
- Upload files, upload folders recursively, drag-and-drop upload, multipart upload, upload queue, progress updates, retry for multipart parts, abort support.
- Download files and folders recursively with progress and parallel transfer queue.
- Create folders, rename files/folders, delete files/folders, copy object URLs, generate one-hour pre-signed URLs.
- Preview images, text, JSON, and PDFs.
- Bucket statistics dashboard, pagination for large buckets, auto-refresh, recent connection state, import/export profiles, connection testing.
- Secure Electron configuration with context isolation, disabled renderer Node integration, sandboxing, and a typed preload bridge.
npm installnpm run devThe command starts Vite, compiles the Electron main/preload TypeScript, and launches Electron once both are ready.
npm run buildnpm run dist:win
npm run dist:linux
npm run dist:mac
npm run dist:allnpm run dist remains an alias for the Windows build. Windows packaging produces NSIS and portable executables. Linux packaging produces AppImage, DEB, RPM, and tar.gz artifacts. macOS packaging produces DMG and ZIP artifacts and should be run on macOS for final distributable builds, signing, and notarization. All artifacts are written to release/.
- Create or choose an S3 bucket in AWS.
- Create an IAM user or role with the S3 actions needed by your workflow:
s3:ListAllMyBuckets,s3:ListBucket,s3:GetObject,s3:PutObject,s3:DeleteObject,s3:AbortMultipartUpload,s3:CreateMultipartUpload, ands3:ListMultipartUploadParts. - Create an access key for the IAM user.
- In the app, choose provider
AWS S3, enter the access key, secret key, region, and optionally the default bucket.
- In Cloudflare, create an R2 bucket.
- Create an R2 API token with object read/write permissions.
- Use region
auto. - Use endpoint
https://<account-id>.r2.cloudflarestorage.com. - Enable path-style requests in the profile.
- Start MinIO and create a bucket.
- Use endpoint such as
http://127.0.0.1:9000. - Use region
us-east-1unless your deployment specifies another region. - Enable path-style requests.
Credentials are encrypted with Electron safeStorage and stored under the app user-data directory. Secret keys are never exposed through the renderer profile list and are redacted from logs.
See docs/mockup.svg.