Cloudflare Developer Platform 2026 — A Free Edge Computing Ecosystem for Developers

Posted on: 4/17/2026 10:10:05 PM

If you're looking for a platform to deploy a full-stack application without spending a cent for small and medium projects, the Cloudflare Developer Platform in 2026 is hard to ignore. With an ecosystem of Workers (serverless compute), D1 (SQL database), R2 (zero-egress object storage), Durable Objects (stateful compute), Workers AI (inference at the edge), and — most recently — Sandboxes + Dynamic Workers from Agents Week 2026, Cloudflare is building a "complete cloud" that runs on an edge network spanning 330+ cities worldwide.

330+Global edge locations
100KRequests/day (Free tier)
5 GBFree D1 storage
10 GBFree R2 storage/month
10KFree AI Neurons/day
4000%Workers AI YoY growth Q1/2026

1. Cloudflare Developer Platform overview

The Cloudflare Developer Platform isn't a single service — it's a complete ecosystem that lets you build, store, and run applications entirely on an edge network. Unlike the traditional cloud model (pick a region → deploy → wait for requests to travel to a far-off datacenter), everything on Cloudflare runs in the datacenter closest to the user.

graph TD
    USER["👤 User Request"]
    EDGE["🌐 Cloudflare Edge
(330+ locations)"] WORKERS["⚡ Workers
Serverless Compute"] D1["🗄️ D1
SQLite Database"] R2["📦 R2
Object Storage"] DO["🔒 Durable Objects
Stateful Compute"] KV["⚡ KV
Key-Value Store"] AI["🤖 Workers AI
Inference"] QUEUES["📨 Queues
Message Queue"] SANDBOX["🏗️ Sandboxes
Isolated Runtime"] USER --> EDGE EDGE --> WORKERS WORKERS --> D1 WORKERS --> R2 WORKERS --> DO WORKERS --> KV WORKERS --> AI WORKERS --> QUEUES WORKERS --> SANDBOX DO --> D1 style USER fill:#e94560,stroke:#fff,color:#fff style EDGE fill:#2c3e50,stroke:#fff,color:#fff style WORKERS fill:#3498db,stroke:#fff,color:#fff style D1 fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style R2 fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style DO fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style KV fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style AI fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style QUEUES fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style SANDBOX fill:#f8f9fa,stroke:#e94560,color:#2c3e50
Figure 1: Cloudflare Developer Platform overview — every component runs at the edge

The key to this architecture is that every component sits on the same edge network. When Workers call D1, R2, or Durable Objects, there's no external network hop. Inter-service latency is effectively zero because they all run inside the same datacenter.

Why does edge computing matter?

On a traditional cloud, a user in Vietnam calling an API hosted in us-east-1 pays ~200 ms round-trip in network latency alone. On Cloudflare, the request is handled at an edge PoP in Singapore or Ho Chi Minh City — latency drops to ~10-30 ms. With D1 read replicas, data is cached at the nearest edge location.

2. Workers — Serverless Compute at the Edge

Workers is the heart of the Cloudflare Developer Platform. Each Worker is a chunk of JavaScript/TypeScript (or Python as of 2025) running inside a V8 isolate — not a container, not a VM — so cold start is near zero (under 5 ms, compared to 100-500 ms for Lambda).

2.1. Execution model: V8 Isolates

Instead of spinning up a container for every request like AWS Lambda, Workers use V8 isolates — the same engine Chrome runs JavaScript in. Each isolate is created in microseconds, shares a process, but is fully memory-isolated.

graph LR
    subgraph Container["Container model (Lambda)"]
        C1["Container 1
~100ms cold start"] C2["Container 2
~100ms cold start"] C3["Container 3
~100ms cold start"] end subgraph Isolate["V8 Isolate model (Workers)"] I1["Isolate 1
~0ms cold start"] I2["Isolate 2
~0ms cold start"] I3["Isolate 3
~0ms cold start"] end style C1 fill:#f8f9fa,stroke:#ff9800,color:#2c3e50 style C2 fill:#f8f9fa,stroke:#ff9800,color:#2c3e50 style C3 fill:#f8f9fa,stroke:#ff9800,color:#2c3e50 style I1 fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50 style I2 fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50 style I3 fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50
Figure 2: the container model (Lambda) vs the V8 isolate model (Workers)

2.2. Cron Triggers and Scheduled Workers

Workers don't just handle HTTP requests. You can schedule them with Cron Triggers — essentially cron jobs running at the edge, with no server.

export default {
  async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext) {
    // Runs every day at 2:00 AM UTC
    const response = await fetch('https://api.example.com/daily-sync');
    const data = await response.json();

    // Store the result in D1
    await env.DB.prepare('INSERT INTO sync_logs (data, synced_at) VALUES (?, ?)')
      .bind(JSON.stringify(data), new Date().toISOString())
      .run();
  },

  async fetch(request: Request, env: Env) {
    // Handle HTTP requests normally
    return new Response('Hello from Workers!');
  }
};

2.3. Python Workers

Since late 2025, Cloudflare has supported Python on Workers with fast cold starts and a uv-first workflow. In 2026, Python Workers fully support Durable Objects and Workflows — a significant expansion for developers coming from the Python/data-science ecosystem.

from js import Response

async def on_fetch(request, env):
    results = await env.DB.prepare(
        "SELECT * FROM products WHERE category = ?"
    ).bind("electronics").all()

    return Response.json(results)

3. D1 — SQL Database at the Edge with SQLite

D1 is a SQL database running at the edge, built on SQLite. That may sound simple, but D1 solves a problem many other edge platforms skip: how do you put a relational database near the user without managing replication yourself?

3.1. D1 architecture

graph TD
    W1["Worker (Singapore)"] -->|READ| R1["Read Replica
Singapore"] W2["Worker (Tokyo)"] -->|READ| R2["Read Replica
Tokyo"] W3["Worker (Frankfurt)"] -->|READ| R3["Read Replica
Frankfurt"] W1 -->|WRITE| PRIMARY["Primary DB
(Single Region)"] W2 -->|WRITE| PRIMARY W3 -->|WRITE| PRIMARY PRIMARY -->|Replicate| R1 PRIMARY -->|Replicate| R2 PRIMARY -->|Replicate| R3 style PRIMARY fill:#e94560,stroke:#fff,color:#fff style R1 fill:#f8f9fa,stroke:#3498db,color:#2c3e50 style R2 fill:#f8f9fa,stroke:#3498db,color:#2c3e50 style R3 fill:#f8f9fa,stroke:#3498db,color:#2c3e50 style W1 fill:#2c3e50,stroke:#fff,color:#fff style W2 fill:#2c3e50,stroke:#fff,color:#fff style W3 fill:#2c3e50,stroke:#fff,color:#fff
Figure 3: D1 read replication — reads hit the edge, writes go back to the primary

3.2. Standout features

  • Time Travel: roll the database back to any minute within the last 30 days — no manual backups required
  • Read replicas: auto-replicated to edge locations at no extra charge
  • Batched statements: send multiple queries in a single call, saving round-trips
  • 50,000 databases per account: great for multi-tenant SaaS — one database per tenant
// Batched statements — 3 queries, 1 round-trip
const results = await env.DB.batch([
  env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId),
  env.DB.prepare('SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC LIMIT 10').bind(userId),
  env.DB.prepare('UPDATE users SET last_login = ? WHERE id = ?').bind(new Date().toISOString(), userId),
]);

const [user, orders, _] = results;

When should you use D1?

D1 is a fit for read-heavy apps (blog, e-commerce catalog, dashboard). For write-heavy workloads (real-time chat, gaming), Durable Objects with SQLite storage are a better fit — writes happen right at the edge with no round-trip back to the primary.

4. R2 — Object Storage with No Egress Fees

R2 is S3-API-compatible object storage with one critical difference: zero egress fees. AWS S3 charges $0.09/GB for data transfer out. On R2 you pay $0/GB in egress. For apps serving lots of media (images, video, file downloads), that's massive savings.

4.1. Storage cost comparison

CriterionCloudflare R2AWS S3 StandardGoogle Cloud Storage
Storage/GB/month$0.015$0.023$0.020
Egress/GB$0 (free)$0.09$0.12
PUT/1M requests$4.50$5.00$5.00
GET/1M requests$0.36$0.40$0.40
Free storage10 GB/month5 GB (first 12 months)5 GB
Free egressUnlimited100 GB/month (12 months)1 GB/day
S3 API compatibleYesNativeYes (interop)

4.2. Media Transformations (GA 2026)

R2 now integrates Media Transformations — letting you resize, crop, watermark images, and optimize video directly at the edge, without a separate service. This feature went GA in early 2026.

// Upload a file to R2
await env.MY_BUCKET.put('images/avatar.jpg', imageData, {
  httpMetadata: { contentType: 'image/jpeg' },
});

// Serve a transformed image through Workers
// URL: /images/avatar.jpg?width=200&height=200&fit=cover
const transformed = await fetch(
  `https://my-bucket.r2.dev/images/avatar.jpg?width=200&height=200&fit=cover`
);

5. Durable Objects — Stateful Serverless

Durable Objects (DO) solve a problem traditional serverless can't: stateful computation. Each Durable Object is a globally unique instance with its own memory, and can persist data via SQLite — GA since 2026 and free on the Workers Free plan.

5.1. Typical use cases

🎮Real-time multiplayer games
💬Chat rooms & collaboration
🔒Distributed locks & rate limiting
📊Real-time counters & analytics

5.2. SQLite-backed Durable Objects

As of 2026, SQLite storage for Durable Objects graduated from beta to GA. Each DO instance gets its own SQLite database — perfect for patterns that need strong consistency at a single point.

import { DurableObject } from 'cloudflare:workers';

export class ChatRoom extends DurableObject {
  private sql: SqlStorage;

  constructor(ctx: DurableObjectState, env: Env) {
    super(ctx, env);
    this.sql = ctx.storage.sql;

    // Create the table if it doesn't exist yet
    this.sql.exec(`
      CREATE TABLE IF NOT EXISTS messages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user TEXT NOT NULL,
        content TEXT NOT NULL,
        created_at TEXT DEFAULT (datetime('now'))
      )
    `);
  }

  async sendMessage(user: string, content: string) {
    this.sql.exec(
      'INSERT INTO messages (user, content) VALUES (?, ?)',
      user, content
    );
    // Broadcast over WebSocket to connected clients
    for (const ws of this.ctx.getWebSockets()) {
      ws.send(JSON.stringify({ user, content, time: new Date().toISOString() }));
    }
  }

  async getHistory(limit = 50) {
    return this.sql.exec(
      'SELECT * FROM messages ORDER BY created_at DESC LIMIT ?', limit
    ).toArray();
  }
}

6. Workers AI — Inference at the Edge

Workers AI lets you run inference for popular AI models (Llama 3.3 70B, Mistral, DeepSeek R1 distilled, Stable Diffusion, Whisper, …) right at the edge — no GPU management, no provisioning required.

6.1. Models and pricing

50+ ready-to-use models

  • Text Generation: Llama 3.3 70B, Llama 3.2 (1B/3B/11B vision), Mistral 7B, Mistral Small 3.1, DeepSeek R1 Distilled
  • Embeddings: BGE models for vector search
  • Image Generation: Stable Diffusion XL, FLUX.1
  • Speech-to-Text: Whisper
  • Translation: M2M-100

Pricing: 10,000 free Neurons/day. After that $0.011/1,000 Neurons. Inference runs across 200+ data centers worldwide.

export default {
  async fetch(request: Request, env: Env) {
    // Text generation with Llama 3.3
    const textResult = await env.AI.run('@cf/meta/llama-3.3-70b-instruct-fp8-fast', {
      messages: [
        { role: 'system', content: 'You are a helpful assistant that answers in English.' },
        { role: 'user', content: 'Explain serverless computing in 3 sentences.' }
      ]
    });

    // Image generation with Stable Diffusion
    const imageResult = await env.AI.run('@cf/stabilityai/stable-diffusion-xl-base-1.0', {
      prompt: 'A futuristic city with neon lights, cyberpunk style'
    });

    // Embedding for vector search
    const embedding = await env.AI.run('@cf/baai/bge-base-en-v1.5', {
      text: ['Cloudflare Workers edge computing']
    });

    return Response.json({ text: textResult, embedding: embedding.data });
  }
};

AI Gateway — centralized AI inference management

AI Gateway acts as a proxy layer in front of AI providers (OpenAI, Anthropic, Workers AI). It provides caching (cutting cost for repeated prompts), rate limiting, analytics, and provider fallback — all free on the Free plan.

7. Agents Week 2026 — Sandboxes, Facets, and Dynamic Workers

Cloudflare Agents Week (April 13-17, 2026) is Cloudflare's biggest AI developer event, introducing a wave of features that turn Cloudflare into the platform of choice for AI agents.

June 2025
Sandboxes Beta — the first beta shipped, giving AI agents isolated environments with their own shell, filesystem, and background processes.
March 2026
Dynamic Workers Open Beta — create and deploy Workers on the fly via API, no wrangler CLI needed. The foundation for AI-generated apps.
April 13, 2026
Sandboxes GA — persistent isolated environments for AI agents, with Outbound Workers for zero-trust egress proxy. Agents get their own "computers" with state preserved across sessions.
April 14, 2026
Durable Object Facets (Beta) — Dynamic Workers can create Durable Objects with their own SQLite database. Every AI-generated app gets a separate, fully isolated database.
April 15, 2026
Unified CLI (cf) — a new CLI replacing wrangler, unifying ~3,000 API operations. Local Explorer lets you debug D1, KV, and R2 data right on your local machine.

7.1. Sandboxes — a dedicated computer for AI agents

Sandboxes give AI agents a persistent, isolated environment: a real shell, a real filesystem, real background processes. Unlike ephemeral containers, Sandboxes preserve state between calls — an agent can come back and pick up right where it stopped.

graph LR
    AGENT["🤖 AI Agent"] --> SANDBOX["🏗️ Sandbox"]
    SANDBOX --> SHELL["Shell Access"]
    SANDBOX --> FS["Persistent
Filesystem"] SANDBOX --> PROC["Background
Processes"] SANDBOX --> OW["Outbound Workers
(Zero-trust Egress)"] OW --> API1["External API 1"] OW --> API2["External API 2"] style AGENT fill:#e94560,stroke:#fff,color:#fff style SANDBOX fill:#2c3e50,stroke:#fff,color:#fff style SHELL fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style FS fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style PROC fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style OW fill:#3498db,stroke:#fff,color:#fff style API1 fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50 style API2 fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
Figure 4: Sandboxes architecture — AI agents get their own environment with zero-trust egress

7.2. Durable Object Facets — a dedicated database per app

Facets allow Dynamic Workers to spawn Durable Object classes on the fly, each with its own SQLite database. This is the backbone for "each user has their own app" platforms — AI-generated apps, no-code builders, multi-tenant SaaS.

// A Dynamic Worker creating a Durable Object with Facets
const id = env.MY_DURABLE_OBJECT.idFromName('user-123-app');
const stub = env.MY_DURABLE_OBJECT.get(id);

// Each instance has its own isolated SQLite database
// User 123 cannot access User 456's data
await stub.fetch('/api/data', {
  method: 'POST',
  body: JSON.stringify({ key: 'settings', value: { theme: 'dark' } })
});

8. Pages → Workers: the great consolidation

An important 2026 change: Cloudflare Pages has moved to maintenance mode. All new investment is focused on Workers. What does that mean?

FeaturePages (Maintenance)Workers (Active)
Static site hostingYesYes (Workers Sites / Assets)
Serverless functionsPages Functions (limited)Full Workers runtime
Durable ObjectsNoYes
D1, R2, KV, QueuesVia FunctionsNative bindings
Cron TriggersNoYes
Dynamic WorkersNoYes
Python supportNoYes
ContainersNoYes (on DO)
Git integrationYes (auto deploy)Yes (Workers Builds GA)

Migration note for Pages users

If you're on Pages today, your existing project keeps running. But for new projects, start with Workers + Assets. Cloudflare will provide an official migration path — the sooner you move, the sooner you benefit from the new features.

9. Free tier summary — what do you get for free?

Here's the most attractive part: Cloudflare's free tier is generous, especially compared to AWS or Vercel.

FREE

Workers

  • 100,000 requests/day
  • 10 ms CPU time/request
  • Unlimited Workers
  • Custom domains
  • Cron Triggers (5 triggers)
FREE

D1 Database

  • 5 GB total storage
  • 5M rows read/day
  • 100K rows written/day
  • Free read replicas
  • 30-day Time Travel
FREE

R2 Storage

  • 10 GB storage/month
  • 1M Class A ops/month
  • 10M Class B ops/month
  • Egress: $0 (unlimited)
  • S3-compatible API
FREE

Workers AI

  • 10,000 Neurons/day
  • 50+ models (LLM, Image, STT)
  • AI Gateway analytics
  • Vectorize 5M vectors
  • Inference at 200+ PoPs
FREE

KV Storage

  • 100,000 reads/day
  • 1,000 writes/day
  • 1 GB stored
  • Eventually consistent
  • Global replication
FREE

Durable Objects

  • SQLite storage (GA)
  • Included on Workers Free
  • WebSocket hibernation
  • Alarms (scheduled wake)
  • Transactional storage

Bottom line: what can you build for free?

On the free tier you can genuinely run a production blog/portfolio, a mobile app's API backend, a SaaS MVP, a real-time chat app, or an AI chatbot. Only when you scale to millions of requests per day do you need to upgrade to Workers Paid ($5/month).

10. Compared with AWS Lambda, Vercel, and Deno Deploy

CriterionCloudflare WorkersAWS LambdaVercel FunctionsDeno Deploy
Cold start<5ms100-500ms~250ms~10ms
RuntimeV8 IsolateContainerContainer (AWS)V8 Isolate
Edge locations330+30+ regions~20 regions35+ regions
SQL databaseD1 (5 GB free)None (needs RDS)Vercel Postgres (256 MB free)Deno KV
Object storageR2 (zero egress)S3 ($0.09/GB egress)Vercel BlobNo native option
AI inferenceWorkers AI (50+ models)Bedrock (paid)No native optionNo native option
Free requests100K/day1M/month100K/month (Hobby)1M/month
Stateful computeDurable ObjectsNo native optionNoNo
LanguagesJS/TS, Python, WASMMany languagesJS/TSJS/TS
Container supportYes (on DO)NativeNoNo

When should you NOT pick Cloudflare?

Long-running tasks: Workers Free limits CPU to 10 ms/request (30 s on Paid). For heavy processing (video encoding, ML training), Lambda's 15-minute timeout is a better fit. Polyglot needs: for Java, Go, or .NET, Lambda remains the most flexible choice. Deep AWS ecosystem: if you've already invested heavily in SQS, DynamoDB, or Step Functions, moving to Cloudflare is expensive migration work.

11. Hands-on: deploy a Vue + API app on Cloudflare

Below is a real-world architecture for a Vue.js + Workers API + D1 + R2 app, deployed entirely on the Cloudflare free tier.

graph TD
    BROWSER["🌐 Browser
(Vue SPA)"] -->|HTTPS| CF["Cloudflare Edge"] CF -->|Static Assets| ASSETS["Workers Assets
(Vue Build)"] CF -->|/api/*| WORKER["Workers API
(TypeScript)"] WORKER -->|Query| D1DB["D1 Database"] WORKER -->|Upload/Download| R2B["R2 Bucket"] WORKER -->|Auth| DO_AUTH["Durable Object
(Session)"] WORKER -->|AI| WAI["Workers AI
(Summarize)"] style BROWSER fill:#e94560,stroke:#fff,color:#fff style CF fill:#2c3e50,stroke:#fff,color:#fff style ASSETS fill:#f8f9fa,stroke:#3498db,color:#2c3e50 style WORKER fill:#3498db,stroke:#fff,color:#fff style D1DB fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style R2B fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style DO_AUTH fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style WAI fill:#f8f9fa,stroke:#e94560,color:#2c3e50
Figure 5: a full-stack Vue + Workers + D1 + R2 architecture on Cloudflare

11.1. wrangler.jsonc configuration

{
  "name": "my-vue-app",
  "main": "src/worker.ts",
  "compatibility_date": "2026-04-01",
  "assets": {
    "directory": "./dist",
    "binding": "ASSETS"
  },
  "d1_databases": [
    { "binding": "DB", "database_name": "my-app-db", "database_id": "xxx" }
  ],
  "r2_buckets": [
    { "binding": "BUCKET", "bucket_name": "my-app-files" }
  ],
  "durable_objects": {
    "bindings": [
      { "name": "SESSIONS", "class_name": "SessionDO" }
    ]
  },
  "ai": { "binding": "AI" },
  "triggers": {
    "crons": ["0 2 * * *"]
  }
}

11.2. Worker entry point

import { SessionDO } from './session-do';

export { SessionDO };

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);

    // API routes
    if (url.pathname.startsWith('/api/')) {
      return handleApi(request, env, url);
    }

    // Serve the Vue SPA from Assets
    return env.ASSETS.fetch(request);
  }
};

