Philosophy
Kavel is opinionated on purpose. It picks one stack and one way to do things, so you spend your time building features instead of choosing and wiring tools.
One way to do things
Most starter kits hand you a pile of options and let you assemble them. Kavel does the opposite. It makes the architectural calls up front and commits to them, so the modules fit together and there is a single, obvious way to build. Fewer decisions and less glue code mean you ship sooner.
The calls we made
- One host. Everything targets Cloudflare Workers and D1. No adapter layer and no lowest common denominator across clouds.
- Type-safe RPC. The web app calls the API through oRPC, so types flow end to end. No REST endpoints to hand-write and no schema drift.
- Server state, not a store. TanStack Query owns server data, while React state and the URL own the rest. There is no global client store to maintain.
- Utility CSS. Tailwind plus Base UI primitives you own and restyle. No CSS-in-JS runtime and no opaque component library.
- One toolchain. Bun, Turbo, and Biome handle install, build, and lint and format. One fast setup instead of a stack of configs.
- SQL at the edge. Drizzle over D1, which is SQLite. You write a schema and generate migrations, and never hand-edit SQL.
What we left out, on purpose
- No REST or GraphQL layer. oRPC already gives end to end types. A second API style would just be another contract to maintain by hand.
- No global state library. Redux, Zustand, and friends solve a problem that server-state caching and the URL mostly remove. Add one only when a real need shows up.
- No CSS-in-JS. It ships a runtime and complicates server rendering. Tailwind covers the same ground with none of that.
- No multi-cloud abstraction. Portability layers cost speed and simplicity. Committing to one platform keeps the code direct and cold starts near zero.
Opinionated, not locked in
Who it's for
Kavel fits teams and solo builders who want to ship a product, not evaluate tools. If you want a blank canvas with every option open, a more neutral starter will suit you better. If you want strong defaults and a clear path from zero to deployed, this is built for you.