Storage guide
Bindings, file uploads, and what never to store.
Bindings
Extra state arrives as bindings in void.config.ts, validated from the
built dist/wrangler.json at deploy time. Only keys celld accepts pass:
kv_namespacesanddurable_objectsfor small state (sessions, counters, rate flags). Anything relational belongs in D1 (seed1.md).r2_bucketsfor file uploads.queuesandworkflowsfor background work.
Plan gating for bindings arrives with billing. Until then every accepted key deploys on every account.
Files
Uploaded images and video are not profanity-classified — keep uploads behind your own checks, and never serve user uploads as executable content.
What never to store
Secrets go in secret storage (set outside code), never in the repo, the database or KV. API keys, tokens and connection strings in committed code are visible to anyone who can read the app’s files.
Sources
- Accepted wrangler keys:
crates/outer/src/deploy/pipeline.rs(ACCEPTED_CONFIG_KEYS) - celld’s runtime docs: https://celld.dev/docs/