Limits
Each plan sets how much a workspace can hold and how much it can serve. Reaching a limit refuses only the thing that would go over it. What’s already running keeps running.
Plan limits
Section titled “Plan limits”| Limit | Free | Team | Business |
|---|---|---|---|
| Apps per workspace | 3 | 25 | 200 |
| Members per workspace | 3 | 25 | 200 |
| Container apps per workspace | None | 1 | 4 |
| Container sizes | None | lite, basic |
lite, basic |
| CPU time per request to a Worker app | 50 ms | 100 ms | 150 ms |
| Live bypass tokens per app | 5 | 50 | 100 |
| Environment variables per app | 25 | 50 | 50 |
| Public paths per app | 3 | 10 | 10 |
| Storage per workspace: site files and databases | 1 GB | 10 GB | 100 GB |
| Image pushes per workspace per day | None | 20 GB | 100 GB |
| Requests included | 100,000 a calendar month | 2,000,000 a billing period | 20,000,000 a billing period |
| Past the included requests | Apps stop at 200,000 | $3.50 per million | $3.50 per million |
| Audit log kept | 3 months | 3 months | 12 months |
| App logs kept | 1 day | 7 days | 7 days |
| App log lines per workspace per day | 20,000 | 100,000 | 500,000 |
The workspace’s Billing tab shows where it stands against each of these. Plans and billing covers prices and what counts as a request.
From 1 November 2026
Section titled “From 1 November 2026”New limits start on 1 November 2026, with the new terms. Until then nothing below stops an app, though the Billing tab already shows where the workspace stands against them.
| Limit | Free | Team | Business |
|---|---|---|---|
| Databases per workspace, together | 1 GB | 2 GB | 10 GB |
| Database rows read a calendar month | 50,000,000, then apps stop | No cutoff | No cutoff |
| Database rows written a calendar month | 100,000, then apps stop | No cutoff | No cutoff |
| Subrequests per request to a Worker app | 50 | 50 | 50 |
| Requests that count toward the monthly limit | Every request, public paths and webhook deliveries included | As now | As now |
The database limit is part of the plan’s storage, not on top of it.
The database limit
Section titled “The database limit”A workspace’s Worker apps’ databases together may hold up to the plan’s database limit. Cloudflare D1 can’t be capped below 10 GB a database, so the platform measures each database every few minutes and acts on what it measures. A database can go past the limit before its apps are paused: usually by what it writes in about ten minutes, and for longer when Cloudflare’s analytics are unavailable.
Once the databases are over the limit:
- Apps with a database answer only the workspace’s owners and admins, signed in as themselves in a browser or with the CLI, so they can delete rows through the app. Members, viewers, bypass tokens, public paths and webhooks get
507. Apps without a database keep answering everyone. - Nothing new deploys in the workspace.
- If the databases grow further, or reach 10% over the limit, apps with a database answer no one, owners and admins included.
To get back under, delete rows with jiayang db exec or through the app, export data and remove it, or upgrade. The apps answer again within a minute of a measure that finds the databases back under.
On Free, or while a workspace’s payments have lapsed, a workspace still over its limit after 7 days is suspended. If it is still over 30 days after that, its largest databases are deleted, one at a time, until it is under. The owners get an email on day 1 and day 5 before the suspension, and 7 days and 1 day before any database is deleted, naming the databases. Export first.
Owners get an email when the databases reach 80% of the limit, when they go over, when owners’ and admins’ access ends, and when they’re back under. A downgrade or a cancellation that would leave the databases over the next plan’s limit is refused, or, for a cancellation, warned about 7 days and 1 day before the renewal.
Free’s database rows
Section titled “Free’s database rows”From 1 November 2026 a Free workspace stops for the rest of the calendar month at 50,000,000 database rows read or 100,000 written, whichever comes first. Every app then answers 402 with the “Paused for the month” page. The owners get an email at 80% of either limit and again when the apps stop.
Cloudflare counts the rows for each database: a query counts every row it reads, including rows it scans and doesn’t return, and every row and index entry it writes. That includes queries made while serving public paths, and the reads and writes of database exports and jiayang db commands. The platform takes the lowest figure Cloudflare’s analytics give, so the count never runs ahead of what was used.
If the platform can’t measure a Free workspace’s rows for two hours, its apps that have a database answer 402 with the page “Usage can’t be checked” until it can. Apps without a database keep answering.
Subrequests
Section titled “Subrequests”From 1 November 2026 a request to a Worker app can make at most 50 subrequests (fetches and other calls, as Cloudflare counts them) on every plan, down from 1,000. A request that goes past it gets an error from the runtime on its next call.
When you reach a limit
Section titled “When you reach a limit”Creating one more of something is refused with the plan_limit error. The message names the limit and the plan that lifts it, and the CLI adds where to upgrade:
jiayang app create acme/fourerror: This workspace has 3 apps, which is all the Free plan allows. Delete one, or upgrade: Team allows 25 apps. Billing: https://app.jiayang.cloud/w/acme/billingWith --json, the error carries the code, so a script doesn’t have to read the sentence:
{"error":{"code":"plan_limit","message":"This workspace has 3 apps, which is all the Free plan allows. Delete one, or upgrade: Team allows 25 apps. Billing: https://app.jiayang.cloud/w/acme/billing"}}The API answers 403 with the limit spelled out, which is what the dashboard reads to offer an upgrade:
{"error":"plan_limit","message":"That's 4 public paths; the Free plan allows 3 per app, and Team allows 10 public paths per app.","limit":{"what":"public_paths_per_app","max":3,"plan":"free"}}what |
Refused when you |
|---|---|
apps |
create an app past the limit |
members |
add a member past the limit (a role change doesn’t count) |
container_apps |
create or deploy a container app on Free, or one past the plan’s number |
container_sizes |
deploy a container at a size the plan doesn’t run |
tokens_per_app |
create a token while the app has as many live ones as the plan allows |
env_vars_per_app |
set a variable that would take the app past the limit |
public_paths_per_app |
open a public path past the limit |
storage_bytes |
upload site files, or deploy anything, past the workspace’s storage |
Each refusal goes in the audit log as plan.limit, naming the limit.
Nothing is taken away when a workspace moves to a smaller plan. Anything already past one of the new limits stays as it is, but nothing more can be added until the workspace is back within it.
Container apps on Free
Section titled “Container apps on Free”Free runs JavaScript, TypeScript and static apps. A container app is refused:
error: The Free plan runs JS and static apps only. Container apps (Python, Go, Rust, Node servers) need a paid plan: Team runs container apps. Upgrade the workspace at https://app.jiayang.cloud/w/acme/billingA container app in a workspace that has moved to Free stops answering. The edge shows a page titled “This app needs a paid plan”, with status 402, until the workspace is on Team or Business again.
Container apps and sizes
Section titled “Container apps and sizes”Team runs one container app and Business four, each at lite or basic. Each container app runs one container. Making one more is refused, and so is a deploy at a bigger size, before anything is built:
jiayang deploy acme/api ./api --instance-type standard-1error: The Team plan runs lite and basic, and standard-1 is bigger. Deploy at one of those with --instance-type. Write to support@jiayang.cloud for a bigger one. Billing: https://app.jiayang.cloud/w/acme/billingA rollback to a version at a size the plan doesn’t run is refused the same way, and so is a deploy that names no size while the live version runs at one.
Moving down to a plan that runs fewer container apps, or smaller ones, waits until the workspace’s fit: delete the extra ones, or deploy them at a size the smaller plan runs, first. Once a move down is waiting for the renewal, a container app made or deployed has to fit the smaller plan already. If a workspace somehow has more container apps than its plan runs, the ones made first keep deploying and the rest wait for room.
For more container apps or a bigger size, write to support@jiayang.cloud.
Why these numbers
Section titled “Why these numbers”A container is billed by the second it’s awake, whether or not it’s busy. The limits keep a workspace’s containers under its price even if every one of them runs flat out all month. At Cloudflare’s prices (Containers pricing, 28 August 2026; Durable Objects pricing, 25 August 2026), over a 730-hour month:
| Rate | lite |
basic |
|
|---|---|---|---|
| Memory | $0.0000025 per GiB-second | 256 MiB: $1.64 | 1 GiB: $6.57 |
| Disk | $0.00000007 per GB-second | 2 GB: $0.37 | 4 GB: $0.74 |
| CPU, busy the whole time | $0.000020 per vCPU-second | 1/16 vCPU: $3.29 | 1/4 vCPU: $13.14 |
| The Durable Object in front of it | $12.50 per million GB-seconds, at 128 MB | $4.11 | $4.11 |
| A month | $9.41 | $24.56 |
Team’s one container app comes to at most $24.56 of its $49, and Business’s four to $98.24 of its $199. The rest pays for Stripe’s fees and the requests the plan includes. standard-1 (1/2 vCPU, 4 GiB) comes to $58.14 a month, more than Team’s price on its own, and four of them ($232.56) more than Business’s.
Storage
Section titled “Storage”A workspace’s storage holds its site files and its Worker apps’ databases together. Every file any version uploaded counts until the app is deleted, and each database counts at its size as last measured: the platform asks Cloudflare about once an hour.
An upload that would take the workspace past its storage is refused. A database can’t be stopped from growing, since Cloudflare D1 has no limit of its own below 10 GB a database, so a workspace can go past its storage through its apps’ writes. From then on nothing new deploys in it, whether a Worker, a site, a container or a rollback, until it’s back under:
error: This workspace's files and databases come to 1.5 GB, past the 1 GB the Free plan allows, so nothing new deploys until it's back under. Delete rows from its apps' databases or files from its sites, or upgrade: Team allows 10 GB of storage. Billing: https://app.jiayang.cloud/w/acme/billingWhat’s already running keeps running, and its database keeps taking writes. The Billing tab shows the storage with the databases’ part of it, and says when the workspace is past it. Moving to a plan that allows less can also leave a workspace past its storage, with the same result.
CPU time
Section titled “CPU time”Each request to a Worker app may use a set amount of CPU time, which the table lists by plan. Only time your code is running counts, not time spent waiting on a fetch or the database. A request that goes over is stopped, and the caller gets 502. A server-rendered page usually takes a few tens of milliseconds; work that needs more belongs in a container app.
A change of plan changes the ceiling within a minute.
A static site runs none of your code, and a container’s CPU is set by its size instead.
Image pushes
Section titled “Image pushes”Pushing a container image counts against two budgets: the workspace’s daily one from the table above, and 20 GB a day per person on any plan. Both are rolling: a push counts for 24 hours. A push that would go over either is refused, and the image already deployed keeps running:
your push budget for the day is spent; it frees up as the last 24 hours' pushes age outApp logs
Section titled “App logs”What a workspace’s apps print goes into their logs, up to the plan’s lines a day across all of its apps, counted from midnight UTC. Past that, logging stops for the rest of the day and starts again at midnight. The apps keep running. jiayang logs and the app’s Logs tab say when it has stopped.
Why these numbers
Section titled “Why these numbers”Cloudflare keeps the lines, at $0.60 a million past what the platform’s account includes, for 7 days on a paid account (Workers Logs and Workers pricing, read 25 September 2026). Nothing on Cloudflare’s side limits how much one request prints, so the daily number is what keeps a workspace’s logs under its price. At the number every day of a month, Free writes 608,000 lines ($0.36), Team 3,040,000 ($1.82) and Business 15,200,000 ($9.12).
When a workspace runs out of requests
Section titled “When a workspace runs out of requests”A Free workspace keeps serving past its 100,000 included requests, up to twice that: 200,000 in the calendar month, in UTC. From then on, every request to its apps gets 402 and a page from the edge:
Paused for the month
hello in the acme workspace has used what its plan includes this month: its requests, or its database’s reads or writes.
The workspace’s owners get an email when it passes the included requests, and another when its apps stop. An upgrade takes effect on the next request.
Team and Business workspaces are never stopped for their request count. Requests past the allowance are billed at $3.50 per million.
The edge shows these pages only to a caller it would otherwise have let in. Anyone else gets the answer they’d get anyway, so a refusal page tells a stranger nothing about the workspace.
| Status | Page title | Why |
|---|---|---|
| 402 | Paused for the month | A Free workspace served 200,000 requests this month, or, from 1 November 2026, its databases read 50,000,000 rows or wrote 100,000. |
| 402 | Usage can’t be checked | From 1 November 2026, a Free workspace’s database rows couldn’t be measured for two hours. Only apps with a database. |
| 507 | Databases over the limit | From 1 November 2026, the workspace’s databases are over the plan’s limit. Only apps with a database; owners and admins still get in until the databases grow further. |
| 402 | This app needs a paid plan | A container app in a workspace on Free. |
| 403 | App unavailable | The workspace has been suspended. |
Platform limits
Section titled “Platform limits”These apply on every plan.
| What | Limit |
|---|---|
| Workspaces one person owns | 50. Being a member of someone else’s doesn’t count. |
| Invitation emails | 50 a day per workspace, and 100 a day per person across all their workspaces |
| Requests to public paths with no verifier | 600 a minute per client IP address and open pattern, with the paths an app hasn’t opened counted as one more |
| Public path patterns | 200 characters each |
| Deliveries to a verified public path | Bodies up to 1 MiB, signature headers up to 4 KiB |
| Verified deliveries | Bursts of 600 per workspace, 300 of them to its busiest path, then 10 a second |
| How old a signed delivery may be | 1 to 10 minutes, 5 unless you change it |
| Webhook signing secrets | 16 to 512 characters, or a whsec_ secret for Stripe and Standard Webhooks |
| An old signing secret after a rotation | Accepted for up to 7 days |
| Allowed email domains | 20 per workspace |
| Bypass token lifetime | 1 to 3,650 days, and no longer than the CLI session that made it |
| Audit log entries per call | 500 |
| Names of workspaces, apps and tokens | 1 to 100 characters |
| Workspace and app slugs | Up to 30 characters each, and 61 together |
| Workers bundle | 32 MiB and 1,000 modules |
| Subrequests from one request to a Worker app | 1,000, and 50 from 1 November 2026 |
| Static site | 20,000 files and 256 MiB per version, 25 MiB per file, 1 GiB stored per app |
| Environment variables | Names up to 64 characters, values up to 4,096 bytes |
| Secret values | Up to 8,192 bytes |
| Versions you can roll back to | The newest 20 |
| Container instances | One per app: every request goes to the same container |
The workspace limit is raised on request: write to support@jiayang.cloud. Past it you see:
error: You already own 50 workspaces, which is as many as one account makes. Deploy into one of those, or write to support@jiayang.cloud to have the limit raised.