Appearance
Local stack (Aspire)
dotnet run --project src/Keel.AppHost composes the whole platform for development.
Resources
| Resource | Image / project | Port | Notes |
|---|---|---|---|
postgres + database keel | pgvector/pgvector:pg17 | dynamic | Volume keel-postgres-data; pgweb attached |
redis | Redis | dynamic | |
keycloak | quay.io/keycloak/keycloak:26.7.4 | 8080 (9000 management) | Imports deploy/keycloak/keel-realm.json: realm keel, clients keel-web (PKCE), keel-api and keel-identity-admin (the sign-up service account), one user per role (password keel), Google/Microsoft brokers (disabled), SMTP to Mailpit |
mailpit | axllent/mailpit | 8025 (UI), 1025 (SMTP) | Catches invitation, notification and sign-up emails (Keel's and Keycloak's) |
chinook-postgres | postgres:17-alpine | 5434 | Chinook sample with a read-only keel_reader |
chinook-sqlserver | SQL Server 2022 (x64) / Azure SQL Edge (arm64) | 14330 | Chinook loaded by the API's dev seed |
api | Keel.Api | 5080 | Migrates on start; seeds the demo tenant (Keel:Seed:Demo) |
worker | Keel.Worker | — | |
scheduler | Keel.Scheduler | — | |
mcp | Keel.Mcp | 5090 | |
sqlgateway | Keel.SqlGateway | 5433 | SQL interface (PostgreSQL wire protocol); no TLS in development |
web | Vite dev server | 5173 | Proxies /api to the API |
| Aspire dashboard | — | 15080 | Traces, logs, metrics; login link in the console |
Parameters
Generated once and kept in the AppHost's user secrets: keel-app-password (runtime role), keycloak-admin-password, secrets-master-key (local secret store) and samples-password (sample databases). The dashboard shows their values.
Troubleshooting
- Port already in use — the fixed ports above must be free. The sample ports avoid Windows' Hyper-V excluded ranges and a local SQL Server.
- Sign-in loops — the token issuer must be
http://localhost:8080/realms/keelfor both browser and API; don't reach Keycloak through another host name. - Keycloak realm changes don't apply — the realm is imported when the container starts; restart the AppHost.
- Windows Smart App Control blocks a freshly built DLL — rebuild, or run the tests in the Linux SDK container (
scripts/test-in-container.sh). CI is unaffected. - Audit chain shows "Modified" on an old dev database — see Upgrades.