{"eid":"jsdelivr","name":"jsDelivr","domain":"jsdelivr.com","resolved_by":"domain","topics":["egress","storage"],"n_records":3,"best_vorder":0,"review":null,"aliases":["jsDelivr","jsDelivr (npm + GitHub proxy CDN)","jsDelivr as the free CDN layer over GitHub repos","jsdelivr.com"],"records":[{"rid":"storage/jsdelivr","card":{"rid":"storage/jsdelivr","eid":"jsdelivr","topic":"storage","slug":"jsdelivr","provider":"jsDelivr (npm + GitHub proxy CDN)","url":"https://www.jsdelivr.com","domain":"jsdelivr.com","category":"registry","tier":null,"verdict":"qualifies","vorder":0,"grp":"usable","self_hosted":0,"confidence":"reported","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","egress_metered":0,"per_object_bytes":20000000,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-05","n_evidence":5,"usd_month":null,"usd_per_tb_month":null,"summary":"No storage quota of its own — it is a serving and permanence layer over npm and GitHub, so the quota is whatever the origin package holds. Hard limits: packa...","duplicate_of":null,"n_unknown":7,"free_unit":"MB"},"record":{"topic":"storage","slug":"jsdelivr","provider":"jsDelivr (npm + GitHub proxy CDN)","url":"https://www.jsdelivr.com","category":"registry","free_tier":{"stated":"No storage quota of its own — it is a serving and permanence layer over npm and GitHub, so the quota is whatever the origin package holds. Hard limits: packages >150 MB and (for GitHub) single files >20 MB are refused by default, raisable on request.","unit":"MB","metered_on":"stored-bytes","source_url":"https://www.jsdelivr.com/about","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"single files >20 MB","bytes":20000000,"source_url":"https://www.jsdelivr.com/about","notes":"not stated"},"retention":{"stated":"| Retention is stronger than the origin: 'Previously served immutable files may be retained in permanent storage even after upstream deletion","source_url":"https://www.jsdelivr.com/about","notes":"not stated"},"egress":{"terms":"Fully free and explicitly unmetered.","metered":false},"interface":["rest"],"interface_detail":"rest","tooling":"Plain GET on cdn.jsdelivr.net/npm/<pkg>@<ver>/<path> and /gh/<owner>/<repo>@<ref>/<path>. No client needed. Cache-purge API exists (email-gated).","chaining":"Chains onto npm (see npm candidate) or onto GitHub repos: publish the blob as an npm tarball, then serve it from jsDelivr at a URL with 1-year immutable cache and no bandwidth charge.","limits":[{"kind":"per-object-cap","value":"single files >20 MB","source":"https://www.jsdelivr.com/about"}],"limits_note":"150 MB per npm package, 20 MB per single GitHub file (both default, raisable via GitHub issue). Rate limiting applies to purge, not to reads.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Retention is stronger than the origin: 'Previously served immutable files may be retained in permanent storage even after upstream deletion. We do not accept removal requests simply because a package or version was unpublished, deleted upstream, or is no longer needed.' Once a URL has been fetched it keeps working after you delete the npm package — that is a genuine cold-archive property. Counter-risk: a 150 MB package cap means a naive >150 MB npm tarball 403s ('Package size exceeded the configured limit of 150 MB') even though npm itself accepted it.","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://www.jsdelivr.com/about","date":"2026-10-21","proved":"'no bandwidth limits or premium features and its completely free to use by anybody'"},{"url":"https://github.com/jsdelivr/jsdelivr/blob/master/Terms%20of%20Use.md","date":"2026-10-21","proved":"'no limits on bandwidth or number of requests'; 'Previously served immutable files may be retained in permanent storage even after upstream deletion'"},{"url":"https://github.com/jsdelivr/jsdelivr","date":"2026-10-21","proved":"(README) — 'Packages larger than 150 MB or single files larger than 20 MB (in the case of GitHub) are not supported by default'"},{"url":"https://cdn.jsdelivr.net/npm/left-pad@1.3.0/package.json","date":"2026-10-21","proved":"probe: GET -> 200, Access-Control-Allow-Origin: *, Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable, Server: cloudflare"},{"url":"https://cdn.jsdelivr.net/npm/onnxruntime-node@1.20.1/bin/napi-v3/win32/x64/onnxruntime.dll","date":"2026-10-21","proved":"probe: GET -> 403, body 'Package size exceeded the configured limit of 150 MB.' (confirms the cap is real and enforced at fetch time)"}],"verdict":"qualifies","verified_at":"2026-10-21T00:00:00.000Z","notes":"No storage quota of its own — it is a serving and permanence layer over npm and GitHub, so the quota is whatever the origin package holds. Hard limits: packages >150 MB and (for GitHub) single files >20 MB are refused by default, raisable on request.","extras":{},"binding":"per-object-cap","binding_note":null},"claims":[{"path":"$.free_tier","kind":"has-free-tier","num":1.0,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.free_tier.stated","kind":"free-quota","num":150.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":20.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.binding_note","boilerplate"],["$.confidence_note","withheld"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]},{"rid":"storage/jsdelivr-as-the-free-cdn-layer-over-github-repos","card":{"rid":"storage/jsdelivr-as-the-free-cdn-layer-over-github-repos","eid":"jsdelivr","topic":"storage","slug":"jsdelivr-as-the-free-cdn-layer-over-github-repos","provider":"jsDelivr as the free CDN layer over GitHub repos","url":"https://www.jsdelivr.com","domain":"jsdelivr.com","category":"paas","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","self_hosted":0,"confidence":"reported","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","egress_metered":0,"per_object_bytes":20000000,"retention_days":null,"verified_at":"2026-10-30T18:09:47.045Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-05","n_evidence":11,"usd_month":null,"usd_per_tb_month":null,"summary":"free with no limits on bandwidth or number of requests; GitHub-proxy soft limits of 10 000 actively accessed files and 100 000 files per repository","duplicate_of":null,"n_unknown":10,"free_unit":"objects"},"record":{"topic":"storage","slug":"jsdelivr-as-the-free-cdn-layer-over-github-repos","provider":"jsDelivr as the free CDN layer over GitHub repos","url":"https://www.jsdelivr.com","category":"paas","free_tier":{"stated":"free with no limits on bandwidth or number of requests; GitHub-proxy soft limits of 10 000 actively accessed files and 100 000 files per repository","unit":"objects","metered_on":"object-count","source_url":"https://www.jsdelivr.com/terms/acceptable-use-policy","read_on":"2026-10-30","notes":"the file-count soft limits are not automatically enforced"},"per_object_cap":{"stated":"files up to 20 MB through the GitHub proxy, regardless of repository size","bytes":20000000,"source_url":"https://github.com/jsdelivr/jsdelivr/issues/18550","notes":"not stated"},"retention":{"stated":"| Immutable: 'Previously served immutable files may be retained in permanent storage even after upstream deletion' — deletion upstream does not remove it from jsDelivr","source_url":"https://www.jsdelivr.com/terms/acceptable-use-policy","notes":"not stated"},"egress":{"terms":"Unmetered, and immutable-cached at the edge: probed 'Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable' plus Access-Control-Allow-Origin: *.","metered":false},"interface":["rest"],"interface_detail":"rest","tooling":"URL pattern https://cdn.jsdelivr.net/gh/USER/REPO@TAG/path — no client needed, no auth, no config. Purge API exists for cache busting.","chaining":"Serving layer only: pair it with Releases (storage) or a git repo (small files). One repo backs 1 TiB/day because the edge absorbs repeats with a 1-year immutable TTL.","limits":[{"kind":"per-object-cap","value":"per file | 20 MB","source":"https://github.com/jsdelivr/jsdelivr/issues/18550"}],"limits_note":"Git repo files only — release assets are NOT served (probed: /gh/cli/cli@v2.102.1/dist/README.md -> 404). ~20 MB effective per-file ceiling for the GitHub proxy (the git-unlimited-storage README states 'jsDelivr per file | 20 MB'); hard per-file/per-package caps are undocumented and enforced at request time. Does not serve the >2 GiB release assets, so the serving path for big objects stays on GitHub's own Fastly edge.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Immutable: 'Previously served immutable files may be retained in permanent storage even after upstream deletion' — deletion upstream does not remove it from jsDelivr. Extension blocklist exists; binaries with unusual extensions can be refused.","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-21","proved":"'there are no limits on bandwidth or number of requests'; soft limit '100 000' files per repository"},{"url":null,"date":"2026-10-21","proved":"probe: GET cdn.jsdelivr.net/gh/jquery/jquery@3.7.1/dist/jquery.min.js -> 200, Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable, Access-Control-Allow-Origin: *"},{"url":null,"date":"2026-10-21","proved":"probe: GET cdn.jsdelivr.net/gh/cli/cli@v2.102.1/dist/README.md -> 404 (release assets not mirrored)"},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"jsDelivr CDN sets no limit on bandwidth or on the number of requests","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"there are no limits on bandwidth or number of requests"},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"jsDelivr CDN is free","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"using jsDelivr CDN is free"},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"the GitHub-proxy recommendation is at most 10 000 actively accessed files per repository","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"We recommend that the number of actively accessed files per repository does not exceed 10 000."},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"the GitHub-proxy soft limit is 100 000 files per repository","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"The soft limit for the number of files per repository is 100 000."},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"the soft limits are not automatically enforced","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"These limits are not automatically enforced by us, but you agree not to exceed them."},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":null,"capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"_Effective date: October 5, 2026_"},{"url":"https://github.com/jsdelivr/jsdelivr/issues/18550","date":"2026-10-30","proved":"a jsDelivr member states the GitHub-proxy per-file limit of 20 MB","capture":"sha256:2d9aff2fdf9921dacb7594a19f8bc87205957ed03a5a3139bb131f85f89e24c1","quote":"We actually allow files up to 20 MB for GitHub regardless of the overall repo size"},{"url":"https://www.jsdelivr.com/terms/acceptable-use-policy","date":"2026-10-30","proved":"served immutable files can outlive upstream deletion","capture":"sha256:2f18e724ac81932cd47f54f153f7202a350bb363b577a1de43bb9073f2771431","quote":"Previously served immutable files may be retained in permanent storage even after upstream deletion."}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-30T18:09:47.045Z","notes":null,"extras":{},"binding":"per-object-cap","binding_note":null},"claims":[{"path":"$.free_tier","kind":"has-free-tier","num":1.0,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":20.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.binding_note","boilerplate"],["$.confidence_note","withheld"],["$.evidence[1].url","private-url"],["$.evidence[2].url","private-url"],["$.evidence[8].proved","withheld"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.notes","withheld"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]},{"rid":"egress/jsdelivr","card":{"rid":"egress/jsdelivr","eid":"jsdelivr","topic":"egress","slug":"jsdelivr","provider":"jsDelivr","url":"https://www.jsdelivr.com/","domain":"jsdelivr.com","category":"CDN for package content","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","self_hosted":0,"confidence":"reported","binding":"per-object-cap","identity_kind":"anonymous","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":0,"country":null,"crypto":null,"interfaces":"rest","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-22T03:20:00.000Z","verified_basis":"live","checked_on":"2026-10-22","stale_on":"2026-11-06","n_evidence":1,"usd_month":null,"usd_per_tb_month":null,"summary":"free CDN for npm and GitHub content only","duplicate_of":null,"n_unknown":1,"free_unit":"none"},"record":{"topic":"egress","slug":"jsdelivr","provider":"jsDelivr","url":"https://www.jsdelivr.com/","category":"CDN for package content","free_tier":{"stated":"free CDN for npm and GitHub content only","unit":"none","metered_on":"downloaded-bytes","source_url":"https://www.jsdelivr.com/","read_on":"2026-10-22","notes":""},"per_object_cap":{"stated":"package-file sizes; the per-file class limit could not be read","bytes":null,"notes":"","source_url":"https://www.jsdelivr.com/"},"retention":{"stated":"not applicable","days":null,"notes":"","source_url":"https://www.jsdelivr.com/"},"egress":{"terms":"no bandwidth cap found on a first-party page","metered":false,"free_allowance":null,"price_per_tb":null,"source_url":"https://www.jsdelivr.com/"},"interface":["rest"],"tooling":"curl","chaining":"not a general egress path: the bytes must already be in a package registry, so it composes with npm and not with a user's corpus.","limits":[{"kind":"per-object-cap","value":"serves npm and GitHub content only, at package-file sizes","source":"https://www.jsdelivr.com/"}],"identity_cost":{"kind":"anonymous","detail":"no account to read from the CDN","country":null},"reliability_note":"the policy page at /policy returned 404 on 2026-10-22; /terms and /about resolve","confidence":"reported","evidence":[{"url":"probe:https://www.jsdelivr.com/policy","date":"2026-10-22","proved":"404 on 2026-10-22, so the per-file limit and the no-cap claim could not be read first-hand"}],"verdict":"fails-quota","verified_at":"2026-10-22T03:20:00.000Z","notes":null,"extras":{"stale_after_days":180,"bytes_transit":"yes","transit_note":"the CDN serves package files from its edge"},"binding":"per-object-cap","interface_detail":"https://cdn.jsdelivr.net/npm/PKG@VER/FILE"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"}],"unknown":[["$.notes","withheld"]],"history":[],"drift":[]}]}