ChemistryLab.jl
A Julia computational chemistry toolkit — formula handling, species management, stoichiometric matrices, thermodynamic databases and chemical equilibrium. Initially aimed at low-carbon cementitious materials and aqueous solutions.

ChemistryLab.jl is a computational chemistry toolkit. Although initially dedicated to low-carbon cementitious materials and aqueous solutions, its scope is wider: it provides chemical formula handling, species management, stoichiometric matrix construction, activity models, thermodynamic equilibrium and database interoperability. Developed with Anthony Soive and released under LGPL v2.1+. Part of the MicroPoroChemoMechanics ecosystem.
Key features
- Chemical formula handling — creation, conversion and display with charge management, Unicode and Phreeqc notations
- Species management —
SpeciesandCemSpeciestypes for solution and solid phases, with requalification viawith_class - Stoichiometric matrices — automatic construction for reaction and equilibrium analysis
- Database interoperability — import and merge ThermoFun (
.json) and Cemdata (.dat) data - Solid solutions — ideal (
IdealSolidSolutionModel) or non-ideal binary (RedlichKisterModel) mineral mixing phases - Activity models —
DiluteSolutionModel,HKFActivityModel(extended Debye–Hückel B-dot) andDaviesActivityModel - Chemical equilibrium — equilibrium compositions by Gibbs energy minimization (
equilibrate,ChemicalSystem,ChemicalState) - ForwardDiff compatibility — sensitivity analysis through the whole pipeline
Installation
ChemistryLab.jl is registered in Julia’s General registry:
using Pkg
Pkg.add("ChemistryLab")Solving an equilibrium requires an optimization backend, loaded on demand through a package extension — either the default Ipopt one or the Julia-native interior-point solver:
using Optimization, OptimizationIpopt # default backend
# or
using OptimaSolver # Julia-native interior-point backend