Skip to content

Environment variables

Two different layers:

  1. Worker env — per version, what your fetch handler sees.
  2. cellpd env — how the control plane, gateway, and orchestrator run.

Worker env (per version)

Env is per version, not “Preview / Production / Development” like Vercel.

Sources (lowest → highest)

SourceMeaning
wrangler varsShipped in the bundle
overridesSet via API or Dashboard Settings
platformPROJECT_ID, VERSION_IDread-only

GET /v1/projects/{p}/versions/{v}/env returns each key with source: wrangler | override | platform.

Keys prefixed CELLP_ / CELLD_ and platform names are rejected on POST /versions and PUT …/env (max 64 keys, 8192 bytes per value).

Set overrides

bash
curl -sS -X PUT \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  "$CELLP_URL/v1/projects/my-shop/versions/v1/env" \
  -d '{"vars":{"API_ORIGIN":"https://api.example.com"}}'

On a ready version this restarts celld so the Worker sees the new env. You cannot PUT platform keys.

You can also pass env on POST /versions so CI injects secrets at deploy time.

Inheritance

A child version copies parent overrides (not platform keys). Then you can change them independently.

Secrets

The API stores override values as strings. There is no sealed vault inside cellp.

For production secrets:

  • Inject from CI / an external vault at POST /versions
  • Or put a secret manager in front of cellp and never persist high-value keys in the registry

Do not treat Dashboard env as a password manager.

cellpd configuration (operator)

Set on the cellpd process (cellp serve, Compose, systemd). See also CLI and Self-hosting.

Tokens & registry

VariablePurpose
CELLP_DEPLOY_TOKENCI create-version
CELLP_ADMIN_TOKENAdmin API + Dashboard
PLATFORM_TOKENLegacy fallback when the specific token above is unset
CELLP_REGISTRY_DBSQLite registry path

Ports & URLs

VariableDefaultPurpose
PLATFORM_PORT8790REST API
GATEWAY_PORT8787User traffic
GATEWAY_URLhttp://127.0.0.1:8787Public gateway origin for generated URLs
CELLP_GATEWAY_VERIFY_URLOptional internal probe base (HTTP) after deploy

Ingress (Host routing)

VariablePurpose
CELLP_INGRESS_BASE_DOMAINDNS suffix for preview/prod Hosts (e.g. ingress.local, lvh.me)
CELLP_PUBLIC_SCHEME_PREVIEWhttp or https in preview_url
CELLP_PUBLIC_SCHEME_PRODScheme for prod_url
CELLP_PREVIEW_URL_TEMPLATEOptional override template

Dashboard: VITE_CELLP_INGRESS_BASE_DOMAIN must match CELLP_INGRESS_BASE_DOMAIN.

Object storage

VariablePurpose
S3_ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGIONRustFS / S3 API
CELLP_ARTIFACTS_BUCKETArtifact uploads (cellp-artifacts)
CELLD_BUCKETBase prefix for per-version celld data
OFFSHOOT_STOREoffshoot metadata (s3://cellp-offshoot in production)
ARTIFACTS_DIRLocal staging when not using pure S3 fetch

Deploy orchestrator

By default, deploy is fail-closed: if offshoot fork/checkpoint/export, D1 import/branch, or KV/R2/Queue branch fails, the version becomes failed and must not serve preview traffic.

VariablePurpose
CELLP_LENIENT_DEPLOY=1Local debug only — warn and continue toward ready
CELLP_QUEUE_MAXDeep health / accept threshold when queue is full (default 10000)
CELLP_ORCH_WORKERSParallel deploy workers (default 1)

Archive & promote hygiene

VariablePurpose
CELLP_ARCHIVE_IDLEIdle time before archive candidate
CELLP_ARCHIVE_GRACEGrace after promote before archive
CELLP_ARCHIVE_REAPER=0Disable idle archive ticker
CELLP_ROLLBACK_KEEPPin previous prod after promote (see Archive)

Elastic serving (unsupported internal scaffold; default off)

CELLP_ELASTIC_RUNTIME is not a supported operator feature. It exposes only an internal E1–E5 scaffold: no remote HTTP+mTLS Node Agent, real celld lifecycle management, Scheduler or complete 0→N scaling, and no production-readiness.

VariablePurpose
CELLP_ELASTIC_RUNTIMEInternal development scaffold only; leave unset in supported deployments

Compared to Vercel

Vercelcellp
Project / Preview / Production envOne map per version
Encrypted Dashboard secretsPlain strings + CI injection
Redeploy to applyPUT …/env restarts that version

Self-hosted Workers control plane. Not affiliated with Cloudflare or Vercel.