Why Kavel is built this way
Opinions, not options
Opinionated by design
Kavel makes the hard calls so you do not have to. One stack, one way to do things, chosen to get out of your way and keep you shipping.
- Type-safe RPC over REST or GraphQL, the client and server share one contract.
- Server state through TanStack Query, no global store to wire up.
- Tailwind and Base UI you own and restyle, not a component kitchen sink.
- One host, Cloudflare, no multi-cloud abstraction to slow you down.
The foundation
The stack
The foundation every Kavel app is built on.
TanStack Start
A full-stack React framework with file-based routing and server functions. We picked it because it runs natively on the Cloudflare edge, is TypeScript-first, and never locks you to a single host.
Hono
A tiny, fast web framework built for the Workers runtime. We picked it because it speaks Web-standard Request and Response, adds almost no overhead, and starts with virtually no cold start.
oRPC
Contract-first RPC: declare each procedure once and the server and client share its types. We picked it so the web app calls the API with full type safety, no codegen, and nothing drifts when a contract changes.
Cloudflare Workers + D1
Your app runs on Cloudflare Workers with D1, their SQLite database, accessed through Drizzle ORM. We picked Cloudflare for global low latency, a generous free tier, and one deploy target for the API and the web app.
Base UI + Tailwind
Unstyled, accessible component primitives styled with Tailwind CSS v4. We picked it so you own the markup and the styles, with no opaque component library to fight when you need something custom.
Paraglide
Type-safe internationalization that compiles messages into tree-shakeable functions. We picked Paraglide because it adds no runtime weight, flags missing keys at build time, and localizes routes out of the box.
Bun + Turbo + Biome
Bun installs and runs, Turbo orchestrates the monorepo, Biome lints and formats. We picked this trio for speed: installs, builds, and checks finish in seconds, with one config instead of five.
Opt-in lots
The modules
Opt in to what you need at scaffold time. Leave the rest out entirely.
Auth
Email and OAuth sign-in with secure, cookie-based sessions and ready-made route guards. It is a module because not every app needs accounts, so it is there only when you ask for it.
Payments
Stripe subscriptions with a typed checkout, a customer portal, and verified webhooks. Add it when you want to charge, and the pricing page starts real checkout.
Transactional email with React templates, rendered and delivered through Resend. Included so password resets and receipts work without wiring up a separate service.
Internationalization
Localized routes and messages with a language switcher, powered by Paraglide. Add it to ship in more than one language; skip it and there is no i18n code left behind.
UI
A styled component library on Base UI and Tailwind, dark mode included. It is the foundation the forms and marketing pages build on, and it is yours to restyle.
Marketing Pages
Landing and pricing pages ready to sell, composed from the UI module. Ship them as they are, or treat them as a starting point.
Deed of ownership
Ship on Cloudflare this afternoon
Buy Kavel once and own every line. Auth, payments, and email included.