Install & Compatibility
Where this runs
tested against v0.13.62 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.920 runs
installs and imports cleanly · install 0.0s · import 4.094s · 67.2MB
glibcpy 3.10–3.920 runs
installs and imports cleanly · install 5.5s · import 3.811s · 68MB
65MB installed
● package 65MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
bioregistry
✓ import bioregistry
Commonly imported directly or aliased as 'br'
br
✓ import bioregistry as br
Standard community alias for convenience
This quickstart demonstrates how to fetch metadata for a given resource, normalize various forms of a prefix to its canonical Bioregistry form, and resolve/expand a Compact URI (CURIE) into a full URI.
import bioregistry as br
# Get metadata for a resource
taxonomy_entry = br.get_resource('taxonomy')
print(f"Taxonomy Name: {taxonomy_entry.name}")
print(f"Taxonomy Homepage: {taxonomy_entry.homepage}")
# Normalize a prefix
normalized_ec = br.normalize_prefix('ec-code')
print(f"'ec-code' normalized to: {normalized_ec}")
normalized_pubchem = br.normalize_prefix('pubchem')
print(f"'pubchem' normalized to: {normalized_pubchem}")
# Resolve a CURIE to a URI
curie = 'chebi:138488'
uri = br.resolve(curie)
print(f"Resolved {curie} to: {uri}")
# Expand a CURIE to a URI
expanded_uri = br.expand_curie(curie)
print(f"Expanded {curie} to: {expanded_uri}")
bioregistry --version
Debug
Known issues
breakingChanges in Bioregistry's internal canonicalization for certain non-biological prefixes (e.g., 'rdf') can lead to unexpected case changes (e.g., 'RDF' instead of 'rdf') in merged prefix maps, affecting downstream tools that consume Bioregistry's output and assume lowercase canonicalization for such prefixes.fixReview and adapt any pipelines that rely on Bioregistry's output for case-sensitive prefix handling, especially for non-biological or common data prefixes. Consider explicit case normalization in consuming applications if strict lowercase is required.
affects: 0.13.x (observed around 0.13.x in April 2024)
gotchaThe Bioregistry does not fully cover or align with all external registries due to varying quality standards, lack of metadata, or resources being decommissioned. This means some prefixes from external sources may not be present or have complete metadata.fixAlways check for prefix existence and metadata completeness using `br.get_resource()` or `br.normalize_prefix()`. If a prefix is missing, consider contributing it or consulting the original external registry directly.
affects: All versions
gotchaCURIEs can fail to resolve or validate for three main reasons: the prefix is not registered, the identifier does not match the validation pattern, or no providers are available for that prefix. The `resolve()` and `expand_curie()` functions will return `None` or raise an error in these cases.fixBefore resolving, use `br.get_resource(prefix)` to check if a prefix is registered and has associated metadata, including a `pattern` for validation and `providers` for resolution. Validate identifiers using `br.validate_identifier()` if necessary.
affects: All versions
gotchaSome ontology identifiers embed redundant prefixes (e.g., `GO:GO:0006915`). Bioregistry handles these cases, but this can be a source of confusion as different registries might manage these 'banana-style' identifiers differently.fixBe aware of potential redundant prefixes in identifiers, especially when working with OBO Foundry or Gene Ontology resources. The Bioregistry's `normalize_prefix()` and `parse_curie()` functions are designed to handle these variations consistently.
affects: All versions
Errors
Common errors & fixes
AttributeError: 'NoneType' object has no attribute 'name' (or similar for other attributes)
Attempting to access attributes (e.g., `name`, `homepage`) on a `None` object returned by `bioregistry.get_resource()` or `bioregistry.normalize_prefix()`, indicating that the requested prefix is not recognized or found in the Bioregistry.
fixAlways check if the result of `br.get_resource()` or `br.normalize_prefix()` is `None` before attempting to access its attributes. Example: `entry = br.get_resource('unknown_prefix'); if entry: print(entry.name)`. Failed to resolve CURIE 'prefix:invalid_id' / No URI found for 'prefix:invalid_id'
The provided identifier part of the CURIE ('invalid_id') does not conform to the expected regular expression pattern defined for the 'prefix' in the Bioregistry, or there are no configured providers to generate a URI for that prefix.
fixVerify the identifier's format against the expected pattern, which can sometimes be found in the resource's metadata via `br.get_resource(prefix).pattern`. Ensure the prefix itself is valid and has registered providers for resolution.
Upgrade
Version history
0.13.62latest on PyPI · released Jun 13, 2026
Audit
Dependencies
clickrequiredCommand-line interface and utilities
curiesrequiredHandling Compact URIs (CURIEs)
more-clickrequiredClick utility extensions
pydanticrequiredData validation and settings management
pystowrequiredStandardized file management
requestsrequiredHTTP requests for external data
sssom-pydanticrequiredSimple Standard for Sharing Ontology Mappings (SSSOM) Pydantic models
tqdmrequiredProgress bars for iterations