create-node-appone command · any stack
TemplatesExtensionsDocs
Get started
No results found.
Navigation
Home
Docs
Templates
Extensions
Docs
Docs — Introduction
Docs — Installation
Docs — AGENTS.md
Docs — Templates
Docs — Template Customization
Docs — Extensions
Docs — Contributing
Docs — Advanced Usage
System
Enable Performance Mode
Press Esc to close
Ctrl+K
10 templates·51 extensions·12 categories·MIT licensed·TypeScript-first
create-node-app

One command. Any stack. Compose templates and extensions into production-ready Node.js apps.

© 2026 Create Awesome Node App.

Resources

TemplatesExtensionsDocumentationContributing GuideChangelog

Community

Discord CommunityGitHub Organizationnpm PackageReport an issueRequest a feature

Ecosystem

Node.jslivePythonbetaV languagelive

Documentation

Back to home

Getting Started

IntroductionInstallationAGENTS.mdNEW

Templates

OverviewCustomization

Extensions

Overview

Contributing & Reference

ContributingAdvanced Usage
View on GitHub
  1. Docs
  2. Extensions

Extensions

Extensions are modular add-ons you apply on top of a template to layer in additional features — UI libraries, state management, testing setups, and more.

What is an extension?

An extension is a self-contained package that adds files, dependencies, and scripts to a scaffolded project. Extensions are composable: you can apply multiple compatible extensions in a single command and they are merged intelligently.

Each extension declares which template types it is compatible with (e.g. react, nestjs-backend), so the CLI only shows you relevant options for your chosen template.

npx create-awesome-node-app my-app --template react-vite-boilerplate --addons react-zustand react-tailwindcss react-testing-library-with-vitest

Extension categories

Extensions are organized into 12 categories covering the most common project needs.

UI
Component libraries and design systems.
  • · Material UI
  • · Tailwind CSS
  • · Shadcn/UI
  • · Semantic UI
  • · Mantine
State Management
Client-side state solutions.
  • · Zustand
  • · Redux Toolkit
  • · Recoil
  • · Jotai
Testing
Unit, integration, and end-to-end testing setups.
  • · Vitest + Testing Library
  • · Jest + Testing Library
  • · Playwright
Database
ORM, database adapters, and data persistence utilities.
  • · Drizzle + PostgreSQL
  • · Drizzle + SQLite
  • · Mongoose
  • · Prisma
Data Fetching
API and data synchronization layers.
  • · React Query
  • · Apollo Client
  • · SWR
  • · tRPC
Auth
Authentication and authorization integrations.
  • · NextAuth.js
  • · Clerk
  • · Auth0
  • · Supabase Auth
Tooling
Developer experience and workflow extensions.
  • · Storybook
  • · GitHub Setup
  • · Million.js
  • · Electron
Deployment
Hosting, CI/CD, and infrastructure configurations.
  • · Vercel
  • · Docker
  • · GitHub Actions
  • · Serverless
Monitoring
Error tracking, logging, and observability.
  • · Sentry
  • · OpenTelemetry
  • · Datadog
  • · LogRocket
Localization
Internationalization and translation tooling.
  • · i18next
  • · react-intl
  • · next-intl
  • · Lingui
API
API clients, code generation, and integration utilities.
  • · Axios
  • · Ky
  • · OpenAPI Generator
  • · GraphQL Codegen
Cross Platform
Extensions targeting multiple platforms simultaneously.
  • · Electron
  • · Tauri
  • · Capacitor
  • · React Native Web
Browse all extensions

Choosing a styling extension

Pick the styling model that fits how your team works. Tailwind provides utility classes in markup; StyleX provides typed styles that compile to atomic CSS during the build.

Choose Tailwind CSS
Utility classes and a familiar design-token workflow

Use Tailwind when you want to compose styles in markup and use the existing Tailwind utility and plugin ecosystem. Browse the React Vite and Next.js extensions.

Choose StyleX
Typed, atomic styles extracted at build time

Use StyleX when you want style definitions checked in TypeScript and compiled into atomic CSS. The React Vite integration registers its Vite plugin before React to preserve Fast Refresh; the Next.js integration uses Babel and PostCSS. See the React Vite and Next.js guides. Turbopack supports the Babel and PostCSS setup in Next.js 16 and later; use Webpack with earlier versions. See the Next.js compatibility table.

Using StyleX and Tailwind together in Next.js

The extensions can be combined. Keep @stylexjs/postcss-plugin before @tailwindcss/postcss and autoprefixer in the generated config.plugins map. The addons preserve this order whichever is selected first, and the base PostCSS config is applied before their additions. Keep each extension's config contribution and avoid assigning the same visual property to both systems on one component. The combined setup passed lint, type-check, and production build; see the validation details.

How extensions work

When the CLI applies an extension it performs a deep merge of the extension's files and package.json fields into the scaffolded project:

  1. Files — source files from the extension are copied or appended to the project. Filenames ending in .template are processed as EJS templates before being written.
  2. Dependencies — package/dependencies.js and package/devDependencies.js entries are merged into the project's package.json.
  3. Scripts — any scripts defined by the extension are merged with existing scripts.
  4. Incompatibilities — extensions declare incompatibleWith slugs so the CLI prevents conflicting combinations (e.g. two different test runners).

Extension file structure

Extensions live in the extensions/ directory of the cna-templates repository:

extensions/
└── your-extension-name/
    ├── [src]/            # Source files merged into the project's src/
    ├── package/
    │   ├── dependencies.js       # Runtime deps to add
    │   └── devDependencies.js    # Dev deps to add
    ├── package.json      # Extension metadata
    └── README.md

Listing available extensions

npx create-awesome-node-app --list-addons

Or browse the full catalogue on the Extensions page, where you can filter by template type and category.

Back to DocumentationContributing extensions