
For months we had a problem that will sound familiar to anyone running infrastructure across more than one cloud: files living in AWS S3 and in Vultr Object Storage, a team that needed to browse and manage them, and exactly zero desire to hand out cloud-console credentials to everyone who needed to download a PDF.
The AWS console is overkill for "find this file and share it". MinIO's console is great — but it only speaks to MinIO. Desktop clients like Cyberduck put credentials on every laptop. What we wanted was simple: one web app, self-hosted, where each person logs in with their own account and works with any S3-compatible storage.
So we built it. And after using it daily at work for months, we've now released it as open source under MIT.
S3 Explorer is a MinIO-style web console that works with any S3-compatible endpoint: AWS S3, MinIO, Cloudflare R2, Backblaze B2, Vultr, Wasabi, DigitalOcean Spaces. It's multi-user, runs on your own server as a two-container Docker Compose stack (Node app + Caddy with automatic TLS), and stays deliberately boring on the inside: TypeScript, Express, SQLite, and a framework-less vanilla TS frontend. No React, no build pipeline drama — tsc and done.
Highlights:
Early on we made the call that shaped the whole architecture: the server never stores S3 credentials. Not encrypted, not hashed — it simply doesn't have them.
Your access keys live in a vault encrypted in your browser (AES-256-GCM, key derived from a passphrase with PBKDF2) and travel to the server only as transient per-request headers, which are never persisted or logged. The server is a smart proxy with authentication, not a credential store. If someone walks away with the server's database, they get password hashes and TOTP secrets encrypted at rest — and zero S3 keys, because there are none to steal.
The authentication layer around that is deliberately strict: mandatory TOTP two-factor enrollment on first login (with replay prevention), argon2id password hashing, single-use recovery codes, login rate limiting, and SSRF protection that blocks cloud-metadata endpoints — because an app that accepts arbitrary S3 endpoints from users is one careless request away from handing out your IAM role credentials.
The newest release (v1.3.0/v1.4.0) makes S3 Explorer operable by AI agents, and we think this is where it gets genuinely interesting.
Two pieces make it work:
Personal Access Tokens — scoped Bearer tokens (read / write) with optional expiry, one-time display, instant revocation, and per-IP rate limiting. Machine auth, done properly.
A built-in MCP server (s3-explorer-mcp) that any MCP client — Claude Code, Claude Desktop, and friends — can launch to get six tools: list_buckets, browse, search_files, presign_url, upload_file, delete_object.
The security model composes beautifully here: the agent authenticates with a scoped token, your S3 credentials stay in the MCP client's local config, and the server still stores nothing. Give an agent a read token and it can search and share files but physically cannot delete anything — the scope is enforced route by route on the server, never inferred.
The repo also ships AGENTS.md, llms.txt, and a full API reference, so coding agents can orient themselves without spelunking.
Taking the project from a private repo to a public release taught us a few things worth passing on:
It's MIT, it's tested (321 tests), and contributions are welcome — internationalization is one dictionary file away, and there are good first issues waiting. If it solves a problem for you, a ⭐ on GitHub genuinely helps the project find its people.