API programática
Use o kubojs de forma programática em aplicações Node.js
Visão geral
Você pode chamar o kubojs diretamente de TypeScript/JavaScript sem invocar a CLI via shell.
A API programática é exportada de kubojs e foi pensada para ferramentas de automação, geradores internos e fluxos scriptados.
Como roda em modo silencioso por padrão, também se beneficia do mesmo comportamento agent-safe do create-json, incluindo opções estruturadas de addon e de setup de banco.
Instalação
npm i kubojsInício rápido
import { create } from "kubojs";
const result = await create("my-app", {
frontend: ["tanstack-router"],
backend: "hono",
database: "sqlite",
orm: "drizzle",
auth: "better-auth",
packageManager: "bun",
install: false,
dryRun: true,
});
result.match({
ok: (data) => {
console.log(`Project created at: ${data.projectDirectory}`);
console.log(`Reproducible command: ${data.reproducibleCommand}`);
},
err: (error) => {
console.error(`Failed: ${error.message}`);
},
});Referência da API
create(projectName?, options?)
Cria um novo projeto.
function create(
projectName?: string,
options?: Partial<CreateInput>,
): Promise<Result<InitResult, CreateError>>;Observações:
- Usa o mesmo modelo de opções do comando
createda CLI (frontend,backend,database,orm,api,auth,addonsetc.). - Suporta
addonOptionsedbSetupOptionsestruturados. - Suporta
dryRunpara automação só de validação. - Roda em modo silencioso (sem prompts interativos / sem saída de UI da CLI).
- Retorna um
Result(ok/err) em vez de encerrar o processo.
add(options?)
Adiciona addons a um projeto kubojs existente.
function add(options?: {
addons?: Addons[];
addonOptions?: AddonOptions;
install?: boolean;
packageManager?: PackageManager;
projectDir?: string;
dryRun?: boolean;
}): Promise<AddResult | undefined>;Exemplo:
import { add } from "kubojs";
const result = await add({
projectDir: "./my-app",
addons: ["biome", "mcp"],
addonOptions: {
mcp: {
scope: "project",
servers: ["context7"],
agents: ["cursor"],
},
},
install: true,
});
if (result?.success) {
console.log(`Added: ${result.addedAddons.join(", ")}`);
} else {
console.error(result?.error ?? "Failed to add addons");
}createVirtual(options)
Gera um projeto em memória sem gravar em disco.
import { createVirtual } from "kubojs";
const result = await createVirtual({
frontend: ["tanstack-router"],
backend: "hono",
database: "sqlite",
orm: "drizzle",
addonOptions: {
wxt: {
template: "react",
},
},
});Isso é útil para previews, testes e builders web.
sponsors()
Mostra sponsors (mesmo comportamento do comando da CLI).
docs()
Abre a URL da documentação (mesmo comportamento do comando da CLI).
builder()
Abre o stack builder web (mesmo comportamento do comando da CLI).
Tipos de resultado
InitResult (de create em ok)
type InitResult = {
success: boolean;
projectConfig: ProjectConfig;
reproducibleCommand: string;
timeScaffolded: string;
elapsedTimeMs: number;
projectDirectory: string;
relativePath: string;
error?: string;
};AddResult (de add)
type AddResult = {
success: boolean;
addedAddons: Addons[];
projectDir: string;
dryRun?: boolean;
plannedFileCount?: number;
error?: string;
};CreateError
create() pode retornar estes tipos de erro em Result.err(...):
UserCancelledErrorCLIErrorProjectCreationError
Padrão de tratamento de erros
import { create } from "kubojs";
const result = await create("existing-dir", {
directoryConflict: "error",
});
if (result.isErr()) {
console.error(result.error.message);
process.exit(1);
}
console.log(result.value.projectDirectory);Mapeando CLI para programático
CLI:
kubojs my-app \
--frontend tanstack-router \
--backend hono \
--database postgres \
--orm drizzle \
--auth better-authProgramático:
const result = await create("my-app", {
frontend: ["tanstack-router"],
backend: "hono",
database: "postgres",
orm: "drizzle",
auth: "better-auth",
addonOptions: {
wxt: { template: "react" },
},
dbSetupOptions: {
mode: "manual",
},
});Para os equivalentes JSON no lado da CLI, veja Fluxos de agente.