fshy

Home / Cloudflare

Cloudflare Pages (Direct Upload / Wrangler)

pages.cloudflare.comPaaSstorage/cloudflare-pagesJSONcomparereport an errorprovider JSON

Free allowance
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.
Verdict
★ qualifiesusable as stated; the read path was probed
Cost
free tier
Identity
email?placeholder, not evidence; card unknown, phone unknown
Binding limit
per-object-cap25 MiB max per file
Evidence
documented7 sources; a first-party page was read and the sentence quoted
Freshness
stale on 2026-11-21checked 2026-10-21 (inherited); stale on 2026-11-21
Free tier20,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
Pricenone stated
Limits
  • per-object-cap (binding) 25 MiB max per file source
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.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Identityemail (placeholder) not published
EgressUnlimited 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).
Per-object cap25 MiB max per file (26214400 bytes)
Retentionnot stated
Interfacerest, git, rclone, cli rest
Toolingwrangler 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.
Composes with100 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.
ReliabilityAssets 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.
Evidence notedocumented The page states the number in the record; The page states the number in the record; the claim is documented, not measured.
Parsed numbers
  • per-object-cap 25 MiB
Evidence 7
datesourcewhat it proved
2026-10-22developers.cloudflare.com/pages/platform/limits/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
2026-10-22developers.cloudflare.com/pages/functions/pricing/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…
2026-10-21developers.cloudflare.com/pages/platform/limits/'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)
2026-10-21developers.cloudflare.com/pages/functions/pricing/'On both free and paid plans, requests to static assets are free and unlimited'
2026-10-21blog.cloudflare.com/big-ideas-on-pages/'Unlimited requests ... Unlimited bandwidth ... for free'
2026-10-21vite.pages.dev/probe: curl -D - -> HTTP/1.1 200, Server: cloudflare, x-server: Cloudflare Pages
2026-10-21vite.pages.dev/assets/index.37d2ad0a.jsprobe: 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)
More fields 1
{
 "verified": [
  {
   "url": "https://developers.cloudflare.com/pages/functions/pricing/",
   "date": "2026-10-22",
   "via": null,
   "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": null,
   "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"
  }
 ]
}
Unknown values 3
  • $.per_object_cap.notes the field may be stated in a source that was not read
  • $.retention.notes the field may be stated in a source that was not read
  • $.retention.stated the field may be stated in a source that was not read