baguette

baguette vs Hono

Short version: baguette is built on Hono. It's not a competitor — it's an opinionated, batteries-included layer on top of Hono's router and middleware. So the real question isn't "which is better," it's "how much do you want decided for you?"

Honobaguette
What it isA minimal, unopinionated web frameworkAn opinionated API framework built on Hono
RoutingManual — app.get("/x", …)File-based — drop api/x.ts
ValidationAdd @hono/zod-openapi and wire it yourselfzod-first, built in
API docsMount Scalar/Swagger yourselfAuto at /api/docs
Auth · rate limit · security · CORSCompose middlewareDeclarative, one flag each
Cron · queues · automations · email · WebSocketsBring your ownOpt-in layers, drop a folder
RuntimesBun, Node, Deno, Cloudflare Workers, edge, …Bun only
PhilosophyBring your own everythingBatteries + one enforced convention

When Hono is the better choice

  • You need portability — Cloudflare Workers, Deno, Node, or the edge. Hono runs everywhere; baguette is Bun-only.
  • You want a minimal primitive and prefer to assemble your own stack (your validation, your docs, your structure).
  • You're building something that isn't a conventional REST/RPC API.

Hono is an excellent, mature, widely-used framework. If you want maximum control and minimum opinion, use it directly.

When baguette is the better choice

  • You're on Bun, building an API, and you'd rather not re-decide routing, validation, docs, auth, and background jobs on every project.
  • You want one obvious way to do each thing — enforced — so your team (or your AI agent) ships consistent code instead of five different patterns.
  • You want the batteries (auth, rate limiting, cron, queues, email, WebSockets) as opt-in layers, not a research project.

The honest part

baguette is Hono underneath, so you never get locked out of it. Need a raw Hono handler? onApp(app) hands you the app, and the escape hatch mounts plain handlers. If you outgrow baguette's conventions, you're already standing in Hono.

We didn't build baguette because Hono was lacking — it's great. We built it because we were writing the same conventions (file routing, zod, docs, auth, cron) on top of Hono in every app, and wanted them decided once and enforced. That's the whole pitch.