Convex
convex.dev · Storage · 1 record · JSON
Convex Storage
fails: quotaemail?card?R
| Free tier | 1 GB file storage on Free; 1 GB/month file egress; 0.5 GB database; 40 deployments unit GB; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | 1 GB/month data egress total on Free (serving user files, accessing files in functions, backups) — equal to the storage size, so a full store can be fetched exactly once per month. free_allowance: 1 GB per month |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | rest, cli rest |
| Tooling | Convex client SDKs (JS/Python/Rust), HTTP actions, npx convex CLI, storage.getUrl() bearer URLs — 'anyone with the URL can access the file' (public, no auth) |
| Composes with | Free/Starter is per TEAM; 40 deployments per team on Free. But file storage is 1 GB total per team, not per deployment — so deployments do not multiply storage. Multiple teams/accounts is the only axis. Upload URLs are one-time and short-lived, which makes external tools awkward. |
| Reliability | Free has hard resource caps (Starter can exceed with usage-based billing). Well-behaved, no data loss reported; 100 MiB response cap breaks large-file serving via custom routes. |
| Notes | 1 GB file storage on Free; 1 GB/month file egress; 0.5 GB database; 40 deployments |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.convex.dev/production/state/limits | 'File Storage | Storage: Free: 1 GB total', 'Data egress: Free: 1 GB/month total' |
| 2026-10-21 | docs.convex.dev/production/state/limits | 'Deployments | 40' on Free/Starter (per team) |
| 2026-10-21 | docs.convex.dev/file-storage/overview | 'anyone with the URL can access the file without another app-level authorization check' |
More fields (1)
{
"dead_end": {
"failure_class": "egress",
"why": "1 GB file storage on Free; 1 GB/month file egress; 0.5 GB database; 40 deployments",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown or withheld values (8)
$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted