Getting started
A contributor can run Mursil and open the admin portal without cloning Kayan. A published deployment still needs a real OIDC authority.
Prerequisites: .NET SDK 10, Docker, and the CleanArch Pro NuGet packages on the feeds in nuget.config. The local feed is cleanarch-pro/.local-packages.
Docker Compose
cp docker/.env.example docker/.env
bash scripts/docker-local.sh
On Windows, ./scripts/docker-local.ps1. Do not commit docker/.env.
The script builds local images and starts Mailpit, the dev issuer, the migrator, Server, and Admin. It does not push an image.
| Surface | Address |
|---|---|
| Server health | http://localhost:8088/health |
| Admin | https://localhost:8089/ |
| Dev issuer | https://dev-issuer:8443/ |
| Mailpit UI | http://localhost:18025/ |
| Mailpit SMTP | localhost:10259 |
| Postgres | localhost:54329 |
| Redis | localhost:63799 |
Add 127.0.0.1 dev-issuer to the hosts file so the browser can reach the issuer.
Aspire AppHost
dotnet run --project src/Host/AppHost
AppHost starts PostgreSQL, Redis, Mailpit, the one-shot migrator, the dev issuer, Server, and Admin. Its local appsettings.json sets Mursil:DevIssuer true. The Aspire dashboard shows the running projects. The admin URL in an Aspire session is the port AppHost assigns. The portal screenshots in Admin portal were taken against https://localhost:7006 in that kind of session. Compose uses https://localhost:8089/.
Demo login
The dev issuer has one user and no directory.
| Item | Value |
|---|---|
| User | demo |
| Password | demo |
| Roles | Any of the six. SystemAdmin opens the dashboard. |
| Audience | mursil-api |
| Admin client | mursil-admin-panel |
This password exists only inside the local issuer. A published process does not start that issuer.
Local mail
Mailpit receives SMTP. No account is required. AppHost and the Docker scripts point Email:Smtp at that container. Captured mail is not proof of inbox placement. SendGrid stays optional. The live SendGrid smoke test skips unless MURSIL_SENDGRID_API_KEY and the smoke addresses are set.
Tests
Run the test projects directly. dotnet test is unreliable on this SDK and Microsoft Testing Platform combination.
dotnet build Mursil.slnx
dotnet run --project src/Tests/Mursil/Core/Mursil.Domain.UnitTests
dotnet run --project src/Tests/Mursil/Application/Mursil.Application.UnitTests
Warnings are errors. Do not suppress them.
Switch the same process to a real authority
Set Mursil:DevIssuer to false, or MURSIL_DEV_ISSUER=false in docker/.env, and set:
Identity:AuthorityorIDENTITY_AUTHORITYIdentity:ClientSecretorIDENTITY_CLIENT_SECRETIdentity:Audienceasmursil-api
Admin still refuses to start without the client secret. Server validates JWTs against the authority. Leaving the authority empty does not reopen the dev issuer.