System architecture
ariada is a seven-stop EAA-2025 compliance pipeline plus a
TypeScript scanner runtime stack, distributed as separately
versioned @ariada-org/* npm packages and a reusable
GitHub Actions workflow. This page enumerates every component, its
classification bucket, and its license — the same inventory
cited in our NLnet
Commons Fund proposal and the CRA
Article 24 Open Source Steward declaration.
74% of the combined 35-component inventory ships under an open-source license (16 open-source + 6 HYBRID commodity-outer surfaces = 22 OSS-touching components out of 30 non-RETIRE rows; the remaining 8 are server-side operational surface or proprietary closed cores). The full architectural specification lives in docs/PLATFORM_SPEC.md in the public repository.
System diagram
Three buckets, colour-coded. Green is published under an OSI-approved license. Amber ships a substantial OSS commodity-outer surface with the proprietary algorithmic core retained closed. Red is closed by deployment (multi-tenant operational services and trademark-bound assets) or by deliberate proprietary reservation.
OSS surface — EUPL-1.2 / MIT / CC0-1.0 (16 modules)
wcag-rules-extended— EUPL-1.2eaa-pipeline— EUPL-1.2 (also CI differential gate outer surface)statement-generator— EUPL-1.2penalty-estimator— EUPL-1.2evidence-emitter— EUPL-1.2core-engine— EUPL-1.2core-browser— EUPL-1.2core-playwright— EUPL-1.2cli— EUPL-1.2design-plugin-scaffolds— EUPL-1.2L0-mindset-framework— EUPL-1.2 + CC-BY-4.0- Anti-overlay explainer — CC-BY-4.0
brand-tokens— MITembed-badge— MITdracula-agent— MITtest-fixtures— EUPL-1.2 + CC0-1.0
HYBRID — EUPL-1.2 outer + closed inner (6 modules)
- AI authorship attribution (outer: classification schema + reference implementation; inner: classifier weights)
- Multi-domain scanner (outer: single-domain via
wcag-rules-extended; inner: multi-standard orchestrator) - Scan-flow visualisation (outer:
scan-flow-uibase; inner: character renderer) - HAES ledger (outer: event-ledger schema; inner: canonical registry + Merkle anchor)
- CI differential gate (outer:
eaa-pipelinereusable workflow; inner: differential threshold semantics + baseline diff) - Regulatory-context MCP server — full OSS, no closed inner
Closed — deployment or proprietary reservation (6 surfaces)
- Hosted multi-tenant SaaS dashboard — closed by deployment
- Multi-tenant ops layer (SSO / SCIM / row-level security) — closed by deployment
- Hosted Certificate Authority (Ed25519 signing) — closed by deployment
- HAES Merkle anchor + AIAS canonical registry — closed by deployment
- Tiered LLM remediation cascade and predictive backlog optimiser — closed by deployment
- Cross-tool canonical scoring and cross-deployment regression detection — closed by deployment
Mermaid source (copy into mermaid.live or any Mermaid-aware viewer)
flowchart TB
subgraph OSS["OSS surface (EUPL-1.2 / MIT / CC0-1.0)"]
rules[wcag-rules-extended — EUPL-1.2]
pipeline[eaa-pipeline — EUPL-1.2]
statement[statement-generator — EUPL-1.2]
penalty[penalty-estimator — EUPL-1.2]
evidence[evidence-emitter — EUPL-1.2]
engine[core-engine — EUPL-1.2]
browser[core-browser — EUPL-1.2]
playwright[core-playwright — EUPL-1.2]
cli[cli — EUPL-1.2]
scanflow[scan-flow-ui — EUPL-1.2]
tokens[brand-tokens — MIT]
badge[embed-badge — MIT]
fixtures[test-fixtures — CC0-1.0]
end
subgraph HYBRID["HYBRID (OSS outer + closed inner)"]
aiAuthorship[AI authorship attribution]
haesLedger[HAES ledger]
multiDomain[Multi-domain scanner]
ciGate[CI differential gate]
draculaViz[Dracula scan-flow visualisation]
mcpServer[Regulatory-context MCP server]
end
subgraph CLOSED["Closed (proprietary core + hosted ops)"]
llmCascade[Tiered LLM remediation cascade]
backlogOpt[Predictive backlog optimiser]
regressionDetect[Cross-deployment regression detection]
canonicalScoring[Cross-tool canonical scoring]
SaaS[Hosted SaaS dashboard]
HAES[HAES Merkle anchor]
end Component matrix
Every component, its classification bucket, its license, its
shipped/in-flight status, and a one-line purpose. The full
per-component design contract lives in
docs/PLATFORM_SPEC.md §3-§4.
| Component | Bucket | License | Status | Purpose |
|---|---|---|---|---|
wcag-rules-extended | open-source | EUPL-1.2 | shipped | 31 WCAG 2.2 AA rules + EAA-gap pack |
eaa-pipeline | open-source (also CI differential gate outer surface) | EUPL-1.2 | shipped | Reusable GitHub Actions workflow |
statement-generator | open-source | EUPL-1.2 | shipped | EN 301 549 art. 7 statement generator |
penalty-estimator | open-source | EUPL-1.2 | shipped (11 jurisdictions) | Per-jurisdiction administrative-fine estimator |
evidence-emitter | open-source | EUPL-1.2 | shipped | VPAT 2.5 INT + EN 301 549 JSON bundle |
core-engine | open-source | EUPL-1.2 | Wave 2 publish | TypeScript scanner orchestration core |
core-browser | open-source | EUPL-1.2 | Wave 2 publish | DOM adapter for Chrome/Edge extension |
core-playwright | open-source | EUPL-1.2 | Wave 2 publish | Node + Chrome DevTools Protocol adapter |
cli | open-source | EUPL-1.2 | Wave 2 publish | Command-line runner wrapping the scanner runtime |
design-plugin-scaffolds | open-source | EUPL-1.2 | Wave 2 publish | Figma / UXP / Sketch plugin scaffolds |
| L0-mindset-framework | open-source | EUPL-1.2 (code) + CC-BY-4.0 (prose) | Wave 1 publish | 10-rule architect-tier accessible-design framework |
| Anti-overlay explainer | open-source | CC-BY-4.0 | Wave 1 publish | Public-interest explainer on overlay-product risk |
brand-tokens | open-source | MIT | Wave 1 publish | Zero-runtime CSS design tokens (no logo files) |
embed-badge | open-source | MIT | Wave 3 publish (post-trademark) | Web Component for embedding scan badges |
dracula-agent | open-source | MIT | Wave 2 publish | Commodity viz helpers for the Dracula scan agent |
test-fixtures | open-source | EUPL-1.2 (code) + CC0-1.0 (HTML corpus) | shipped | EAA-paired HTML fixture corpus + snapshots |
| AI authorship attribution | HYBRID | EUPL-1.2 outer + Proprietary inner | Wave 2 publish | Outer: classification spec + JSON schema. Inner: classifier weights |
| Multi-domain scanner | HYBRID | EUPL-1.2 outer + Proprietary inner | Wave 2 publish | Outer: single-domain via wcag-rules-extended. Inner: multi-standard orchestrator |
| Dracula scan-flow visualisation | HYBRID | EUPL-1.2 outer + Proprietary inner | HOLD pending viz validation | Outer: scan-flow-ui base. Inner: character renderer |
| HAES ledger | HYBRID | EUPL-1.2 outer + Proprietary inner | Wave 2 publish | Outer: append-only event-ledger schema. Inner: canonical AIAS registry + Merkle anchor |
| CI differential gate | HYBRID | EUPL-1.2 outer + Proprietary inner | shipped (outer) | Outer: eaa-pipeline reusable workflow. Inner: differential AI-vs-human thresholds + baseline diff |
| Regulatory-context MCP server | HYBRID (full OSS) | EUPL-1.2 | Wave 1 scaffold | Planned expansion: EAA / EN 301 549 / national-transposition lookup over Model Context Protocol |
| Tiered LLM remediation cascade | Closed (hosted service) | Proprietary | not on OSS roadmap | Cascade routing for source-level pull-request generation |
| Predictive backlog optimiser | Closed (methodology on arXiv) | Proprietary; methodology on arXiv | not on OSS roadmap | Mixed-integer-programming + ML backlog scheduler |
| Cross-tool canonical scoring | Proprietary (closed) | Proprietary | not on OSS roadmap | Cross-tool score normaliser; hosted service component |
| Cross-deployment regression detection | Proprietary (closed) | Proprietary | not on OSS roadmap | Canonical rule registry + rule-provenance graph; hosted service component |
| Hosted SaaS dashboard + multi-tenant ops | Closed (deployment) | Proprietary | operational | Multi-tenant ops (PostgreSQL row-level-security, SSO, SCIM, audit-log export) |
| Hosted Certificate Authority | Closed (deployment) | Proprietary | operational | Ed25519 signing + revocation lists for conformance certs |
Pipeline flow
The canonical user flow runs five stages. Every stage is independently usable — a downstream team may stop after any stage. The contracts between stages are file-on-disk artefacts, not in-process imports, so the pipeline degrades gracefully when one stage is held back a release.
- Scan (owner: you, OSS scanner)
core-engineorchestrateswcag-rules-extendedagainst your built site, via thecore-browserextension or thecore-playwrightNode adapter. - CI gate (owner: you, OSS reusable workflow)
eaa-pipelinewraps the scan and downstream stages as a singleuses:line. Fails the pull request on new violations. The differential-gate threshold semantics are part of the CI differential gate closed inner surface. - Evidence (owner: you, OSS bundler)
evidence-emitterwrites the VPAT 2.5 INT report, the EN 301 549 JSON conformance record, and a CycloneDX SBOM of the scanner itself. - Statement (owner: you, OSS generator)
statement-generatorproduces the EN 301 549 art. 7 accessibility statement, deterministic and byte-identical across runs. - Penalty estimate (owner: you, OSS data package)
penalty-estimatorcomputes per-jurisdiction administrative-fine exposure ranges. 11 EU member states at v0.1; 27 EU + 3 EEA at Wave 4.
Optional hosted stages — the certificate authority, the HAES Merkle anchor evidence ledger, and the AI authorship attribution classifier — are proprietary and closed by deployment. Self-hosting adopters run the full OSS pipeline without these.
OSS surface percentage
Counting the 35-component combined inventory (22 baseline v2.1 architecture-review rows + 13 competitive-gap rows; excluding the one RETIRE row):
- 22 OSS-touching components — 16 open-source + 6 HYBRID
- 74% OSS surface on the combined inventory
- ~73% on the 22-row architecture baseline alone
For comparison against the mainstream open-core anchor band:
- GitLab Community Edition — ~70% OSS surface (MIT base, enterprise extensions closed)
- PostHog — ~100% OSS surface (MIT base, hosted Cloud extensions only)
- Sentry — ~95% OSS surface (Functional Source License server + MIT SDKs)
- Mattermost — ~85% OSS surface (MIT client SDKs + AGPL-3.0 Team Edition)
- Deque (axe-core) — ~5% explicit OSS surface (single rules engine MPL-2.0; remainder operations / Pro IGTs / Worldspace SaaS)
ariada at 74% sits inside the GitLab / Sentry / PostHog / Mattermost open-core leader band and exceeds the typical accessibility-vendor OSS surface by an order of magnitude. The classification was confirmed by maintainer direction after a multi-day review across three candidate scenarios, weighing the rationale and rejection reasoning for each alternative.
CRA Open Source Steward declaration
The Cyber Resilience Act (CRA, Regulation (EU) 2024/2847) enters force progressively from 2025 with full applicability from 2027-12-11. Article 24 introduces a separate, lighter-touch regime for Open Source Stewards — legal persons (other than manufacturers) that systematically and on a sustained basis support the development of OSS products with digital elements, without monetising those products directly.
Agonist Development AB operates a dual-class CRA posture:
- Manufacturer obligations apply to the hosted SaaS surface placed on the EU market — conformity assessment, EU declaration of conformity, vulnerability handling, incident reporting under Articles 13-14.
- Open Source Steward obligations apply to the 16 open-source + 6 HYBRID OSS-surface modules — cybersecurity-policy publication, cooperation with national market-surveillance authorities, vulnerability-handling documentation appropriate to the OSS development model.
EUPL-1.2 Article 5 source-availability obligations and the project's REUSE compliance discipline (per-file SPDX headers, REUSE.toml per package, REUSE-CLI verification in CI) map cleanly onto the documentation expectations a national market-surveillance authority would place on an Open Source Steward.
Trademark notice
EUPL-1.2 Article 5 explicitly excludes trademark grant. The following wordmarks and brand assets are reserved by Agonist Development AB and are not licensed under any OSS license shipped on this site:
- Ariada — primary wordmark
- Ariadne — alternate wordmark / Ariadne-Thread logo
- Dracula — Dracula character wordmark
- Blamer, Clamper, Reverter — commercial product wordmarks
Downstream forks of any @ariada-org/* package must use a
different name; the full trademark policy modelled on
Mozilla Trademark Policy
ships in TRADEMARK.md with the first tagged release.
Related pages
- Patent status — our filed IP positions and the EUPL-1.2 Article 2 patent peace for OSS users
- License matrix — per-package SPDX identifiers + rationale
- EAA pipeline — the five-stop reusable GitHub Actions workflow
- About — maintainer and stewardship statement
Maintained by Alexander Brichkin (Agonist Development AB, Sweden, org.nr 559452-5726).