async function handleApi(request: Request, env: Env, url: URL) {
  // GET /api/posts — fetch the post list
  if (url.pathname === '/api/posts' && request.method === 'GET') {
    const { results } = await env.DB.prepare(
      'SELECT id, title, excerpt, created_at FROM posts ORDER BY created_at DESC LIMIT 20'
    ).all();
    return Response.json(results);
  }

  // POST /api/upload — upload a file to R2
  if (url.pathname === '/api/upload' && request.method === 'POST') {
    const formData = await request.formData();
    const file = formData.get('file') as File;
    const key = `uploads/${Date.now()}-${file.name}`;
    await env.BUCKET.put(key, file.stream(), {
      httpMetadata: { contentType: file.type }
    });
    return Response.json({ url: `/cdn/${key}` });
  }

  // POST /api/summarize — summarize via AI
  if (url.pathname === '/api/summarize' && request.method === 'POST') {
    const { text } = await request.json() as { text: string };
    const result = await env.AI.run('@cf/meta/llama-3.3-70b-instruct-fp8-fast', {
      messages: [
        { role: 'system', content: 'Summarize the following passage in 2-3 sentences.' },
        { role: 'user', content: text }
      ]
    });
    return Response.json(result);
  }

  return new Response('Not Found', { status: 404 });
}

