A fast generic C++ library for applied and computational topology
C++ CMake Shell
Clone or download
Latest commit b610fa4 May 3, 2016



This C++11 library provides a set of generic tools for:

  • Building Neighborhood Graphs
  • Building Cellular Complexes
  • Computing [persistent] homology over finite fields
  • Parallel algorithm(s) for homology


  • CTL is licensed under the BSD.
  • See LICENSE for more info.


CTL has dependencies.

  • boost
  • tbb
  • metis
  • ann (for \epsilon nearest neighbors, we plan to move to a more up to date neighborhood computer)

We strongly recommend installing them on your system either as root or with the help of your system administrator via your operating systems package manager e.g. apt on debian based systems, yum on RHEL systems, or brew/port/fink on OSX.

please see .travis.yml for an example of how to to this, and our CI results to clarify is a given commit will build.

If you wish to install your own dependencies in another way, you can manually edit: build_dependencies.txt

If you encounter any issues, make sure to file it: https://github.com/appliedtopology/ctl/issues

This list of the dependencies is below and we have annoted which packages we can auto-help you install locally.

C++14 compiler (clang or gcc) Boost Intel TBB METIS (make metis) (used for graph partitioning) ANN (make ann) (used for nearest neighbor querying..) Doxygen (Optional)


  1. You may specify paths to the include/link directories here: vim build_dependencies.txt
  2. CMake will use what you specify, and if you dont it will look on the system for dependencies (and ideally find them...)
  3. Create makefiles mkdir build; cd build; cmake ..
  4. Compile: (the -j option makes in parallel) make -j

For OS/X Users:

If you plan on using the default compiler (clang) then when installing boost ensure that you use: brew install boost ---build-from-source --with-c++11 --with-mpi --with-program_options --with-clang --without-single and after cmake . ensure that the compiler chosen is clang via ccmake . /usr/bin/c++ is a good choice.

Since libstdc++ (GNU C++ STL) and libc++ (Clang C++ STL) are not ABI compatible one needs to take care to use the correct compilers for libraries linked against. if boost is compiled with gcc, you cannot use clang to compile CTL and vice versa.


OS/X: brew tap appliedtopology/software brew install --HEAD ctl

This sticks the headers into the default location on your system and all the tools into the appropriate path/bin directory


Please Do! Accepting Pull Requests via github.


We hope to add support for:

  • [Persistent] Co-homology
  • Zig Zag Persistence
  • Multidimensional Persistence
  • Tidy Sets
  • OpenGL Visualizations
  • Bindings to other languages such as Python, MATLAB, and R

Feel free to fork and help development. Do ask questions!