Data and API
Every figure on this site is compiled from JSON in the repository and served as static files. Those files are public, so the dataset is an API: fetch it, join it, redraw it.
This build
Compiled Sep 7, 2026 from commit 8b6b7c0.
52 projects, 3 countries, 2 cities.
Endpoints
Relative to this site's origin. A path in braces is one file per record; the manifest lists every id.
| Path | Contents | Schema |
|---|---|---|
/data/projects.json | Every project with its sections: dates, lengths, costs, funding, contractors and sources. The schema describes one entry of the projects array. | project.schema.json |
/data/countries.json | Area and population per country, behind the density figures. | countries.schema.json |
/data/cities.json | Cities that have their own view: population, GDP per person, map centre. | cities.schema.json |
/data/contractors.json | Canonical contractor identities: the aliases that collapse to one firm, and joint-venture membership. | none published |
/data/deflators.json | Consumer price indices, used to restate a cost into another price year within its own currency. | deflators.schema.json |
/data/deflators-construction.json | The same shape on construction input costs: a closer fit for civil works, covering fewer currencies and stopping earlier. | deflators.schema.json |
/data/fx.json | Annual average exchange rates against the euro, applied after deflation and never before. | fx.schema.json |
/data/geo/manifest.json | Which countries, cities and projects have geometry files, plus the build stamp. | none published |
/data/geo/countries.geojson | Country outlines, the map's click targets. Natural Earth, public domain. | none published |
/data/geo/cities.geojson | One point per city, with its project and section counts. | none published |
/data/geo/{country}.geojsonODbL | Every section in one country, one feature each, carrying the properties the map styles and filters on. | none published |
/data/geo/cities/{city}.geojsonODbL | The same for one city's network, which is kept out of the country file. | none published |
/data/geo/projects/{project}.geojsonODbL | One project's sections on their own, for embedding a single route. | none published |
CSV
The two league tables as CSV, carrying the same figures the performance page shows and ids you can join on.
Schemas
JSON Schema for the hand-written source files, generated from the zod definitions by npm run data:schema. Point an editor at one and it validates while you type.
Licence and attribution
The route geometry is derived from OpenStreetMap and is licensed ODbL. Reusing it means keeping the attribution and releasing derived geometry on the same terms. The endpoints it covers are marked ODbL above.
/data/geo/{country}.geojson/data/geo/cities/{city}.geojson/data/geo/projects/{project}.geojson
© OpenStreetMap contributors · ODbL
The compiled tables carry the licences of their own sources, which every file names in its sources block. Each project cites its own on its page.
Stability
These are build artifacts, regenerated on every deploy. Field names follow the schema and change with it, and nothing is versioned yet, so pin the commit above if you need a shape that holds still.