Skip to main content

Base

Scaffold a base monorepo project with workspaces configuration, ready for adding framework workspaces. This command is optional: use it when you want the project root now but do not want to choose an app or documentation framework yet.

What you want nowCommand to start withResult
Only an empty Nova monorepo rootnova scaffold starter baseRoot, apps/, and packages/
A root and the first app togethernova scaffold app <framework>Root plus the app workspace
A root and documentation togethernova scaffold docs docusaurusRoot plus the docs workspace

You do not need to run starter base before either direct app or docs command.

Why Use This Command?

  • Creates the root package.json with workspaces configured for apps/* and packages/* so you can add workspaces immediately.
  • Creates a root turbo.json and standard dev, prod, check, build, deploy, and clean script groups. Each top-level script delegates to its adjacent name:workspaces Turbo step through nova utility run-scripts.
  • Pins the npm and Node.js toolchain used by current Nova projects and records explicit denials for optional dependency install scripts used by the built-in scaffolds.
  • Generates a baseline nova.config.json so recipes and utilities have a valid config to work with from the start.
  • Installs @cbnventures/nova as a dev dependency so the nova CLI is available inside the project without a global install.

Requirements

  • Node.js runtime — Use any Node.js LTS release.
  • Start outside a project — Run the command where Nova cannot find a package.json. The selected output may already contain unrelated files, but Nova refuses to replace package.json or nova.config.json.

Usage

Options

FlagDescription
-d, --dry-runRun without writing any files.
--name <name>Project name.
--non-interactiveRequire every answer as a flag and do not open prompts.
--output <dir>Output directory.

Output Structure

text
{project-slug}/
├── package.json
├── nova.config.json
├── turbo.json
├── apps/
└── packages/

How It Works

Interactive Wizard

When run without flags, the command walks you through an interactive wizard:

  1. Project name — Enter a slug for your monorepo (e.g. my-app).
  2. Where should the project be created? — Choose between creating a new directory or building in the current working directory.
  3. Output directory — If creating a new directory, confirm the path (default: ./{project-name}).
  4. Run generators — Optionally run project-level generators (.editorconfig, .gitignore, LICENSE, etc.).

Non-Interactive Mode

Agents and automation should add --non-interactive and provide both answers. Nova refuses incomplete commands before writing and skips the optional post-scaffold generator menu.

Safety Checks

Before creating any file, Nova validates the project slug and checks the three root files it owns: package.json, nova.config.json, and turbo.json. If any target file already exists, the command stops and lists the conflict. --dry-run performs the same validation and reports the exact root path without writing.

Next Steps

After scaffolding, enter the new monorepo and add as many workspaces as the project needs. Each scaffold command detects the existing workspace root, creates only the requested workspace, and adds it to the same nova.config.json. Running another scaffold command later preserves the workspaces that are already registered.

For example, these commands add a Docusaurus documentation site and a Cloudflare Worker to one project:

You can mix any supported app and docs scaffolds this way. Run each command from the monorepo root, not from inside an existing workspace.

Once the workspaces are in place, run generators for project-level files like .editorconfig, .gitignore, and LICENSE.