An opinionated, production-first starter for building multi-tenant SaaS and enterprise APIs on .NET 10. You get ready-to-ship Identity, Multitenancy, Auditing, Webhooks, caching, mailing, jobs, storage, health, OpenAPI, and OpenTelemetry — wired through Minimal APIs, Mediator, and EF Core.
You get the complete source code — BuildingBlocks, Modules, and Playground — with full project references. No black-box NuGet packages; you own and can modify everything.
dotnet tool install -g FullStackHero.CLI
fsh new MyApp
cd MyApp
dotnet run --project src/Playground/MyApp.AppHostThe interactive wizard lets you pick your database provider and whether to include Aspire. Run fsh doctor to verify your environment first.
dotnet new install FullStackHero.NET.StarterKit
dotnet new fsh -n MyApp
cd MyApp
dotnet run --project src/Playground/MyApp.AppHostgit clone https://github.com/fullstackhero/dotnet-starter-kit.git MyApp
cd MyApp
dotnet restore src/FSH.Starter.slnx
dotnet run --project src/Playground/FSH.Starter.AppHostClick "Use this template" on GitHub, or open in Codespaces for a zero-install experience with .NET 10, Docker, and Aspire pre-configured.
Prerequisites: .NET 10 SDK, Docker (for Postgres/Redis via Aspire)
| Command | Description |
|---|---|
fsh new [name] |
Create a new project with interactive wizard |
fsh doctor |
Check your environment (SDK, Docker, Aspire, ports) |
fsh info |
Show CLI/template versions and available updates |
fsh update |
Update CLI tool and template to latest |
# Non-interactive with options
fsh new MyApp --db sqlserver --no-aspire --no-git
# Dry run (preview without creating)
fsh new MyApp --dry-run- Modular vertical slices: drop
Modules.Identity,Modules.Multitenancy,Modules.Auditing,Modules.Webhooksinto any API and let the module loader wire endpoints. - Battle-tested building blocks: persistence + specifications, distributed caching, mailing, jobs via Hangfire, storage abstractions, and web host primitives (auth, rate limiting, versioning, CORS, exception handling).
- Cloud-ready out of the box: Aspire AppHost spins up Postgres + Redis + the Playground API with OTLP tracing enabled.
- Multi-tenant from day one: Finbuckle-powered tenancy across Identity and your module DbContexts; helpers to migrate and seed tenant databases on startup.
- Observability baked in: OpenTelemetry traces/metrics/logs, structured logging, health checks, and security/exception auditing.
- .NET 10, C# latest, Minimal APIs, Mediator for commands/queries, FluentValidation.
- EF Core 10 with domain events + specifications; Postgres by default, SQL Server ready.
- ASP.NET Identity with JWT issuance/refresh, roles/permissions, rate-limited auth endpoints.
- Hangfire for background jobs; Redis-backed distributed cache; pluggable storage.
- API versioning, rate limiting, CORS, security headers, OpenAPI (Swagger) + Scalar docs.
src/BuildingBlocks— Core abstractions (DDD primitives, exceptions), Persistence, Caching, Mailing, Jobs, Storage, Web host wiring.src/Modules—Identity,Multitenancy,Auditing,Webhooksruntime + contracts projects.src/Playground— Reference host (FSH.Starter.Api), Aspire app host (FSH.Starter.AppHost), Postgres migrations.src/Tools/CLI— ThefshCLI tool source code.src/Tests— Architecture tests that enforce layering and module boundaries.deploy— Docker, Dokploy, and Terraform deployment scaffolding.
Prereqs: .NET 10 SDK, Aspire workload, Docker running (for Postgres/Redis).
- Restore:
dotnet restore src/FSH.Starter.slnx - Start everything:
dotnet run --project src/Playground/FSH.Starter.AppHost- Aspire brings up Postgres + Redis containers, wires env vars, launches the Playground API, and enables OTLP export on https://localhost:4317.
- Hit the API:
https://localhost:5285(Swagger/Scalar and module endpoints under/api/v1/...).
- Set env vars or appsettings for
DatabaseOptions__Provider,DatabaseOptions__ConnectionString,DatabaseOptions__MigrationsAssembly,CachingOptions__Redis, and JWT options. - Run:
dotnet run --project src/Playground/FSH.Starter.Api - The host applies migrations/seeding via
UseHeroMultiTenantDatabases()and maps module endpoints viaUseHeroPlatform.
- Reference the building block and module projects you need.
- In
Program.cs:- Register Mediator with assemblies containing your commands/queries and module handlers.
- Call
builder.AddHeroPlatform(...)to enable auth, OpenAPI, caching, mailing, jobs, health, OTel, rate limiting. - Call
builder.AddModules(moduleAssemblies)andapp.UseHeroPlatform(p => p.MapModules = true);.
- Configure connection strings, Redis, JWT, CORS, and OTel endpoints via configuration. Example wiring lives in
src/Playground/FSH.Starter.Api/Program.cs.
- Identity — ASP.NET Identity + JWT issuance/refresh, user/role/permission management, profile image storage, login/refresh auditing, health checks.
- Multitenancy — Tenant provisioning, migrations, status/upgrade APIs, tenant-aware EF Core contexts, health checks.
- Auditing — Security/exception/activity auditing with queryable endpoints; plugs into global exception handling and Identity events.
- Webhooks — Tenant-scoped webhook subscriptions with HMAC-signed delivery, retry policies, and delivery logs.
- Target framework:
net10.0; nullable enabled; analyzers on. - Tests:
dotnet test src/FSH.Starter.slnx(includes architecture guardrails). - Want the deeper story? Start with
docs/framework/architecture.mdand the developer cookbook indocs/framework/developer-cookbook.md.
Built and maintained by Mukesh Murugan for teams that want to ship faster without sacrificing architecture discipline.