catalogue
Super lightweight function registries for your library
Decision gist · record as of 2026-08-14
Yes. Catalogue is lightweight, actively maintained, has no security vulnerabilities, uses a permissive license, and solves a real problem for library authors building extensible systems. Install it if you're designing a package that needs user-customizable or plugin-based function dispatch with serialization support.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.6 or later (catalogue v2.0+ is not compatible with Python 2.7).
- Low friction: pure Python wheel with only two lightweight runtime dependencies (zipp, typing-extensions).
- Actively maintained with recent commits; marked Production/Stable and in the top 1000 PyPI packages.
License · maintenance · safety
MIT (permissive) — MIT license (permissive) means you can use, modify, and distribute this package freely in commercial and private projects with minimal restrictions.
last release 2023-09-25 (1054 days) · last repo commit 2026-03-27 · 183 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 24,184,951 downloads/mo, #923 on PyPI
Alternatives
Verify before relying
pip install catalogue
import catalogue
# Create a registry
loaders = catalogue.create("my_package", "loaders")
# Register a function
@loaders.register("json_loader")
def load_json(data):
return data
# Retrieve all registered functions
all_loaders = loaders.get_all()
loader = loaders.get("json_loader")- Whether entry_points support works reliably across all packaging tools and environments
- Performance characteristics when registries contain many functions
What it is and what it does
Catalogue is a minimal Python library for creating function registries—collections of functions stored under string identifiers within a namespace. Instead of passing functions directly as callbacks, you register them once and retrieve them by name. This pattern is useful when you need to serialize which functions were used (logging a string name is simpler than pickling a function), while still allowing users to extend your package with custom functions via a decorator.
The library's core use case is building extensible systems where third-party code can register handlers, loaders, or components at install time (via entry points) or import time (via decorators), and your application retrieves them by string ID. It's particularly common in NLP and ML pipelines where you want to compose parameterized components that can be saved and reloaded from configuration files.
Use it for
- Build a plugin system where users decorate custom functions to register them under your package's namespace
- Create serializable pipeline configs that reference functions by string name instead of pickled objects
- Allow third-party packages to auto-register components via entry points without requiring explicit imports
- Implement a data loader registry where different file formats map to registered loader functions
- Store and retrieve model architectures or loss functions by identifier in machine learning frameworks
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Catalogue is lightweight, actively maintained, has no security vulnerabilities, uses a permissive license, and solves a real problem for library authors building extensible systems. Install it if you're designing a package that needs user-customizable or plugin-based function dispatch with serialization support.
Install
catalogue on PyPI
Before you install
Low friction: pure Python wheel with only two lightweight runtime dependencies (zipp, typing-extensions). Actively maintained with recent commits; marked Production/Stable and in the top 1000 PyPI packages.
Requires Python 3.6 or later (catalogue v2.0+ is not compatible with Python 2.7).
License in practice
MIT license (permissive) means you can use, modify, and distribute this package freely in commercial and private projects with minimal restrictions.
Quickstart
pip install catalogue
import catalogue
# Create a registry
loaders = catalogue.create("my_package", "loaders")
# Register a function
@loaders.register("json_loader")
def load_json(data):
return data
# Retrieve all registered functions
all_loaders = loaders.get_all()
loader = loaders.get("json_loader")
Verify before relying
- Whether entry_points support works reliably across all packaging tools and environments
- Performance characteristics when registries contain many functions
Package facts
| License | MIT permissive |
| Python support | Supports the current Python release >=3.6 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 2 packageszipptyping-extensions |
| Maintenance | Actively maintained 1,054 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 24,184,951 / month, #923 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableEnvironment :: ConsoleIntended Audience :: DevelopersIntended Audience :: Science/ResearchLicense :: OSI Approved :: MIT LicenseOperating System :: MacOS :: MacOS XOperating System :: Microsoft :: WindowsOperating System :: POSIX :: LinuxProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.6Programming Language :: Python :: 3.7Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9Topic :: Scientific/Engineering |
Evidence: catalogue-2.0.10-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “function registry decorator”
- catalogueProvides lightweight function registries that let you register and…
- confectionConfection is a configuration system for Python that parses INI-style…
- in-n-outLightweight dependency injection framework using type hints to…
Give your agent the search over MCP, or paste the wish link into any chat.
More Scientific/Engineering packages
NumPy provides an N-dimensional array object and a comprehensive suite of mathematical, linear algebra, Fourier transform, and random number functions for scientific computing in Python.
pandas provides fast, flexible data structures (Series and DataFrame) for loading, cleaning, transforming, and analyzing labeled or relational data in Python.
scipy provides numerical algorithms for mathematics, science, and engineering—including optimization, integration, linear algebra, Fourier transforms, signal and image processing, and ODE solvers—built on numpy arrays.
scikit-learn provides a comprehensive Python library for supervised and unsupervised machine learning, including classification, regression, clustering, dimensionality reduction, and model evaluation tools built on NumPy and SciPy.
Install it if you need to train, evaluate, or deploy supervised or unsupervised learning models.
dill extends Python's pickle module to serialize and deserialize a much wider range of Python objects, including functions, lambdas, classes, and interpreter sessions, to byte streams for storage or network transmission.
Multiprocess is an enhanced fork of Python's standard multiprocessing library that uses dill for better serialization, allowing you to spawn processes with a threading-like API and share complex objects between them.
Install it if you use multiprocessing and encounter pickle serialization limits with lambdas or complex objects.
See also phx-class-registry · persisting-theory · confection · spacy-legacy · robotcode-plugin · essentials · evmdasm · stevedore · entrypoint · azure-schemaregistry