Deployment
Three supported shapes. Docker compose for solo and small-team installs. Helm for Kubernetes. Source builds for development. Pick whichever matches what you already run.
Docker compose
The bundled deploy/docker-compose.yml runs the API, the admin
UI, and a SQLite volume. Postgres, Redis, and an OTLP collector are
pre-wired and commented out for when you outgrow SQLite.
cd deploy
cp .env.example .env
docker compose up --build
- API on
:8080. - Admin UI on
:8000. - SQLite volume mounted at
/datain the API container.
Adding the chat demo
A self-contained demo (a small .NET backend plus a Vue chat UI) ships under
the demo profile. Run alongside the main stack:
docker compose --profile demo up --build
The demo UI lands on :8100.
Switching to Postgres
Uncomment the postgres service in the compose file and set:
Database__Provider=Postgres
Database__ConnectionString=Host=postgres;Database=adaptiveapi;Username=adaptiveapi;Password=...
SQLite remains the right choice for solo and small-team setups. Postgres earns its keep when you need replicas, point-in-time recovery, or shared deployments across nodes.
Adding Redis
Optional. Used for translation cache, rate limits, and route cache.
Uncomment the redis service and set Redis__ConnectionString on the API.
Helm
The chart in deploy/helm/ provisions:
- Two Deployments (API + UI), a Service each.
- An Ingress with SSE-friendly annotations.
- A Horizontal Pod Autoscaler on CPU (2 to 10 replicas).
- A Pod Disruption Budget with
minAvailable: 1. - A PVC for SQLite when you have not pointed at an external database.
helm install adaptiveapi ./deploy/helm \
--set database.provider=Postgres \
--set database.existingSecret.name=adaptiveapi-db \
--set translators.existingSecret=adaptiveapi-translators \
--set ingress.host=adaptiveapi.yourdomain.com
Full values reference and chart-specific notes live in
deploy/helm/README.md.
From source
Two terminals. The API is a .NET 10 minimal API. The admin UI is a Vue 3 Vite app.
# terminal 1: API
cd src/AdaptiveApi.Api
dotnet run --urls http://localhost:5000
# terminal 2: admin UI
cd src/AdaptiveApi.Ui
npm install
npm run dev # UI on :5173, proxies /api to :5000
Production checklist
- Run an external database. Postgres or SQL Server. SQLite is fine for one node, not for replicas.
- Enable Redis. Translation cache + rate limits + route cache. Cuts cost and tail latency.
- Front it with TLS. The Helm Ingress accepts cert-manager annotations.
- Turn on OIDC. Open dev mode is fine for local. Production needs auth on
/admin. - Wire OTLP. Set
OTEL_EXPORTER_OTLP_ENDPOINTto your collector. Spans cover the full pipeline. - Alert on integrity failures.
adaptiveapi_placeholder_integrity_failures_totalabove 0.5% means something is dropping placeholders.
Plugins
AdaptiveAPI supports an in-process plugin loader for things you do not want
in the open-source repo. Drop a DLL implementing
AdaptiveApi.Core.Plugins.IWebPlugin next to the binary, or
mount it under /app/plugins/. ConfigureServices
runs before builder.Build(), Map after.
The SaaS-only features (organisations, invites, SCIM, Stripe metered billing) are shipped this way. No compile-time coupling.