Regras de compatibilidade
Entendendo regras e restrições de compatibilidade entre as diferentes opções da CLI
Visão geral
A CLI valida combinações de opções para garantir que os projetos gerados funcionem corretamente. Aqui estão as principais regras e restrições de compatibilidade.
Compatibilidade de banco e ORM
Combinações obrigatórias
| Database | ORMs compatíveis | Notas |
|---|---|---|
sqlite | drizzle, prisma | Banco leve, baseado em arquivo |
postgres | drizzle, prisma | Banco relacional avançado |
mysql | drizzle, prisma | Banco relacional tradicional |
mongodb | mongoose, prisma | Banco de documentos, exige ORMs específicos |
none | none | Sem setup de banco |
Restrições
- MongoDB + Drizzle: ❌ Não suportado — o Drizzle não suporta MongoDB
- Banco sem ORM: ❌ Não suportado — o banco exige um ORM para geração de código
- ORM sem banco: ❌ Não suportado — o ORM exige um banco de destino
# ❌ Invalid - MongoDB with Drizzle
kubojs --database mongodb --orm drizzle
# ✅ Valid - MongoDB with Mongoose
kubojs --database mongodb --orm mongooseCompatibilidade de backend e runtime
Restrições do Cloudflare Workers
O Cloudflare Workers tem requisitos específicos de compatibilidade:
| Componente | Requisito | Motivo |
|---|---|---|
| Backend | Deve ser hono | Só o Hono suporta o runtime Workers |
| ORM | Se houver DB, use drizzle ou prisma | Mongoose é só MongoDB e MongoDB não é compatível com workers |
| Database | Não pode ser mongodb | MongoDB não é compatível com o runtime Workers |
| Database Setup | Não pode ser docker | Workers é serverless, sem suporte a Docker |
# ❌ Invalid - Workers with Express
kubojs --runtime workers --backend express
# ✅ Valid - Workers with Hono
kubojs --runtime workers --backend hono --database sqlite --orm drizzle --db-setup d1
# ✅ Also valid - Workers with Prisma (D1)
kubojs --runtime workers --backend hono --database sqlite --orm prisma --db-setup d1Presets de backend
Backend Convex
Ao usar --backend convex, estas restrições se aplicam:
--runtime none--database none(o Convex fornece o banco)--orm none(o Convex fornece a camada de dados)--api none(o Convex fornece a API)--db-setup none(o Convex gerencia a hospedagem)--server-deploy none- Auth pode ser
better-auth,clerkounoneconforme a compatibilidade do frontend
Nota: O Convex suporta autenticação Clerk com frontends compatíveis (frameworks React, Next.js, TanStack Start e frameworks native). Nuxt, Svelte, Solid e Astro não são compatíveis com Clerk.
Better Auth com Convex: frontends suportados são react-router, tanstack-router, tanstack-start, next, native-bare, native-uniwind e native-unistyles. Nuxt, Svelte, Solid e Astro não são suportados com Convex Better Auth.
Sem backend
Ao usar --backend none, as opções a seguir são definidas automaticamente:
--auth none(sem backend para auth)--database none(sem backend para banco)--orm none(sem banco)--api none(sem backend para API)--runtime none(sem backend para rodar)--db-setup none(sem banco para hospedar)--examples none(exemplos exigem backend)
Compatibilidade de frontend e API
Suporte a frameworks de API
| Frontend | Suporte tRPC | Suporte oRPC | Notas |
|---|---|---|---|
tanstack-router | ✅ | ✅ | Suporte completo |
react-router | ✅ | ✅ | Suporte completo |
tanstack-start | ✅ | ✅ | Suporte completo |
next | ✅ | ✅ | Suporte completo |
nuxt | ❌ | ✅ | tRPC não suportado |
svelte | ❌ | ✅ | tRPC não suportado |
solid | ❌ | ✅ | tRPC não suportado |
astro | ❌ | ✅ | tRPC não suportado |
| Frameworks native | ✅ | ✅ | Suporte completo |
# ❌ Invalid - Nuxt with tRPC
kubojs --frontend nuxt --api trpc
# ✅ Valid - Nuxt with oRPC
kubojs --frontend nuxt --api orpcRestrições de frontend
- Vários frontends web: ❌ Apenas um framework web permitido
- Vários frontends native: ❌ Apenas um framework native permitido
- Web + native: ✅ Um web e um native permitidos
# ❌ Invalid - Multiple web frontends
kubojs --frontend next tanstack-router
# ✅ Valid - Web + native
kubojs --frontend next native-uniwindCompatibilidade de setup de banco
Requisitos por provider
| Provider de setup | Database obrigatório | Notas |
|---|---|---|
turso | sqlite | SQLite distribuído; funciona com Drizzle e Prisma |
d1 | sqlite | Cloudflare D1; funciona com Drizzle e Prisma em Cloudflare Workers ou frontends self-hosted Cloudflare suportados |
neon | postgres | PostgreSQL serverless |
supabase | postgres | PostgreSQL com recursos adicionais |
prisma-postgres | postgres | PostgreSQL gerenciado via Prisma |
planetscale | mysql, postgres | Banco serverless PlanetScale |
mongodb-atlas | mongodb | MongoDB gerenciado |
docker | postgres, mysql, mongodb | Não compatível com sqlite ou Workers |
Casos especiais
Cloudflare D1
- Exige
--database sqlite - Exige um destes alvos de deploy Cloudflare:
--backend hono --runtime workers --server-deploy cloudflare--backend self --web-deploy cloudflare
- Com
--backend self, D1 é suportado emnext,tanstack-start,nuxt,svelteeastro - Com
--backend self, a compatibilidade de API do frontend ainda se aplica:nuxt,svelteeastroexigem--api orpcou--api none
Setup Docker
- Não pode ser usado com
sqlite(banco baseado em arquivo) - Não pode ser usado com runtime
workers(ambiente serverless)
Compatibilidade de addons
Suporte a PWA
- Exige frontend web
- Frontends compatíveis:
tanstack-router,react-router,next,solid - Não compatível com projetos só native
Tauri (apps desktop)
- Exige frontend web
- Frontends compatíveis:
tanstack-router,react-router,tanstack-start,next,nuxt,svelte,solid,astro - Builds desktop empacotam saída web estática, então
tanstack-start,next,nuxt,svelteeastroprecisam de configuração static/export antes do empacotamento - Não compatível com
--backend self, porque backends fullstack self emitem rotas de server dentro deapps/web - Não pode ser combinado com frameworks native
Electrobun (apps desktop)
- Exige frontend web
- Frontends compatíveis:
tanstack-router,react-router,tanstack-start,next,nuxt,svelte,solid,astro - Usa um shell gerado em
apps/desktopque carregaapps/webno desenvolvimento e empacota a saída de build estática para distribuição - Builds desktop empacotam saída web estática, então
tanstack-start,next,nuxt,svelteeastroprecisam de configuração static/export antes do empacotamento - Não compatível com
--backend self, porque backends fullstack self emitem rotas de server dentro deapps/web
Task runners
nx,turborepoevite-plussão mutuamente exclusivos — só um pode ser selecionado por projeto
# ❌ Invalid - two task runners
kubojs --addons turborepo nx
# ✅ Valid - a single task runner
kubojs --addons turborepoDeploy web
--web-deploy cloudflare,--web-deploy dockere--web-deploy vercelexigem um frontend web- Não podem ser usados com projetos só native
Deploy de server
--server-deploy cloudflareexige--runtime workerscom--backend hono--server-deploy dockere--server-deploy vercelexigem--runtime bunou--runtime node--server-deploynão é usado com--backend self, porque backends fullstack fazem deploy junto com o app web
Requisitos de autenticação
Requisitos do Better-Auth
A autenticação Better-Auth exige:
- Um framework de backend (não pode ser
none) - Com banco: exige um ORM
- Sem banco: funciona com backend Convex ou configuração custom
- Com
--backend convex: exigereact-router,tanstack-router,tanstack-start,nextou um frontend native Expo
Requisitos do Clerk
A autenticação Clerk exige:
- Frontends compatíveis (frameworks React, Next.js, TanStack Start, frameworks native)
- Backends suportados: Convex, Hono, Express, Fastify e Elysia
- Suporte fullstack (
--backend self) com Next.js ou TanStack Start - Não compatível com Nuxt, Svelte, Solid ou Astro
Compatibilidade de exemplos
Exemplo Todo
- Exige um banco quando o backend está presente (exceto Convex)
- Exige uma camada de API (
trpcouorpc) para backends não-Convex - Não pode ser usado com
--backend none
Exemplo AI
- Não compatível com
--frontend solid - Não compatível com
--frontend astro - Com
--backend convex, frontends Nuxt e Svelte não são suportados
Mensagens de erro comuns
"Mongoose ORM requires MongoDB database"
# Fix by using MongoDB
kubojs --database mongodb --orm mongoose"Cloudflare Workers runtime is only supported with Hono backend"
# Fix by using Hono
kubojs --runtime workers --backend hono"Cannot select multiple web frameworks"
# Fix by choosing one web framework
kubojs --frontend tanstack-routerEstratégia de validação
A CLI valida a compatibilidade nesta ordem:
- Validação básica: parâmetros obrigatórios, valores de enum válidos
- Validação de combinação: compatibilidade Database + ORM, Backend + Runtime
- Validação de recursos: requisitos de auth, compatibilidade de addons
- Validação de exemplos: compatibilidade de exemplo + stack
Entender essas regras ajuda a criar configurações válidas e a diagnosticar problemas quando a CLI reporta erros de compatibilidade.