Use this page when you are changing Mursil. Operators who only need a running stack can follow Setup.

Prerequisites

  • .NET 10 SDK
  • Docker, for PostgreSQL, Redis, and Mailpit
  • The CleanArch Pro packages named in nuget.config

The solution file is Mursil.slnx. Restore with dotnet restore Mursil.slnx.

CleanArch Pro is a NuGet dependency. Do not clone it into this repository and do not add a ProjectReference to its source.

AppHost

The Aspire orchestrator is the day-to-day contributor path:

  dotnet run --project src/Host/AppHost
  

AppHost starts PostgreSQL, Redis, Mailpit, the migrator, Mursil.Server, and Mursil.Admin. With Mursil:DevIssuer left at its local default, it also starts the development issuer. Open the Aspire dashboard from the AppHost output to see the project endpoints.

src/Host/AppHost/appsettings.json sets Configuration:Mursil:MultiTenancy to false and Configuration:Mursil:DevIssuer to true. Those are the local defaults. A published deployment turns the development issuer off and sets Identity:Authority.

The development issuer is only for this local run. It presents a sign-in form and the six roles. Choose SystemAdmin for the full admin menu. It is not the identity server a published deployment uses.

Local images

To run the published local images instead of the AppHost projects:

  cp docker/.env.example docker/.env
bash scripts/docker-local.sh
  

Fill docker/.env with local values and do not commit it. The script builds mursil-server:local, mursil-admin:local, mursil-migrator:local, and the local Postgres image, then starts Compose. It does not push images.

Host ports match the table in Setup: server 8088, admin 8089, Mailpit UI 18025, Mailpit SMTP 10259.

Tests

Run the test projects directly. dotnet test is not the reliable entry point on this SDK.

  dotnet build Mursil.slnx
dotnet run --project src/Tests/Mursil/Core/Mursil.Domain.UnitTests
dotnet run --project src/Tests/Mursil/Application/Mursil.Application.UnitTests
  

Build treats warnings as errors. Add a focused test for the behavior you change, then run the project that owns it.

What not to point at production

Leave Mursil:MultiTenancy false until one deployment serves many organizations. Leave Mailpit as the SMTP host on a workstation. Do not treat the development issuer, local certificate material, or placeholder passwords in docker/.env.example as production configuration.