Compatibility Rules
Understanding compatibility rules and restrictions between different CLI options
Overview
The CLI validates option combinations to ensure generated projects work correctly. Here are the key compatibility rules and restrictions.
Database & ORM Compatibility
Required Combinations
Database | Compatible ORMs | Notes |
---|---|---|
sqlite | drizzle , prisma | Lightweight, file-based database |
postgres | drizzle , prisma | Advanced relational database |
mysql | drizzle , prisma | Traditional relational database |
mongodb | mongoose , prisma | Document database, requires specific ORMs |
none | none | No database setup |
Restrictions
- MongoDB + Drizzle: ❌ Not supported - Drizzle doesn't support MongoDB
- Database without ORM: ❌ Not supported - Database requires an ORM for code generation
- ORM without Database: ❌ Not supported - ORM requires a database target
# ❌ Invalid - MongoDB with Drizzle
create-better-t-stack --database mongodb --orm drizzle
# ✅ Valid - MongoDB with Mongoose
create-better-t-stack --database mongodb --orm mongoose
Backend & Runtime Compatibility
Cloudflare Workers Restrictions
Cloudflare Workers has specific compatibility requirements:
Component | Requirement | Reason |
---|---|---|
Backend | Must be hono | Only Hono supports Workers runtime |
ORM | Must be drizzle or none | Workers doesn't support Prisma/Mongoose |
Database | Cannot be mongodb | MongoDB requires Prisma/Mongoose |
Database Setup | Cannot be docker | Workers is serverless, no Docker support |
# ❌ Invalid - Workers with Express
create-better-t-stack --runtime workers --backend express
# ✅ Valid - Workers with Hono
create-better-t-stack --runtime workers --backend hono --database sqlite --orm drizzle --db-setup d1
Backend Presets
Convex Backend
When using --backend convex
, the following options are automatically set:
--auth clerk
(if compatible frontends selected, otherwisenone
)--database none
(Convex provides database)--orm none
(Convex provides data layer)--api none
(Convex provides API)--runtime none
(Convex manages runtime)--db-setup none
(Convex manages hosting)--examples todo
(Todo example works with Convex)
Note: Convex supports Clerk authentication with compatible frontends (React frameworks, Next.js, TanStack Start, and native frameworks). Nuxt, Svelte, and Solid are not compatible with Clerk.
No Backend
When using --backend none
, the following options are automatically set:
--auth none
(No backend for auth)--database none
(No backend for database)--orm none
(No database)--api none
(No backend for API)--runtime none
(No backend to run)--db-setup none
(No database to host)--examples none
(Examples require backend)
Frontend & API Compatibility
API Framework Support
Frontend | tRPC Support | oRPC Support | Notes |
---|---|---|---|
tanstack-router | ✅ | ✅ | Full support |
react-router | ✅ | ✅ | Full support |
tanstack-start | ✅ | ✅ | Full support |
next | ✅ | ✅ | Full support |
nuxt | ❌ | ✅ | tRPC not supported |
svelte | ❌ | ✅ | tRPC not supported |
solid | ❌ | ✅ | tRPC not supported |
Native frameworks | ✅ | ✅ | Full support |
# ❌ Invalid - Nuxt with tRPC
create-better-t-stack --frontend nuxt --api trpc
# ✅ Valid - Nuxt with oRPC
create-better-t-stack --frontend nuxt --api orpc
Frontend Restrictions
- Multiple Web Frontends: ❌ Only one web framework allowed
- Multiple Native Frontends: ❌ Only one native framework allowed
- Web + Native: ✅ One web and one native framework allowed
# ❌ Invalid - Multiple web frontends
create-better-t-stack --frontend next tanstack-router
# ✅ Valid - Web + native
create-better-t-stack --frontend next native-nativewind
Database Setup Compatibility
Provider Requirements
Setup Provider | Required Database | Notes |
---|---|---|
turso | sqlite | Distributed SQLite |
d1 | sqlite | Cloudflare D1 (requires Workers runtime) |
neon | postgres | Serverless PostgreSQL |
supabase | postgres | PostgreSQL with additional features |
prisma-postgres | postgres | Managed PostgreSQL via Prisma |
mongodb-atlas | mongodb | Managed MongoDB |
docker | postgres , mysql , mongodb | Not compatible with sqlite or Workers |
Special Cases
Cloudflare D1
- Requires
--database sqlite
- Requires
--runtime workers
- Requires
--backend hono
Docker Setup
- Cannot be used with
sqlite
(file-based database) - Cannot be used with
workers
runtime (serverless environment)
Addon Compatibility
PWA Support
- Requires web frontend
- Compatible frontends:
tanstack-router
,react-router
,next
,solid
- Not compatible with native-only projects
Tauri (Desktop Apps)
- Requires web frontend
- Compatible frontends:
tanstack-router
,react-router
,nuxt
,svelte
,solid
,next
- Cannot be combined with native frameworks
Web Deployment
--web-deploy wrangler
requires a web frontend- Cannot be used with native-only projects
Authentication Requirements
Better-Auth Requirements
Better-Auth authentication requires:
- A backend framework (cannot be
none
) - A database (cannot be
none
) - An ORM (cannot be
none
)
Clerk Requirements
Clerk authentication requires:
- Convex backend (
--backend convex
) - Compatible frontends (React frameworks, Next.js, TanStack Start, native frameworks)
- Not compatible with Nuxt, Svelte, or Solid
# ❌ Invalid - Better-Auth without database
create-better-t-stack --auth better-auth --database none
# ✅ Valid - Better-Auth with full stack
create-better-t-stack --auth better-auth --database postgres --orm drizzle --backend hono
# ✅ Valid - Clerk with Convex
create-better-t-stack --auth clerk --backend convex --frontend tanstack-router
# ❌ Invalid - Clerk without Convex
create-better-t-stack --auth clerk --backend hono
Example Compatibility
Todo Example
- Requires a database when backend is present (except Convex)
- Cannot be used with
--backend none
and--database none
AI Example
- Not compatible with
--backend elysia
- Not compatible with
--frontend solid
Common Error Messages
"Mongoose ORM requires MongoDB database"
# Fix by using MongoDB
create-better-t-stack --database mongodb --orm mongoose
"Cloudflare Workers runtime is only supported with Hono backend"
# Fix by using Hono
create-better-t-stack --runtime workers --backend hono
"Cannot select multiple web frameworks"
# Fix by choosing one web framework
create-better-t-stack --frontend tanstack-router
"Authentication requires a database"
# Fix by adding database for Better-Auth
create-better-t-stack --auth better-auth --database postgres --orm drizzle
# Or use Clerk with Convex (no database required)
create-better-t-stack --auth clerk --backend convex
Validation Strategy
The CLI validates compatibility in this order:
- Basic validation: Required parameters, valid enum values
- Combination validation: Database + ORM, Backend + Runtime compatibility
- Feature validation: Auth requirements, addon compatibility
- Example validation: Example + stack compatibility
Understanding these rules helps you create valid configurations and troubleshoot issues when the CLI reports compatibility errors.