Skip to content
fullstackhero
Open source · .NET 10 starter kit
6.5k stars on GitHub v10 in progress

The .NET 10 starter kit built to ship, not to demo.

fullstackhero is the free, MIT-licensed .NET 10 starter kit for teams shipping production SaaS — paired with a React + Vite admin and dashboard out of the box. Ten modules — identity, multitenancy, auditing, files, chat, notifications, webhooks, billing, catalog, tickets — wired through a modular monolith with Vertical Slice Architecture. A real codebase, not a tutorial. No vendor framework. No lock-in.

  • v10
  • ·
  • MIT licensed
  • ·
  • .NET 10 / C# 14
  • ·
  • PostgreSQL · Valkey · React
  • 0 views
fsh starter session
$

Live preview · 7 services orchestrated by Aspire 13

What ships in v10
  • Modules

    10

    Identity · Multitenancy · Auditing · +7 more

  • Building blocks

    12

    EF · Valkey · Hangfire · OTel · Eventing · …

  • Tests

    1,400 +

    Unit · integration · E2E · all green

  • Command

    1

    `dotnet run` boots the whole stack via Aspire 13

The stack

An opinionated, production-ready stack, from day one.

The unglamorous infrastructure every product needs — already chosen, already connected. Sensible, production-grade defaults, and nothing you can't swap.

Backend

.NET 10

Minimal APIs, Mediator, and EF Core 10 on the latest LTS — C# 14, source-generated, fast.

Frontend

React

A Vite admin console and dashboard, fully wired to the API.

More UI frameworks coming soon
Database · default

PostgreSQL

Npgsql + EF Core out of the box. SQL Server provider included.

Orchestration · ready

.NET Aspire

One command brings up Postgres, Valkey, storage, and the API.

Deploy

Docker Compose

A production compose file in the box — ship it anywhere.

Storage · S3

S3-compatible

Local disk in dev; any S3 provider (or MinIO) in production.

Tenancy · built-in

Multitenancy

Finbuckle-powered tenant isolation across every module and DbContext — claim, header, or query-string resolution.

01·Modular monolith + vertical slice

A modular monolith, sliced vertically.

Each module is an isolated bounded context, talking to the others only through its contracts — never reaching into their internals. Inside a module, every feature is a vertical slice: endpoint, handler, validator, and tests in one folder.

Modular monolith

Ten modules, one process

Identity
Multitenancy
Auditing
Catalog
Files
Chat
Billing
Webhooks
Notifications
Tickets

Cross-module calls go through *.Contracts only — enforced by architecture tests.

Vertical slice

One feature, one folder

Modules.Identity / Features / v1 / Users / RegisterUser

  • RegisterUserEndpoint.cs Minimal API endpoint
  • RegisterUserCommandHandler.cs Mediator command handler
  • RegisterUserCommandValidator.cs FluentValidation rules
  • RegisterUserTests.cs Unit + integration tests

No jumping between five projects to add a button — one folder, one PR, one merge.

02·Everything a production .NET 10 API needs

Everything you'd build anyway.

Authentication. Authorization. Migrations. Caching. Background jobs. Structured logging. Distributed tracing. Idempotency. Webhooks. You'd build all of it before your first real feature. Here it's already done — in opinionated, audited code you'd write yourself.

03·Ten production modules ship in v10

Three pillars, seven more in the box.

Identity, multitenancy, and auditing are the architectural pillars — the three questions every B2B SaaS has to answer. Seven more modules ship alongside them, so on day one you're building what makes your product yours — not chat, not billing, not file uploads.

Module

Identity

Auth that gets out of your way.

  • JWT bearer + refresh tokens
  • ASP.NET Identity with roles + permissions
  • Operator impersonation with audit trail
  • Rate-limited login, register & password reset
Explore Identity
Module

Multitenancy

Isolation by default. Cross-tenant by opt-in.

  • Finbuckle.MultiTenant 10 (claim, header, query)
  • EF Core global query filter for tenant scoping
  • IGlobalEntity opt-out for system-wide rows
  • Tenant-aware caching + jobs + outbox
Explore Multitenancy
Module

Auditing

