This release is a pre-release and may not be stable for production use.
ferric
A quantum chemistry engine written in Rust, with Python bindings and a TOML-driven command line. libint2 supplies the integrals and libxc the functionals.
Documentation: https://matthew.thegoldeys.com/ferric/
Install
pip install ferric # Linux x86_64, CPython 3.10–3.13
The wheel needs no compiler. To change ferric itself or to use MPI, build from source; see Installation.
| Platform | Wheel on PyPI | Source build |
|---|---|---|
Linux x86_64 (manylinux_2_28), CPython 3.10–3.13 |
yes | yes, the only tested platform |
| Linux aarch64 | no | not tested |
| macOS (x86_64, arm64) | not yet (wanted; no wheel is built) | not tested |
| Windows | no | not supported |
Each release also publishes an sdist, but it is not a self-contained build:
it compiles only where libint2 (2.13.1 or the 2.7.2 export the wheels use),
OpenBLAS/LAPACK, libxc, Eigen3 and a Rust toolchain are already installed
(LIBINT2_PREFIX points at libint2).
pip install on a platform without a wheel falls back to the sdist and fails
without them. Details:
Installation.
Starting with 0.1.0rc8, each GitHub release
also carries a large-libint wheel per CPython
(ferric-<version>-1largeam-cp3NN-...whl): the same version and commit,
built against conda-forge's libint2 2.13.1 (l = 7 shells, analytic 3- and
2-centre second derivatives, G12/F12 integrals) instead of the PyPI wheel's
smaller libint2. It is not a strict superset (the PyPI wheel goes higher in
one-electron second derivatives), and RI Hessians do not need it. ferric.build_info()["libint_max_am"]
shows which one is loaded. Details:
Installation.
A first calculation
import ferric
water = ferric.Molecule.from_xyz_string(
"""3
water
O 0.000000 0.000000 0.117790
H 0.000000 0.755453 -0.471161
H 0.000000 -0.755453 -0.471161
""",
0,
1,
) # charge, multiplicity
rhf = ferric.run_rhf(water, ferric.BasisSet.bundled("sto-3g"))
print(rhf.converged, f"{rhf.energy:.10f}") # True -74.9631468000
The same calculation from the command line (ferric is installed with the
wheel):
# water-rhf.toml
[molecule]
xyz = "water.xyz"
[basis]
name = "sto-3g"
[method]
kind = "rhf"
printf '3\nwater\nO 0.000000 0.000000 0.117790\nH 0.000000 0.755453 -0.471161\nH 0.000000 -0.755453 -0.471161\n' > water.xyz
OPENBLAS_NUM_THREADS=1 ferric water-rhf.toml
Continue with Your first calculation and the Sharp bits.
What it does
| Family | Examples | Page |
|---|---|---|
| SCF and DFT | RHF/UHF/ROHF, RKS/UKS/ROKS via libxc (LDA to meta-GGA, range-separated hybrids, VV10, D3(BJ)), analytic gradients, optimization, frequencies (analytic Hessian for RHF/UHF/ROHF and closed-shell KS LDA/GGA; finite differences otherwise), PCM/COSMO solvation | SCF and DFT |
| MP2 family | RI-MP2, attenuated MP2, SCS-MP2 and SCS-MP2(2terfc), OO-MP2, Laplace and SOS-MP2, MP3, local MP2, MP2-V | The MP2 family |
| Coupled cluster | CCD, CCSD, CCSD(T), LinLCCD, double hybrids | Coupled cluster |
| Response | PDEP-RPA, GW (G0W0, COHSEX, evGW), BSE-TDA, TDDFT/TDA, polarizabilities and C6 | RPA and GW |
| Constrained DFT | charge/spin constraints, electron-transfer couplings | Constrained DFT |
| Embedding | QM/MM with link atoms, smeared and polarizable charges | QM/MM |
Which of these run from the CLI, which are Python-only, and which support open shells or gradients is tabulated in Capabilities and validation.
Implemented ≠ validated. Working code is not a checked number. Each capability is graded (Proven / Smoke / Spike) against independent references on the same page. Read it before relying on a result.
Why it exists
ferric is organized around electronic response: how the density reacts to a perturbation, the object behind polarizabilities, dielectric screening and dispersion. Attenuated MP2, PDEP-RPA/GW and constrained DFT are three ways of getting that object right where standard methods get it wrong. See Electronic response.
Building from source and contributing
git clone https://github.com/mgoldey/ferric && cd ferric
scripts/install-libint.sh ~/.local/libint2-2.13.1 # prebuilt libint2, seconds
export LIBINT2_PREFIX=~/.local/libint2-2.13.1
cargo build --release
OPENBLAS_NUM_THREADS=1 ./target/release/ferric examples/water-rhf.toml
OPENBLAS_NUM_THREADS=1 cargo test --workspace
See CONTRIBUTING.md for the development loop, the Python binding tests and the push gate.
Citing
If you use ferric, cite the software (see CITATION.cff) and the papers for the methods you ran, listed in References and citing.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Third-party code
crates/ferric-integrals/shim/libecpint/ vendors libecpint
(MIT, Copyright (c) 2021 Robert A. Shaw); its license is retained at
crates/ferric-integrals/shim/libecpint/LICENSE.
ferric links against external libraries with their own licenses, notably libint2 (LGPL-3.0-or-later), libxc (MPL-2.0), OpenBLAS/LAPACK (BSD), and optionally xtb (LGPL-3.0), which govern redistribution of binaries built against them. libint2 is a required dependency, so distributing a compiled ferric binary means distributing LGPL-linked code, which carries obligations (relinking, source availability) beyond ferric's own MIT/ Apache-2.0 terms. Building from source for your own use is unaffected.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Metadata
Release files for ferric 0.1.0rc10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ferric-0.1.0rc10.tar.gz | 14.6 MB | With provenance | Details for ferric-0.1.0rc10.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| ferric-0.1.0rc10-cp313-cp313-manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64 | Details for ferric-0.1.0rc10-cp313-cp313-manylinux_2_28_x86_64.whl |
| ferric-0.1.0rc10-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details for ferric-0.1.0rc10-cp312-cp312-manylinux_2_28_x86_64.whl |
| ferric-0.1.0rc10-cp311-cp311-manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64 | Details for ferric-0.1.0rc10-cp311-cp311-manylinux_2_28_x86_64.whl |
| ferric-0.1.0rc10-cp310-cp310-manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64 | Details for ferric-0.1.0rc10-cp310-cp310-manylinux_2_28_x86_64.whl |
Total release size: 425.5 MB
Release files / ferric-0.1.0rc10.tar.gz
| Download URL | ferric-0.1.0rc10.tar.gz |
|---|---|
| Size | 14.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
41260b7b91ae656e193886ec89b80550fee655c2c4ac3288218cdeb8e3703e5d
|
|
BLAKE2b-256 checksum How to use checksums |
68f1ebba4a0bef15a95bcfa7e92105c6fc1626645f23f717f3b8f3ba9eb6ed65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / ferric-0.1.0rc10-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | ferric-0.1.0rc10-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 102.7 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4360880f7fa74e388b9d55dfa72f7f7ff2bc3e92757a66eff5d1635c81f8dba1
|
|
BLAKE2b-256 checksum How to use checksums |
e180d9a651f6e6ffcad392650790a9ce61d554664994566f041977227874b168
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / ferric-0.1.0rc10-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | ferric-0.1.0rc10-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 102.7 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d86820a90ba7de756a336957e8086f9542bad1da93d176f1de48f5dd698f5f66
|
|
BLAKE2b-256 checksum How to use checksums |
20cfa1bb0f0c7f0643f05ecc2a91466e38d8be8e55a2cc37b7b28fc7dc3c98ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / ferric-0.1.0rc10-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | ferric-0.1.0rc10-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 102.7 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b8d45a7dcbe9b2b26ad85bd3a8c132687f90aa918e65c8c70b2a7374993e2c40
|
|
BLAKE2b-256 checksum How to use checksums |
3684de85a28af159b7b82ca78a73bccec9aca4ffe05400e7009975a4963dcbba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logRelease files / ferric-0.1.0rc10-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | ferric-0.1.0rc10-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 102.7 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
525999caf92db631a6473b1e0d067a1d60752d87316951147bbf95c8c6496b46
|
|
BLAKE2b-256 checksum How to use checksums |
4be1bb216f91b40ae7563413c32183953b393205e08c3a941f25ff1d34f549f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logSecurity for ferric 0.1.0rc10
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 5 files in this release have been uploaded with provenance metadata.
Attestation for ferric-0.1.0rc10.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.