@arbitrat/next-generator
v1.0.1
Published
Opinionated Next.js generator used by @arbitrat/cli.
Readme
@arbitrat/next-generator
Generates an Arbitrat Next.js app: a standalone npm project, or apps/web inside a pnpm workspace when @arbitrat/cli pairs it with Nest.
This is the Next half of arbi create workspace. You can call it from Node as well, which is useful if you are composing generators and not interested in re-prompting humans for Tailwind vs CSS Modules.
Opinionated for Arbitrat engineers. arbitrat.org
Install
npm install @arbitrat/next-generatorDepends on @arbitrat/core. Node.js 20+. Ships TypeScript source.
Most people should use the CLI instead:
npm install -g @arbitrat/cli
arbi create workspaceWhat it generates
Starts from create-next-app, then applies the Arbitrat overlay:
- App Router, strict TypeScript
- Infisical-wrapped scripts and Husky (unless you skip hooks)
- Feature modules under
src/modules(schema → repository → service → controller) app/apiroutes viahandleApi- Shared UI, wrappers, and hooks
- Project docs (
README,SETUP,CONTRIBUTING,docs/*,AGENTS.md)
CSS is exclusive: Tailwind or CSS Modules. Not both. Your future self will thank present you.
Internationalization (when selected) puts pages under app/[locale]/. API routes stay in app/api/.
Add-ons
| Id | Name | Notes |
| --- | --- | --- |
| theming | Theming | next-themes (dark / light / system) |
| jest | Jest | Jest + Next.js test config |
| docker | Docker | Dockerfile + Next output: "standalone" |
| prisma | Prisma | Prisma + Postgres from feature-module repositories. Standalone Next only — hide this when Nest owns the API. |
| redis | Redis | Client in lib/, used from modules. Same rule as Prisma in a web+api workspace. |
| i18n | Internationalization | next-intl; configure locales and defaultLocale |
| sentry | Sentry | @sentry/nextjs |
Add-ons are registered in src/addons/index.ts. Templates live in templates/.
Programmatic use
import { generateNextApp } from "@arbitrat/next-generator";
await generateNextApp({
projectName: "web",
targetDir: "./web",
cssStrategy: "tailwind",
selectedAddons: ["theming", "jest"],
addonConfig: {
i18n: { locales: "en,es", defaultLocale: "en" },
},
});Optional flags: packageManager (npm | pnpm), skipGit, skipHusky, skipInstall — used when the CLI is generating a workspace and does not want three git inits.
Also exported: createAddonsRegistry() for listing and resolving add-ons.
Entry: src/index.ts.
