IGL

Isotope Geochemistry Language, a text format for isotopic process models



Describes IGL 0.5. Page revision 1.0, 2026-07-31.

What IGL is

IGL is a plain text language for describing isotopic processes: reservoirs, fractionation factors, kinetics, and the model that runs over them. A model is one file. It is readable without the software that produced it, it survives in version control, and it means the same thing to every conforming engine.

IGL is a specification first. The igl toolchain is the reference implementation, not the definition. Anyone may write another one, and the conformance suite exists to settle the question of whether they did.

A complete model

TITLE
    Chromium reduction in a closed system

META
    author "Colin Ferrari"
    language 0.5

STANDARD
    standard NIST-SRM-979 0.11339 ratio 53Cr/52Cr

ISOTOPES
    ratio 53Cr/52Cr standard NIST-SRM-979

SPECIES
    species Cr(VI)
    species Cr(III)

RESERVOIR Groundwater
    volume 1 L
    Cr(VI) 1 umol/kgw
    delta53Cr 0 permil

PROCESS Reduction
    type reduction
    reactant Cr(VI)
    product Cr(III)
    location Groundwater
    extent 0.6

FRACTIONATION Reduction
    isotope 53Cr/52Cr
    epsilon -3.5

MODEL Closed
    progress extent
    processes [ Reduction ]

OUTPUT
    variable Groundwater.Cr(VI).delta53Cr
    variable Groundwater.Cr(III).delta53Cr
$ igl check model.igl
no diagnostics

$ igl build model.igl
model.iglir.json

$ igl run model.iglir.json
model.results.json

The residual composition of that run is +3.212165544 permil and the cumulative product is -2.141443696. Both follow from the closed form of Rayleigh distillation, which is why the model above is also a test: an engine that disagrees with those digits is wrong, and the disagreement can be traced without arbitration.

Three properties the design is built around

One file, no project

A model carries its own reservoirs, its own species, its own factors and its own stopping condition. There is no workspace to reconstruct and no database connection to restore. A file mailed to a reviewer runs.

An absence is visible

A value that could be plausible and wrong is left out instead. A composition that does not exist yet is absent rather than zero, a database that answers a query two ways is an error rather than a choice, and a construct this implementation does not read says so. The alternative is a results file that is correct for a model nobody wrote.

The boundary is published

What an engine consumes is a model.iglir.json and what it produces is a results.json. Both are specified and versioned independently of the language, so a second implementation can be written against a document rather than against this one's source.

Where to start