Architecture at a glance

Three services, a handful of shared packages, one rigorously-enforced dependency direction. The canonical long-form description lives in docs/ARCHITECTURE; this page is the sketch.

The map

The interactive explorer is the most productive way to look around:

Open the interactive explorer → Read the written doc

ASR — Associatie Register

Governs who can participate. Two core aggregates:

Issues the BVAD (Bewijs van Associatie-Deelname) to connectors against RFC 7523 client assertions, signs the trustlist for the association, and performs RFC 8693 token exchange with federated peer associations.

ORS — Orkestratie Register

Governs what happens in a logistics chain. Aggregate:

Issues the BVOD (Bewijs van Orkestratie-Deelname) scoped to (context, subject connector) and pushes events to subscribed connectors via Valkey Streams.

CON — BDI Connector

Runs alongside each member's application. Full token verification pipeline on inbound, backoff-based delivery on outbound, a reverse proxy for legacy upstreams, and pluggable PDP adapters (Cedar / OPA / Keycloak-Authz).

Shared packages

PackageResponsibility
@bdi/kernelResult, branded types, EUID/LEI/VAT/KvK parsers, JWK & thumbprint helpers.
@bdi/contractsWire schemas for BVAD, BVOD, trustlist, member descriptor.
@bdi/cryptoBDI JWS profile, RFC 7523 verifier, key generation, HSM/PKCS#11/step-ca.
@bdi/crypto-caRFC 8555 ACME server + client, CSR parser, X.509 issuer, OCSP, CRL.
@bdi/identityKeycloak OIDC verifier, eHerkenning SAML broker, AuthnPort.
@bdi/eventsTyped events, Valkey Streams consumer, rate limiter, scheduler.
@bdi/policyPDP port + embedded Cedar-like engine + external adapters.
@bdi/configEnv parsing, *_FILE secrets, SIGHUP hot-reload, migrations, RLS, YAML.
@bdi/observabilityStructured logs, metrics registry, trace context, OTLP exporter.
@bdi/openapiOpenAPI 3.1 document builder used by scripts/generate-openapi.ts.

Data plane vs. trust plane

The interactive explorer draws these as three horizontal bands:

Tokens issued in the trust plane (BVAD) and orchestration plane (BVOD) are what the data plane verifies. This keeps the runtime data plane ignorant of identity providers and registries — it only needs the ASR's trustlist and the ORS's public keys.