Skip to content
AtomliAtomli

Lightweight. Fast.

DFT, tight binding, and machine learning potentials (MLIP) all in one place.Try on web ↗
Caffeine · 24 atoms

Caffeine benchmarks

24 atoms · energy + forces

Benchmarks ↗

Apple M4 Max · CPU

DFT qc.rs ↗

PBE / def2-SVP

9.1× faster

vs PySCF

Time
Atomli1.70 s
PySCF15.5 s
Peak RSS90% less memory
Atomli394 MiB
PySCF3.87 GiB

Tight binding ctb.rs ↗

GFN2-xTB

3× faster

vs tblite

Time
Atomli3.89 ms
tblite11.7 ms
Peak RSS
Atomli86.6 MiB
tblite85.2 MiB

MLIP mlip.rs ↗

Nequix MP-1 PFT

1.7× faster

vs Nequix / JAX

Time
Atomli7.78 ms
Nequix / JAX12.8 ms
Peak RSS78% less memory
Atomli172 MiB
Nequix / JAX793 MiB

DFT / MLIP: Atomli 0.1.4 · xTB: Atomli 0.1.6 · development build, 2026-09-20 · DFT / xTB: 8 threads · MLIP: 1 thread

NVIDIA A100 · 40 GB

DFT qc.rs ↗

PBE / def2-SVP

1.3× faster

vs GPU4PySCF

Time
Atomli717 ms
GPU4PySCF927 ms
Peak RSS46% less memory
Atomli657 MiB
GPU4PySCF1.19 GiB

DFT qc.rs ↗

r²SCAN / def2-SVP

1.7× faster

vs GPU4PySCF

Time
Atomli710 ms
GPU4PySCF1.22 s
Peak RSS36% less memory
Atomli782 MiB
GPU4PySCF1.19 GiB

MLIP mlip.rs ↗

Nequix MP-1 PFT

2.7× faster

vs Nequix / JAX

Time
Atomli3.28 ms
Nequix / JAX9.01 ms
Peak RSS77% less memory
Atomli398 MiB
Nequix / JAX1.69 GiB

DFT: Atomli 0.1.5 · development build, 8 host threads · MLIP: Atomli 0.1.4, 1 host thread

Caffeine relaxation

Terminal window
pip install atomli

caffeine.xyz ↓

Tutorial
relax.py
from atomli.io import read
from atomli.calculators import XTB
from atomli.optimize import BFGS
atoms = read("caffeine.xyz")
atoms.calc = XTB(method="gfn2")
BFGS(atoms).run(fmax=0.05)
print(atoms.get_potential_energy())

Use Atomli calculators with ase.Atoms, or assign an ASE calculator to atomli.Atoms. Read the compatibility guide before you migrate a workflow.

Python boundary units are angstrom, electronvolt, and femtosecond. See units for conversions and calculator guides for supported properties.