Built so security teams sign off.

S3 Viewer is designed to be the kind of tool that doesn't add new attack surface. Credentials are encrypted in your browser before they reach us and decrypted only to run the operation you asked for. Uploads stream through our server into your bucket without being stored; downloads go straight from your bucket to the browser. No per-person IAM users to rotate at off-boarding. MIT-licensed and self-hostable inside your own VPC.

  • Credentials encrypted in your browser — decrypted only in memory, to sign
  • Object bytes are never stored — uploads stream through, downloads go bucket to browser
  • MIT-licensed and self-hostable inside your VPC

Why teams pick S3 Viewer

A tool you can hand to your security review.

Client-encrypted credentials

Access keys are encrypted in your browser before they are sent — AES-256-GCM with the key wrapped using RSA-OAEP (SHA-256). Decrypted in memory only to run the operation you asked for, then discarded. They never come back to the browser, never appear in logs, never return in API responses.

Object bytes are never stored

Uploads stream through our API into your bucket in memory and are discarded as they go — no disk, no cache, no object database — which is why your bucket needs no CORS rule or other setting. Downloads and previews run bucket-to-browser over 15-minute presigned URLs and never touch us at all.

No IAM users to rotate

Members aren't IAM users — they sign in to S3 Viewer and their role is checked before any request is signed with the server's single credential. Off-boarding is removing them. Nothing permanent for attackers to lift, nothing for you to forget about.

Remove without key rotation

Removing a member cuts their access on the next request. No AWS keys to cycle, no policies to edit, no other teammates affected, no applications broken.

Self-host on your VPC

MIT-licensed. Self-host with PostgreSQL, your own RSA key pair, and HTTPS — credentials never have to leave your network.

Open and auditable

The full source is on GitHub. Read the encryption code, the request signing path, and the role checks for yourself before you trust it.

How it works

Three steps to your bucket.

No agents to install, no infrastructure to manage. Paste credentials and you're browsing.

  1. 01

    Connect with least-privilege keys

    Use an IAM policy scoped to the buckets and operations you actually need — typically s3:ListBucket, s3:GetObject, s3:PutObject, and s3:DeleteObject on specific bucket ARNs. If your token can't call ListBuckets, name the buckets it may reach when you add the server.

  2. 02

    Invite the team — no IAM users to mint

    Each member gets their own login and a role — Owner, Admin, Editor or Viewer — with a per-bucket override where you need one. Off-boarding is removing them from the members dialog; you don't rotate any AWS keys because they never had any.

  3. 03

    Self-host if compliance demands it

    Drop the open-source build inside your VPC. Credentials, sessions, and request signing all stay on your infrastructure — self-hosted, there is no third party in the request path at all.

FAQ

Common questions.

Direct answers we wish we'd had when picking a viewer.

Where are my AWS credentials stored?

Encrypted in your browser with a public key before they are sent to us, so we only ever store the ciphertext: AES-256-GCM with the data key wrapped using RSA-OAEP (SHA-256). They are decrypted in memory only to run the operation you asked for, then discarded. They never come back to the browser, never appear in an API response, and never enter a log. Self-hosted, you hold the private key.

Do you store the contents of my S3 objects?

No. Uploads pass through our API as a stream — the bytes go from your browser into your bucket in 25 MB parts, in memory, and are never written to disk or kept once the upload finishes; streaming them this way is what lets uploads work without any CORS or bucket configuration. Downloads and previews go straight from your bucket to your browser over 15-minute presigned URLs and never touch us. Rename and copy move object bytes only between two keys in your own bucket, server-side, on any provider — they never pass through anywhere else. Everything else the API does moves no object data: listing, metadata, signing download links, deletion, and supported bucket/folder creation. There is no object cache, no object database, and no object storage on our side.

How is this safer than minting IAM users for every teammate?

Per-person IAM users are permanent artifacts: keys to rotate, console access to manage, off-boarding to remember. S3 Viewer members aren't IAM users — they sign in to S3 Viewer, and their role is checked on our server before any request is signed with the server's single credential. Removing them cuts access immediately; no AWS keys to cycle, no policies to update, nothing for an attacker to lift from a stale config.

Can I run S3 Viewer entirely inside my own infrastructure?

Yes. The repo is open source under the MIT license. Self-host it behind your VPN or inside your VPC and credentials, sessions, and traffic never leave your network. The RSA key pair used to encrypt credentials is yours to generate and manage.

How do I off-board someone who's leaving?

Remove them in the members dialog. They lose access to that server on their next request. You don't have to rotate any AWS or R2 keys — they never held any. Other teammates and applications keep working.

What IAM policy should I use?

A least-privilege policy scoped to the buckets you want to expose, typically with s3:GetObject, s3:PutObject, s3:DeleteObject, and s3:ListBucket. For listing inside a specific prefix only, add a Condition on s3:prefix. The IAM-permissions how-to has a full example policy.

Is the source code open?

Yes. S3 Viewer is MIT-licensed and the source is on GitHub. Audit the encryption code, the request signing path, and the access checks for yourself. Fork it, contribute, or self-host without paying anyone.