Module System
Launchframe is built from composable modules rather than monolithic templates. This keeps additions predictable and conflict-free.
Three layers
templates/base-web → shared skeleton (all projects start here)
presets/*.json → curated module bundles (blank, dashboard)
modules/*/ → composable capabilitiesBase
The minimal Next.js app skeleton. Contains the App Router structure, shared utilities, CSS variables, and tokenized placeholders that modules fill in.
Modules
Self-contained capability units. Each module declares metadata, dependencies, conflicts, and the files it contributes.
Presets
Named bundles of modules. blank and dashboard are presets — they list which modules to include and provide token replacement values.
Available modules
| Module | Kind | Description |
|---|---|---|
quality-baseline | developer-experience | ESLint 9, Prettier, Husky + lint-staged |
testing-baseline | developer-experience | Vitest 3.2, Playwright 1.55, CI config |
ai-dx | developer-experience | AGENTS.md, ARCHITECTURE.md (always included) |
ai-dx-cursor | developer-experience | .cursor/rules/*.mdc (via --ai-tools cursor) |
ai-dx-claude | developer-experience | CLAUDE.md (via --ai-tools claude) |
ai-dx-gemini | developer-experience | .gemini/GEMINI.md (via --ai-tools gemini) |
auth-core | auth | Better Auth baseline (email/password, sessions) |
auth-github | auth | GitHub OAuth provider |
db-pg | database | node-postgres driver for Drizzle |
db-postgresjs | database | postgres.js driver for Drizzle |
billing-stripe | billing | Stripe checkout, portal, webhooks |
billing-polar | billing | Polar checkout, portal, webhooks |
email-resend | Resend transactional email | |
deploy-docker | deploy | Dockerfile + .dockerignore |
dashboard-shell | ui | Dashboard CSS layer + settings page |
Module anatomy
modules/billing-stripe/
├── module.json # Metadata, dependencies, operations
└── files/ # Files to copy into generated project
└── ...module.json
{
"name": "billing-stripe",
"kind": "billing",
"description": "Stripe billing provider integration",
"dependsOn": ["auth-core"],
"conflictsWith": [],
"replaces": [],
"template": {
"copyFiles": ["..."],
"tokenReplacements": { "...": "..." }
}
}Assembly model
When you run create-launchframe:
- Load the selected base template
- Resolve the selected preset
- Add/remove modules from explicit CLI options (including
--ai-tools) - Validate dependencies and detect conflicts
- Assemble files and token replacements in deterministic order
- Write the final project +
launchframe.jsonmanifest
Conflict rules
db-pgconflicts withdb-postgresjs— you pick onebilling-stripeandbilling-polarcan coexist (both selected via--billing both)- Absence of a module is valid —
--email-provider nonesimply omitsemail-resend - AI DX sub-modules (
ai-dx-cursor,ai-dx-claude,ai-dx-gemini) are independently selectable via--ai-tools