Skip to content

sm new project

Scaffolds a complete SimpleModule solution with all the foundational projects and configuration files.

Usage

bash
sm new project [name]

If you omit the name, the CLI prompts you interactively.

Options

OptionDescription
[name]Project name in PascalCase (e.g., MyApp). Prompted if omitted.
-o, --output <dir>Output directory. Defaults to the current directory.
--dry-runPreview the files that would be created without writing anything to disk.
--framework-version <version>Override the auto-resolved SimpleModule NuGet package version.

What Gets Created

Running sm new project MyApp generates the following structure:

MyApp/
  MyApp.slnx                         # Solution file
  Directory.Build.props              # Shared MSBuild properties
  Directory.Packages.props           # Central package management
  global.json                        # SDK version pinning
  nuget.config                       # NuGet feed configuration
  package.json                       # npm workspace root
  biome.json                         # Biome lint + format config
  tsconfig.json                      # Shared TypeScript config
  .editorconfig                      # Editor/style rules
  src/
    MyApp.Host/
      MyApp.Host.csproj              # Host project (references framework NuGet packages)
      Program.cs                     # Entry point with generated extensions
      ClientApp/                     # React + Inertia bootstrap
      Styles/                        # Tailwind entry
      Properties/launchSettings.json
      wwwroot/index.html             # Inertia static shell
    modules/
      Items/                         # Starter module scaffolded by default
        src/
          Items.Contracts/
          Items/                     # Module, DbContext, service, endpoints, Views, Pages, vite.config, package.json
        tests/
          Items.Tests/
  tests/
    MyApp.Tests.Shared/
      MyApp.Tests.Shared.csproj      # Shared test infrastructure

Project Details

  • Host -- the host application that calls generated AddModules() and MapModuleEndpoints() extension methods; serves the Inertia + React frontend
  • Items module -- a starter module under src/modules/Items/ demonstrating the three-project pattern (contracts, implementation, tests) plus the frontend conventions (Views/, Pages/index.ts, vite.config.ts, package.json)
  • Tests.Shared -- WebApplicationFactory base class, fake data generators, and test authentication

Framework code (Core, Database, Generator) is consumed from NuGet packages rather than scaffolded into your repo.

After Scaffolding

bash
cd MyApp
sm new module Customers       # add another module under src/modules/
dotnet build                  # build the solution
dotnet run --project src/MyApp.Host

WARNING

The CLI will refuse to create a project in a non-empty directory. Choose a clean location or use the --output flag to specify a different path.

Example

bash
# Create in current directory
sm new project MyApp

# Create in a specific directory
sm new project MyApp --output ~/projects

Next Steps

Released under the MIT License.