dimah-s3v1.5.4

Comparison

Compare dimah-s3 with Better Upload, UploadThing, and Uppy.

dimah-s3 is a full-stack file toolkit for S3-compatible storage you control. It covers upload, confirm, download, and delete under the same route policy. Better Upload is a focused React uploader for the same storage model. UploadThing is hosted. Uppy is a client uploader you wire yourself.

Feature comparison

Featuredimah-s3Better UploadUploadThingUppy
Happy-path setupRoutes + hooks + optional UITwo packages, minutesHosted APIClient-only
S3 storage ownershipYour bucketYour bucketHosted bucketYour bucket
Upload lifecyclePresign + HeadObject confirmPresign (no confirm hook)Hosted APIClient-only
Download & previewPresign, proxy, inlineServer helpers, no client hookHosted URLsDIY
Object deletionServer-mediated with guardsServer helpers, no client hookHosted APIDIY
Database trackingOptional (@dimah-s3/db)NoneHosted dashboardNone
Client UIHeadless + shadcnshadcn uploadersReact componentsDashboard modal

Better Upload also ships S3 helpers (presignGetObject, deleteObject, listObjectsV2, …). Those are utilities, not download/delete routes with guards, hooks, or UI. dimah-s3 signs storageClass, tagging, and cacheControl from upload.object the same way.


When to use which

  • Better Upload — you need a file picker into your bucket and will persist keys yourself. Fastest path for avatars and form attachments.
  • dimah-s3 — you need the rest of the object lifecycle: confirmed metadata, private downloads, deletes, quotas, or resumable multipart.
  • UploadThing — you want a hosted bucket and dashboard.
  • Uppy — you already have a backend and want a client dashboard.

Why choose dimah-s3?

  • Unified lifecycle: upload, confirm, download, and delete share one route policy and key namespace.
  • Server-owned keys: follow-up operations cannot target keys outside the route keyPrefix.
  • Verified metadata: HeadObject on confirm — do not trust the client's declared size or type.
  • Zero lock-in: Amazon S3, Cloudflare R2, MinIO, and other S3-compatible stores. You pass your own AWS SDK S3Client.

Frequently asked questions

On this page