Skip to content

Operate / Local stack (Aspire)

Local stack (Aspire) ​

dotnet run --project src/Keel.AppHost composes the whole platform for development.

Resources ​

ResourceImage / projectPortNotes
postgres + database keelpgvector/pgvector:pg17dynamicVolume keel-postgres-data; pgweb attached
redisRedisdynamic
keycloakquay.io/keycloak/keycloak:26.7.48080 (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
mailpitaxllent/mailpit8025 (UI), 1025 (SMTP)Catches invitation, notification and sign-up emails (Keel's and Keycloak's)
chinook-postgrespostgres:17-alpine5434Chinook sample with a read-only keel_reader
chinook-sqlserverSQL Server 2022 (x64) / Azure SQL Edge (arm64)14330Chinook loaded by the API's dev seed
apiKeel.Api5080Migrates on start; seeds the demo tenant (Keel:Seed:Demo)
workerKeel.Worker—
schedulerKeel.Scheduler—
mcpKeel.Mcp5090
sqlgatewayKeel.SqlGateway5433SQL interface (PostgreSQL wire protocol); no TLS in development
webVite dev server5173Proxies /api to the API
Aspire dashboard—15080Traces, 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/keel for 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.

Anchor Keel is a working product name: one platform, a shared core and licensed modules (Keel Semantic, Keel Migrate). Documentation built from the repository — facts are derived from code, ADRs and the decisions log.