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 recordctx.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

Feature Upload URLs (recommended) HTTP Actions
Related skills
Installs
6
GitHub Stars
1
First Seen
Mar 11, 2026