| Go 1.26 for control-plane services |
One toolchain for the gateway, operator, workers, feature gateway, storage proxy, serving manager, trace proxy and CLI |
go 1.26.0 and toolchain go1.26.10 in platform/go/go.mod; golang:1.26.10-alpine builder images |
| Python 3.11 or later for ML-facing code |
The SDK, agent runtime, pipeline runner and workbench share one interpreter line; the optional NOOA adapter needs a separate Python 3.12 or 3.13 image |
requires-python = ">=3.11" in sdk-python/pyproject.toml; python:3.11-slim base images |
| No frontend build step |
The console, landing page, login, workspace, blog and editorial pages are plain HTML, CSS and JavaScript embedded in the gateway binary with go:embed; libraries are vendored browser builds |
platform/go/cmd/gateway/web/; decision 0001 and decision 0002 |
| Open-source components only |
Kionga bundles and integrates only open-source engines; specific proprietary ML operations products are excluded by name |
The platform CI step "Enforce architecture exclusions" fails on a match; make -C platform verify runs the same scan |
| Runs on one Docker host |
The complete local stack must start from one Compose file, without Kubernetes |
deploy/compose.yaml |
| Runs on Kubernetes for isolation |
Per-user workspaces and distributed team workloads need Kubernetes; the operator and CRDs exist only on that path |
deploy/helm/kionga, deploy/config/crd/ |
| PostgreSQL 16 with pgvector |
One database engine backs control-plane state, the outbox, MLflow, Langfuse, agent checkpoints and vector memory |
pgvector/pgvector:pg16 in Compose and in the platform CI service container |
| Kafka through an HTTP REST proxy |
Python services and the Go workers talk to Kafka over HTTP (Karapace, Confluent v2 compatible), so they need no native Kafka client |
kafka-rest service in deploy/compose.yaml; KAFKA_REST_URL |
| Immutable images on servers and clusters |
The single-server installer and the Helm chart refuse images that are not pinned by sha256 digest |
deploy/vm/up.py; test_chart_refuses_unpinned_default_images in deploy/tests/test_production_deploy.py |
| Private container registry |
Kionga's images on ghcr.io/kiongahq are private packages, so every pull needs credentials |
Decision 0009 |