# Registries for Python
   
**GitHub:** https://github.com/beanbaginc/python-registries
**PyPI:** https://pypi.org/project/registries
**Status:** Under active development / released / used in production
[Registries](https://pypi.org/project/registries) is a module for managing collections of objects, allowing for easy registration, lookups, and access.
This is ideal for applications that need to manage abstract interfaces with backend implementations, such as plugins, extensions, and other cases where you'd employ a Registry Pattern.
Registries was built to help develop [[Review Board]] and our other products at [Beanbag](https://www.beanbaginc.com).
## What is the Registry Pattern?
The Registry Pattern is a design pattern that provides a central repository for storing and accessing instances of various classes or objects. Objects can be registered dynamically or as part of the registry definition, each with a unique identifier, and then retrieved later by iterating through or querying the registry.
This can help provide a more decoupled design, reducing the need for dependencies between parts of your codebase, and helping make your codebase more extensible, maintainable, and testable.
Registries for Python makes this simple.
## Features
Registries offers:
- **Dynamic registration** and unregistration of items.
- **Flexible lookups** based on registered lookup attributes.
- **Thread-safety** to avoid conflicts with modifying a registry.
- **Extensibility** through pre/post hooks for registration, unregistration, initial population, and resetting of registries.
- **Python type hints** to ease development.
- **Built-in registries** for order-dependent items and wrapping around [Python Entry Points](https://packaging.python.org/en/latest/specifications/entry-points/).