11.3. Deploying

# Build the Vue app
npm run build

# Deploy to Cloudflare (free tier)
npx wrangler deploy

# Create the D1 database
npx wrangler d1 create my-app-db
npx wrangler d1 execute my-app-db --file=./schema.sql

# Create the R2 bucket
npx wrangler r2 bucket create my-app-files

12. Conclusion

The Cloudflare Developer Platform in 2026 has moved well past "a CDN with some serverless functions". With an ecosystem spanning Workers (compute), D1 (database), R2 (storage), Durable Objects (state), Workers AI (inference), Sandboxes (isolated runtimes), and Containers, it's become a full-stack cloud platform running entirely at the edge.

Core strengths:

  • Very generous free tier: enough for production use at many startups and side projects
  • Zero egress on R2: saves thousands of dollars a month for media-heavy apps
  • Near-zero cold start: V8 isolates are significantly faster than containers
  • Global by default: code runs closest to the user automatically, with no region selection
  • Built-in AI: inference for 50+ models right at the edge, no separate setup needed
  • Agents-ready: Sandboxes + Dynamic Workers + Facets — built for the AI agents era

For $5/month on the Workers Paid plan, you unlock 10M requests/month, 30 s CPU time, advanced Durable Objects, and Queues. For most modern web apps — from blogs and SaaS MVPs to real-time collaboration tools — the Cloudflare Developer Platform deserves a serious look.

References