(translation pending)
AWS Lambda — slow cold starts, dollars, weird event objects. Your own container — you pay for idle. We tried to take the best of both worlds.
No more event.requestContext.authorizer. Standard Request/Response — like everywhere else. Deploy via CLI, Terraform or a GitHub Action.
# 1. deploy with a single command
$ h3 fn deploy ./api/handler.ts \
--runtime=node22 \
--memory=256 \
--timeout=30s \
--domain=api-handler.h3llo.cloud
✓ Bundling (esbuild) 142 ms
✓ Uploading 1.8 MB 980 ms
✓ Deployed v17 · cold-start 38 ms
$ curl https://api-handler.h3llo.cloud/health
{"ok":true,"region":"msk-1","cold":true}
$ curl https://api-handler.h3llo.cloud/health
{"ok":true,"region":"msk-1","cold":false}// handler.ts — standard HTTP, no custom event objects
import { kv } from "@h3llo/edge";
export default async (req: Request): Promise<Response> => {
const url = new URL(req.url);
if (url.pathname === "/health") {
return Response.json({ ok: true, region: "msk-1" });
}
if (url.pathname === "/count") {
const n = await kv.incr("hits");
return Response.json({ hits: n });
}
return new Response("not found", { status: 404 });
};Measured with a 1.8 MB package, no-op handler, 256 MB of memory, msk-1 region. Numbers from our production cluster, not from a lab.
| Runtime | Version | Cold start | Warm latency | Package size |
|---|---|---|---|---|
| Bunbest · cold start | 1.x | 25 ms | 5 ms | up to 50 MB |
| Node.js | 22 / 20 | 38 ms | 8 ms | up to 50 MB |
| Deno | 2.x | 42 ms | 9 ms | up to 50 MB |
| Python | 3.12 / 3.11 | 60 ms | 12 ms | up to 50 MB |
| Go | 1.23 | 18 ms | 4 ms | up to 50 MB (binary) |
| Rust | stable | 12 ms | 3 ms | up to 50 MB (binary) |
| Custom · Docker | OCI | 120 ms | 8 ms | up to 250 MB |
Binary runtimes (Go, Rust) start faster but take a bit more work to deploy — you need a properly built binary for Linux/amd64.
1M invocations and 400,000 GB-seconds per month — free. After that — per-second with 100ms rounding. Fixed warm pool — for SLA-critical APIs.
Real practices, benchmarks, migrations. No fluff and no marketing — grab the PDF, apply it Monday.
Cold start, idempotency, retry, idempotency keys, observability — what you must check.
What's under the hood of our FaaS. Process snapshots, smart routing, V8 isolates.
What we rewrote (a little), what we kept (almost everything), what broke (only IAM).
How to hold API keys, what to write in the audit log, how to isolate a breach in a single function.
Cold/warm latency, p50/p95/p99, prices per 1M invocations. Numbers from real tests.
Production-ready: function, custom domain, queue, Grafana metrics. Dev/staging/prod.
No portal, no YAML manifests, no container builds. Just handler → deploy.
Let's go →brew install h3llo/tap/cli · or curl get.h3llo.cloud | sh(req) => Response on Node, Python, Bun, Go, Rust. No custom event objects.h3 fn deploy ./handler.ts · 11 seconds. Custom domain handed out immediately.Standard HTTP handler, per-second billing, cold start 38 ms, 1M invocations free. No vendor lock-in — grab the handler file and deploy it anywhere.