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:

Common supporting tables

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

Schemauser_versionExported fromPublishedFiles
v01 1 Cordelia 1.2.2-a5d308f4e3
Kent 1.2.1-8b9407de98
2026-08-31 SQL (53.7 KiB) · SHA-256 · GPG
v02 2 Cordelia 1.3.0-d947b6b8b9
Kent 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;"

See also