Deploy a secret to a sink
arca deploy pushes a vault-stored value to a write-only target — a [deploy.NAME] table in arca.toml. The vault is the source of truth; the sink serves your runtimes directly (e.g. a Worker reading a Secrets Store binding).
Configure a target
toml
[deploy.prod]
kind = "cf-secrets-store" # Cloudflare account Secrets Store
account_id = "00000000000000000000000000000000"
store_id = "00000000000000000000000000000000"
# token_env = "CLOUDFLARE_API_TOKEN" # default; env var NAME onlyThe API token comes from the env var named by token_env (default CLOUDFLARE_API_TOKEN) — never from the file.
Push
sh
arca deploy arca://billing/stripe --target prod
# deployed arca://billing/stripe → "prod" as dev_billing_stripe (created)--targetmay be omitted when exactly one[deploy.*]table is configured; several targets make it required.- The sink-side name is derived and stable —
env + ref-pathunderscored (dev_billing_stripe). - Re-deploying updates in place (
updated, notcreated).
The direction is one-way
Deploy targets are sinks, not sources: the plaintext crosses to the sink exactly once, at push time, and nothing ever reads it back through arca. A deploy emits a deploy audit event for the ref.
Rotate → re-deploy
arca rotate changes the vault; the sink doesn't follow on its own. Re-push after rotation:
sh
printf '%s' "$NEW_VALUE" | arca rotate arca://prod/billing/stripe
arca deploy arca://prod/billing/stripe --target prodVerify
arca check validates deploy tables (kind known, account_id + store_id present) as findings — it doesn't push anything.