Skip to main content
The catalogue lives in public.biomarkers. Each row has a unit, the system it rolls up to, and three bands: the lab reference range, a tighter optimal range, and optional clinical alert thresholds. See Grading for how they combine.
These are common adult ranges, chosen to be defensible, not personalised. No clinician has reviewed them, and reference ranges vary between laboratories. Aletheia is a personal record, not medical advice.

Systems

The figure has 13 systems. Four of them (Neurology & Cognition, Vision & Hearing, Bone & Body Composition, Skin) have no biomarkers yet, so they stay dark for everyone.

Biomarkers

All 41 biomarkers currently in the catalogue. Each row also carries an aliases list that the importers match names against.

Thyroid

Respiratory

Cardiovascular

Liver

Kidney

Metabolic & Gut

Hormones & Prostate

Blood & Immune

Muscle & Performance

Pending changes

Two migrations are committed but not applied. Both change how a live record is graded, so applying them is a deliberate step for someone who has read the rows.

New biomarkers

20260822160000_healthkit_biomarkers.sql adds three biomarkers the iPhone can read but the catalogue has no row for:

Sex-specific bands

20260822160100_sex_aware_bands.sql adds biomarker_bands, which holds per-sex overrides. Without it, several bands are male bands with a unisex label: a healthy woman’s total testosterone grades as alert against an optimal band of 500–900 ng/dL. An override replaces the whole band for a user whose profiles.sex matches. Users who haven’t said, or who chose intersex or prefer not to say, keep the default band, which is deliberately the wider one. Every override stores its source in a source column, so each threshold can be checked. The same migration also:
  • Adds body_fat_pct (Body fat, %, default 5–31, optimal 11–28) and waist_circumference (Waist, cm, default ≤ 102, optimal ≤ 94).
  • Fixes the default band for free_testosterone. It is declared in pg/mL but was seeded with ng/dL numbers, a factor of ten too low. The default becomes 3–300, optimal 5–300.
Until these are applied, the iPhone app still reads those measurements from Health, but review lists them as unplaceable instead of proposing them.