# ardalis/verticalcleanmodularmicroservices architecture

> Architecture diagram of the GitHub repository ardalis/verticalcleanmodularmicroservices, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ardalis/verticalcleanmodularmicroservices
- Repository: https://github.com/ardalis/verticalcleanmodularmicroservices

## Overview

This repository is a set of runnable .NET examples showing one order-management domain evolving across architectural styles—not one application spanning all four stages. The main workflow is a user accessing product and cart/order features through an API; later examples separate use cases and infrastructure, then divide capabilities into modules or independently deployable services. The README documents the architecture progression and major capabilities. Source excerpts show startup endpoint registration and product-query behavior, but not most runtime wiring, especially in the modular and microservice examples.

Main entry points: [`03-ModularMonolith/src/Nimble.Modulith.Web/Program.cs`](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/03-ModularMonolith/src/Nimble.Modulith.Web/Program.cs) (Module host), [`01-VerticalSlice/src/OrderDemo.Api/Program.cs`](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/01-VerticalSlice/src/OrderDemo.Api/Program.cs) (API startup), [`04-Microservices/src/Nimble.Modulith.Web/Program.cs`](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/04-Microservices/src/Nimble.Modulith.Web/Program.cs) (Service host), [`02-CleanArchitecture/src/OrderDemo.CleanArch.Web/Program.cs`](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Web/Program.cs) (Web endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_vertical["Vertical Slice"]
  node_vs_api["API startup<br/>[Program.cs]"]
  node_vs_products["Product features<br/>[ProductFeature]"]
  node_vs_cart["Cart features<br/>[CartFeature]"]
  node_vs_orders["Order queries<br/>[OrderFeature]"]
  node_vs_data[("EF data<br/>[AppDbContext.cs]")]
end

subgraph group_clean["Clean Architecture"]
  node_clean_web["Web endpoints<br/>[Program.cs]"]
  node_clean_usecases["Use cases"]
  node_clean_core["Domain aggregates"]
  node_clean_infra["Data and email"]
  node_clean_db[("Application database<br/>[AppDbContext.cs]")]
end

subgraph group_modular["Modular Monolith"]
  node_module_web["Module host<br/>[Program.cs]"]
  node_customers["Customers and orders"]
  node_products["Product catalog"]
  node_users["Identity and users"]
  node_email["Email module"]
  node_reporting["Reporting module"]
end

subgraph group_micro["Microservices"]
  node_micro_host["Service host<br/>[Program.cs]"]
  node_micro_customers["Customer service"]
  node_micro_products["Product service"]
  node_micro_email["Email service<br/>[Program.cs]"]
  node_micro_reporting["Reporting service"]
end

subgraph group_cleanvertical["Clean Vertical"]
  node_cv_web["Web features"]
  node_cv_usecases["Use cases"]
  node_cv_data[("Data infrastructure")]
end

node_user(("Shopper"))

node_user -->|"uses"| node_vs_api
node_vs_api -->|"maps endpoints"| node_vs_products
node_vs_api -->|"maps endpoints"| node_vs_cart
node_vs_api -->|"maps endpoint"| node_vs_orders
node_vs_api -->|"registers context"| node_vs_data
node_vs_api -->|"evolves to"| node_clean_web
node_clean_web -.->|"separates concerns"| node_clean_usecases
node_clean_usecases -.->|"uses domain"| node_clean_core
node_clean_infra -.->|"implements persistence"| node_clean_db
node_clean_web -->|"evolves to"| node_module_web
node_module_web -.->|"hosts modules"| node_customers
node_module_web -.->|"hosts modules"| node_products
node_module_web -.->|"hosts modules"| node_users
node_module_web -.->|"hosts modules"| node_email
node_module_web -.->|"hosts modules"| node_reporting
node_module_web -->|"evolves to"| node_micro_host
node_micro_host -.->|"orchestrates services"| node_micro_customers
node_micro_host -.->|"orchestrates services"| node_micro_products
node_micro_host -.->|"orchestrates services"| node_micro_email
node_micro_host -.->|"orchestrates services"| node_micro_reporting
node_clean_web -.->|"alternative organization"| node_cv_web
node_cv_web -.->|"separates use cases"| node_cv_usecases
node_cv_usecases -.->|"queries through service"| node_cv_data

click node_vs_api "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/01-VerticalSlice/src/OrderDemo.Api/Program.cs"
click node_vs_products "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/ProductFeature"
click node_vs_cart "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/CartFeature"
click node_vs_orders "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/OrderFeature"
click node_vs_data "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/01-VerticalSlice/src/OrderDemo.Api/Data/AppDbContext.cs"
click node_clean_web "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Web/Program.cs"
click node_clean_usecases "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.UseCases"
click node_clean_core "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Core"
click node_clean_infra "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure"
click node_clean_db "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure/Data/AppDbContext.cs"
click node_module_web "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/03-ModularMonolith/src/Nimble.Modulith.Web/Program.cs"
click node_customers "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Customers"
click node_products "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Products"
click node_users "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Users"
click node_email "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Email"
click node_reporting "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Reporting"
click node_micro_host "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/04-Microservices/src/Nimble.Modulith.Web/Program.cs"
click node_micro_customers "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Customers"
click node_micro_products "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Products"
click node_micro_email "https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/04-Microservices/src/Nimble.Modulith.Email.Web/Program.cs"
click node_micro_reporting "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Reporting"
click node_cv_web "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.Web"
click node_cv_usecases "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.UseCases"
click node_cv_data "https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.Infrastructure"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_vs_api,node_vs_products,node_vs_cart,node_vs_orders,node_vs_data toneBlue
class node_clean_web,node_clean_usecases,node_clean_core,node_clean_infra,node_clean_db toneAmber
class node_module_web,node_customers,node_products,node_users,node_email,node_reporting toneMint
class node_micro_host,node_micro_customers,node_micro_products,node_micro_email,node_micro_reporting toneRose
class node_cv_web,node_cv_usecases,node_cv_data,node_user toneIndigo
```

## Components

### Vertical Slice

- [API startup](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/01-VerticalSlice/src/OrderDemo.Api/Program.cs): `01-VerticalSlice/src/OrderDemo.Api/Program.cs`
- [Product features](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/ProductFeature): `01-VerticalSlice/src/OrderDemo.Api/ProductFeature`
- [Cart features](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/CartFeature): `01-VerticalSlice/src/OrderDemo.Api/CartFeature`
- [Order queries](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/01-VerticalSlice/src/OrderDemo.Api/OrderFeature): `01-VerticalSlice/src/OrderDemo.Api/OrderFeature`
- [EF data](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/01-VerticalSlice/src/OrderDemo.Api/Data/AppDbContext.cs): `01-VerticalSlice/src/OrderDemo.Api/Data/AppDbContext.cs`

### Clean Architecture

- [Web endpoints](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Web/Program.cs): `02-CleanArchitecture/src/OrderDemo.CleanArch.Web/Program.cs`
- [Use cases](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.UseCases): `02-CleanArchitecture/src/OrderDemo.CleanArch.UseCases`
- [Domain aggregates](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Core): `02-CleanArchitecture/src/OrderDemo.CleanArch.Core`
- [Data and email](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure): `02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure`
- [Application database](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure/Data/AppDbContext.cs): `02-CleanArchitecture/src/OrderDemo.CleanArch.Infrastructure/Data/AppDbContext.cs`

### Modular Monolith

- [Module host](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/03-ModularMonolith/src/Nimble.Modulith.Web/Program.cs): `03-ModularMonolith/src/Nimble.Modulith.Web/Program.cs`
- [Customers and orders](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Customers): `03-ModularMonolith/src/Nimble.Modulith.Customers`
- [Product catalog](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Products): `03-ModularMonolith/src/Nimble.Modulith.Products`
- [Identity and users](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Users): `03-ModularMonolith/src/Nimble.Modulith.Users`
- [Email module](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Email): `03-ModularMonolith/src/Nimble.Modulith.Email`
- [Reporting module](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/03-ModularMonolith/src/Nimble.Modulith.Reporting): `03-ModularMonolith/src/Nimble.Modulith.Reporting`

### Microservices

- [Service host](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/04-Microservices/src/Nimble.Modulith.Web/Program.cs): `04-Microservices/src/Nimble.Modulith.Web/Program.cs`
- [Customer service](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Customers): `04-Microservices/src/Nimble.Modulith.Customers`
- [Product service](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Products): `04-Microservices/src/Nimble.Modulith.Products`
- [Email service](https://github.com/ardalis/verticalcleanmodularmicroservices/blob/main/04-Microservices/src/Nimble.Modulith.Email.Web/Program.cs): `04-Microservices/src/Nimble.Modulith.Email.Web/Program.cs`
- [Reporting service](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/04-Microservices/src/Nimble.Modulith.Reporting): `04-Microservices/src/Nimble.Modulith.Reporting`

### Clean Vertical

- [Web features](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.Web): `05-CleanVertical/src/OrderDemo.CleanArch.Web`
- [Use cases](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.UseCases): `05-CleanVertical/src/OrderDemo.CleanArch.UseCases`
- [Data infrastructure](https://github.com/ardalis/verticalcleanmodularmicroservices/tree/main/05-CleanVertical/src/OrderDemo.CleanArch.Infrastructure): `05-CleanVertical/src/OrderDemo.CleanArch.Infrastructure`

### Other components

- **Shopper**

## Connections

- Shopper → API startup: uses (evidence: `README.md`)
- API startup → Product features: maps endpoints (evidence: `01-VerticalSlice/src/OrderDemo.Api/Program.cs`)
- API startup → Cart features: maps endpoints (evidence: `01-VerticalSlice/src/OrderDemo.Api/Program.cs`)
- API startup → Order queries: maps endpoint (evidence: `01-VerticalSlice/src/OrderDemo.Api/Program.cs`)
- API startup → EF data: registers context (evidence: `01-VerticalSlice/src/OrderDemo.Api/Program.cs`)
- API startup → Web endpoints: evolves to (evidence: `README.md`)
- Web endpoints → Use cases: separates concerns
- Use cases → Domain aggregates: uses domain
- Data and email → Application database: implements persistence
- Web endpoints → Module host: evolves to (evidence: `README.md`)
- Module host → Customers and orders: hosts modules
- Module host → Product catalog: hosts modules
- Module host → Identity and users: hosts modules
- Module host → Email module: hosts modules
- Module host → Reporting module: hosts modules
- Module host → Service host: evolves to (evidence: `README.md`)
- Service host → Customer service: orchestrates services
- Service host → Product service: orchestrates services
- Service host → Email service: orchestrates services
- Service host → Reporting service: orchestrates services
- Web endpoints → Web features: alternative organization
- Web features → Use cases: separates use cases
- Use cases → Data infrastructure: queries through service
