{"rid":"storage/cloudflare-pages","card":{"rid":"storage/cloudflare-pages","eid":"cloudflare","topic":"storage","slug":"cloudflare-pages","provider":"Cloudflare Pages (Direct Upload / Wrangler)","url":"https://pages.cloudflare.com","domain":"cloudflare.com","category":"paas","tier":null,"verdict":"qualifies","vorder":0,"grp":"usable","confidence":"documented","binding":"per-object-cap","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"rest,git,rclone,cli","egress_metered":0,"per_object_bytes":26214400,"retention_days":null,"verified_at":"2026-10-22T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-20","n_evidence":7,"usd_month":null,"usd_per_tb_month":null,"summary":"20,000 files per site on Free; 25 MiB max per file; 100 projects per account => ~488 GiB per project, ~48.8 TiB per account. No stated total-bytes cap.","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"cloudflare-pages","provider":"Cloudflare Pages (Direct Upload / Wrangler)","url":"https://pages.cloudflare.com","category":"paas","free_tier":{"stated":"20,000 files per site on Free; 25 MiB max per file; 100 projects per account => ~488 GiB per project, ~48.8 TiB per account. No stated total-bytes cap.","unit":"objects","metered_on":"unstated","source_url":"https://developers.cloudflare.com/pages/platform/limits/","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"25 MiB max per file","bytes":26214400,"source_url":"https://developers.cloudflare.com/pages/platform/limits/","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://developers.cloudflare.com/pages/platform/limits/","notes":"not stated"},"egress":{"terms":"Unlimited requests and unlimited bandwidth: 'Static asset requests ... are free and unlimited' (pages/functions/pricing) and 'Unlimited bandwidth ... no extra cost to you' (blog.cloudflare.com/big-ideas-on-pages).","metered":false},"interface":["rest","git","rclone","cli"],"interface_detail":"rest","tooling":"wrangler pages deploy (official CLI, direct upload of a folder, no Git required); Cloudflare API v4 /accounts/:id/pages/projects/:name/deployments does multipart upload; rclone has no native 'pages' backend but can be driven via 'rclone serve http' + wrangler or a custom remote.","chaining":"100 projects per account (docs: 'limit of 100 projects per account. This limit is not routinely increased') x 20,000 files x 25 MiB. Unlimited free Cloudflare accounts x 100 projects. Workers Static Assets (100 Workers free, 20,000 files each) is a second, independent pool on the same account. Sharding is by file: any 10 TiB working set = ~420k shards of 25 MiB spread over ~21 projects.","limits":[{"kind":"per-object-cap","value":"25 MiB max per file","source":"https://developers.cloudflare.com/pages/platform/limits/"}],"limits_note":"25 MiB hard per file (no override on Free); 20,000 files per site on Free; 500 builds/month and 20-min build timeout if Git-driven; new-project creation throttled for the first 48h of a new account ('Cloudflare limits the number of new Pages projects you can create within your first 48 hours'); Functions requests draw from the 100k/day Workers quota, but pure static requests do not.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Assets stay cached on the CDN until the next deployment, so re-upload churn is the only real risk; no data-vanishing mechanism observed, and static serving is not rate-limited or billed.","confidence":"documented","confidence_note":"re-read from read-broker on 2026-10-22 (HTTP 200, 3777 bytes, sha256 c163cd6d9d46f7fd). The page states the number in the record; the claim is documented, not measured. | re-read from read-broker on 2026-10-22 (HTTP 200, 7360 bytes, sha256 77e09b369ce18a37). The page states the number in the record; the claim is documented, not measured.","evidence":[{"url":"https://developers.cloudflare.com/pages/platform/limits/","date":"2026-10-22","proved":"Pages Free plan allows 20,000 files per site, 25 MiB per file. Re-read https://developers.cloudflare.com/pages/platform/limits/: HTTP 200, 7360 bytes, sha256 77e09b369ce18a37. Quoted: ch file on your site to Cloudflare's globally distributed network to deliver a low latency experience to every user that visits your site. Cloudflare Pages sites can contain up to 20,000 files on the Free plan. Paid plans (such as Pro, Business, and Enterprise plans) can have up to 100,000 files per site. To enable this increased limit, set the environment variable `PAGES_WRANGLER_MAJOR_VERSION=4` in your Pages project settings. ## File size The"},{"url":"https://developers.cloudflare.com/pages/functions/pricing/","date":"2026-10-22","proved":"requests to static assets are free and unlimited on Free and paid plans. Re-read https://developers.cloudflare.com/pages/functions/pricing/: HTTP 200, 3777 bytes, sha256 c163cd6d9d46f7fd. Quoted: [change usage models](https://developers.cloudflare.com/workers/platform/pricing/#how-to-switch-usage-models). ### Static asset requests On both free and paid plans, requests to static assets are free and unlimited. A request is considered static when it does not invoke Functions. Refer to [Functions invocation routes](https://developers.cloudflare.com/pages/functions/routing/#functions-invocation-routes) to learn more about when Functions are invoked. ## Free Plan Re"},{"url":"https://developers.cloudflare.com/pages/platform/limits/","date":"2026-10-21","proved":"'Cloudflare Pages sites can contain up to 20,000 files on the Free plan', 'maximum file size for a single Cloudflare Pages site asset is 25 MiB', 'limit of 100 projects per account' (page last updated Sep 5, 2026)"},{"url":"https://developers.cloudflare.com/pages/functions/pricing/","date":"2026-10-21","proved":"'On both free and paid plans, requests to static assets are free and unlimited'"},{"url":"https://blog.cloudflare.com/big-ideas-on-pages/","date":"2026-10-21","proved":"'Unlimited requests ... Unlimited bandwidth ... for free'"},{"url":"https://vite.pages.dev/","date":"2026-10-21","proved":"probe: curl -D - -> HTTP/1.1 200, Server: cloudflare, x-server: Cloudflare Pages"},{"url":"https://vite.pages.dev/assets/index.37d2ad0a.js","date":"2026-10-21","proved":"probe: curl -D - -> 200, Content-Type: application/javascript, Content-Length: 1555, Cache-Control: public, max-age=0, must-revalidate (direct binary asset served off pages.dev)"}],"verdict":"qualifies","verified_at":"2026-10-22T00:00:00.000Z","notes":"20,000 files per site on Free; 25 MiB max per file; 100 projects per account => ~488 GiB per project, ~48.8 TiB per account. No stated total-bytes cap.","extras":{"verified_in_pass":[{"url":"https://developers.cloudflare.com/pages/functions/pricing/","date":"2026-10-22","via":"read-broker","http_status":200,"bytes":3777,"sha256":"c163cd6d9d46f7fd46095c5a8ce78102090d9cb7a37c9e9b215f35f8e7615727","pattern_found":true,"what_changed":"no change: the page still states the claim","capture":"captures\\cloudflare-pages-developers-cloudflare-com-pages-functions-pricing-.txt"},{"url":"https://developers.cloudflare.com/pages/platform/limits/","date":"2026-10-22","via":"read-broker","http_status":200,"bytes":7360,"sha256":"77e09b369ce18a373420038b357e2d023518e2c8875292ac8291036c5f68dd2a","pattern_found":true,"what_changed":"no change: the page still states the claim","capture":"captures\\cloudflare-pages-developers-cloudflare-com-pages-platform-limits-.txt"}]},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":25,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":25,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}