World regulation as a git repository.
OpenRegs turns published regulation into structured, machine-readable obligations, kept in git. Every amendment lands as a diff you can subscribe to. Every obligation quotes the provision it was read out of, and can be mapped to the control that discharges it. Your systems — and the agents acting for them — read it over REST or MCP and answer with citations somebody can check.
Where this stands today. The machinery is built and runs. The law is not loaded yet: one regime exists and it is a synthetic fixture, deliberately about nothing. Everything below describes the engine, not a corpus you could query for an answer about your own obligations. Which regimes are named, and what state each is in.
Regulatory change is tracked in spreadsheets, by people reading PDFs
Not because anyone thinks that is a good idea. Because the law is published as prose, and prose is the only form anybody has been given. Everything expensive about compliance follows from that one fact.
From a regulator's PDF to an answer you can defend
Six stages, each handing a checked result to the next. Every one of them leaves a trace, which is what makes the last one — the answer your agent gives — something an auditor can follow back to source.
1. Ingestion
Take the regulator's own document
Watchers poll the official publishers — EUR-Lex, legislation.gov.uk, the eCFR, national gazettes — and keep the exact bytes they published, filed under the fingerprint of those bytes. Nothing downstream can quietly differ from what was fetched.
2. Consolidation
Apply the amendments, date by date
Regulators publish a base act and then amend it. The engine applies those amendments in order to reconstruct what the text actually said on any given day, and records which amending instrument produced each change.
3. Atomization
Turn duties into records a system can act on
A model proposes small records — who must do what, under which conditions — each quoting its provision word for word. The model proposes; it never decides. A human maintainer reviews and merges every one.
4. Canon
Keep it in the open, under review
Texts, duties and the cross-reference graph live in git, where every change is attributable and every change is checked: schemas, provenance, permanent identifiers, graph integrity.
5. Release
Publish a dated, signed edition
The reviewed corpus is compiled into dated artifacts and signed, with provenance attached — and with the diff against the release before it, so what changed travels inside the thing that changed. The same corpus commit always builds the same bytes, so a release can be reproduced and checked rather than taken on trust.
6. Serving
Answer, with the receipt attached
A REST API and an MCP server answer against one pinned release, always returning citations — and verify signatures and provenance before serving anything. The same release runs inside your own network, giving the same answers.
Every change lands as a diff you can subscribe to
A corpus somebody has to remember to re-read is a corpus that goes stale. What a team needs is to be told, where they already work, that something they depend on has moved — and to be stopped from adopting it unexamined.
A notification is not evidence. The signature on a delivery proves the messenger held your secret — not that the law says anything — so the second half of a subscriber's handler pulls the release and verifies it before a byte of it is used.
All three are commands in the open engine, run by whoever publishes a release. There is no feed of ours you can point a subscriber at today, and what these have to announce is a fixture.
From “here is the law” to “here is what we do about it”
An obligation is only useful once somebody has said which control discharges it. OpenRegs specifies that mapping as a file — one entry per obligation, pinned to one release — and ships the commands that read it. The mapping is yours and stays in your repository; the format is part of the open spec, so a mapping can be validated, reviewed and diffed like any other file, and shared if you want to share it.
- One entry says one of exactly two things: a control covers this duty, or it does not apply here and here is the reason. An entry that means anything else is rejected.
openregs coveragereports every duty that binds your entity profile on a date as mapped, waived or unmapped — and applicability comes from the release, so a duty an in-force derogation disapplies is reported as such, with the derogating provision cited.- Mapped plus waived plus unmapped equals applicable, by construction. A gap cannot be rounded away, and every gap is listed individually with its citation.
- The report is JSON and one self-contained HTML file — no stylesheet, script or font fetched — stamped with the release tag, the commit, the as-of date and when it was generated.
openregs impactintersects a release move with the same file and exits non-zero when a duty one of your controls discharges has changed substantively.
openregs coverage --entity-profile operator --as-of 2025-06-01
3 applicable: 1 mapped, 1 waived, 1 unmapped
fixreg@2025.04 · Fixture Bank plc
- FIXREG-Art5.3-Ob1mappedCTRL-INC-014
- FIXREG-Art5.2-Ob1waivednot applicable, with rationale
- FIXREG-Art5a-Ob1unmappeddesignate a compliance contact
Real output, over the fixture regime — twelve synthetic articles about nothing, and the consuming repository the test suite runs this against. It is what the report looks like, not what your obligations are.
Built to be checked, not trusted
Compliance and litigation risk does not come from an agent being wrong once. It comes from nobody being able to tell. These are the properties that make the difference.
Which law, and when
One regime is loaded, and it is a fixture
Everything above describes machinery that exists and runs. This is the corpus it runs over, stated so that no reader has to guess. Evaluating OpenRegs today means evaluating the machinery, not the content.
- FIXREG — the fixture regimeIn the corpus
- Fixture Regulation (EU) 2024/1: twelve synthetic articles, an amending act that moves a reporting threshold, and one deliberate coverage gap. It is the corpus the test suite asserts against, and it is about nothing. It stays in the engine repository permanently.
- MiFID II, DORA, the AML directives, Basel as the CRR enacts itNamed, not started
- The acts OpenRegs is being built to carry first, because that is where change is fastest and the cost of missing one is highest. Not one of them has been captured, parsed, reviewed or published. There is no date, and nothing on this site should be read as saying otherwise.
- The UK, and the US CFRPlanned
- legislation.gov.uk and the eCFR are two of the four publishers the ingestion adapters already target, each with its own mapper and golden fixtures. Targeting a publisher is not the same as holding a corpus: no UK or US instrument has been reviewed into one.
- Regulation outside financial servicesSame engine
- Financial regulation is the entry point, not the boundary. A regime is texts, obligations and a cross-reference graph; the adapters read EUR-Lex, legislation.gov.uk, the eCFR and gazette PDFs, which publish all law rather than one sector, and no term in the schemas or the entity taxonomy names an industry.
- Shared mappings to common control frameworksNot published
- The mapping format is part of the open spec and the tooling reads any file written in it, so mappings can be maintained and published in the open the way the corpus is. None has been. Today a mapping is one firm's file, in one firm's repository.
Read the engine before you trust the answers.
The pipeline, the schemas, the checks and the fixture corpus are all public. That is the argument: you do not have to take our word for how an answer was produced.
Self-hosting needs nothing you cannot get under an open licence.