Introduction
Full-stack S3 toolkit for the React ecosystem — server handlers, client hooks, shadcn UI, and database tracking.
dimah-s3 is a modular, full-stack S3 toolkit for React and Node.js runtimes. It provides typed server handlers, headless React hooks, optional shadcn UI components, and database plugin for object tracking when your application needs it.
Architecture flow
- Browserrequests signed URL
- Serverexecutes guards and signs URL
- S3 Bucketreceives the upload
The backend signs a short-lived URL, the browser talks to your bucket, and AWS credentials never leave the server. Downloads can also pass through your server as a proxy.
For coding agents — llms.txt · llms-full.txt.
What you get
- Fast setup — a working upload in minutes
- Full stack — server, client, and optional shadcn UI
- Full lifecycle — upload, download, and delete, including multipart
- Server hooks — auth, quotas, confirm, and cleanup on the server (Better Auth-like)
- Optional database — ownership and listings when you need them
It is not an S3 SDK wrapper. List, copy, tagging, and other operations stay in your own code with the AWS SDK.
Frequently asked questions
When you own the S3-compatible bucket and need more than an upload picker: server-owned keys, verified confirmation, private downloads, guarded deletion, multipart resume, or optional database tracking.
If you are choosing between managed storage, an upload-focused toolkit, or a client uploader, use the comparison guide.
No. dimah-s3 covers presign upload, download, and delete. Use the AWS SDK for everything else — list, copy, retention, tagging, and similar work.
Yes. Configure an AWS SDK S3Client for the provider. Cloudflare R2 upload
routes use method: "PUT"; MinIO commonly needs forcePathStyle: true.
See the provider guides for endpoints and CORS.
The browser sends a route name. The server runs guards, chooses a key inside that route's namespace, and returns a short-lived signed request. Credentials never leave the server.
Yes. Multipart uploads support chunking, retries, cancellation, and part
reconciliation. Add a persistent UploadStore; after a reload, the user
reselects the same local file and the client resumes. See
Upload Store.
Explore documentation
Quickstart
Get a working upload running in a few minutes.
Server Guide
Configure routes, lifecycle hooks, guards, and runtimes.
React Client
Headless hooks for upload, download, and delete.
UI Components
Prebuilt shadcn buttons, dropzones, and status.
Providers
Setup guides for AWS S3, Cloudflare R2, and MinIO.
Database Plugin
Track files, ownership, and listings.
Comparison
Compare dimah-s3 with Better Upload, UploadThing, and Uppy.