nab-resolver
Generic PubGrub dependency-resolver core
What it is and what it does
nab-resolver is a generic dependency-resolution engine built on PubGrub algorithms. It provides the core constraint-solving logic without any Python-specific knowledge, making it suitable for embedding in resolvers for any package ecosystem. The package exports a ResolverProvider protocol and a Resolver class that callers parameterize with their own domain logic—defining how to fetch versions, check compatibility, and report requirements.
It is intended as a library for developers building package resolvers, not as a standalone tool. The Python-specific provider lives in nab-provider, and the user-facing CLI is in nab. The resolver itself is a SAT-style solver core: you supply it with a protocol implementation, and it returns a solution or raises ResolutionError. It has no runtime dependencies beyond the standard library.
Use it for:
- Embed the resolver in a custom package manager for a non-Python ecosystem.
- Build a dependency resolver for a domain-specific package format or language.
- Implement version constraint solving in a build tool or deployment system.
- Test or prototype dependency-resolution algorithms without writing a full resolver from scratch.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
A generic PubGrub-style dependency resolver core that accepts a ResolverProvider protocol, with no Python-specific logic—designed for embedding in package resolvers or other systems that need SAT-style constraint solving.
Yes, if you are building a package resolver or constraint-satisfaction system. The low install friction, zero runtime dependencies, active maintenance, and permissive license make it a solid foundation. Not relevant for end users of Python packages—use nab or nab-provider instead.
Install
nab-resolver on PyPI
pip
pip install nab-resolveruv
uv add nab-resolverpoetry
poetry add nab-resolverInstalling nab-resolver
Before you install
Low friction: pure Python, no runtime dependencies, and actively maintained with a recent release. Supports Python 3.10 through 3.14.
License in practice
MIT license permits unrestricted use, modification, and distribution with minimal attribution requirements.
Quickstart
from nab_resolver.resolver import Resolver, ResolverProvider
from nab_resolver.types import Term, Incompatibility
# Implement ResolverProvider with your domain logic
class MyProvider(ResolverProvider):
def choose_package_version(self, term): ...
def get_incompatibilities(self, term): ...
resolver = Resolver(MyProvider())
solution = resolver.resolve(root_term)
Requires Python 3.10 or later. Caller must implement the ResolverProvider protocol with domain-specific logic.
Verify before relying
- Whether the resolver handles cyclic dependencies or other edge cases beyond what the public API documentation implies.
- Performance characteristics and scalability limits for large dependency graphs.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 0 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 422,340/month — #6,783 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: nab_resolver-0.0.14-py3-none-any.whl
Tags
More Build Tools packages
Provides reusable utilities for Python…
permissive · top 100 on PyPI
tqdmWraps any iterable to display a real-time…
copyleft · top 100 on PyPI
pippip is the standard installer for Python…
permissive · top 100 on PyPI
hatchlingHatchling is a standards-compliant Python build…
permissive · top 100 on PyPI
grpcio-toolsGenerates Python gRPC service stubs and message…
permissive · top 1,000 on PyPI
pre-commitpre-commit is a framework for installing and…
permissive · top 1,000 on PyPI
nab-pythonProvides Python package index integration for…
permissive · top 15,000 on PyPI
resolvelibResolveLib provides a generic dependency…
permissive · top 1,000 on PyPI
simplesatSolves package dependency resolution using…
permissive · top 15,000 on PyPI
claripyClaripy is an abstraction layer for constraint…
permissive · top 5,000 on PyPI
kiwisolverkiwisolver is a Python binding to a fast C++…
permissive · top 1,000 on PyPI
python-constraintSolves constraint satisfaction problems (CSPs)…
permissive · top 15,000 on PyPI
aiohttp-asyncmdnsresolverProvides an async resolver for aiohttp that…
permissive · top 15,000 on PyPI
pycosatProvides efficient Python bindings to PicoSAT,…
permissive · top 15,000 on PyPI
nab-indexA typed PyPI Simple-API client with on-disk…
permissive · top 15,000 on PyPI
sceptre-cmd-resolverA Sceptre resolver plugin that executes shell…
permissive · top 15,000 on PyPI