convex-file-storage

Installation
SKILL.md

Convex File Storage

Built-in file storage for every Convex deployment — upload, store, serve, and delete files with no extra packages.

Critical Rules

  1. Use v.id("_storage") for storage ID validators, not v.string().
  2. Authenticate before generateUploadUrl() — never expose upload URLs to unauthenticated users.
  3. Always delete both storage AND database record — ctx.storage.delete() removes the blob, but your metadata document in the DB must be deleted separately.
  4. ctx.storage.store() is action-only — mutations cannot store blobs directly; use generateUploadUrl() for client uploads instead.
  5. ctx.storage.getUrl() returns temporary URLs — don't persist them in the database; generate fresh URLs at query time.
  6. HTTP Action uploads are limited to 20MB — use the upload URL method for larger files (no size limit, 2min upload timeout).
  7. Use ctx.db.system.get() for metadata — ctx.storage.getMetadata() in actions is deprecated.
  8. Use Promise.all() to batch getUrl() calls when listing multiple files with URLs.

Two Upload Methods

Installs
6
GitHub Stars
1
First Seen
Mar 11, 2026