Why this stack
The four tools I run for every new project, and the two I stopped running.
Bun. Hono. Astro. Cloudflare. That's the stack. Every internal tool I've shipped at Lockstep in the last eighteen months runs on some combination of these four.
Not because they're new or interesting. Because they've stopped being surprising.
The four
Bun replaces Node as the runtime. It's faster, but the reason to use it isn't speed — it's that it ships with a package manager, a test runner, a bundler, and a TypeScript stripper in the same binary. The tooling stack collapses. `bun install`, `bun test`, `bun run`, done.
Hono is the API layer. It's small (thin router, type-safe, no runtime overhead) and runs identically on Bun and on Cloudflare Workers. That last part matters more than it sounds — you can run the exact same server locally as you'll run at the edge.
Astro is the frontend. Static output by default, SSR when you need it, MDX for content, and it composes well with any framework (React, Vue, Svelte) if you want to reach for them for interactive islands.
Cloudflare is where it all runs. Workers, Durable Objects, D1, KV, R2, Queues, Pages — every primitive you'd wire up on AWS is a first-class product on Cloudflare, cheaper, with a nicer dashboard.
The two I stopped
I stopped running Postgres for new projects. Durable Object SQLite gives me a single-tenant, strongly-consistent database at the edge, with zero cold start and geographic locality. When I need multi-tenant, I use D1.
I stopped running Docker for anything that doesn't strictly need it. The Wrangler dev server is faster and closer to production than a local container will ever be for edge code.