Deployment models

Where your apps physically run: shared platform infrastructure, a dedicated Cloudflare account operated by Spikefrost, or an account you own. What each changes, the prerequisites, and why migrating an existing app is a re-provision.

The Spikefrost Team31 Jul 20265 min read

Enterprise capability

Dedicated and customer-owned accounts are enterprise capabilities, provisioned under an enterprise agreement rather than enabled by default. Standard plans run in the shared model described below. If account-level tenancy is a requirement in your security policy, talk to us before you build — the account is provisioned before your apps land in it.

Three models, one application model. Your code, bindings, deploys, and CLI are identical in all three — what changes is the Cloudflare account boundary your apps sit inside.

The same app in three deployment models. The application code is identical; the account boundary and who holds the Cloudflare contract are what differ.

Customer-owned account — you hold the contract

your app A

full edge stack
requires YOUR W4P entitlement

Dedicated account — Spikefrost-operated

your app A

your app B

full edge stack
dispatch · KV · cache · assets · DNS

Shared platform account — standard plans

app A
worker + D1 + KV + R2

app B

other customers' apps

The same app in three deployment models. The application code is identical; the account boundary and who holds the Cloudflare contract are what differ.

The three models compared

Shared Dedicated Customer-owned
Available All plans Enterprise agreement Enterprise agreement
Cloudflare account Spikefrost's, shared Yours alone, operated by us Yours, owned by you
Who holds the contract Spikefrost Spikefrost You
Per-app isolation Yes Yes Yes
Per-environment isolation Yes Yes Yes
Account-level isolation No Yes Yes
Cloudflare bill Included in your plan Included Direct to you
Entitlements you must hold None None Workers for Platforms + 7 more
Setup effort None Provisioning engagement Provisioning + your procurement
Isolation mechanism V8 isolate V8 isolate V8 isolate

That last row is the one people skim past. A dedicated account does not change how your code is isolated — it changes which account owns the resources. Workers are V8 isolates on Cloudflare's shared infrastructure in all three models. See Isolation and tenancy for what that actually guarantees.

Shared platform account

How apps run on standard plans, and for most customers the right answer indefinitely.

Each app gets its own worker, database, key-value namespace, object storage, and Durable Object namespaces, separately per environment. There is no addressing path from one app to another's bindings. What's shared is the Cloudflare account that owns those resources and the underlying infrastructure they run on.

For a large share of security policies, per-app and per-environment isolation is what the policy is actually asking for. Read the isolation model before concluding you need an account boundary — it's a shorter path to the same approval.

Dedicated account, operated by Spikefrost

Your apps in a Cloudflare account that contains nothing else. Spikefrost holds the Cloudflare relationship, entitlements, and billing; you get the account boundary.

What changes:

  • Account-level blast radius. Account-scoped events and limits affect only your apps.
  • Account-scoped observability. Analytics read tokens are account-scoped, so the read surface contains only your data.
  • A cleaner audit story for policies that ask about shared cloud accounts.

What has to be replicated per account, which is why this is an engagement rather than a setting: the Workers for Platforms dispatch worker and namespace, the domain-mappings key-value store, the edge cache, the assets workers, the zone and wildcard DNS, the fallback origin, and the logs pipeline. The dispatch binding cannot cross accounts, so the whole edge stack comes along.

We recommend this over a customer-owned account in most cases: identical isolation boundary, and you don't take on eight Cloudflare entitlements or a second cloud bill to reconcile.

Customer-owned account (BYO)

Apps deployed into an account you own, on your Cloudflare contract, on your bill.

The prerequisite that decides feasibility: because Spikefrost deploys into a Workers for Platforms dispatch namespace, and that binding cannot cross accounts, the namespace must exist in your account. Workers for Platforms is an Enterprise/contract add-on. So your account needs:

Entitlement Why
Workers for Platforms The deploy path structurally requires the dispatch namespace
Workers Paid 10 MB script size, CPU limits
D1 Application databases
R2 Object and asset storage
Analytics Engine + SQL API Per-app metrics
Browser Rendering Screenshot and capture features
Logpush, Queues, Pipelines Request logs and managed queues
SSL for SaaS on the zone Custom domains

Plus an API token with edit permission on all of them.

Be clear-eyed about it: if you don't already hold a Workers for Platforms contract, a customer-owned account is usually the wrong shape — the entitlement burden exceeds the benefit over a dedicated account, which gives the same isolation. Where it is right: you already run Workers for Platforms, or a policy requires the cloud contract in your own name.

Migrating an existing app

This is the part worth planning properly, because the intuition is wrong.

Database identifiers, key-value namespace identifiers, and bucket names are account-scoped. Moving an app between accounts is therefore a re-provision, not a pointer change:

Moving an existing app between accounts. Every stateful resource is re-created in the target account and its data copied — identifiers do not transfer.

Target account

Source account

export → import

copy keys

copy objects

re-enter (never readable back)

DNS + SSL re-issue

D1

KV

R2

secrets

custom domain

new D1

new KV

new R2

re-entered secrets

domain cutover

Moving an existing app between accounts. Every stateful resource is re-created in the target account and its data copied — identifiers do not transfer.

Consequences to plan for:

  • A maintenance window. Data copies are point-in-time; writes during the copy need to be paused or replayed.
  • Secrets are re-entered by hand. They're never readable back — by design. You'll need the source values from your own vault.
  • The domain cuts over with a DNS change and fresh certificate issuance, which takes minutes to propagate.
  • Durable Object state does not transfer, and has no export path. If an app holds state in Durable Objects, mirror it to the database first — see Durability and recovery.
  • Point-in-time recovery restarts. The new database's 30-day window begins at migration.

The cheap version of this problem: decide the model before you build. A new app provisioned directly into the target account skips all of it.

What doesn't change in any model

  • The 99.9% uptime commitment and support severities — see SLAs, limits and quotas
  • Cloudflare's underlying Workers SLO, including its exclusion of storage bindings — see Failure domains
  • The application model: code, bindings, migrations, deploys, environments, rollback
  • The isolation mechanism: V8 isolates, per-app and per-environment data separation

Next

Frequently asked questions

What's the difference between a dedicated account and a customer-owned one?

The account boundary is the same; who holds the contract differs. In a dedicated account Spikefrost owns the Cloudflare relationship and entitlements on your behalf. In a customer-owned account you hold it, which means you also hold the Workers for Platforms contract the deploy path requires.

Why does a customer-owned account need a Workers for Platforms contract?

Because Spikefrost deploys apps into a Workers for Platforms dispatch namespace, and that binding cannot cross Cloudflare accounts. Deploying into your account means that namespace lives in your account, which requires the entitlement.

Can we move an existing app into a dedicated account?

Yes, but it's a re-provision rather than a switch. Database identifiers, storage namespaces, and object buckets are account-scoped, so the data is exported and re-imported, secrets are re-entered, and the domain is cut over. It's a planned migration with a maintenance window.

Does a dedicated account give us dedicated hardware?

No. It gives you your own Cloudflare account boundary. Your code still runs in V8 isolates on Cloudflare's shared infrastructure — that's true on every tier, and we'd rather say so than let it surface in a security review.

Does a dedicated account improve our SLA?

Not by itself. The uptime commitment is the same, and Cloudflare's underlying Workers SLO is unchanged. What it changes is the blast radius of account-level events and noisy-neighbour concerns at the account layer.