Edge Functions Cheat Sheet
Writing and deploying edge functions across major platforms (Vercel, Cloudflare Workers, Deno Deploy) using the Web standard APIs.
Vercel Edge Function
Runs on the V8 isolate edge runtime instead of Node, close to the user.
// app/api/geo/route.tsexport const runtime = 'edge'export async function GET(req: Request) { const geo = req.headers.get('x-vercel-ip-country') ?? 'unknown' return new Response(JSON.stringify({ country: geo }), { headers: { 'content-type': 'application/json' }, })}
Cloudflare Worker
Standard fetch-handler module syntax, deployed globally via Wrangler.
export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { const url = new URL(request.url) if (url.pathname === '/kv-test') { const value = await env.MY_KV.get('key1') return new Response(value ?? 'not found') } return new Response('Hello from the edge!') },}// wrangler.toml// name = "my-worker"// main = "src/index.ts"// compatibility_date = "2026-01-01"// [[kv_namespaces]]// binding = "MY_KV"// id = "..."
Deno Deploy Function
Deploy a standard Deno.serve handler globally with zero config.
Deno.serve(async (req: Request) => { const { pathname } = new URL(req.url) if (pathname === '/health') { return Response.json({ status: 'ok', region: Deno.env.get('DENO_REGION') }) } return new Response('Not Found', { status: 404 })})// deploy: deployctl deploy --project=my-app main.ts
Edge Middleware (Auth Gate)
A common edge pattern: intercept requests before they hit origin to redirect/rewrite.
// middleware.ts (Next.js, runs on the edge by default)import { NextResponse } from 'next/server'import type { NextRequest } from 'next/server'export function middleware(req: NextRequest) { const token = req.cookies.get('session')?.value if (!token && req.nextUrl.pathname.startsWith('/dashboard')) { return NextResponse.redirect(new URL('/login', req.url)) } return NextResponse.next()}export const config = { matcher: '/dashboard/:path*' }
Edge Runtime Constraints
What's different vs. a normal Node server.
- No native Node APIs- fs, net, child_process are unavailable; use Web Standard fetch/Request/Response instead
- Cold start- typically sub-50ms since it's a V8 isolate, not a container spin-up
- CPU/time limits- Cloudflare Workers free tier caps at 10ms CPU time (50ms paid); Vercel Edge has its own execution limits
- No persistent in-memory state- each request may hit a different isolate; use KV/Durable Objects/external DB for state
- Bundle size limits- Workers cap script size (1MB compressed on paid plans); tree-shake aggressively
Don't assume edge = faster for everything — if your function does a single round trip to a centralized regional database, you've just added a network hop before the real latency; edge wins when the data (KV, Durable Objects, cache) is also distributed to the edge.
Explore Topics
Professional Web Designing Services
- Responsive Websites
- E-commerce Solutions
- SEO Friendly Design
- Fast & Secure
- Support & Maintenance