Express.js
Scaffold an Express.js workspace with TypeScript.
You can run this directly from an empty location; scaffold starter base is not a prerequisite. Nova creates the monorepo root and the first Express workspace together.
Why Use This Command?
- Installs Express 5 with TypeScript and a
tsx watchdev script so you can start writing routes with hot reload on the first command. - Auto-detects monorepo or workspace mode so the same command works whether you're starting fresh or adding to an existing project.
- Generates a minimal
src/index.tsentry point so the server compiles and runs without extra boilerplate. - Pins TypeScript
6.0.3and setsrootDirtosrcso the build emits thebuild/index.jsfile used by the start script. - Provides
dev,prod,check,build, andcleanscript groups whose top-level commands delegate to adjacentname:*steps through Nova's script runner.
Requirements
- Node.js runtime — Use any Node.js LTS release.
- Empty directory (monorepo mode) or monorepo root (workspace mode) — The command auto-detects which mode to use.
Usage
Options
| Flag | Description |
|---|---|
-d, --dry-run | Run without writing any files. |
--name <name> | Project slug when creating a new monorepo; omit at an existing root. |
--non-interactive | Require every answer as a flag and do not open prompts. |
--workspace-name <name> | Workspace directory name. |
--output <dir> | Output directory. |
Output Structure
{project-slug}/
├── package.json
├── nova.config.json
├── turbo.json
├── apps/
│ └── {workspace-name}/
│ ├── package.json
│ ├── tsconfig.json
│ └── src/
│ └── index.ts
└── packages/
How It Works
Interactive Wizard
When run without flags, the command walks you through an interactive wizard:
Monorepo mode (no package.json found):
- Project name — Enter a slug for your monorepo (e.g.
my-api). - Workspace name — Enter a slug for the workspace directory (default:
express). - Where should the project be created? — Choose between creating a new directory or building in the current working directory.
- Output directory — If creating a new directory, confirm the path (default:
./{project-name}). - Run generators — Optionally run project-level generators (
.editorconfig,.gitignore,LICENSE, etc.).
Workspace mode (package.json with workspaces found):
- Workspace name — Enter a slug for the workspace directory (default:
express). - Output directory — Confirm the workspace path (default:
./apps/{workspace-name}).
Nova reads the project slug from the root nova.config.json; it does not ask you to rename the project or package.
Non-Interactive Mode
Agents and automation should add --non-interactive. A new monorepo needs --name, --workspace-name, and --output. An existing monorepo needs only --workspace-name and --output; omit --name because Nova reads the root project slug.
Naming, Registration, and Safety
For project slug my-api and workspace slug api, Nova names the package my-api-app-api. The same name is written to the workspace package.json and its nova.config.json entry. If the root workspaces globs do not include the selected output, Nova adds that exact relative path to the root package.json.
Before writing, Nova requires a readable root package.json and nova.config.json, keeps the output inside the monorepo, rejects duplicate paths and names, and lists any template files it would overwrite. --dry-run performs these checks without changing the project.
Next Steps
After scaffolding, consider running generators to add essential project files like .editorconfig, .gitignore, LICENSE, and README.md.