Bindings
Bindings are how a Worker talks to storage. You declare them in wrangler.jsonc in the deploy folder. You fill them with platform data. cellp does not invent a new format: it reads wrangler keys and asks celld to honor them.
Start here as an app author: Configure bindings (the file) · Write a Worker (env.* in code).
What is declared vs what is branched
Declared in wrangler.jsonc (or wrangler.json) inside the artifact:
d1_databaseskv_namespacesr2_bucketsqueuesworkflowstriggers.crons
When you create a child version (parent_version_id set):
| Binding | Branched from parent? |
|---|---|
| D1 | Yes |
| KV | Yes |
| R2 | Yes (overlay + tombstones) |
| Queue | Yes |
| Workflow instances | No — empty |
| Cron | No branch — follows this script; scheduling only on the production ready version (Cron · Data fork) |
| Worker script | No — this artifact |
Binding identities (database_id, KV namespace id, queue name, R2 bucket name) are inherited from the parent wrangler so the Worker code keeps working.
Operator surfaces
| Binding | Dashboard | API |
|---|---|---|
| D1 | Table browser + SQL | /database, /database/query, … |
| KV | Key browser | /kv, /kv/{ns}/keys, … |
| Queues | Peek / pause / redrive / purge | /queues/... |
| Workflows | Instance list | /workflows/... (read-only) |
| R2 | Badge on the list | Listed on GET …/bindings |
| Cron | Display | Listed on GET …/bindings |
curl -sS -H "Authorization: Bearer $ADMIN_TOKEN" \
"$CELLP_URL/v1/projects/my-shop/versions/v1/bindings"What cellp does not add
- A second “inherit bindings” button — branch happens during Start
- An R2 file manager
- Workflow pause/resume/restart
- Workers AI, Vectorize, Hyperdrive, Email Workers, Python Workers
Compatibility matrix: Supported stacks. Deep runtime gaps: celld cloudflare-compat.
Per-binding guides: D1 · KV · R2 · Queues · Workflows · Cron · Durable Objects · Images.