Forge new .NET 10 projects with Aspire 13 orchestration, TUnit testing, and a clean project structure.
my-project/
├── MyProject.slnx
├── global.json
├── .editorconfig
├── aspire/
│ ├── AppHost/ # Aspire orchestration
│ └── ServiceDefaults/ # OpenTelemetry, health checks, resilience
├── src/
│ ├── Api/ # Minimal Web API
│ └── Domain/ # Domain logic (empty, ready for your code)
└── tests/
└── Unit/ # TUnit test project with sample tests
- .NET 10 SDK
- Aspire CLI
uuidgen(pre-installed on Linux)
Run directly from GitHub:
cd /path/to/your/projects
curl -fsSL https://raw.githubusercontent.com/mithgroth/aspire-forge/main/forge | bash -s -- MySuperDuperAwesomeProject./forge <ProjectName>- ProjectName: PascalCase name for your project (e.g.,
MyAwesomeApp) - Creates a folder using kebab-case (e.g.,
my-awesome-app/) - Must be alphanumeric and start with a letter
# Creates folder: my-project/
./forge MyProject
# Creates folder: awesome-api-service/
./forge AwesomeApiService- AppHost with health check configuration
- ServiceDefaults with OpenTelemetry, resilience, and service discovery
- Minimal API setup
- OpenAPI support
- Health endpoints (
/health,/alive) - References Domain and ServiceDefaults
- Empty class library for your domain logic
- No dependencies, pure domain code
- Modern .NET testing framework
- Sample test with Before/After hooks
- Assembly hooks for setup/teardown
- References Domain project
Opinionated C# formatting:
- 4 spaces, LF line endings
- Always use
var - File-scoped namespaces
- Allman brace style
- Always require braces (no single-line if/for/foreach)
- camelCase private fields
- No
this.qualifier - No
#regionblocks
cd my-super-duper-awesome-project
aspire runThe Aspire dashboard opens in your browser. Your API runs with full observability.
MIT