Limits and quotas

These are the limits that apply to a normal account by default, as of 2026-10-04. Quotas are counted per account, across all your routes. Limits of the playground are listed apart where they differ, because the playground and RTEdge.net do not enforce the same ones.

Account quotas

QuotaDefaultCounted overNotes
Deployment size1,000,000All your routesDecimal, so about 1 MB. Each route is charged for everything stored for it, which is several times the size of your source file. See How deployment size is counted.
Edge workers5All your routesOne for each route that has an edge worker. Redeploying a route without <script type=worker edge> deletes its worker and frees the slot.
Claimed domains1Your accountA name.rt.ht subdomain. A custom domain needs an upgraded account. See Domains and subdomains.
Path routesAny numberUnder your domainWithin the size and worker totals above. A path route needs no claim of its own.

A deploy that goes over the size or the worker quota fails as a whole with storage quota exhausted. The message does not say which of the two ran out. If a deploy would claim a domain beyond your quota, it fails with a message that the domain quota is used up.

How deployment size is counted

The size is not the size of your source. For each route, RTEdge.net adds up what it stores: your source with its editor state, the served page, every exported file and worker asset, and the worker code. Deploying to several routes charges each of them in full. Redeploying a route replaces its previous size, and deleting it frees the size.

The user menu in the playground shows a workers meter and a storage meter with what is used, the quota and what is free. They refresh when you open the menu, and after a deploy or a delete while it is open. Measuring code size shows how to see the size of your own files.

Names and routes

RuleLimitNotes
Subdomain lengthAt least 4 charactersA shorter name is shown as not available.
Subdomain charactersLetters, digits and -The name does not start with _ and is not a reserved word. See Domains and subdomains.
Route path segmentsLetters, digits, -, _ and ~A segment cannot contain a .. See Reserved paths for the strings that are refused.
Editorsperson@domain.tld, domain.tld or *A domain needs a dot and cannot be an IP address. * means any signed-in account.

Deploys and history

WhatLimitNotes
Deploy request60 secondsThe playground gives up after that. Bundling the static imports of a worker before the deploy has its own limit of 60 seconds.
Deploy noteNo enforced lengthThe note is collapsed to one line. Keep it short, about 200 characters. The version viewer cuts long notes in its lists and shows the whole note in its tooltip.
Version historyThe newest 100 versionsThe viewer loads 100 at a time. edge.versions(), Smart Undo and the size history read the newest 100. See Versions and Smart Undo.
Screenshot20 seconds for each attemptA failed attempt is retried. The page is captured at 1200 by 630 CSS pixels, at twice the scale. See Social previews and screenshots.
Your social tagsThe first 8,192 characters of the pageA tag you write further down does not replace the generated one.

KV storage

The limits of env.KV, in the playground and on RTEdge.net. Data written in the playground stays in the browser and never syncs with RTEdge.net.

LimitPlaygroundRTEdge.net
Value plus metadata, per key64 KiB (65,536 bytes)10 MiB (10,485,760 bytes)
When it is exceededput() throws KV storage limits exceeded and writes nothing.put() throws KV storage limits exceeded.
Stored keyFewer than 512 bytes, with the hidden scope prefix countedAt most 512 bytes, with the hidden scope prefix counted
MetadataCounted with the valueAt most 1,024 bytes of JSON
ExpiryNo minimumexpirationTtl of at least 60 seconds, and an expiration at least 60 seconds ahead
list()See Storing data in KVlimit defaults to 1,000, which is also the maximum
Bulk get()Up to 100 keysUp to 100 keys
Writes to one keyNot documentedOne per second
Operations per invocationNot documentedAt most 1,000 KV operations. A put() or delete() costs a read and a write.

On RTEdge.net, KV is eventually consistent. A write is usually visible at once in the same location but can take a minute or more elsewhere, and there are no atomic increments, so concurrent counters lose updates. Cloudflare publishes the underlying KV limits. A worker built with a shell older than 2025-09-29, which its edge-worker header shows (see Response headers), still has the older 64 KiB cap on RTEdge.net. Redeploy it to get the current limit.

Other limits

WhatLimitNotes
Index page size (N)1,000The default and the maximum for the * index of your deployments. See The * suffix.
KV viewer page size (N)Default 25, maximum 1,000For ::kv. Experimental
QR code dataL 2,953, M 2,331, Q 1,663, H 1,273 bytesUTF-8 bytes at each error-correction level of ::qr. Longer input answers 400. Experimental
Request rateLimitedThe platform limits how fast a visitor can send requests, and how fast you can deploy. The numbers are not published. A visitor over the limit gets a 429 page, and a deploy reports "Rate limit hit. Try again later!"

Playground limits

The playground has no deploy quotas. It limits worker imports: a build stops with "Load exceeds size budget" when the modules it loads add up to more than 20 × 1024² characters of text, or more than 10 MiB when gzipped, and with "Input exceeds size budget" when the import statements themselves are that large. See Importing modules and WebAssembly.

See also