Repository navigation
v2.25
Built from the sources at this tag, and published only after
verify.py passed.
| File | What it is |
|---|---|
f1.db |
The SQLite database. Open it with any SQLite client. |
f1-geometry.db |
Circuit centrelines, © OpenStreetMap contributors under ODbL 1.0. A separate file so its share-alike does not reach the rest — see below. circuit_geometry in f1.db is deliberately empty. |
f1_database.json.gz |
Full JSON export of every table. Not kept in git — it is 21 MB and regenerates in about a second with make export. |
f1_compat.json |
JSON in the original v1 key layout. |
f1-parquet.zip |
Every table as Parquet, one file each — including the four the JSON export omits for size: qualifying, practice, sprint_qualifying and pit_stops. Columnar and compressed: pandas, polars and DuckDB read it directly. |
schema.sql |
The schema, commented. |
SHA256SUMS |
Digests. The build is reproducible, so you can check these by rebuilding. |
Data is CC BY-SA 4.0, except five columns of this project's own
writing, which are CC BY 4.0 (LICENSE-DATA names them), and
f1-parquet.zip carries a README.txt stating both. Circuit
geometry is © OpenStreetMap
contributors under ODbL 1.0, and ships as its own file rather
than inside f1.db or the JSON export: two databases distributed
alongside each other are a Collective Database under ODbL, so the
share-alike follows f1-geometry.db alone. Take one, take both,
and the obligation follows the file it belongs to.
See ATTRIBUTION.md.
Nobody publishes Formula One race timing under a licence that
permits passing it on, so this database holds none: laps,
stints, race_timing and race_control_messages are empty on
purpose, and everything that is here may be passed on under the
licence shown beside it. That is about the licences on offer
rather than about what anyone may lawfully do — FOM and its
licensees redistribute timing every weekend — and about race
timing: the qualifying, sprint_qualifying and practice
tables hold lap times, each driver's best lap of a session,
which F1DB publishes under CC BY 4.0.
docs/TIMING-ARCHITECTURE.md is that decision in full.
Stable links. Every asset above is also reachable at a URL
that always points at the newest release, so a script does not
need updating each time:
https://github.com/Alex-Farley/formula-1-data/releases/latest/download/f1.db
https://github.com/Alex-Farley/formula-1-data/releases/latest/download/f1-parquet.zip
Swap latest for a tag (v2.19) to pin a version instead.
The Parquet bundle is also served from the site itself:
https://lapledger.org/f1-parquet.zip
That copy is rebuilt on every deploy from the database the site
is serving, so it is never older than the pages beside it. The
release asset above is pinned to this tag; use whichever suits —
the newest data, or a version you can cite.
What's Changed
- AF-40+AF-41: article name check by constructor form and designation; body image that names the car by @Alex-Farley in #370
- AF-45+AF-46: a mark leads with the colour a team is recognised by, in two colours by @Alex-Farley in #377
- AF-47: team colour follows the rule on the driver page and /races by @Alex-Farley in #383
- AF-44: scheduled races in calendar order by @Alex-Farley in #385
- AF-42: a Commons-category route for chassis with no article, at a new 'catalogued' rung by @Alex-Farley in #388
- AF-57: a chart series wears the mark's lead, not the season's primary by @Alex-Farley in #393
- AF-51, AF-52: a car and a circuit name a constructor in its colour by @Alex-Farley in #395
- AF-53: the constructor records wear the team's colour, keyed by id by @Alex-Farley in #396
- AF-54: the homepage's last race wears its winner's team colour by @Alex-Farley in #397
- PD-20+PD-19: the photograph on the page is the photograph a link shows by @Alex-Farley in #401
- SD-19: a page's lastmod is the date of the last race it describes by @Alex-Farley in #404
- IX-30+IX-34+AX-20: where the reader lands when a page arrives by @Alex-Farley in #405
- IX-33+IX-35: one filter bar, above the first thing it moves, over two questions by @Alex-Farley in #407
- SD-01+SD-04: the documents that explain the data, and a way to answer back by @Alex-Farley in #409
- SD-20: the refresh runs daily, and now it says so by @Alex-Farley in #411
- VD-28: the stat tile ranks, and a label no longer drops its own figure by @Alex-Farley in #413
- AF-55: a season with a colour keeps it, and one without is drawn hollow by @Alex-Farley in #415
- AF-50: /seasons marks the champion's car, and the constructors' champion where it is another team by @Alex-Farley in #417
- IX-18: delete the sticky table-header rule that has never stuck by @Alex-Farley in #418
- PD-15: the driver strip fits the career, not the champion by @Alex-Farley in #419
- VD-33+AX-13: the photographs reach the constructor, season and race pages by @Alex-Farley in #421
- PD-16: every driver page opens on a sentence by @Alex-Farley in #423
- CR-07: the season in progress is written down once by @Alex-Farley in #425
- IA-18, AF-60: /now is the season being run, and a modal does not outlive its page by @Alex-Farley in #427
- IA-19, VD-30: one season, one label, on all four registers by @Alex-Farley in #430
- PD-28: the season page answers the September question by @Alex-Farley in #433
- AX-17: every table says what it holds, in both halves by @Alex-Farley in #435
- CD-04: the static half keeps the rules for reading its own numbers by @Alex-Farley in #438
- CD-03: the largest page type opens on a sentence by @Alex-Farley in #440
- VD-01: the static half is drawn in the app's own shapes by @Alex-Farley in #445
- AF-65: a discovered item is filed under Someday, not Next by @Alex-Farley in #444
- PM-44+PM-43: the queue read asks for what it uses, and a fork checks the checkout it starts in by @Alex-Farley in #454
- CR-34: every formula1.com citation names the page that holds the fact by @Alex-Farley in #455
- CR-35+CD-30: constructors.active names the declared season, and the static page derives what the app derives by @Alex-Farley in #461
- AF-43: a harvested power note that names no number is not a power figure by @Alex-Farley in #464
- AF-64: the eleven Indianapolis 500s name their car on every surface by @Alex-Farley in #466
- AF-63: a race note is held to the figure rule its page derives by @Alex-Farley in #469
- AF-61: a keypress that races a navigation is not a signal by @Alex-Farley in #473
- PM-41: a verdict that is not the first line is refused, not interpreted by @Alex-Farley in #474
- AX-06: the button's foreground is a token, because white failed on the dark fill by @Alex-Farley in #475
- AX-10: minmax(0, 1fr) on the stacked .split, because 1fr floors at min-content by @Alex-Farley in #478
- CD-17+IX-28: an emptied register says which filters did it, and offers the way back by @Alex-Farley in #479
- Critiques 2026-09-21: nine disciplines against main at dda5afb by @Alex-Farley in #511
- VD-29: a column every row agrees on is said once, above the table by @Alex-Farley in #514
- UR-05: one /about page — who publishes this, and how to tell it it is wrong by @Alex-Farley in #517
- IA-03 + IA-22: one wayfinding vocabulary, emitted by both renderers by @Alex-Farley in #518
- PD-17: what F1DB publishes about a driver, and the id it says it under by @Alex-Farley in #523
- IA-08: filters, sort and expansion in the address bar by @Alex-Farley in #525
- IX-26: every table can be taken away, as TSV or CSV by @Alex-Farley in #528
- IX-19: the handover keeps the rows the reader could already see by @Alex-Farley in #530
- CD-05: the timing position in three lengths, where each one goes by @Alex-Farley in #533
- AF-01: when a race ends, and whether it has happened yet by @Alex-Farley in #535
- DA-04: which ids a reader may keep, said where a reader can read it by @Alex-Farley in #538
- UR-07: the console shows the comment that would have prevented the query by @Alex-Farley in #541
- PD-38: the season page says who is in the cars by @Alex-Farley in #546
- CD-31: the static footer says nothing leaves the reader's browser by @Alex-Farley in #547
- PD-40+PD-48: one home page and one title function, in both renderers by @Alex-Farley in #548
- PM-48: the respawn asks for the verdict alone by @Alex-Farley in #552
- SD-24: the file the page was built from, named on the page by @Alex-Farley in #551
- SD-25: publish when the service last checked, not only when the data changed by @Alex-Farley in #553
- SD-27: a citation for the database, checked against the build by @Alex-Farley in #556
- IX-37+CD-40: serve the page the reader asked for during the boot window by @Alex-Farley in #558
- CD-36: a classification explains the blanks it has, not the ones it hasn't by @Alex-Farley in #559
- CD-37, CD-32: the em dash is for a fact nobody has established by @Alex-Farley in #561
- CD-38: a figure in database prose is a token, not a number by @Alex-Farley in #564
- VD-50, AX-25: the register draws each circuit once by @Alex-Farley in #566
- VD-51: the record, then its figure, then the footnote by @Alex-Farley in #569
- VD-52: a measure counted in characters, not in zeroes by @Alex-Farley in #571
- PM-47: the project's own writing, under CC BY 4.0 by @Alex-Farley in #574
- PD-0: count arrivals, and stop promising nothing leaves by @Alex-Farley in #577
- MEASUREMENT.md: why the Domain property, and what day zero looked like by @Alex-Farley in #579
- PD-0: the console's claim names what is not sent by @Alex-Farley in #580
- The championship table only ever goes up, and the build now knows it by @Alex-Farley in #583
- PD-47: no "Entries 0" on a race not yet run by @Alex-Farley in #585
- The reviewer records its verdict by command, not in its reply by @Alex-Farley in #587
- PD-49: the pages that open on the season being run by @Alex-Farley in #586
- DA-28: standings key the 2019-2023 Hinwil team as sauber, as the results do by @Alex-Farley in #594
- IX-20: a header that sorts says so at rest; standings and classification sort by @Alex-Farley in #596
- VD-37: a circuit page leads with its latest layout, drawn large by @Alex-Farley in #597
- IX-32+AF-08: a circuit's layout timeline and its drawings are one list by @Alex-Farley in #598
- AX-12: the result rail is hidden from assistive technology by @Alex-Farley in #599
- AX-15+AX-02: search opens on Cmd/Ctrl+K only, and the palette is a modal combobox by @Alex-Farley in #600
- AX-16: every line chart series has its own dash, echoed in the legend by @Alex-Farley in #602
- AX-21: every declared table names its rows with a row header by @Alex-Farley in #603
- AX-22: each car card is one tab stop, not two links to one page by @Alex-Farley in #604
- AF-18: a spent migration script, four unused exports and track.js go; npm run lint names the real Biome by @Alex-Farley in #606
- CR-31: the lap-topology comments name the page that reads them, not a walk by @Alex-Farley in #607
- AF-27: a green review check means the findings were posted by @Alex-Farley in #609
- VD-23: a thumbnail is one request, from the address the API gave by @Alex-Farley in #610
- IA-23+IX-41: columns a reader chooses, in ?cols=, with a phone default; and a way back from Show the remaining by @Alex-Farley in #613
- VD-03+VD-55: a type, weight and spacing scale, and a token header that describes what ships by @Alex-Farley in #616
- IA-20: search that can hold a question by @Alex-Farley in #617
- IX-25+AX-30: the SQL console answers a typo as a typo, and names its run key in words by @Alex-Farley in #619
- PM-14+DA-03: claims, and source_id on every sourced row by @Alex-Farley in #623
- IA-01: a page for every Grand Prix, and three ways in by @Alex-Farley in #627
- CD-08: the citation names the sources behind a race or a driver by @Alex-Farley in #630
- CD-09+IA-12: results codes defined, linked from every results header by @Alex-Farley in #633
- PD-43: team-mate head to head on every driver page, and /compare by @Alex-Farley in #634
- CD-16: the README opens on what the database is, not on its history by @Alex-Farley in #638
- IA-06: a curated car that is one chassis has one address by @Alex-Farley in #640
- WK-03: the weekend's limits, read season by season from 2018 by @Alex-Farley in #641
- WK-06: the records lists, read against records - 31 derivable records added by @Alex-Farley in #644
- PD-27+AX-28: every record at an address of its own, and the records leaderboards linked by @Alex-Farley in #645
- DA-01: every standings row says which round and which table (basis, after_round, driver_id/constructor_id) by @Alex-Farley in #648
- DA-02: a lineage period names its constructor - constructor_id, every entry in exactly one period by @Alex-Farley in #653
- DA-05: the reference tier's definition names the sources its rows cite by @Alex-Farley in #655
- DA-08: a classified finisher below the paid places scores 0, not NULL by @Alex-Farley in #657
- DA-09+DA-24: discrepancies names the value it is about; both registers get a key to cite by @Alex-Farley in #661
- CR-45: Opus reviews a data change first; its confirmation follows the pace by @Alex-Farley in #663
- DA-36: an entry that was not classified scores 0, not NULL by @Alex-Farley in #664
- AF-74: run the backlog loop from the repository — a manager agent and a supervisor by @Alex-Farley in #666
- AF-75: file.py decided writes the ruling into the body; file.py rank by @Alex-Farley in #668
- AF-73: remove the CI review — review.yml is deleted by @Alex-Farley in #669
- DA-31: retire standings.as_of and entity_id by @Alex-Farley in #672
- SD-22+PM-23: the licence follows every file published by @Alex-Farley in #673
- IA-28: a car that is one chassis shows the chassis's figures, and records where they differ by @Alex-Farley in #676
- PM-57: the typed career figures each cite a named source by @Alex-Farley in #678
- PD-51: the Wikipedia-cited race rows, read for PD-41's step 2 by @Alex-Farley in #681
- SD-18: draft the release notes and the first post, for the maintainer by @Alex-Farley in #682
- CR-32: delete lib/lap.js, whose only caller was its unit test by @Alex-Farley in #684
- DA-18: points_systems says which session a row is, and never 'None' by @Alex-Farley in #686
- WK-01: qualifying_formats, read from the FIA's regulations and F1's own history by @Alex-Farley in #689
- PM-17: the prose pass - every written field labelled against Wikipedia by @Alex-Farley in #691
- The refresh lands by pull request, and follows the race weekend by @Alex-Farley in #705
- Tests read the latest round off the database, not round 14 by @Alex-Farley in #690
- harvest: refresh from F1DB v2026.15.1 5487e45d by @lap-ledger-refresh[bot] in #706
- LV-03: every practice session and sprint qualifying, from F1DB by @Alex-Farley in #707
- The site serves f1.db.gz, and the raw file is the repository's (D-47) by @Alex-Farley in #708
- refresh: checked F1DB, nothing new by @lap-ledger-refresh[bot] in #709
- CR-58: a still pointer no longer takes the palette's highlight back by @Alex-Farley in #710
- The database as static JSON, under /api/v1 (D-48) by @Alex-Farley in #711
- LV-03 gaps: the checks the reviews of #707 and #710 left open by @Alex-Farley in #712
- LV-03 gaps: the warm-up and pre-qualifying, from F1DB by @Alex-Farley in #714
- v2.25: practice, sprint qualifying and the Friday drivers, and the JSON API by @Alex-Farley in #717
New Contributors
- @lap-ledger-refresh[bot] made their first contribution in #706
Full Changelog: v2.24...v2.25