This repository contains official templates and extensions for create-awesome-node-app, enabling developers to quickly bootstrap modern applications with pre-configured tech stacks.
- 6 Production-Ready Templates: React, Next.js, NestJS, WebExtension, WebdriverIO, and Turborepo
- 38+ Extensions: State management, UI libraries, databases, tooling, and cross-platform support
- Type-Safe Configuration: JSON schema validation for all templates and extensions
- Automated Testing: CI/CD workflow tests template-extension combinations
Create a new project using the CLI:
# Interactive mode (recommended)
npx create-awesome-node-app
# With specific template
npx create-awesome-node-app --template react-vite-boilerplate
# With template and extensions
npx create-awesome-node-app --template react-vite-boilerplate --addons material-ui zustand| Template | Type | Use Case | Key Features |
|---|---|---|---|
| React Vite | react |
Frontend Apps | TypeScript, Router, Feature-based architecture |
| Next.js | nextjs |
Full-stack Apps | SSR, API routes, Production-ready |
| NestJS | nestjs-backend |
Backend APIs | Scalable, Maintainable, Enterprise-ready |
| Turborepo | monorepo |
Monorepos | Multi-package management, Changesets |
| WebdriverIO | webdriverio |
UAT | Automated testing, Selenoid |
| WebExtension | webextension-react |
Browser Extensions | Chrome/Firefox/Edge compatible |
- zustand - Minimal and flexible state management
- redux-thunk / redux-saga - Redux with async middleware
- jotai - Atomic state management
- recoil - Facebook's state management library
- material-ui - Material Design components
- tailwind-css - Utility-first CSS framework
- shadcn-ui - Radix UI + Tailwind components
- ant-design - Enterprise-class UI design
- drizzle-sqlite / drizzle-postgres - Type-safe SQL ORM
- mongoose - MongoDB object modeling
- github-setup - GitHub Actions, Dependabot, issue templates
- husky-lint-staged - Pre-commit hooks for code quality
- development-container - Docker dev environments
- jest-rtl - Jest + React Testing Library setup
- ionic-react-capacitor - Build mobile apps
- react-electron-vite - Desktop applications
- android-tools - Android development setup
-
Fork this repository
-
Create your template or extension
- Add to
templates/orextensions/folder - Follow the existing structure (see Template Structure below)
- Include a README.md with setup instructions
- Add to
-
Update
templates.json- Add your entry to the
templatesorextensionsarray - Ensure all required fields are present
- Use consistent naming and type conventions
- Add your entry to the
-
Validate your changes
node scripts/validate-templates.js
-
Test locally
npx create-awesome-node-app --template your-template-slug
-
Create a pull request!
Each template should include:
package/- Directory withindex.js,dependencies.js, anddevDependencies.js[src]/- Source directory (brackets indicate variable naming)README.md.template- Template README with variable substitutiondocs/- Additional documentation.templatefiles - Files with variables that will be substituted (e.g.,App.tsx.template)- Configuration files (tsconfig, eslint, prettier, etc.)
Each extension should include:
package.json- Dependencies to be addedREADME.md- Setup and usage instructions[src]/- Source files to be mergeddocs/README.md.append(optional) - Content to append to main README
When adding to templates.json:
{
"name": "Display Name",
"slug": "unique-slug-identifier",
"description": "Brief description of what this provides",
"url": "https://github.com/Create-Node-App/cna-templates/tree/main/templates/your-template",
"type": "template-type",
"category": "category-slug",
"labels": ["Keyword1", "Keyword2"],
"customOptions": [ // Optional
{
"name": "srcDir",
"type": "text",
"message": "Source directory name",
"initial": "src"
}
]
}| Property | Required | Description |
|---|---|---|
name |
β | Human-readable name displayed in CLI |
slug |
β | Unique identifier (URL-friendly, kebab-case) |
description |
β | Short description (1-2 sentences) |
url |
β | GitHub URL to template/extension directory |
type |
β | Type identifier for compatibility matching (string or array) |
category |
β | Category for grouping (must match a category slug for templates) |
labels |
β | Array of keywords for filtering and search |
customOptions |
β | Array of user prompts for template configuration |
Extensions are matched to templates by the type field:
// Template with single type
{ "type": "react", ... }
// Extension compatible with multiple templates
{ "type": ["react", "nextjs"], ... }
// Compatibility check
const compatible = Array.isArray(ext.type)
? ext.type.includes(template.type)
: ext.type === template.type;Available Types:
react- React applicationsnextjs- Next.js applicationsnestjs-backend- NestJS backend APIsmonorepo- Monorepo projectswebdriverio- Testing projectswebextension-react- Browser extensions
The templates.json file is the single source of truth that defines all available templates, extensions, and categories.
{
"categories": [...], // Template categories for organization
"templates": [...], // Base project templates
"extensions": [...] // Optional add-ons for templates
}When you run create-awesome-node-app, the CLI:
- Reads
templates.jsonto get available options - Matches your selected template by
slug - Filters compatible extensions by matching
typefields - Generates your project with the template + selected extensions
Example:
npx create-awesome-node-app --template react-vite-boilerplate --addons material-ui zustandThis command:
- Uses the
react-vite-boilerplatetemplate (type:react) - Adds
material-uiextension (compatible with type:react) - Adds
zustandextension (compatible with type:react)
Categories organize templates in the CLI interface:
{
"slug": "frontend-applications",
"name": "Frontend Applications",
"description": "Templates for building modern web interfaces.",
"details": "Discover templates for React, Vue, and other frontend frameworks...",
"labels": ["Frontend", "UI", "React", "Vue", "Web"]
}# Validate templates.json structure
node scripts/validate-templates.jsThe validation script checks for:
- β Valid JSON syntax
- β No duplicate slugs
- β All required fields present
- β Valid URLs
- β Existing directory references
β οΈ Type consistency warnings
# Test a specific template
npx create-awesome-node-app --template your-template-slug
# Test with extensions
npx create-awesome-node-app --template react-vite-boilerplate --addons material-ui zustand
# Navigate to generated project
cd my-project
# Install and test
npm install
npm run lint
npm run buildThe repository includes automated testing via GitHub Actions:
- Tests random template-extension combinations weekly
- Validates that generated projects can be built and linted
- Ensures compatibility across the ecosystem
This project is licensed under the MIT License.
Contributions are welcome! Please see our contribution guidelines above or reach out with questions.
- π¦ NPM Package
- π Report Issues
- π¬ Discussions