Use slugs from templates.json to generate and verify a project:
CI=true npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--addons tailwind-css zustand github-setup
cd my-app && npm install && npm run lint:fix && npm run buildUse file:// URLs to test unpublished templates or extensions without pushing to GitHub.
customOptions defaults are read from cna.config.json inside the template directory,
so all EJS variables resolve automatically in non-interactive mode.
REPO=/absolute/path/to/cna-templates
# Local template only
CI=true npx create-awesome-node-app my-app \
-t "file://$REPO?subdir=templates/react-vite-starter"
# Local template + local extensions
CI=true npx create-awesome-node-app my-app \
-t "file://$REPO?subdir=templates/react-vite-starter" \
--addons \
"file://$REPO?subdir=extensions/react-zustand" \
"file://$REPO?subdir=extensions/all-github-setup" \
--no-install
cd my-app && npm install && npm run lint:fix && npm run build
# Remote template slug + local extension (for extension-only development)
CI=true npx create-awesome-node-app my-app \
--template react-vite-boilerplate \
--addons "file://$REPO?subdir=extensions/my-new-extension"Add --verbose to any command to see detailed scaffolding logs.
.github/workflows/test-combinations.yml runs on every push/PR to main and weekly on Sundays.
For each template it:
- Picks one random compatible extension per category
- Runs
npx create-awesome-node-app --template <slug> --addons <...>(CI mode) - Verifies
npm run format --if-present,npm run lint:fix --if-present, andnpm run build --if-presentall pass
To reproduce a CI run locally:
CI=true npx create-awesome-node-app my-app \
--template <slug> --addons <ext1> <ext2>
cd my-app && npm run format --if-present && npm run lint:fix --if-present && npm run build --if-present