IGL

Isotope Geochemistry Language, a text format for isotopic process models



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

IGLi

The same thing with a window: edit a model, see the diagnostics underlined where they belong, run it, read the results. On the model of phreeqci beside phreeqc, installed and updated apart from the command line tool but into the same directory.

What it links and what it calls

IGLi links the front end. Lexer, parser, resolver, validator and lowering all run in its own process, because a diagnostic has to appear where it belongs while a model is being typed, and the only way to place one is to hold the span the front end produced. Shelling out and parsing rendered text would mean recovering byte offsets from file:line:column, which is the same information with the precision removed.

It does not link the engine. Executing runs igl run as a subprocess, for four reasons that are not interchangeable: a chemistry backend can hang and a subprocess can be killed; the published contract becomes true rather than asserted; a results file records which engine computed it, and a linked engine would have to report the editor instead; and executing is a discrete act, so the cost of a process is beside the point.

What it shows

  • Syntax colouring taken from the compiler's own lexer, so a highlighter cannot disagree with the parser about what a token is.
  • Diagnostics underlined in place, with the explanation and the worked examples from the same registry igl explain reads.
  • A block reference generated from the schema at run time, with an insert button that writes a skeleton carrying only the required statements.
  • A results table and a plot, with a selectable horizontal axis: against time, or against the fraction reacted, which is how a distillation is read.
  • The engine it found and its version, in the status bar. An engine nobody rebuilt reports the previous numbers without saying so, and naming it is the cheapest way to notice.

Chemistry

A PHREEQC executable and a thermodynamic database can be pointed at from the Chemistry window, and are passed to the engine as environment variables rather than written into any model. Which chemistry is installed and where is a property of a machine; a model carrying it would stop running the moment it was sent to somebody else.