Releases: fullstackhero/dotnet-starter-kit
10.0.0
FullStackHero .NET Starter Kit — v10.0.0 (GA)
Release date: 2026-06-20
Status: General Availability
Packages: FullStackHero.CLI · FullStackHero.NET.StarterKit
Docs: fullstackhero.net · Source: github.com/fullstackhero/dotnet-starter-kit
TL;DR
v10 is the first General Availability release of the FullStackHero .NET Starter Kit on .NET 10, and the first to ship as public NuGet packages: a global fsh CLI and a dotnet new template. It is a production-ready modular monolith (Vertical Slice Architecture, CQRS) backend with two React 19 front-ends, ten first-class business modules, multitenancy, real-time, billing, and one-command local orchestration via .NET Aspire — all delivered as fully-owned, detached source with no runtime framework NuGet dependencies.
Scaffold in two commands:
dotnet tool install -g FullStackHero.CLI
fsh new MyAppHeadlines
- Now on .NET 10 end-to-end — runtime, EF Core 10, Identity, SignalR, JWT bearer, and the Aspire 13.4 AppHost.
- NuGet distribution —
fshCLI (new/doctor/info/update) plus adotnet new fshtemplate. GitHub "Use this template" remains as a discovery funnel. - Source-ownership model, enforced in the build — the template scaffolds the complete source tree. There are no per-module runtime packages;
dotnet packof the solution emits only the CLI (and the template pack). You own and can change every BuildingBlock, Module, and Host project. - Two polished React 19 apps —
clients/admin(operator console) andclients/dashboard(tenant app), both Vite 7 + Tailwind v4, with real-time SignalR/SSE. - Ten business modules wired and tested out of the box: Identity, Multitenancy, Billing, Catalog, Tickets, Chat, Files, Webhooks, Auditing, Notifications.
- One-command local stack —
dotnet runthe Aspire AppHost brings up Postgres, Valkey, MinIO, pgAdmin, RedisInsight, the migrator, demo seeder, the API, and both React apps. - Deep test coverage — ~1,790 backend tests (unit + NetArchTest architecture + Testcontainers integration) and 214 Playwright E2E tests across the two apps. The build runs warnings-as-errors.
Installation & getting started
Option 1 — the fsh CLI (recommended)
dotnet tool install -g FullStackHero.CLI
fsh doctor # verify SDK, Docker, Aspire, and free ports
fsh new MyApp # interactive wizard (or pass flags below)
cd MyApp
dotnet run --project src/Host/MyApp.AppHostCLI flags for fsh new:
| Flag | Effect |
|---|---|
| (none) | Full stack: backend + Aspire AppHost + both React apps |
--no-frontend |
Backend + Aspire only (omit clients/) |
--no-aspire |
Omit the Aspire AppHost (run the API/migrator directly) |
--no-aspire --no-frontend |
Minimal API + DbMigrator only |
--skip-install |
Skip npm install for the React apps |
--non-interactive |
Use defaults, no prompts |
-o, --output <dir> |
Output directory (defaults to ./<name>) |
Option 2 — the dotnet new template
dotnet new install FullStackHero.NET.StarterKit
dotnet new fsh -n MyAppOption 3 — clone the repository
git clone https://github.com/fullstackhero/dotnet-starter-kit.git MyApp && cd MyApp
dotnet run --project src/Host/FSH.Starter.AppHostPrerequisites: .NET 10 SDK · Docker (Postgres / Valkey / MinIO via Aspire) · Node.js 20+ (React apps). No aspire workload is required on .NET 10 — Aspire ships as NuGet packages.
Default URLs & credentials (local dev via Aspire)
| Surface | URL |
|---|---|
| Aspire dashboard | https://localhost:15888 |
| API + Scalar docs | https://localhost:7030/scalar |
| Admin console | http://localhost:5173 |
| Tenant dashboard | http://localhost:5174 |
| pgAdmin | http://localhost:5050 |
| MinIO console | http://localhost:9001 |
| RedisInsight | http://localhost:5540 |
Sign in with a seeded account. Under Aspire the demo seeder runs, so every seeded account (including the root admin) uses the password Password123!:
- Root operator:
admin@root.com/Password123!(tenantroot, admin app) - Demo tenant admins:
admin@acme.com,admin@globex.com/Password123! - Demo tenant users: e.g.
alice@acme.com/Password123!
In a production,
apply-only deployment (no demo seed), the root admin password comes fromSeed:DefaultAdminPassword(default123Pa$$word!inappsettings.Development.json/SEED_ADMIN_PASSWORDin Docker). Rotate it immediately.
Architecture
- Modular monolith / Vertical Slice Architecture. Each module is a bounded context with a runtime project plus a
.Contractsproject that is its only public surface. Cross-module references go through.Contractsonly — enforced byArchitecture.Tests(NetArchTest). - CQRS via source-generated Mediator 3.x. Command/query handlers are
public sealed, returnValueTask<T>, and propagateCancellationTokenthroughout. - Composition root is
FSH.Starter.Api; modules self-register through anIModulecontract with assembly-level ordering metadata. - Database migrations never run at API startup. A dedicated one-shot
DbMigratorhost applies migrations and seeds (the API waits for it under Aspire). - Tenant isolation is default-ON.
BaseDbContextapplies the tenant filter automatically; opt out only viaIGlobalEntity.
Cross-cutting platform (BuildingBlocks)
The shared framework libraries under src/BuildingBlocks — yours to modify — provide:
- Persistence — EF Core 10 on PostgreSQL (Npgsql), tenant-isolated
DbContextbase, soft-delete + audit interceptors, domain events, and the specification pattern. - Web — Minimal API conventions, global exception handling with RFC 9457
ProblemDetails, API versioning (Asp.Versioning10), the SignalRAppHubreal-time hub, and security middleware. - Caching — HybridCache (
Microsoft.Extensions.Caching.Hybrid10.6) backed by Valkey (a BSD-licensed Redis fork), with stampede protection and structured cache keys. - Eventing — in-process event bus with Outbox/Inbox scaffolding for idempotent cross-module handlers.
- Storage — pluggable blob storage (S3 / MinIO via AWS SDK, plus local), presigned uploads, and per-tenant quota enforcement.
- Security — CORS, security headers, rate limiting, idempotency filters, and request quotas.
- Resilience — outbound HTTP resilience via
Microsoft.Extensions.Http.Resilience(Polly v8 pipelines). - Jobs — Hangfire background and recurring jobs with an auth-gated dashboard.
- Observability — Serilog structured logging, OpenTelemetry traces/metrics/logs (OTLP → Aspire dashboard), correlation IDs, and
/health/live+/health/readyprobes. - Docs — built-in OpenAPI with the Scalar reference UI; enums serialize as strings globally.
Modules
Ten bounded contexts ship wired, migrated, seeded, and tested. ~171 HTTP endpoints across the API.
Identity
JWT issuance & refresh on ASP.NET Identity; roles with fine-grained permissions; group-based role assignment (roles conferred via user groups grant permissions, not just JWT role claims); per-user permission caching with mutation-driven invalidation; rate-limited auth endpoints; password policies; user sessions; impersonation; self-registration and email confirmation; forgot/reset password with anti-enumeration responses; and a GET /identity/permissions endpoint that returns the caller's effective permission set for SPA gating.
Multitenancy
Tenant resolution via Finbuckle 10 (JWT claim, with a root-operator header override applied post-authentication); full tenant provisioning lifecycle (Running/Completed/Failed) with per-tenant migrations and seeding; tenant IsActive / ValidUpto enforcement; per-tenant themes; and a tenant billing lifecycle (plan-driven subscriptions and invoices on create + renew, grace-windowed expiry).
Billing
Plan-driven subscriptions and invoices, generated on tenant create and renewal; grace windows on expiry; root-operator cross-tenant administration with explicit tenant scoping on every handler (no cross-tenant leakage).
Catalog
Reference commerce domain — products with multiple images, brands, and a category tree — demonstrating the full slice (contracts → handler → validator → endpoint → EF config → tests) and presigned image uploads.
Tickets
Support ticketing with comments and a status lifecycle (open / update / close / delete), tenant-scoped and permission-gated.
Chat
Real-time chat: named channels and direct messages (1:1 and group); messages with threaded replies, emoji reactions, @mentions (which raise notifications), edit/delete, and read markers; full-text search over Postgres tsvector; typing indicators; and file attachments governed by a channel-scoped file-access policy. Broadcast over SignalR with a Valkey backplane.
Files
Presigned S3 / MinIO uploads with a request → finalize flow; soft-delete + restore (trash); public/private visibility control; pluggable per-owner-type file-access policies (e.g. product images, chat attachments); schema-per-tenant isolation.
Webhooks
Outbound webhook subscriptions with HMAC-signed deliveries, fanout to subscribers, delivery tracking, test-send, and **encrypte...
2.0.4-rc
- Fix Migration Issues related to .NET 9
2.0.3-rc
Upgraded to .NET 9
✍ Changes
- feat : upgrade to .NET 9 (#1061) @iammukeshm
- Add soft deletion support and global query filters (#1051) @AliRafay
- Update claims in TokenService and add mobile phone claim (#1058) @jacekmichalski
- feature/catalog brand (#1057) @jacekmichalski
- Fix Swagger Documentation for IIS Hosting (Works also in docker, loca… (#1054) @maxiar
- Refactor and consolidate Shared project structure. (#1045) @AliRafay
- Codebase clean up (#1021) @Meloyg
- feature : Implement Audit Trail (#1017) @iammukeshm
- fix: release drafter (#1013) @iammukeshm
- dependencies: update (#1012) @iammukeshm
2.0.2-rc
Announcement
Hi Team,
I am glad to announce that the FSH .NET StarterKit 2.0.2-rc is out!
You can now test the starter kit in 2 ways.
- By Running the following commands on your CLI
dotnet new install FullStackHero.NET.StarterKit::2.0.2-rc
dotnet new fsh -o HelloWorld
This would create your version of the StarterKit in the /HelloWorld folder. Please take a look at the Readme for more.
- You can also fork the repository to always stay up to date.
✍ What's interesting in this release
- I finally have the terraform scripts modularized super cleanly. Both the Blazor and Web API apps are deployable to the AWS Cloud in just a single command. Also, a PostgreSQL RDS instance gets deployed, which is super cool. Refer to https://github.com/fullstackhero/dotnet-starter-kit/blob/main/terraform/README.md for details.
- Automated NuGet generation Pipeline
- Automated Release Notes Generator
- Minor Cleanups
- Grafana / Prometheus Fixes
- feature : terraform modules support (#1006) @iammukeshm
- chore : Update release-drafter.yml (#1005) @iammukeshm
What's Pending?
- Documentation: I am just not able to find enough time for this. I will have to get this started soon. This is the only thing that is blocking me from having an official release.
- Cross Module Communication
- YouTube video: Once the documentation is in place, I would publish an end-to-end explainer video about the Starter Kit.
Need Help
I need help with testing the application/framework in all aspects. There is a lot of scope for improvement, be it performance, code quality, or features. It would be awesome if some of you could test out the application, raise bugs, and some pull requests as well, so it's easier for all of us at the end of the day.
Super Excited about this! Thanks. Do let me know your feedback!
2.0.1-rc
✍ Changelog
- Complete Open Telemetric Framework, New Dashboards, and docker fixes (#990) @maxiar
- Upgrade to .NET 8 (#905) @iammukeshm
1.1.0
1.0.0
- .NET 7 Upgrade
- FSH CLI Support
- Bug Fixes
- Code Cleanups
- Package Upgrades
- Makefile
- Built-In Docker Support
- Docker-Compose files
- Terraform for AWS ECS Deployment
- Switched Default Database Provider to PostgreSQL
YouTube Overview Video : https://www.youtube.com/watch?v=a1mWRLQf9hY&ab_channel=MukeshMurugan
0.0.6-rc
NuGet Package - https://www.nuget.org/packages/FullStackHero.WebAPI.Boilerplate/0.0.6-rc
dotnet new --install FullStackHero.WebAPI.Boilerplate::0.0.6-rc
Changelogs
- Integrated Finbucke Multitenant packages
- Solution Restructure
- Added Scripts for Generating Migrations
- Introduced CQRS Pattern with MediatR
- Better Configuration Files
- AD Authentication / JWT Authentication
- Added .rest file for API Testing
- Updated Postman Collection
- Code Cleanup
- Updated all Packages
- Serilog Startup fix
- Export to Excel Support
- Specification Pattern using Ardalis packages
- OpenAPI Client Generation
0.0.5-rc
- Fixed Password Reset / Forgot
- Fixed Omnisharp Warnings / Code Cleanup
- Fixed Repository Method
- Log Hangfire to Serilog - Thanks frankyjquintero
- Extras Hangfire extensions - Thanks frankyjquintero
- Hangfire implementation examples - Thanks frankyjquintero
- Separate JSON files for each Settings - Thanks unchase
- Added Events and Handlers via MediatR - Thanks frankyjquintero
- Moved to Tenancy Middleware - Thanks frankyjquintero & fretje
- Solution Cleanup - rulesets & analyzer - Thanks fretje
- Added More Functions for RepositoryAsync - Thanks ghaithprosoft
- Entity Database Seeding Simplified
- File-Scoped namespaces and implicit usings
- Better Folder Structure / Modular
NuGet Package - https://www.nuget.org/packages/FullStackHero.WebAPI.Boilerplate/0.0.5-rc
dotnet new --install FullStackHero.WebAPI.Boilerplate::0.0.5-rc
0.0.4-rc
0.0.4 RC is available now!
- Bug fix in Repository / Update method.
- Endpoint changes for Update / Delete Methods. (Postman Collection Updated)
- Fixed bug in Request Logging Middleware.
- Adds default Role (Basic) to any new registered user.
- Basic User has default View / Search Permissions
- Code Cleanups
- Templated Emails for User Registrations
What's Changed
- Render contents of Request.Body to logs by @justSteve in #115
- Bump Dapper from 2.0.90 to 2.0.123 by @dependabot in #129
- Fix for #128 by @markosimulak in #130
- Removed 'Async' word from method names in non async methods by @snax4a in #133
- HTML Template for Email Confirmation Mails #132 by @iammukeshm in #136
New Contributors
- @markosimulak made their first contribution in #130
- @snax4a made their first contribution in #133
Full Changelog: 0.0.3-rc...0.0.4-rc