Skip to main content

Technology Stack

The platform chooses technologies at clear responsibility boundaries. A technology's presence does not transfer business ownership to infrastructure: OpenFGA is not the policy administrator, OPA is not the identity provider, and RabbitMQ is not a system of record.

LayerTechnologyArchitectural useStatus
ServicesGo 1.25, chi-compatible net/http, OpenAPIGateway, control, data, agent, and worker servicesImplemented
Public APIsHTTPS, REST/JSON, SSE, JSON-LD, NGSI-LD, OGC APIsClient and standards-facing contractsPartially implemented
Internal APIsgRPC, Protocol BuffersTyped service-to-service callsIn development
IdentityKeycloak 26.x, OIDC, OAuth 2.0, PKCE, client credentials, RFC 8693User/application/workload/agent authentication and token exchangePartially implemented
Relationship authorizationOpenFGAOwnership, membership, groups, grants, delegated agent relationshipsPartially implemented
Contextual authorizationOpen Policy Agent (OPA), Rego bundlesAttribute/context rules, platform guardrails, typed obligation selectionPlanned
Relational dataPostgreSQLService-owned domain state, outboxes, audit, sessionsImplemented
Spatial dataPostgreSQL + PostGISOGC collections, features, CQL2/CRS/spatial queriesImplemented
Search and temporal dataElasticsearchCatalogue discovery and NGSI-LD query indexesImplemented
Cache/hot stateRedisCaches, rate counters, sessions, token vault, approvals, denylist mirrorImplemented with durability gaps by use
MessagingRabbitMQ/AMQPVersioned domain facts, authorization projection, audit, notifications, jobsPartially implemented
Object storageS3-compatible APIs, MinIO in local developmentFiles, attachments, COGs, derived artifactsImplemented
Agent protocolModel Context Protocol (Streamable HTTP)Tool discovery and governed invocationImplemented locally
LLM adaptersProvider interface; Anthropic and deterministic mock implementationsAgent planning only; never authorizationPartially implemented
Runtime platformdx-common-go/platformBootstrap, configuration, HTTP/gRPC, persistence, cache, events, identity, health, resiliencePartially implemented
ContainersDistroless/non-root images, Docker ComposeReproducible services and local integrationImplemented
OrchestrationKubernetes, Helm, ArgoCD ApplicationSetsDeclarative deployment, scaling, rollout, topology selectionIn development
SecretsExternal Secrets Operator plus a deployment secret managerWorkload, database, broker, payment, object-store, and model-provider credentialsIn development
ObservabilityPrometheus, OpenTelemetry, structured logging; Grafana-compatible backendsMetrics, traces, logs, health, alertingPartially implemented
FederationMutual TLS, dynamic trust store, signed/encrypted envelopesCross-operator boundaryDeferred

Selection principles

  • Prefer open, versioned interfaces at external boundaries and typed contracts between services we own.
  • Keep specialized query semantics specialized: Elasticsearch and PostGIS do not sit behind a lowest-common-denominator search abstraction.
  • Keep stateful correctness in the owning service/database; caches and brokers accelerate or distribute facts.
  • Keep policy engines behind the composite authorization contract so PEPs do not integrate with OpenFGA or OPA directly.
  • Introduce optional infrastructure only when a feature gate selects the capability and its failure behavior is documented.

For developer-facing package and repository detail, see Shared Go Platform.