A forensic record of every change.

  • EF SaveChanges interceptor captures all writes
  • Per-entity before/after snapshot
  • User, tenant, correlation ID, request path
  • Queryable via /audits with filters + redaction
Explore Auditing
And seven more in the box
  • Files

    Tenant-scoped object storage on MinIO / S3

  • Chat

    Realtime channels, DMs, @mentions, threads

  • Notifications

    User inbox with real-time SignalR push

  • Webhooks

    Tenant subscriptions, HMAC-signed payloads

  • Billing

    Subscription plans and usage metering

  • Catalog

    Products, categories, images

  • Tickets

    Support tickets and conversations

04·Under the hood

First-party Microsoft. Best-in-class OSS.

No proprietary framework. No DSL. No magic. The same .NET 10, EF Core 10, Aspire 13, and OSS libraries your team already knows — chosen carefully and wired together so they actually compose.

  • .NET 10

    C# latest · net10.0 LTS

  • Aspire

    13.3 · orchestration

  • EF Core

    10.0.8 · PostgreSQL 17

  • Mediator

    3.0 · source generator

  • FluentValidation

    12.1 · request validation

  • Hangfire

    1.8 · background jobs

  • Valkey

    8 · distributed cache

  • Serilog

    4.x · structured logs

  • OpenTelemetry

    1.15 · OTLP exporter

  • Scalar

    2.14 · OpenAPI 3.1 browser

  • Finbuckle

    10.0 · multitenancy

  • React + Vite

    TS 5.7 · admin · dashboard

05·Tested to production standard

Not a demo — a tested foundation.

Nearly 1,700 automated tests ship green on every commit. Unit tests for the domain, integration tests that run against a real PostgreSQL in Docker via Testcontainers — not mocks, not in-memory fakes — and full browser end-to-end coverage of both React apps.

  • 770+

    Unit

    Domain rules, validators, and handlers — pure, isolated, millisecond-fast.

  • 660+

    Integration

    The full HTTP stack against a real PostgreSQL + Valkey in Docker, via Testcontainers. No mocks, no fakes.

  • 214

    End-to-end

    Real browser flows across both React apps — admin and dashboard — in Playwright.

  • 49

    Architecture

    Module boundaries and conventions enforced by NetArchTest — they can’t silently regress.

dotnet-starter-kit — tests CI passing
$ dotnet test
  ⟳  Testcontainers — postgres:17 · valkey  ready
  unit ........................  774 passed
  integration (real Postgres) .  661 passed
  architecture (NetArchTest) .   49 passed
  Passed!  1,484 / 1,484  ·  0 failed

$ npx playwright test
  e2e — admin + dashboard .....  214 passed
  all green ✓
06·Who fullstackhero is for

It's not for everyone.

Strong defaults mean strong opinions. Here's where fullstackhero is the right answer — and where it isn't. Better to know before you clone than three weeks in.

A great fit

Clone it today if you're…

  • Teams shipping multitenant SaaS on .NET

    Tenant isolation is the default, not a bolt-on. Finbuckle + a global query filter + tenant-aware cache, jobs, and outbox are wired through every layer.

  • Teams that want Vertical Slice + sane defaults

    One feature lives in one folder — endpoint, handler, validator, tests. No layered ceremony, no jumping between five projects to add a button.

  • Indie devs and small teams shipping B2B apps

    Auth, observability, background jobs, distributed cache, and two React frontends are already wired up. Day one is feature work.

  • Founders who want to own their code

    MIT licence; no runtime framework you can't walk away from. Standard ASP.NET Core, plain DI, and best-in-class OSS — everything your team already knows.

Reach for something else

Skip it if any of these match…

  • Tiny CRUD apps with one entity and one user

    Over-engineered for hello-world. If you don't need multitenancy or modules, a plain `dotnet new webapi` is a better start — there's less to delete.

  • Teams with a deep Clean-Architecture investment

    fullstackhero is Vertical Slice inside each module, not the layered four-project structure. If your team is committed to that layout, a dedicated Clean Architecture template will feel more natural.

  • Microservices-from-day-one architectures

    FSH is a modular monolith — modules can be extracted into services later, but they ship as one process. Need distributed services on day one? A microservices-oriented start fits better.

  • Teams who need paid vendor support

    FSH is community-maintained — no SLA, no enterprise hotline. If you need contracts and named support, a commercially-backed framework with paid support will serve you better.

