Introduction
Minimal file lifecycle with server and client hooks.
dimah-s3 gives you the standard S3 lifecycle with a small setup surface: upload, download, and delete.
This framework path stays minimal: hook-based control on the server and hook-based usage on the client.
Presign flows only. Add any extra S3 operations in your own backend with @aws-sdk/client-s3.
Presign-first: server signs, client uploads directly to S3. Credentials stay on backend; auth/quota/DB rules stay in server hooks.
Why dimah-s3
- Minimal by default — small API surface, fast onboarding
- Lifecycle coverage — upload, download, and delete end-to-end
- Server hooks — enforce auth, quotas, and DB sync where they belong
- Client hooks — compose upload/download/delete in your own UI
- Optional UI layer — use
@dimah-s3/uionly when you need ready components
Get started
Quickstart
Install, wire route, mount provider, and upload your first file.
Server
Route handler and lifecycle hooks for auth and DB rules.
Client
Headless hooks: useUpload, useDownload, useDelete.
UI
Optional ready-made shadcn-compatible components.
Database
Optional object tracking with ready-made hooks.
Next.js example
Next.js app with API route, S3Provider, and UI demos.
Providers
AWS S3, Cloudflare R2, MinIO — POST vs PUT, ACL, and CORS.
Comparison
When to choose dimah-s3 vs Uppy + AWS S3.