How to launch a web app on Cloudflare for free
What Cloudflare's free plans include for Pages, Workers, D1, KV and R2, with the actual limits, and a simple path from an empty folder to a live app.
What Cloudflare's free plans include for Pages, Workers, D1, KV and R2, with the actual limits, and a simple path from an empty folder to a live app.
You can host a real web app on Cloudflare without a credit card for the hosting itself. The free plans cover static sites, server-side code, a SQL database, key-value storage and file storage. This guide lists the limits that matter and the order to build things in.
The numbers below come from Cloudflare’s documentation as of October 2026. Limits change, so check the linked pages before you rely on them.
| Product | What it is | Free limits |
|---|---|---|
| Pages | Static sites and full-stack frameworks | 500 builds per month, 20,000 files per site, 25 MiB per file, 100 custom domains per project |
| Workers | Server-side code at the edge | 100,000 requests per day, 10 ms of CPU time per invocation |
| D1 | SQLite-based SQL database | 5 million rows read per day, 100,000 rows written per day, 5 GB total storage |
| KV | Key-value storage | 100,000 reads, 1,000 writes, 1,000 deletes and 1,000 lists per day, 1 GB stored |
| R2 | Object and file storage | 10 GB-month storage, 1 million Class A and 10 million Class B operations per month, free egress |
Daily limits reset at 00:00 UTC. When you go over a limit, operations of that type fail with an error until it resets. The paid Workers plan starts at a minimum of $5 per month if you outgrow the free tier.
1. Start with a static site or a framework app. Create a project with Cloudflare’s starter tool:
npm create cloudflare@latest my-app
It lets you pick a framework such as Astro and sets up the config for you. Run it locally with npx wrangler dev and deploy it with npx wrangler deploy.
2. Add server code only where you need it. A Worker can handle forms, an API or a webhook. With 100,000 free requests per day, a small project is unlikely to notice the limit. Keep the work per request short, since the free plan allows 10 ms of CPU time per invocation.
3. Add a database when you need to query data. Create a D1 database, then bind it to your Worker in the Wrangler config:
npx wrangler d1 create my-db
{
"d1_databases": [
{ "binding": "DB", "database_name": "my-db", "database_id": "<id from the create command>" }
]
}
Test against the local copy first. Our local D1 helper builds the commands and explains where the local data lives.
4. Use KV for read-heavy data and R2 for files. KV suits settings and cached lookups that you read often and write rarely, since free writes are limited to 1,000 per day. R2 holds uploads and media, and downloads from it cost nothing.
wrangler d1 execute without --local runs against your real database.Once you have several Workers, Pages sites and databases on your machine, keeping track of ports, processes and bindings gets tedious. WorkerDock is a Mac app that shows all your local projects and what each one uses in one window. You can download it from the home page.
Directory
Hand-picked open-source projects you can run in your own Cloudflare account.
WorkerDock finds your local Workers, Pages and Astro projects and shows each one's port, logs and bindings in one window.