abxpkg v1.10.2
✨ Highlights
- Renamed the project from
abx-pkg / abx_pkg to abxpkg, including the Python package name, docs, examples, and release surface.
- Added a much richer CLI runtime model around
abxpkg run, abx, and abxpkg run --script, with consistent provider ENV/PATH merging for real subprocess execution.
- Added provider-local
derived.env caches for resolved binaries and installer binaries, including version, sha256, mtime, and euid tracking.
- Tightened provider ownership and provenance reporting so installer binaries, upstream dependency binaries, and installed binaries are surfaced more explicitly.
- Simplified provider state: much more work now happens lazily at
setup() / first-use time instead of during import or construction.
🧭 Quick Examples
pip install abxpkg
abxpkg --global install yt-dlp
abx --binproviders=env,uv,pip,brew yt-dlp --version
abxpkg --min-version=1.2.3 --min-release-age=7 install yt-dlp
abxpkg --overrides='{"pip":{"install_args":["yt-dlp[default]"]}}' install yt-dlp
abxpkg --install-args='["black==24.2.0"]' install black
#!/usr/bin/env -S abxpkg run --script node
// /// script
// dependencies = [
// {name = "node", binproviders = ["env", "apt", "brew"], min_version = "22.0.0"},
// {name = "playwright", binproviders = ["pnpm", "npm"]},
// ]
// ///
🛠 What Changed
- Reworked the core provider engine around the new
abxpkg/ package layout and a much larger BinProvider / Binary runtime surface.
- Added
loaded_mtime and loaded_euid alongside loaded_abspath, loaded_version, and loaded_sha256, and threaded them through provider caches, summaries, and binary models.
- Added provider-local
derived.env metadata caching, installer caching, and dependency caching so repeated loads can skip expensive version probes when the fingerprint still matches.
- Standardized
pip and uv install-root layouts so hermetic environments live at <install_root>/venv while provider metadata stays at <install_root>.
- Hardened install semantics so package-manager success only counts if a runnable binary is actually produced; failed installs now roll back generically in the base provider flow.
- Split runtime dependency reporting into clearer concepts like
INSTALLER_BINARY, depends_on_binaries, and installed_binaries.
- Extended the CLI with
--global as a thin alias for --lib=None, hidden upgrade aliases, richer provider/version reporting, and direct handler-style override flags such as --install-args, --version, --abspath, and --packages.
- Improved
abx so it stays a very thin wrapper over abxpkg run --install ... while still forwarding the expanded CLI surface correctly.
- Added inline
/// script dependency parsing for abxpkg run --script, including [tool.abxpkg] env injection and dependency provider ENV/PATH merging before script execution.
- Reworked logging output and CLI rendering substantially: quieter non-debug failures, better subprocess output formatting, better method highlighting, and richer provider/version summaries.
⚠️ Behavioral Changes
- The package/import surface is now
abxpkg, not abx-pkg / abx_pkg.
- CLI managed mode is now the default; use
--global or --lib=None to force provider global mode.
load() / install() correctness is stricter: providers no longer get to report success unless they can resolve a runnable binary afterward.
- Provider ownership/provenance is less hand-wavy now: upstream installer/dependency binaries are tracked separately from installed binaries.