IGL

Isotope Geochemistry Language, a text format for isotopic process models



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

What IGL is

IGL is a way of writing an isotopic model as plain text. You describe the reservoirs, the species, the fractionation factors, how the reaction proceeds, and what you want to see. That description is a file, and the file is the model. IGL does not replace classic geochemistry softwares or Domain Specific Languages (DSL) such as PHREEQC. Instead, its aim is to extend their abilities. IGL is fully compatible with PHREEQC, but they are not a requirement for IGL to fully work.

Written this way, a model carries all information needed to replicate, explain and justify your isotope calculations. You can email it, use it in publication or store it for years. Without any software, the reader is able to read and understand your choices and redo all the calculation by themselves.

A model, start to finish

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

Three commands take it from there:

$ igl check model.igl
no diagnostics

$ igl build model.igl
model.iglir.json

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

That run leaves the remaining Cr(VI) at +3.212165544 permil and the Cr(III) that formed at -2.141443696. Both numbers come straight out of the Rayleigh equation, so you can check them by hand. Exact replication was one of the requirements when IGL was designed. Each exact model files must give the same result, down to the bit. Therefore, significant figures are not a decoration or a lack of rigor, they are a necessity to prove that the results are rigorously the same, which a rounded figure could not demonstrate.

What the design is trying to protect

Everything in one place

A model states its own reservoirs, its own species, its own factors, and where it stops. There is no project to reopen and no settings to restore. A file someone sends you runs. Nothing depending on the modeller's computer is stored in the IGL file. Path to the databases or to the PHREEQC binary are always stored at the engine level, which are not sharable.

Nothing quietly filled in

IGL will never guess or make asumptions. If the data provided to the model are not enough to solve a calculation, then IGL notifies you clearly. A pool that has not formed yet has no composition at all, rather than a composition of zero. Ask a database a question it answers two ways and the run stops, instead of one of the two being chosen for you. And where the software cannot do something your model asks for, it tells you rather than passing over it.

Anyone can write their own engine

What a calculation engine reads and what it writes are both described in public documents, kept separate from the language and from this implementation. Someone who wants to build their own engine works from those documents, not from our source code, and the test suite settles whether it agrees.

Where to start