# matminer: a featurizer and dataset layer for materials informatics

> matminer is a Python library that turns crystal structures and compositions into numeric descriptors and pulls community datasets through one interface. Its value is breadth and citation hygiene, not speed, and the licence is not identified in the repository metadata.

**hackingmaterials/matminer** — Data mining for materials science

- Repository: https://github.com/hackingmaterials/matminer
- Website: https://hackingmaterials.github.io/matminer/
- Stars: 617 · Forks: 217
- Language: HTML
- License: NOASSERTION
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/hackingmaterials-matminer

## The gap matminer fills between a crystal structure and a feature matrix

A structure file describes atoms, lattice vectors and symmetry. A machine learning estimator wants a fixed-length vector of numbers. The distance between those two representations is where most materials informatics projects lose time, because every group writes its own descriptor code, and the definitions drift between papers. matminer occupies that gap. The README describes it as a library for performing data mining in the field of materials science, and the surrounding material shows two distinct jobs bundled together: converting materials objects into descriptors, and retrieving community datasets through a common interface. The intended user is a researcher or engineer who already has structures or compositions in a Python workflow and needs numerical inputs for a model. It is not aimed at someone who wants a pretrained predictor, and it is not a replacement for a framework such as automatminer, which the README lists as a related package rather than part of this one.

## Featurizers, dataset retrieval and the citations() contract

The architecture visible in the README is organised around two object families. Featurizers take a materials object and return descriptors; data retrieval classes fetch datasets. Both families expose a citations() method. For featurizers, the README states that every featurizer has this function; for retrieval classes, the method returns a list of BibTeX-formatted citations. That is a deliberate design decision, and it is the most interesting thing about the package. Descriptor definitions in this field come from individual papers, and a library that ships the descriptor without shipping the reference makes correct attribution harder. matminer pushes the reference into the API surface, so a user can programmatically collect the bibliography for whatever they actually ran. The README also points users to dataset metadata for the original dataset citations, which implies the retrieval layer is a wrapper over sources maintained elsewhere rather than a single curated store. The repository's primary language is reported as HTML, which is consistent with a project whose documentation site and notebooks make up a large share of the tree; the library itself is Python, and the README states support for Python 3.11 and above.

## Installing matminer and the version floor you have to respect

The README gives the Python requirement directly: matminer supports Python 3.11+. There is no pip command, conda command or environment file quoted in the supplied material, so the installation invocation is not something I can reproduce here without guessing. What can be confirmed is the release cadence: v0.10.0 and its release candidate landed on 2026-01-22, and v0.10.1 followed on 2026-04-14, with the default branch receiving commits as recently as 2026-09-07. That pattern matters for pinning. A project that ships point releases within a few months of each other will occasionally change descriptor behaviour, and a materials model trained on a feature matrix is sensitive to exactly that. Pin the version in your environment file and record it alongside any published result. The README also directs users to a separate examples repository and a support forum at matsci.org, which is where usage questions are meant to go rather than the issue tracker.

## Where matminer is the wrong tool

The README's own framing is a limitation. It says matminer helps users apply methods and data sets developed by the community, and asks users to cite the original sources in addition to matminer itself. That is honest, and it also means the package is a conduit. If a dataset you need is not wrapped by a retrieval class, matminer does not help you get it. If a descriptor you need is not implemented as a featurizer, you are writing it yourself, and the citations() machinery does nothing for you. The second limitation is scope. Nothing in the supplied material describes model training, cross-validation, hyperparameter search or error estimation. A reader who picks up matminer expecting an end-to-end materials machine learning toolkit will be disappointed; the README points to automatminer for that adjacent role. The third is the licence. Repository metadata reports NOASSERTION, meaning no standard licence identifier was detected. That is not the same as having no licence, but it does mean you cannot determine your obligations from the metadata alone, and for a library that may end up inside a commercial materials pipeline that is a real blocker until someone reads the actual licence file.

## automatminer and matbench sit in different layers

The README names two related packages, and the distinction is worth stating precisely because the names invite confusion. automatminer is described as something to try if you like matminer, which places it a level up: it assumes the featurization problem is already solved by a library like this one and handles the modelling workflow around it. matbench is described as being for people interested in furthering development of datasets in matminer, which places it at the data layer, focused on benchmark datasets rather than on descriptor generation. So the three packages are not competing implementations of the same thing. If your problem is that you have structures and no features, matminer is the relevant layer. If your problem is that you have features and no repeatable model selection procedure, automatminer is. Choosing between them is not a matter of preference; it depends on which end of the pipeline is missing. The README also notes that figrecipes, previously part of this ecosystem, now lives in its own repository, which is a reminder that the surrounding package set has been reorganised before and may be again.

## Maintenance cost and the citation obligation in practice

Two ongoing costs are visible in the material. The first is version tracking. Releases v0.10.0 and v0.10.1 are close together, and the default branch is active, so a long-lived project should expect to re-validate feature matrices when upgrading rather than assuming numeric stability. The second is attribution. The README asks users to cite the 2018 Computational Materials Science paper for matminer itself, and separately to cite the original sources behind any dataset or featurizer used. Because citations() exists on both featurizers and retrieval classes, this is at least automatable: the README explicitly frames the method as a way to keep track of and cite the original publications. Teams that treat bibliography collection as an afterthought will find that obligation arrives at submission time, when it is most expensive to reconstruct. On licensing, the only defensible statement is that the repository metadata does not report a recognised licence identifier, so the terms must be read from the repository itself before matminer is bundled into anything distributed.

## Conclusion

Adopt matminer if your pipeline needs many composition and structure descriptors behind a single API, and if you are willing to pin a version and carry the dependency weight that comes with it. Do not adopt it as a modelling framework or as a substitute for automatminer, which is a separate package in the same organisation. Before committing, verify three things: the licence terms, since the repository metadata reports NOASSERTION; the Python version floor against your own environment, since the README states 3.11+; and whether the specific featurizers you plan to use expose citations() output you can carry into publication.

## FAQ

### How is the Matminer version determined?

The manifest declares the version as dynamic and derives it from source control tags through setuptools-scm, so there is no version string in the file to edit.

### Which Python versions does Matminer support?

Python 3.11 and newer is the stated requirement, and the classifiers name 3.11 and 3.12. Nothing in the constraint blocks 3.13, so a resolver can install it there without the metadata claiming support.

### How do I find the papers behind a Matminer featurizer or dataset?

Call the citations() method, which exists on every featurizer and on each data retrieval class and returns BibTeX-formatted references. Dataset metadata also carries citations for the original data.

### Where is the Matminer documentation hosted?

The readme links to a site on GitHub pages, while the package metadata lists documentation on an institutional domain at a national laboratory, so the two entry points are different sites.

## Sources

- [hackingmaterials/matminer on GitHub](https://github.com/hackingmaterials/matminer)
- [Issues](https://github.com/hackingmaterials/matminer/issues)
- [Project website](https://hackingmaterials.github.io/matminer/)
- [README](https://github.com/hackingmaterials/matminer/blob/main/README.md)
- [Releases](https://github.com/hackingmaterials/matminer/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/hackingmaterials-matminer
