The Data Dictionary
The FIT format defines well over a hundred kinds of message. Cordelia stores each one it recognizes in its own table.
The core hierarchy
Most of what you care about in an activity file nests like this:
- Activity: the top-level record for a single recorded activity, such as one run or ride.
- Session: a sport segment within an activity. Most activities have exactly one session, but multi-sport activities (like a triathlon) have several.
- Lap: a subdivision of a session, created either automatically by the device (for example, one per kilometre) or manually by pressing the lap button.
- Record: the individual data points recorded at regular intervals during a session: timestamp, position, heart rate, pace, and similar values. This is usually the largest table by row count.
Common supporting tables
- Device Info: details about the recording device and any connected sensors.
- Event: discrete occurrences during an activity, such as starting, stopping, or pausing.
Beyond these, Cordelia recognizes many more specialized message types: power meters, heart-rate variability, sport-specific metrics.
The schema as SQL
Every table and index Cordelia creates, as a plain .sql file of
CREATE TABLE statements. It is the same schema this page and the
full field reference describe in prose, in a form
you can read, diff against a later version, or run straight into an empty SQLite database. A comment header records the exact Cordelia and Kent builds each dump came from. They are produced with kent sqldump
--schema-only. That command was called kent dump until Kent 1.3.0
renamed it, so v01's header reads kent dump and v02's reads
kent sqldump. Each names the command that actually wrote it, and a published
dump is never edited after it is signed.
The dump is structure only, with no rows. In particular
better_labels_definitions and better_labels_lookup are created
empty, so if you want the label lookups already populated, take one of the sport databases
from Example Cordelia Databases instead: the running
database alone carries 16,866 lookup rows. See
The better_labels Lookup Tables for what those two
tables do.
Downloads
| Schema | user_version | Exported from | Published | Files |
|---|---|---|---|---|
| v01 | 1 | Cordelia 1.2.2-a5d308f4e3Kent 1.2.1-8b9407de98 |
2026-08-31 | SQL (53.7 KiB) · SHA-256 · GPG |
| v02 | 2 | Cordelia 1.3.0-d947b6b8b9Kent 1.3.1-98e99ab624 |
2026-09-03 | SQL (53.7 KiB) · SHA-256 · GPG |
Every schema version ever published stays on this list permanently. Unlike an application download, an old schema is not something you can install by mistake, and if you hold a database written by an older Cordelia it is the only accurate description of what is inside it.
Which schema does my database use?
Cordelia stamps every database it creates with its schema version, stored in SQLite's
user_version pragma. kent info
reports it, alongside the version the Kent build itself expects. Failing that, any SQLite
client will read it:
sqlite3 mydata.sqlite "PRAGMA user_version;"