07·Frequently asked

The questions developers actually ask.

Honest answers to what we get asked the most. If your question isn't here, open a discussion on GitHub.

  • Q.01

    Is fullstackhero really 100% free?

    Yes. The whole repository is MIT-licensed end-to-end — backend, both React apps, all ten modules, all deployment templates. There is no paid tier, no premium module, no commercial license, and no telemetry phoning home. Use it for a hobby project or for a venture-backed company; the licence is the same.

  • Q.02

    How production-ready is it?

    The kit is at 10.0.0-rc.1 with around 1,500 [Fact]/[Theory] backend tests across unit, integration and architecture suites — the integration suite runs against a real PostgreSQL in Docker via Testcontainers — plus 200+ Playwright end-to-end tests across both React apps, all passing on every build. It uses only first-party Microsoft and best-in-class OSS libraries (EF Core 10, Hangfire 1.8, Finbuckle 10, Mediator 3, FluentValidation 12, OpenTelemetry 1.15) — no bespoke runtime framework you'd be locked into. v10 ships when the remaining release-candidate items are closed.

    Read the testing strategy
  • Q.03

    Do I have to use all ten modules?

    No. Each module is its own project and registers itself through the IModule contract. Delete the ones you don't need from the moduleAssemblies array in Program.cs and remove the project from the solution — the rest of the kit keeps working. Cross-module communication only happens through *.Contracts assemblies, so removing a module never breaks another.

    Module composition guide
  • Q.04

    Can I use it to build a multi-tenant SaaS?

    Yes — multitenancy is the default, not an add-on. Tenant isolation is enforced on every entity through an EF Core global query filter; entities opt in by inheriting BaseEntity or marking IHasTenant. System-wide rows (plans, impersonation grants, outbox messages) opt out by implementing IGlobalEntity. Caching, background jobs, and the outbox pattern are all tenant-aware.

    How multitenancy is wired
  • Q.05

    How do I deploy it?

    Two paths. For development, .NET Aspire orchestrates everything with a single dotnet run command. For production, deploy/docker/docker-compose.yml ships a complete stack (PostgreSQL, Valkey, MinIO, API, Admin, Dashboard, DbMigrator) you can stand up on a single host. Each service is also a normal Docker image you can ship to Kubernetes, Azure App Service, AWS ECS, or anywhere else.

    Deployment guide
  • Q.06

    How do I receive updates after I clone it?

    fullstackhero is a copy-and-own starter, not a runtime dependency. You take the snapshot you cloned and evolve it however you want. Pull individual fixes from upstream when you want to; cherry-pick patches; or freeze your fork and never look back. There is no upstream package you have to keep upgrading.

    Browse the changelog
  • Q.07

    How does it scale as my product grows?

    It scales the way a modular monolith scales. Each module is a separate project with its own DbContext and HTTP boundary, talking to the rest only through its Contracts assembly. When a module hits a true horizontal-scaling need, you extract it into its own service without rewriting the consumers — the contract is already the contract. Until then you ship one process, one deploy, one set of logs, which is faster for most teams than running ten services from day one.

    Architecture deep-dive
  • Q.08

    Can I deploy it to Azure, AWS, or Kubernetes?

    Yes. The API, DbMigrator, admin and dashboard apps each ship as a normal Docker image — they don't depend on any orchestrator. deploy/docker/docker-compose.yml runs everything on a single VM; the same images run on Azure App Service, AWS ECS / App Runner, Google Cloud Run, or any Kubernetes cluster. PostgreSQL, Valkey, and MinIO are off-the-shelf — swap them for managed services (Azure Postgres, AWS ElastiCache, S3) when you're ready.

    Cloud deployment recipes
08·Ready to build

Start where you'd finish.

Skip the plumbing. Clone the repo, run one command, and start building the part of your app no one else can build for you.

$ clone the starter kit

git clone https://github.com/fullstackhero/dotnet-starter-kit.git

≈ 5 min from clone to localhost

  • v10
  • ·
  • MIT licensed
  • ·
  • .NET 10 / C# 14
  • ·
  • Free & open source