Deploying a simple API should not require Docker, Kubernetes, load balancers, and a DevOps team.
Deno Deploy gives you serverless edge functions — write TypeScript, push to GitHub, it runs globally in 35+ regions. 100,000 requests/day on the free tier. Zero configuration.
What You Get for Free
- 100,000 requests/day — plenty for APIs and side projects
- 100 GiB outbound transfer/month — generous bandwidth
- 35+ edge locations — run close to your users globally
- GitHub integration — push to deploy
- KV storage — built-in key-value database
- Cron jobs — scheduled tasks included
- npm compatibility — use npm packages directly
- Custom domains — bring your own domain with HTTPS
- Zero cold start — V8 isolates, not containers
Quick Start (2 Minutes)
1. Write a Server
// 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/weather") {
const city = url.searchParams.get("city") || "London";
return Response.json({ city, temp: Math.floor(Math.random() * 30), unit: "C" });
}
return new Response("Not Found", { status: 404 });
});
2. Deploy
# Install Deno
curl -fsSL https://deno.land/install.sh | sh
# Deploy (links to GitHub)
deno deploy
# Or use deployctl
deployctl deploy --project=my-api main.ts
That is it. Your API is live at https://my-api.deno.dev — running in 35+ regions worldwide.
3. Deno KV (Built-in Database)
const kv = await Deno.openKv();
Deno.serve(async (req) => {
const url = new URL(req.url);
if (req.method === "POST" && url.pathname === "/api/visits") {
const count = await kv.get(["visits"]);
await kv.set(["visits"], (count.value as number || 0) + 1);
return Response.json({ visits: (count.value as number || 0) + 1 });
}
if (url.pathname === "/api/visits") {
const count = await kv.get(["visits"]);
return Response.json({ visits: count.value || 0 });
}
return new Response("Not Found", { status: 404 });
});
No database setup. No connection strings. KV is built into the runtime.
4. Cron Jobs
Deno.cron("daily-report", "0 9 * * *", async () => {
const data = await fetch("https://api.example.com/metrics").then(r => r.json());
console.log("Daily metrics:", data);
});
Scheduled tasks without external cron services.
5. Use npm Packages
import Stripe from "npm:stripe";
import { Hono } from "npm:hono";
const app = new Hono();
app.get("/api/products", async (c) => {
const stripe = new Stripe(Deno.env.get("STRIPE_KEY")!);
const products = await stripe.products.list({ limit: 10 });
return c.json(products.data);
});
Deno.serve(app.fetch);
Full npm compatibility. No package.json, no node_modules, no bundler.
Real-World Use Case
A developer building a webhook processor told me: "I needed an endpoint that receives Stripe webhooks, validates them, and stores data. On Vercel it needed Next.js boilerplate. On Deno Deploy, it was a single 40-line file. Deployed in 2 minutes, runs in 35 regions, zero config."
Free Plan Limits
| Feature | Free Tier |
|---|---|
| Requests | 100K/day |
| Outbound transfer | 100 GiB/month |
| KV storage | 1 GB |
| KV reads | 450K/day |
| KV writes | 45K/day |
| Cron jobs | Yes |
| Custom domains | Yes |
| Edge locations | 35+ |
| Cold starts | None (V8 isolates) |
The Bottom Line
For APIs, webhooks, cron jobs, and edge functions — Deno Deploy is the simplest path from code to production. No Docker, no YAML, no config files. Just TypeScript and a git push.
Need to run web scrapers on a schedule? Check out my web scraping tools on Apify — cloud-hosted scrapers with scheduling and storage.
Building something custom? Email me at spinov001@gmail.com
Top comments (0)