You want to deploy a function. AWS Lambda needs IAM roles, API Gateway, CloudFormation. Vercel needs a framework. Cloudflare needs a wrangler config.
Deno Deploy lets you deploy a function to 35+ edge locations with a single command. Free tier: 1M requests/month, 100K KV operations, custom domains.
What Makes Deno Deploy Different
-
Zero config. No
serverless.yml, nowrangler.toml, no build step. - Global edge. Your code runs in 35+ regions automatically.
-
Web standards. Uses
fetch,Request,Response— the same APIs you use in the browser. - Built-in KV database. Key-value storage included, no external database needed.
- TypeScript native. No tsconfig, no compilation step.
Quick Start: Hello World in 10 Seconds
1. Install Deno
curl -fsSL https://deno.land/install.sh | sh
2. Write Your Function
// main.ts
Deno.serve((req: Request) => {
const url = new URL(req.url);
if (url.pathname === "/api/hello") {
return Response.json({ message: "Hello from the edge!", timestamp: Date.now() });
}
if (url.pathname === "/api/ip") {
return Response.json({ ip: req.headers.get("x-forwarded-for") || "unknown" });
}
return new Response("Not found", { status: 404 });
});
3. Deploy
deployctl deploy --project=my-api main.ts
That's it. Your API is live at https://my-api.deno.dev — globally distributed.
Built-in KV Database (No External DB Needed)
const kv = await Deno.openKv();
Deno.serve(async (req: Request) => {
const url = new URL(req.url);
if (req.method === "POST" && url.pathname === "/api/visits") {
const current = await kv.get<number>(["visits"]);
const count = (current.value || 0) + 1;
await kv.set(["visits"], count);
return Response.json({ visits: count });
}
if (url.pathname === "/api/visits") {
const result = await kv.get<number>(["visits"]);
return Response.json({ visits: result.value || 0 });
}
return new Response("404", { status: 404 });
});
A database and a server in one file. No Postgres setup. No Redis config. No connection strings.
Cron Jobs (Built-in)
Deno.cron("daily-cleanup", "0 0 * * *", async () => {
const kv = await Deno.openKv();
// Clean up expired entries every day at midnight
const entries = kv.list({ prefix: ["temp"] });
for await (const entry of entries) {
await kv.delete(entry.key);
}
});
Scheduled tasks without external cron services.
Deno Deploy vs Alternatives
| Feature | Deno Deploy | AWS Lambda | Vercel Functions | Cloudflare Workers |
|---|---|---|---|---|
| Deploy time | 10 sec | 5-10 min | 1-2 min | 30 sec |
| Config files | 0 | 3+ | 1-2 | 1 |
| Built-in DB | KV included | No (need DynamoDB) | No (need external) | KV ($5/mo) |
| Cron jobs | Built-in | EventBridge | Vercel Cron | Workers Cron |
| Free tier requests | 1M/mo | 1M/mo | 100K/mo | 100K/day |
| Cold starts | Near zero | 100-500ms | 50-200ms | Near zero |
| TypeScript | Native | Via build step | Via build step | Native |
5 Things to Build This Weekend
1. URL Shortener
KV for storage + edge function for redirects. 20 lines of code.
2. Webhook Relay
Receive webhooks from Stripe/GitHub, transform data, forward to Slack/Discord.
3. API Proxy with Caching
Cache external API responses in KV. Serve stale data while revalidating.
4. Status Page
Cron job pings your services every minute, stores results in KV, serves a status dashboard.
5. Feature Flag Service
Store flags in KV, serve them via API. No LaunchDarkly subscription needed.
The Bottom Line
Deno Deploy removes every layer of friction between "I wrote a function" and "it's running globally":
- No Docker. No containers.
- No AWS console. No IAM.
- No config files. No build step.
- Free database. Built-in KV.
- Free cron. Built-in scheduling.
1M requests/month free. Global edge. One command deploy.
Need custom serverless APIs, automation, or data pipelines? I build tools for dev teams. Email spinov001@gmail.com — or check out my developer resources.
More from me: Resend Free API | Replicate Free API | Supabase Free Tier
Top comments (0)