Educational — Cloud egress & data-transfer cost guides. FinOps-lite estimators. Not a quote, broker, or savings guarantee. Launching soon where incomplete.
app-assets · Educational

Cloud egress: Vercel Blob vs Cloudflare R2 for app assets

Vercel Blob (platform-bundled) and Cloudflare R2 (standalone) deliver app assets on different path templates: platform edge + quota cliffs versus explicit Cache-Control / Workers and portable buckets. Model delivery path and origin fill — Unknown until verified.

Updated

Platform-bundled blob storage vs standalone object storage — model delivery path, not logo preference.

Path matrix: Vercel Blob vs Cloudflare R2 app-asset delivery (educational)
DimensionVercel Blob (typical)R2 (typical)Model
Delivery pathOften via Vercel/platform edgeCloudflare fetch / custom domainWho terminates TLS + cache
Egress framingPlatform bandwidth quotas/pricingStorage egress marketing + opsQuota cliffs
DX couplingTight with Vercel app deployIndependent of app hostPortability
CDN controlPlatform defaultsExplicit Cache-Control / WorkersHit ratio ownership
Multi-region storyPlatform-definedBucket location choicesLatency vs cost

Sources (official docs)

  1. Vercel Blob documentation — as-of Unknown until verified
  2. Vercel Blob usage & pricing — as-of Unknown until verified
  3. Vercel pricing (platform bandwidth context) — as-of Unknown until verified
  4. Cloudflare R2 pricing — as-of Unknown until verified
  5. Cloudflare R2 public buckets / custom domains — as-of
  6. Cloudflare CDN / cache docs — as-of (CHR ownership beside glossary CHR)

Dated starting points only — Unknown until verified means no invented $/GB. Platform quotas and storage SKUs change; re-read before Mode C arithmetic.

Path-class vocabulary: path template, Unknown until verified. Clone pages that only paste public $/GB miss platform quotas and DX lock-in. Use path templates: browser ← edge ← blob versus browser ← R2/custom domain.

Path templates to model

Common traps

Comparing only storage $/GB ignores platform bandwidth quotas. Assuming high CHR without measuring misses understates origin fill. Portability costs (migration egress) are easy to skip in vendor switches. No guaranteed savings from either logo.

FinOps checklist

  1. Capture client GB, CHR, and bill lines for 30 days.
  2. Map whether edge bandwidth and origin storage are separate invoices.
  3. Use Mode C for origin-fill sensitivity.
  4. Document DX/portability constraints beside cost — not cost alone.
  5. Read CDN origin egress and CHR.

Related vocabulary: egress, origin fill, cache hit ratio (CHR), path template, multi-CDN, Unknown until verified, FinOps-lite.

FinOps-lite Unknown until verified

Worked example (educational): 1,000 GB client / 85% CHR + quota cliff note

  1. Client downloads 1,000 GB; CHR 0.85 → origin fill ≈ 150 GB (Mode C literacy).
  2. Edge / platform bandwidth for the 1,000 GB may bill on a Vercel plan quota — separate from Blob/R2 origin meters.
  3. Origin $/GB cell — Unknown until cited (Blob usage page or R2 pricing).
  4. Overage cliff: if platform bandwidth exceeds the plan grant, model the cliff explicitly — sibling to free-tier cliff literacy.
  5. Deep-link ?mode=origin&path=blob-r2. Cross-check the CDN origin-fill estimator. No savings guarantee.
Numbered Blob vs R2 app-asset stack — Unknown rate cells
#Path classVolumeUnit rate
1Client / edge bandwidth1,000 GBUnknown (plan quota / overage)
2Origin fill (1 − CHR)≈ 150 GBUnknown $/GB origin
3Ops / PUT / LISTas measuredUnknown

Second stack: signed-URL direct downloads at ~20% CHR on 400 GB client → fill ≈ 320 GB. Low-CHR paths dominate origin bills — measure before migrating logos.

Open calculator Mode C (blob-r2) CDN origin fill R2 vs B2

Second educational stack (CHR / plan-quota twin): same 1,000 GB client downloads at 55% CHR (origin fill ≈ 450 GB) plus an explicit platform bandwidth plan-quota cliff — if the plan grant is e.g. 100 GB included, model overage above the grant as its own free-tier cliff line, separate from R2/origin fill $/GB. Re-run Mode C (?path=blob-r2). Synthetic only; rates Unknown until dated Vercel Blob / R2 cites. No savings guarantee.

Worked-estimate sensitivity (educational)

Hold the 1,000 GB client baseline and walk three CHR / quota runs. Every unit rate stays Unknown until dated Vercel Blob / R2 / plan cites — literacy arithmetic, not a quote.

  1. Run A — high CHR (0.85): origin fill ≈ 150 GB. Model edge/plan bandwidth for 1,000 GB separately from origin $/GB. Open Mode C (?path=blob-r2).
  2. Run B — mid CHR (0.55) + plan cliff: fill ≈ 450 GB; if the platform grant is e.g. 100 GB included, split below-grant vs overage as its own cliff line — sibling to free-tier cliff literacy.
  3. Run C — low CHR signed-URL path (~0.20) on 400 GB client: fill ≈ 320 GB. Direct/signed downloads dominate origin bills — measure before migrating logos; twin with CDN origin fill.
Sensitivity runs — Unknown rates (educational)
RunWhat changesMeters to keep visibleUnit rates
A1,000 GB client · CHR 0.85Edge/plan bandwidth · origin fill ≈ 150 GBUnknown
BSame client · CHR 0.55 + quota cliffFill ≈ 450 GB · below-grant · overageUnknown
C400 GB signed-URL · CHR ~0.20Fill ≈ 320 GB (origin-dominant)Unknown

Cross-read CDN origin fill, R2 vs B2, and S3 vs R2. Badge every unverified rate Unknown until verified. No savings guarantee. Multi-edge stacks still share miss physics with multi-CDN origin fill.

FAQ on this path

Is platform blob storage “included” egress?

Sometimes bandwidth is wrapped in plan quotas. Overage cliffs and separate blob pricing still need a path model.

When does standalone R2 win on clarity?

When you want explicit Cache-Control, Workers, and portable buckets independent of the app host — clarity ≠ guaranteed savings.

What is the first metric to capture?

Client download GB, cache hit ratio, and which bill line (platform vs storage) moves when CHR changes.

Does calculator path=blob-r2 invent rates?

No. ?path=blob-r2 only labels Mode C path context. Rates stay Unknown until you cite dated Vercel Blob or R2 pages — see methodology.

How should I model plan-quota cliffs vs origin fill?

Keep them as separate lines: platform bandwidth grant/overage is a cliff; CDN/origin fill is Mode C math driven by CHR. Deep-link ?path=blob-r2 for the fill half only.

Is Vercel Blob the same path as Azure Blob?

No. Platform blob + edge quotas differ from Azure Blob bandwidth — see Azure vs S3 for object-storage bandwidth literacy, and keep this spoke for app-platform vs R2 designs.

Does Mode C path=blob-r2 pick a winner?

No. It only labels path context for educational arithmetic. PipeToll never guarantees savings — verify on dated provider pages per methodology.

Trademarks: Amazon Web Services, AWS, Microsoft Azure, Google Cloud Platform, GCP, and Cloudflare are trademarks of their respective owners. PipeToll (Ameti One LLC) is not affiliated with, endorsed by, or sponsored by those companies. Educational comparisons may be outdated — verify current rates with each provider.