Cost Optimization
Minimize costs when running EdgeBase on Cloudflare.
Cloudflare Pricing Overview
| Resource | Free Tier | Paid Plan |
|---|---|---|
| Workers Requests | 100K/day | 10M/month included |
| DO Requests | — | 1M/month included |
| DO Storage | — | 1GB included |
| R2 Storage | 10GB | 10GB + $0.015/GB |
| R2 Operations | 1M reads/month | 10M + $0.36/M |
| R2 Egress | $0 | $0 |
| KV Reads | 100K/day | 10M/month |
Cost Strategies
1. Use DB block for Multi-Tenancy
Isolating by user or workspace distributes data across Durable Objects, keeping each DO small:
tables: {
notes: {
user:{id} DB block, // Each user = own DO
},
}
✅ Benefits: Small SQLite databases, fast queries, natural data isolation ⚠️ Tradeoff: Cross-user queries require aggregation patterns
2. Minimize DO Billing Duration
Durable Objects charge per GB-second while a DO has an active request. EdgeBase uses context.waitUntil() for background work to return responses fast, minimizing billing duration.
3. Rate Limiting at Zero Cost
HTTP rate limiting uses a 2-layer approach: a per-isolate software counter (primary) and a Cloudflare Rate Limiting Binding (safety net). That path does not use DO storage. Realtime's separate pending-connection gate does use KV, so treat it as a different mechanism. See Rate Limiting for details.
4. R2 for Zero-Egress Storage
Cloudflare R2 has $0 egress. Serve files (images, videos, PDFs) from R2 instead of bundling in DO storage.
5. D1-Based Auth (Built-in)
Auth operations go directly to D1 (AUTH_DB), with no Durable Object overhead. D1 provides global consistency and the Workers Paid plan includes 25B reads and 50M writes per month — auth is effectively free at any scale with no per-request DO cost. If you outgrow D1 limits, switch to Neon PostgreSQL with a single config change — no code modifications, no migration downtime.
Example Monthly Costs
Small App (1K MAU, 100K requests/month)
| Resource | Usage | Cost |
|---|---|---|
| Workers Paid | Base (account-level) | $5.00 |
| DO Requests | ~200K | $0 (included) |
| R2 Storage | 1GB | $0 (included) |
| Total | $5/month |
Medium App (50K MAU, 5M requests/month)
| Resource | Usage | Cost |
|---|---|---|
| Workers Paid | Base | $5.00 |
| DO Requests | ~10M | $0.15 × 9 = $1.35 |
| DO Storage | 5GB | $0.20 × 4 = $0.80 |
| R2 Storage | 50GB | $0.015 × 40 = $0.60 |
| Total | ~$8/month |
Large App (500K MAU, 50M requests/month)
| Resource | Usage | Cost |
|---|---|---|
| Workers Paid | Base | $5.00 |
| Workers Requests | 50M | $0.30 × 40 = $12.00 |
| DO Requests | ~100M | $0.15 × 99 = $14.85 |
| DO Storage | 50GB | $0.20 × 49 = $9.80 |
| R2 Storage | 500GB | $0.015 × 490 = $7.35 |
| Total | ~$49/month |
Compare with Firebase ($275 auth alone at 100K MAU) or Supabase ($25 base + usage).