Cloudflare Workers "Too many subrequests": the 50-fetch ceiling nobody budgets for
Problem
A Worker that fans out to per-user personalization endpoints died the moment the fan-out list crossed 50:
Error: Too many subrequests.
at async Promise.all (index 4)
# worker.js: exceeded limit of 50 subrequests per request (Free plan)Staging (12 users) was green for a month. Production (60 users) failed every request instantly. Nothing in the code had changed.
Root cause
Workers count every outbound fetch() (plus KV/R2/D1 operations on some plans) as a subrequest, with a hard per-invocation cap: 50 on Free, 1000 on Paid. Promise.all over a dynamic array means the cap is data-dependent — it fires exactly when your customer base grows past the limit, at which point every request fails, not just the 51st item. The staging/production split made it look like an environment bug. It was an architecture bug with a plan-tier quota.
🔒 the fix — including 3 code blocks — is members-only. $1/mo unlocks everything.