Self-hosting
Run the API, MCP adapter, and ETL worker with Bun and containers.
Install and verify
bun install
bun run verifyLocal development
Run the MCP stdio adapter:
bun run dev:mcpRun REST and Streamable HTTP MCP locally:
bun run dev:apiDevelopment is anonymous on localhost. Production fails closed unless security settings and a policy-approved release are present.
Production API
NODE_ENV=production \
ERRATA_ALLOWED_HOSTS=api.example.com \
ERRATA_API_KEYS='replace-with-a-long-random-secret' \
bun run start:apiBuild the non-root API and ETL images:
docker build -t errata:0.9.1 .
docker build -f Dockerfile.worker -t errata-worker:0.9.1 .Route TLS traffic to the platform-provided PORT. Use /livez for liveness and /readyz for release-aware readiness.
Release selection
The default local runtime loads data/catalog/releases/current.json. To serve one standalone release database:
ERRATA_RELEASE_DB=/absolute/path/release.sqlite bun run start:mcpProduction should use the pointer-bound release bundle. Set ERRATA_EXPECTED_RELEASE_ID only for an intentionally frozen deployment.
Documentation app
The Fumadocs site is isolated under docs/ and uses Bun for dependency management:
cd docs
bun install
bun run build
bun run startDeploy it independently from the API so Next.js dependencies and search indexing never enter the MCP runtime image.