Re-exported directly from Postgres (10.0.0.116), not Atlas's introspection, which under-reported the roster (its v3 export had 11,473, missing the restored Florida League of Cities municipal set). Live DB current tenures: state 7,561 · municipal 4,009 · county 1,217 · federal 542. - build.py now reads officeholders-v3.jsonl (was v2); dataset vintage 2026-07-04 - fixed one corrupt start_date at source-export (21021-12-03 -> 2021-12-03, Lorraine Borowski, Mayor of Decorah IA) - scripts/build_viz.py: committed, deterministic generator for the Board's county_data.json / county_detail.json (previously built ad-hoc) - generate_changelog.py: ignore files whose only change is the vintage stamp, so the diff reflects government change, not re-export bookkeeping Person files 11,285 -> 13,329. Non-FL municipal officials (1,903) are in the tree but not yet county-mappable (place->county crosswalk still NULL). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Republic OS
An open, version-controlled mirror of public power in the United States.
Government is already software: statutes are code, agencies are processes, elections change the maintainers, and a bill is a pull request against the law. What government has never had is a changelog. This repository is that changelog.
The diff is the product. Every file here mirrors the observable public state of a government entity as a deterministic, sourced, human-readable record. When government changes, the files change, and git makes the change visible, permanent, and inspectable.
What's in here today
17,506 entity files, every one schema-validated:
| Entity | Count | What it is |
|---|---|---|
| Person | 11,285 | Current officeholders — federal, all 50 state legislatures, and Florida down to the municipal level. Federal members carry their bioguide ID, leadership roles, and committee seats. |
| Body | 233 | The institutions themselves — the U.S. House, the Senate, 49 committees, 181 subcommittees, each with its leadership. |
| Candidate | 2,494 | Everyone running for federal office in 2026, from FEC filings. |
| Jurisdiction | 3,494 | Every U.S. county (3,131) and 363 congressional districts, each carrying Census demographics — the nationwide skeleton, filled with data. |
The mirror answers, with receipts: who holds power, who runs the institution, who's running, and what each place is made of — and, through git, what changed.
How it works
raw source exports deterministic build validated tree
data/*.jsonl ──► scripts/build.py ──► data/jurisdictions/**
(committed as-is) (7 inputs, one pass) (OKF markdown + YAML)
- Format — Markdown with YAML frontmatter, OKF-conformant, validated by JSON Schema in
/schemas. Human-readable in any editor or on GitHub; machine-readable by any agent. - Deterministic —
make buildtwice yields a byte-identical tree. Entity files change only when the government changes, so every diff is signal. - Sourced — every record carries field-level provenance and a confidence level. This repo is a mirror, never the authority; official sources remain the source of truth.
- Raw-first — source exports land in
data/*.jsonluntouched before any transformation, so the origin is always recoverable.
Commands
make build # regenerate the entity tree from the raw exports
make validate # OKF + schema + link-integrity checks on all 17,506 files
make changelog # what changed in the government since the last commit
make check # build, then validate — the full gate
Everything runs on the Python standard library. No dependencies to install.
Documentation
- Government as Code — the philosophy: why git, and what its primitives mean for government
- Data Model — entity types, IDs, the file format, the jurisdiction tree
- Sources — where every fact comes from, and how current it is
- Roadmap — what exists, what's next
- Contributing — the disciplines, and how to add a source
- Technical Brief — Government as Software — the founding document
- CHANGELOG.md — the civic changelog, generated from git history
The disciplines
Three rules govern everything here, and they are won by subtraction:
- Never overwrite — a change is a new commit, not a clobbered file. Deletes are diffs.
- Never rewrite history — no force-push, no squash. The past is load-bearing.
- Always push off-box — one copy is a single point of failure; more is not.
Substrate for influence.tools.