create-awesome-node-app
v0.15.0
Published
Composable scaffolding CLI for production-ready Node, Web, Full-Stack, Monorepo, and AI-ready projects.
Maintainers
Readme
Create Awesome Node App
One command. Any stack. Generate production-ready apps by composing templates, addons, and AI-ready conventions.
From blank folder to a working Node/Web project with modern tooling, cozy defaults, and team-friendly automation.
Official Site · Templates · Extensions · Docs · GitHub · npm
⚡ Install
npm (recommended):
npm create awesome-node-app@latest my-appHomebrew (macOS / Linux):
brew tap Create-Node-App/tap
brew install create-awesome-node-appAUR (Arch Linux):
yay -S create-awesome-node-app # or: paru -S create-awesome-node-appDocker:
docker run --rm -it -v "${PWD}:/app" -w /app \
ulisesjeremias/create-awesome-node-app:latest my-app \
--template react-vite-boilerplateInteractive by default outside CI. For automation, run headless with flags:
npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--addons tailwind-css zustand github-setup \
--use-bun \
--no-interactive| If you want... | Start here |
| ----------------------------- | ------------------------------------------------- |
| A guided local setup | npm create awesome-node-app@latest my-app |
| A repeatable CI/platform flow | --no-interactive with explicit flags |
| Your company starter | --template <github-url> or --template file:// |
| Private standards layered in | --extend <url> |
✨ Why CNA?
| Capability | Value |
| -------------------------------- | ----------------------------------------------------------------------------------------------------- |
| 🧩 Composable by design | Start with a template, then layer only the addons your project actually needs. |
| 🛡️ Production-ready defaults | TypeScript, linting, scripts, testing paths, and practical DX defaults out of the box. |
| 🤖 AI-ready from day one | Supported templates generate AGENTS.md so coding agents understand the project context. |
| 🏗️ CI and platform friendly | Use --no-interactive, --set, --template <url>, and --extend <url> for repeatable scaffolding. |
🧬 Composition Model
template -> addons -> custom options -> install -> git init -> AI-ready projectYou can mix catalog templates and addons with your own GitHub or file:// sources.
🎛️ What You Can Generate
🧱 Template Families
| Category | Example templates |
| ------------- | ----------------------------------------------------------- |
| Frontend | react-vite-boilerplate, astro-starter |
| Backend | nestjs-boilerplate, hono-starter |
| Full Stack | nextjs-starter, nextjs-saas-ai-starter, remix-starter |
| Monorepo | turborepo-boilerplate |
| Web Extension | web-extension-react-boilerplate |
| UAT / Testing | webdriverio-boilerplate |
🧰 Addon Families
| Category | Examples |
| ------------------------- | ------------------------------------------------------------------------- |
| UI | tailwind-css, material-ui, shadcn-ui, nextjs-shadcn |
| State and data | zustand, jotai, tanstack-react-query, apollo-client |
| Backend and DB | drizzle-orm-postgresql, drizzle-orm-sqlite, mongoose-orm-mongodb |
| Next.js stack | nextjs-auth, nextjs-trpc, nextjs-drizzle-postgres, nextjs-t3-env |
| Tooling and quality | github-setup, husky-lint-staged, development-container, storybook |
| Deployment and monitoring | serverless-framework, sentry |
🍱 Popular Recipes
⚛️ React + Tailwind + Zustand
npx create-awesome-node-app my-dashboard \
--template react-vite-boilerplate \
--addons tailwind-css zustand \
--no-interactive▲ Next.js + shadcn/ui + Auth + tRPC
npx create-awesome-node-app my-saas \
--template nextjs-starter \
--addons nextjs-shadcn nextjs-auth nextjs-trpc github-setup husky-lint-staged \
--use-pnpm \
--no-interactive🐈 NestJS + Drizzle PostgreSQL + OpenAPI
npx create-awesome-node-app my-api \
--template nestjs-boilerplate \
--addons drizzle-orm-postgresql openapi \
--no-interactive🤖 Next.js SaaS AI Starter
npx create-awesome-node-app my-ai-saas \
--template nextjs-saas-ai-starter \
--use-pnpm \
--no-interactive🏢 Internal Platform Template (GitHub URL)
npx create-awesome-node-app my-internal-app \
--template https://github.com/your-org/platform-starters/tree/main/templates/internal-app \
--no-interactive🧪 Local Template Development (file://)
npx create-awesome-node-app my-local-app \
--template file:///absolute/path/to/platform-starters/templates/internal-app \
--no-interactive
file://template URLs should be absolute paths (for examplefile:///Users/...orfile:///C:/...).
🔒 Layer A Private Extension
npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--addons tailwind-css \
--extend https://github.com/your-org/platform-starters/tree/main/extensions/company-ci🎚️ Pass Custom Template Values
npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--set "productName=Acme Cloud" \
--set "author=Platform Team" \
--no-interactive🏗️ Built For Modern Teams
- 🟢 Node 22+ runtime support.
- 📦 npm, yarn, pnpm, and Bun package managers.
- 🧙 Interactive wizard for local workflows.
- 🔁
--no-interactivemode for CI, scripts, and platform automation. - 🌐 GitHub URL and local
file://template inputs. - 🔐
--extendsupport for private addon layering. - 🎯
--set key=valueoverrides for deterministic custom options.
🔎 Explore The Catalog
Browse visually at create-awesome-node-app.vercel.app or discover from the terminal:
# List all available templates
npx create-awesome-node-app --list-templates
# List addons compatible with a specific template
npx create-awesome-node-app --template react-vite-boilerplate --list-addonsFull catalog:
- Templates: create-awesome-node-app.vercel.app/templates
- Extensions: create-awesome-node-app.vercel.app/extensions
🤖 AI-Ready With AGENTS.md
Supported templates can generate an AGENTS.md file so coding assistants understand project context before editing:
| Context | Why it matters | | ---------------------- | ----------------------------------------------------------- | | Project purpose | Agents understand what the app is for before changing code. | | Directory layout | Suggestions align with the real structure. | | Scripts and validation | Agents know how to lint, test, build, and verify changes. | | Team conventions | Output follows naming and workflow expectations. |
Learn more: AGENTS.md guide
🧙 Interactive Wizard
Run the CLI without flags and CNA guides you through:
| Step | What you choose | | ----------------- | -------------------------------------------------------------------------- | | Project name | Confirm or set the target directory | | Package manager | npm, yarn, pnpm, or Bun | | Category | Frontend, Backend, Full Stack, Monorepo, Web Extension, UAT, or custom URL | | Template | Pick from curated starters with descriptions and labels | | Addons | Multi-select compatible extensions grouped by purpose | | Custom extensions | Layer extra URLs for internal standards |
✅ Requirements
- Node.js >= 22
- npm >= 7, yarn, pnpm, or Bun
Recommended quick switch:
fnm use 22
npm create awesome-node-app@latest my-app🧭 CLI Reference
Usage: create-awesome-node-app [project-directory] [options]| Flag | Description |
| ---------------------------- | ----------------------------------------------------- |
| --interactive | Force interactive wizard (default outside CI) |
| --no-interactive | Disable wizard and use flags only |
| -t, --template <slug\|url> | Template slug from catalog or remote/local URL |
| --addons [slugs...] | Space-separated addon slugs or URLs |
| --extend [urls...] | Extra extension URLs layered on top |
| --set <key=value...> | Set custom template options; quote values with spaces |
| --no-install | Generate files without installing dependencies |
| -f, --force | Allow scaffolding into a non-empty target directory |
| --use-yarn | Use yarn instead of npm, pnpm, or Bun |
| --use-pnpm | Use pnpm instead of npm, yarn, or Bun |
| --use-bun | Use Bun instead of npm, yarn, or pnpm |
| --list-templates | Print all templates grouped by category |
| --list-addons | Print addons, optionally filtered by --template |
| --offline | Use the local cache only; do not refresh templates |
| --no-cache | Disable the catalog cache; force a refresh each run |
| --cache-dir <path> | Override the cache root (default: ~/.cache/cna) |
| --refresh <mode> | When to refresh: always | stale | manual |
| --pin <ref> | Pin template to a specific commit SHA, tag, or branch |
| -v, --verbose | Output resolved generation config as JSON |
| -i, --info | Print Node, npm, and OS diagnostics |
| -V, --version | Print CLI version |
| -h, --help | Show help |
🗃️ cna cache subcommand
Usage: create-awesome-node-app cache [options] [command]
Commands:
dir Print the cache root directory
list List cached templates and extensions
clean [id] Remove one or all entries; --catalog also clears the catalog cache
verify [id] Run `git fsck` on one or all entries
outdated List cached entries that are behind their remote tip
update [id] Refresh one or all cached entries from their remote
doctor Diagnose cache health (git, network, permissions)Inspect and manage the on-disk cache:
# Where is my cache?
npx create-awesome-node-app cache dir
# /home/<you>/.cache/cna
# What's in it?
npx create-awesome-node-app cache list
# ID URL BRANCH LAST FETCHED SHA SIZE
# ...<base64-id> https://github.com/... main 3h ago abc1234 9.3 MB
# Verify integrity
npx create-awesome-node-app cache verify
# Clear everything (and the catalog cache)
npx create-awesome-node-app cache clean --catalog
# Clear a single entry by its base64 ID
npx create-awesome-node-app cache clean <id>
# Check for outdated entries
npx create-awesome-node-app cache outdated
# Refresh a specific entry
npx create-awesome-node-app cache update <base64-id>
# Diagnose cache health
npx create-awesome-node-app cache doctor📦 Cache & Updates
CNA caches both the template catalog (templates.json from
raw.githubusercontent.com) and the template git repos themselves. The
cache lives at ~/.cache/cna by default; override with --cache-dir
<path> or CNA_CACHE_DIR.
| Path | Contents |
| ------------------------------- | ------------------------------------------ |
| ~/.cache/cna/catalog/ | Cached templates.json (one file) |
| ~/.cache/cna/<base64-of-url>/ | Shallow clone of one template or extension |
Refresh modes (set with --refresh <mode> or CNA_REFRESH=<mode>)
stale(default): pull only when the cache is older thanCNA_REFRESH_AFTER_HOURS(default24). No network on a warm cache.always: pull on every run (the pre-Phase-2 behavior).manual: never pull unless--refreshis passed.
Each cache entry has a .cna-meta.json sidecar with lastFetchedAt,
lastCommitSha, lastRefreshReason, branch, and url.
Pinning templates
Pin a template to a specific commit SHA, tag, or branch:
npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--pin abc123def456abc123def456abc123def456abc1The --pin flag is equivalent to appending ?ref=<ref> to the template URL. Combine with CNA_STRICT_REPRO=1 to enforce full 40-character SHAs.
Cache diagnostics
# Check which cached entries are behind their remote tip
npx create-awesome-node-app cache outdated
# Refresh a specific entry (or all entries)
npx create-awesome-node-app cache update
npx create-awesome-node-app cache update <base64-id>
# Full health check: git, network, permissions, cache integrity
npx create-awesome-node-app cache doctorCI and offline usage
# Fully offline CI: use the local cache only, no network.
npx create-awesome-node-app my-app -t react-vite-boilerplate --offline
# Pin the cache to a project-local directory (useful in monorepos and CI).
CNA_CACHE_DIR="$PWD/.cna-cache" npx create-awesome-node-app my-app -t react-vite-boilerplateStorage optimization
On a cache hit, the working copy is built with cp -c (reflink) when the
filesystem supports it, then cp -l (hardlink) on Linux, then a recursive
copy as a last resort. A warm scaffold is O(1) on the working directory
when reflinks are available.
🧩 Programmatic Usage
Need to integrate CNA into your own tooling? The core is importable:
import { createNodeApp, getTemplateDirPath } from "@create-node-app/core";The programmatic API is experimental and subject to change. Prefer the CLI for stable usage.
🛡️ Security
CNA downloads and executes templates from remote sources. See SECURITY.md for the threat model, recommended practices (hash-pinned URLs, template auditing), and the vulnerability reporting process.
❓ FAQ
Most scaffolders lock you into one stack. CNA is composable: choose a template, layer focused addons, and plug in your own GitHub/local blueprints.
Yes. Pass a GitHub URL or local file:// URL with --template.
Yes. Use --extend <url> to layer private extensions on top of a template and addon set.
Yes. Addons are applied in sequence. If two addons modify the same file, later addons win.
Yes. Use turborepo-boilerplate to bootstrap a multi-package workspace with shared tooling.
Yes. Pass all required flags and use --no-interactive for deterministic automation.
Yes. CNA targets Node 22+ to keep runtime behavior modern and predictable.
Yes. Supported templates can generate AGENTS.md, helping assistants understand project layout, scripts, and conventions.
🗺️ Roadmap
- 🚀 More framework templates and vertical starters.
- 🧪 Additional testing packs for contracts, performance, and load testing.
- 📌 Diff-based upgrade paths for pinned templates.
- 📊 Rich template analytics and usage insights.
Track progress in Issues and Discussions.
🤝 Contributing
Templates, addons, bug fixes, docs, recipes, and ideas are all welcome.
- Main repo: github.com/Create-Node-App/create-node-app
- Template and extension data: github.com/Create-Node-App/cna-templates
- Contributing guide: CONTRIBUTING.md
📄 License
MIT © Create Node App Contributors
create-awesome-node-app.vercel.app
Built for developers who value speed, composability, craft, and AI-ready workflows.
