pkgmap
Cross-distribution Linux package name resolution.
Different distributions often package the exact same software under different names (for example, ninja on Arch is ninja-build on Debian and Alpine; bat on Arch is rust-bat on Debian and Fedora; fd on Arch is rust-fd-find on Debian; Nixpkgs uses specific attribute paths). pkgmap provides an offline SQLite database and a companion Python library/CLI to translate package names between any pair of Linux distributions, resolve packages across all repositories, or look up native packages by upstream project name.
Data is updated daily from Repology and indexed for instant local lookups. On first run, pkgmap automatically downloads and decompresses the latest daily database release (~/.cache/pkgmap/pkgmap.db).
CLI Usage
Translate between distributions
Use --from (-f) and --to (-t):
# What is Arch's 'bat' called in Debian?
pkgmap resolve bat --from arch --to debian
# Output: rust-bat (0.22.1) [category: misc]
# What is Arch's 'fd' in Nixpkgs?
pkgmap resolve fd -f arch -t nixpkgs
# Output: fd (10.5.0)
Resolve across all distributions
Omit --to to see equivalents across every indexed distribution:
pkgmap resolve bat --from arch
Output:
alpine_3_20: bat (0.24.0)
debian_12: rust-bat (0.22.1) [category: misc]
fedora_rawhide: rust-bat (0.26.1)
nix_unstable: bat (0.26.1)
ubuntu_24_04: rust-bat (0.24.0)
...
Look up by upstream project name
Omit --from (or pass --project / -p) to resolve packages directly from an upstream project name:
pkgmap resolve ripgrep --to debian
# Output: rust-ripgrep (13.0.0) [category: misc]
JSON output
To output machine-readable JSON (great for automation and scripts), add --json / -j:
pkgmap resolve bat -f arch -t debian --json
[
{
"name": "rust-bat",
"version": "0.22.1",
"category": "misc",
"repo": "debian_12",
"repo_family": "debuntu",
"install_name": "rust-bat"
}
]
Other commands
# List available distributions and repository slugs
pkgmap repos
# Manually refresh the local database snapshot
pkgmap update
Python API
You can also use pkgmap as a Python library:
from pkgmap import resolve, resolve_all, resolve_batch
# 1. Single package resolution
res = resolve("bat", from_repo="arch", to_repo="debian")
if res:
print(res.install_name, res.version)
# Output: rust-bat 0.22.1
# 2. Query all repositories for equivalents
matches = resolve_all("bat", from_repo="arch")
for r in matches:
print(f"{r.repo}: {r.install_name}")
# 3. High-performance batch resolution (executed in a single SQL query)
packages = ["bat", "fd", "ripgrep"]
results = resolve_batch(packages, from_repo="arch", to_repo="nixpkgs")
for pkg, match in results.items():
if match:
print(f"{pkg} -> {match.install_name}")
API Methods
resolve(package, from_repo=None, to_repo=None, db_path=None): Resolves a package to a single match.resolve_all(package, from_repo=None, to_repo=None, db_path=None): Returns all matching packages.resolve_batch(packages, from_repo=None, to_repo=None, db_path=None): Resolves a sequence of packages in a single batch query, returning{package: PackageResolution | None}.resolve_batch_all(packages, from_repo=None, to_repo=None, db_path=None): Batch resolution returning{package: list[PackageResolution]}.list_repositories(db_path=None): Returns all repositories with package counts and families.
Configuration
By default, the database is stored at:
~/.cache/pkgmap/pkgmap.db
You can customize the location using:
- The
PKGMAP_DB_PATHenvironment variable:export PKGMAP_DB_PATH="/path/to/custom/pkgmap.db"
- Or the
--db-pathargument on the CLI /db_pathparameter in Python.
Attribution
Data is sourced daily from Repology. Repology's data is published under the CC-BY-SA 4.0 license.
Metadata
Release files for pkgmap-py 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pkgmap_py-0.1.0.tar.gz | 13.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pkgmap_py-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.0 kB
Release files / pkgmap_py-0.1.0.tar.gz
| Download URL | pkgmap_py-0.1.0.tar.gz |
|---|---|
| Size | 13.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d6da7102743aba62660cc2695c80e64fc3ff1500d0860300ce6c2b5c0ce0a81
|
|
BLAKE2b-256 checksum How to use checksums |
8509c6ec459e9f43d237c65e0f6d4ae3fc4a5a9f240bb57b64ea677cbb39ea16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / pkgmap_py-0.1.0-py3-none-any.whl
| Download URL | pkgmap_py-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
68f17cee84d9a876d46dacd7aa4d26a6f23215ce422a11860c1baa5d08176c6b
|
|
BLAKE2b-256 checksum How to use checksums |
28022daf906fc0f23cf15b6dba77606da072671f68317b8d1cc1ffcee70ef2a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log