scikit-tda is a bundle of topology libraries, and it is a bundle on purpose
Topological Data Analysis for Python🐍
At a glance
- What is it?
- scikit-tda gathers several Topological Data Analysis libraries into one installable package so that a non-topologist can pull in persistence diagrams, Mapper, Vietoris-Rips complexes and the rest with a single pip install, while each underlying library can still stand alone. The tradeoff is a shared dependency footprint and a 2021 major release that removed the cechmate package.
- Who is it for?
- Adopt scikit-tda if you want one install that gives you persistence computation, a persistence diagram comparison tool, Mapper and the tadasets, and you would rather not resolve their dependency tree yourself. Do not adopt it if you need only one of those libraries and care about a minimal dependency set, since each is usable on its own, and note that the bundle's own classifiers still say Development Status :: 3 - Alpha.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 81 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The bundle exists to make TDA approachable, not to be a new algorithm library
Scikit-TDA is a home for Topological Data Analysis Python libraries intended for non-topologists. That is the entire ambition in one sentence, and it is worth being precise about what it means.
The project does not implement new topology algorithms. It curates and packages existing ones. The README states the aim: to provide a curated library of TDA Python tools that are widely usable and easily approachable, structured so that each package can stand alone or be used as part of the scikit-tda bundle.
That dual structure is the key design decision. Each component is a separate distribution with its own upstream, and the bundle is a convenience layer on top. A researcher who wants only one tool installs that tool. A user who wants a working topological data analysis stack installs the bundle and gets a consistent set of versions.
The name follows the scikit-learn convention, which is a deliberate signal about the intended audience and the shape of the API. The project description in setup.py makes the pitch directly: Topological Data Analysis for humans. The intended audience classifiers list science and research, education, financial and insurance industry, and healthcare industry, which is a broad spread for a mathematical subject and tells you the tool is meant to be applied rather than studied.
The full documentation is hosted at docs.scikit-tda.org, and the package is on PyPI with the usual version and download badges.
What the bundle actually installs
The install_requires list in setup.py is the most useful thing in the repository, because it tells you exactly what you are pulling in and why.
The common requirements are numpy, scipy, scikit-learn and matplotlib. Then come the TDA libraries themselves, grouped by the package they serve. Ripser is listed with Cython, since Ripser is the Cython based persistent homology computation package. Persim is the persistence diagram library, used for comparing and visualising diagrams. Kepler Mapper comes with pillow, with a comment noting that pillow is for some kmapper examples, and tadasets is the dataset collection package.
So the stack splits cleanly. scipy and numpy are the numerical substrate, scikit-learn supplies the machine learning side, matplotlib draws, and the four TDA packages do the topology and the data.
The cost of the bundle is that all of it comes along, including matplotlib and Pillow, even if you only wanted Persim. And the components are versioned separately from the bundle, which means the bundle is a compatibility statement as much as an installer.
There are also extras for the two workflows that are not part of the runtime. The testing extra installs pytest, and the docs extra installs sktda_docs_config and pyyaml. Both are written in the source as the editable install forms, pip install -e ".[testing]" and pip install -e ".[docs]", which is a useful reminder that the project expects you to work from a checkout for either task.
Installing is one command, and unpacking is a subpackage choice
The setup section is short. To install all these libraries, the README gives one command:
pip install scikit-tdaThe leading whitespace on that line is how the README's own code block is formatted, and it is worth noting because the repository's setup.py does the actual work. It reads the version out of sktda/_version.py with a regular expression rather than hardcoding it, raises a RuntimeError if the version string is missing, reads the README as the long description, and then declares the package as MIT licensed with a list of classifiers and extras.
Two details in setup.py tell you how the project is assembled. The packages list is just ["sktda"], so the scikit-tda distribution itself is a thin package, and include_package_data is set, which is how the subpackages and their data get included. The python_requires value is greater than 3.3, which is very permissive for a project that depends on current versions of numpy and scipy, so in practice your environment constraints come from the components rather than from the bundle.
The repository layout reinforces the structure. There is an sktda/ directory for the bundle package, a docs/ directory, a references/ directory, a test/ directory, and a .gitmodules file, which is how the separate upstream libraries are brought in.
v1.0.0 removed cechmate, and the alpha classifier never changed
The release history has one entry that matters more than the others. v1.0.0, published on 2021-08-03, is titled sunsetting cechmate. v1.1.0 followed on 2024-03-17 and v1.1.1 on 2024-07-19.
So the bundle has had a major version bump that was a removal rather than an addition. The cechmate library was dropped from the collection, and the direction of travel is fewer components rather than more.
The classifier in setup.py still says Development Status :: 3 - Alpha, which is an honest signal about how the project sees itself, and it has survived three releases including a major one. That combination, a maintained but explicitly alpha bundle, tells you what kind of dependency this is: something you will use because the pieces are curated, not because the project commits to interface stability.
The repository itself is current. The last push was on 2026-08-03, the repository is not archived, and there is a CHANGELOG.md and a CONTRIBUTING.md at the root.
For citing the work, the README asks you to use the Zenodo DOI and gives the BibTeX entry with the DOI 10.5281/zenodo.2533369, authored by Nathaniel Saul and Chris Tralie with the title Scikit-TDA: Topological Data Analysis for Python and the year 2019. A DOI badge points at the Zenodo record.
Contributing means code, notebooks, examples or documentation
The contributing section is unusually explicit about what counts as a contribution, and the list is the interesting part.
Contributions are more than welcome, and there are lots of opportunities for potential projects, so the project asks you to get in touch. Then it enumerates what is valuable: everything from code to notebooks to examples and documentation. Every one of those is equally valuable, in the project's framing.
The mechanism is the standard one. Fork the project, make your changes, and submit a pull request, and the maintainers say they will work through issues and get the code merged into the main branch. The default branch is master, which is what the repository listing records.
The contact section points to three routes before you open anything: a GitHub discussion topic, an issue, or Twitter. The order is telling, since a discussion is the cheapest way to find out whether a proposed project fits the curated scope.
The repository structure supports that breadth of contribution. Alongside the code there is a docs/ directory, a test/ directory, and a references/ directory, and the .readthedocs.yml indicates the documentation is built on Read the Docs rather than hosted separately.
Where the bundle is the wrong choice
The obvious wrong-tool case is a project that needs exactly one of these libraries. Installing matplotlib, Pillow, Cython and the full scientific stack to get Persim, when Persim itself depends on a smaller set, is a real cost in a constrained environment such as a serverless function or a container with a size budget.
The second case is a project that has already standardised on one of the components. If your group already depends on Ripser at a particular version for a reason, pulling the bundle in as well means managing two copies of the same library, and the bundle's version of that library will win or lose depending on the resolver.
The third case is API stability across time. The bundle is a metapackage of moving parts, and the way it manages that is by declaring a compatible set. When one of the components makes a breaking change, the bundle absorbs it and republishes, and your pin to scikit-tda pins the set rather than the individual pieces. That is a benefit if you want set-level stability and a cost if you need to move one component independently.
The alternative is to use the components directly, which the README explicitly permits since each package can stand alone. The bundle's value is then reduced to the dependency resolution convenience and the documentation, and the cost of the extra packages goes away.
On the licence, the README states that the package is licensed with the MIT license and setup.py records license as MIT, while the repository listing classifies the licence as a custom one that GitHub cannot classify. Read the LICENSE file at the repository root for the terms themselves, and treat that as a licensing note rather than legal advice.
Editorial conclusion
Adopt scikit-tda if you want one install that gives you persistence computation, a persistence diagram comparison tool, Mapper and the tadasets, and you would rather not resolve their dependency tree yourself. Do not adopt it if you need only one of those libraries and care about a minimal dependency set, since each is usable on its own, and note that the bundle's own classifiers still say Development Status :: 3 - Alpha. Verify first which component you actually need, since the bundle installs numpy, scipy, scikit-learn, matplotlib, Cython and Pillow along with the TDA libraries, and check the MIT license in the LICENSE file given the repository listing classifies it as a custom licence.
Frequently asked questions
How do I install scikit-tda?
Run pip install scikit-tda, which installs the bundle of libraries. The repository's setup.py reads the version from sktda/_version.py, and the package also provides testing and docs extras used as pip install -e ".[testing]" and pip install -e ".[docs]".
Which libraries does scikit-tda include?
The install requirements list Ripser with Cython, Persim, Kepler Mapper with pillow, and tadasets, on top of numpy, scipy, scikit-learn and matplotlib. Each package can also be installed and used on its own.
What is the latest scikit-tda release and what changed in v1.0.0?
The releases listed are v1.1.1 on 2024-07-19, v1.1.0 on 2024-03-17 and v1.0.0 on 2021-08-03, and the v1.0.0 release is titled sunsetting cechmate, so the major version bump removed the cechmate library from the collection. The last push was on 2026-08-03 and the repository is not archived.
How do I cite scikit-tda?
The README asks you to use the Zenodo citation with the DOI 10.5281/zenodo.2533369, and gives a BibTeX entry for Scikit-TDA: Topological Data Analysis for Python authored by Nathaniel Saul and Chris Tralie with the year 2019.
Can I contribute to scikit-tda?
Yes. The README says everything from code to notebooks to examples and documentation is equally valuable, and asks you to fork the project, make your changes and submit a pull request. Before that it suggests starting a GitHub discussion topic, creating an issue, or reaching out on Twitter.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/scikit-tda-scikit-tda)Was this useful?