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. I 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. I 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. I 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. I 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. I 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. I 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. I picked this trio for speed: installs, builds, and checks finish in seconds, with one config instead of five.
CI/CD + PR previews
Every scaffold ships a GitHub Actions workflow: push to main to auto-deploy to Cloudflare, and open a pull request to get a live preview URL. It authenticates with an API token, so there is no wrangler login to expire.
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.
Module docsWhat ships
- /sign-in
- /sign-up
- /forgot-password
- /reset-password
- createAuth()
- getSession()
Built onBetter Auth
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.
Module docsWhat ships
- /pricing
- /billing
- createCheckoutSession()
- createPortalSession()
- getSubscription()
- signature-verified webhook
Built onStripe
Transactional email with React templates, rendered and delivered through Resend. Included so password resets and receipts work without wiring up a separate service.
Module docsWhat ships
- sendEmail()
- enqueueEmail()
- flushEmailQueue()
- React Email templates
- queue flushed every 5 min by cron
Built onResend
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.
Module docsWhat ships
- en and nl, add more in project.inlang
- localized pathnames
- language switcher
- compile-time message functions
Built onParaglide
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.
Module docsWhat ships
- 19 components
- dark mode
- form fields with validation states
- toasts and dialogs
Built onBase UI + Tailwind v4
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.
Module docsWhat ships
- landing page
- /pricing
- /contact with bot protection
- SEO and Open Graph tags
Built onthe UI module
Deed of ownership
Ship on Cloudflare this afternoon
One purchase, and every line is yours. Auth, payments, and email included.