mmcif
Correctness-first mmCIF, BinaryCIF and PDB structure IO with typed numbering, for Rust and Python.
Every residue in an mmCIF file has two addresses: the author numbering people read off papers and viewers, and the label numbering the file defines. They often disagree, and tools that keep only one put constraints and selections on the wrong residue without saying so. This project keeps both as separate types and converts between them only when you ask.
Example
Heavy chain H of antibody 12e8 numbers its CDR residues with insertion codes. Author residue H 100A is label residue B 105: the chain, the number and the insertion code all differ.
curl -O https://files.rcsb.org/download/12e8.cif
import mmcif_io
structure = mmcif_io.read("12e8.cif")
print(structure.to_label("H", 100, "A")) # ('B', 105)
use mmcif_model::{AuthResidueKey, AuthSeqId, InsCode};
let structure = mmcif_model::read("12e8.cif")?;
let key = AuthResidueKey { chain: "H".into(), seq: AuthSeqId::new(100), ins_code: InsCode::new('A') };
assert_eq!(structure.numbering().to_label(&key)?.to_string(), "B/105");
Install
pip install mmcif-io
cargo add mmcif-model
cargo install mmcif-cli
mmcif-io is the Python package, imported as mmcif_io. mmcif-model is the Rust entry point. mmcif-cli installs the mmcif command. The Rust crates and the Python package share one version number and release together.
How it differs
| mmcif | gemmi 0.7.5 | pdbtbx 0.12.0 | |
|---|---|---|---|
| Reads BinaryCIF | Yes | No | No |
| Label and author numbering | Separate types, explicit conversion | Both stored on each residue | Author only, label used when author is missing |
| Biological assemblies | Expanded, including composite operator expressions | Expanded, but skips assemblies with unrecognised details and expands only the first group of a composite expression | Not expanded |
| Languages | Rust, Python | C++, Python | Rust |
Checked on 21 October 2026 against gemmi 0.7.5 and pdbtbx 0.12.0. gemmi is the broader toolkit. This project competes on numbering, BinaryCIF and assembly correctness, not on breadth.
Correctness
Every push to main and every pull request runs 313 PDB entries through this project and gemmi: 44 picked by hand, plus the hardest entries found for each of eight cases that trip parsers up (insertion codes, alternate conformations, microheterogeneity, numbering divergence, assembly operators, branched entities, multi-character chain ids and multiple models). It compares atom counts, coordinates, occupancies, B-factors, residue keys, label numbering, entities and expanded assemblies, and compares each entry's BinaryCIF reading with its CIF reading. Any difference without a written explanation fails the build.
Every week the full corpus runs too: those entries plus 3,000 drawn at random from the PDB with a fixed seed, 3,105 in all. 3,091 agree with gemmi exactly. The other 14 differ in two ways, both explained in the comparison report: gemmi drops assemblies whose description it does not recognise and expands composite operator expressions only in part, and one integrative model gives no B-factors, which gemmi fills in as 20.0 and this project reports as missing. No entry's BinaryCIF reading differs from its CIF reading.
To check the 44 hand-picked entries:
pip install -r harness/requirements.txt
python corpus/fetch.py
python harness/run.py
To check the full corpus, a 7 GB download that takes about half an hour, and render the report:
python corpus/fetch.py --corpus corpus/full.json --set full --workers 4
python harness/run.py --corpus full
python harness/report.py
For every corpus entry, writing a parsed document and parsing it again gives the same document. The CIF tokenizer, the BinaryCIF decoder, the PDB reader and structure building are fuzzed in CI.
Design specifications
mmcif check reads a BoltzGen design specification and resolves every residue reference against the structure it names. BoltzGen addresses chains by label id, so writing the author id is an easy mistake. In 12e8, label chain H is a water chain:
error[no-polymer-residues]: chain H in 12e8.cif has no polymer residues
--> binder.yaml:6:17
|
6 | id: H
| ^ it holds HOH
= help: author chain H is label chain B; polymer chains in the file: A, B, C, D
Where an index in a specification selects a different residue under author numbering, it warns and names the author residue the index selects. It also checks that every sampled length is satisfiable and that bonds and distances are geometrically possible against the coordinates in the file.
mmcif lower spec.yaml --to boltzgen and mmcif lower spec.yaml --to rfd3 write a checked specification out for BoltzGen or RFdiffusion3. Where a backend cannot express part of a specification, such as a disulfide bond for RFdiffusion3, lowering refuses and points at the line instead of dropping it. These types and formats may change before 1.0.
Crates
| Crate | |
|---|---|
mmcif-model |
Typed structure model: hierarchy, numbering, altlocs, entities, assemblies. Start here. |
mmcif-cif |
Lossless CIF tokenizer, table layer and BinaryCIF decoder |
mmcif-ccd |
Compiled, versioned index of the Chemical Component Dictionary |
mmcif-geom |
Neighbour grid queries over atomic coordinates |
mmcif-io |
Python bindings for all of the above |
mmcif-cli |
The mmcif command |
mmcif-ir |
Design specification model: slots, determinacy, constraints |
mmcif-spec |
Design specification parser and checker |
mmcif-lower |
Lowering to BoltzGen and RFdiffusion3 |
License
MIT or Apache-2.0, at your option.
Metadata
Release files for mmcif-io 0.3.0
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 | |
|---|---|---|---|---|
| mmcif_io-0.3.0.tar.gz | 238.8 kB | With provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| mmcif_io-0.3.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| mmcif_io-0.3.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 9.8 MB
Release files / mmcif_io-0.3.0.tar.gz
| Download URL | mmcif_io-0.3.0.tar.gz |
|---|---|
| Size | 238.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6a785baa04e84d9f8f32d3c982d03a5843a04c3a9ba5b548c38a45929a35b0c
|
|
BLAKE2b-256 checksum How to use checksums |
b4dffdb260e95c4041adeb25a9c88b892a8da3bd882cf738077eb6ace3a5d4fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logRelease files / mmcif_io-0.3.0-cp310-abi3-win_amd64.whl
| Download URL | mmcif_io-0.3.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 615.5 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
2276ac6d23c3f491f271c8b34a99bb64ebb00a86e5ea2808ad285df7e57f0c4a
|
|
BLAKE2b-256 checksum How to use checksums |
cc67958d9725d3e8d63c831638d32112a70699cc2d1594ce28352e8f2be50e1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logRelease files / mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
c8b3724d9bc81d445940eaa192f783f3c9c42ea0c7c2477cdcd403e8975239c1
|
|
BLAKE2b-256 checksum How to use checksums |
6b234c471fd458ba7243a3aa4b826f97eecd688818427038350655880fc9031d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logRelease files / mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | mmcif_io-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
08c524368ab1f01bf33f31fa4e98100b21cf4d7206b75354bb56b5ecd20d6dbd
|
|
BLAKE2b-256 checksum How to use checksums |
4bba5cf973d361ffbaa44c3b48efc908f9ba8d3e3023d068c8feed6708164f07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logRelease files / mmcif_io-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | mmcif_io-0.3.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 765.2 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
dff9dcce2c0a98e802fcbec4cc8cb25ba172561d9c79f0841f39f36f88840d51
|
|
BLAKE2b-256 checksum How to use checksums |
aeb551eac5c0ea7b0440a5f015939e990cfb4d53b4507401d977afcd23a10e73
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logSecurity for mmcif-io 0.3.0
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 mmcif_io-0.3.0.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 Oct 23, 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.