ManifoldsBase.jl

An interface for manifolds in Julia

Define your own Riemannian manifolds. Use abstract manifolds in your code.

ManifoldsBase.jl ManifoldsBase.jl
🪶

Lightweight

Based on an AbstractManifold this interface allows to define own manifolds easily. Furthermore, operations and algorithms on arbitrary manifolds can be defined using this interface package.

⚡️

Efficient

When possible, functions are available working in-place, like exp! or log! to reduce memory allocations.

🧩

Ecosystem

Several Meta-Manifolds in this package but also further packages like ManifoldDiff.jl, ManifoldDiffEq.jl or ManifoldsGPU.jl provide a whole ecosystem to work with manifolds.

Manifolds.jl Manifolds.jl

Manifolds.jl

A comprehensive library of Riemannian manifolds is available in Manifolds.jl to get you started directly on the most common manifolds.

Manopt.jl

Manopt.jl

Optimisation algorithms on any manifold following this interface are available in Manopt.jl. Both smooth optimization, like gradient descent, quasi-Newton and nonsmooth, like proximal-gradient or other splitting based methods are available.

LieGroups.jl LieGroups.jl

LieGroups.jl

LieGroups.jl extends the interface to Lie groups and uses Manifolds.jl to define a library of Lie groups. Further features of this package are an abstract definition of a Lie algebra and group actions as well as generic Lie groups like the semi-direct product Lie group.

This package has two main purposes. You can add it as a dependency if you plan to work on manifolds (generically) or if you plan to define own manifolds in a package. For a package that (only) depends on ManifoldsBase.jl, see Manopt.jl, which implements optimization algorithms on manifolds using this interface. These optimisation algorithms can hence be used with any manifold implemented based on ManifoldsBase.jl.

For a library of manifolds implemented using this interface see Manifolds.jl.

Your package is using ManifoldsBase? We would like to add that here as well. Either write an issue or add yourself by forking, editing this file and opening a PR.

Citation

If you use ManifoldsBase.jl in your work, please cite the following open access article [ABBR23], which covers both the basic interface as well as the performance for Manifolds.jl

Axen, S. D., Baran, M., Bergmann, R., Rzecki, K. (2023). Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds, ACM Transactions on Mathematical Software, Volume 49, Issue 4, Article No. 33.

doi: 10.1145/3618296, arXiv: 2106.08777

AxenBaranBergmannRzecki:2023 (BibLaTeX)
@article{AxenBaranBergmannRzecki:2023,
    AUTHOR     = {Seth D. Axen and Mateusz Baran and Ronny Bergmann and Krzysztof Rzecki},
    ARTICLENO  = {33},
    DOI        = {10.1145/3618296},
    JOURNAL    = {ACM Transactions on Mathematical Software},
    MONTH      = {dec},
    NUMBER     = {4},
    TITLE      = {Manifolds.jl: An Extensible {J}ulia Framework for Data Analysis on Manifolds},
    VOLUME     = {49},
    YEAR       = {2023},
    EPRINT     = {2106.08777},
    EPRINTTYPE = {arXiv}
}

To refer to a certain version or the source code in general please cite for example

Axen, S. D., Baran, M., Bergmann, R. (2026). ManifoldsBase.jl, Zenodo.

doi: 10.5281/ZENODO.5964340

manifoldsbasejl-zenodo-mostrecent (BibLaTeX)
@software{manifoldsbasejl-zenodo-mostrecent,
    AUTHOR    = {Seth D. Axen and Mateusz Baran and Ronny Bergmann},
    TITLE     = {ManifoldsBase.jl},
    DOI       = {10.5281/ZENODO.5964340},
    URL       = {https://zenodo.org/record/5964340},
    PUBLISHER = {Zenodo},
    YEAR      = {2026},
    COPYRIGHT = {MIT License}
}

for the most recent version. For a corresponding version specific DOI, see the list of all versions.