Releases: ArchiveBox/abxpkg
Releases · ArchiveBox/abxpkg
v1.11.81
v1.11.80
Full Changelog: v1.11.79...v1.11.80
v1.11.10
Full Changelog: v1.11.9...v1.11.10
v1.11.9
Full Changelog: v1.11.8...v1.11.9
v1.11.8
v1.10.7
Highlights
- Added new shell-facing CLI commands:
abxpkg env,abxpkg activate, and hiddenabxpkg execalias support.envnow reuses therunresolution path, emits dotenv-style output with shell-safe quoting, andactivatecan generatebash,zsh, andfishactivation snippets. - Improved automatic dependency bootstrapping across providers. Missing installer binaries can now be installed automatically, cargo and gem bootstrap paths prefer faster/default installer providers, and Linuxbrew/Nix setup paths are more resilient in fresh or partially configured environments.
- Hardened provider lifecycle behavior, especially for Nix and browser tooling. Nix profile install/update/remove flows are more reliable, duplicate profile entries are cleaned up correctly, and Puppeteer/Playwright path, cache, uninstall, and shim refresh behavior is more consistent and idempotent.
- Tightened CLI/runtime behavior and docs. Help output, override flag ordering, execution env construction, README/docs, and the generated landing page were all refreshed to match the current CLI surface and runtime behavior.
Provider and Runtime Fixes
- Fixed Linux and self-hosted CI bootstrap for Homebrew, Yarn Berry, Nix, and related PATH setup so test hosts come up with the same runtime layout that
abxpkgexpects. - Updated Nix installs to use a cleaner package source path, handle duplicate profile elements, avoid leaking GitHub tokens into child Nix processes, and recover better from broken daemon/socket states.
- Fixed cargo and gem installer fallback behavior so integration tests can bootstrap their installer dependencies instead of assuming they already exist on the host.
- Improved managed binary resolution for Puppeteer, Playwright, EnvProvider, and related shim/abspath flows so load, uninstall, and runtime PATH selection stay correct after repeated installs and updates.
CLI and UX Changes
abxpkg envnow emits rawKEY=valueoutput by default, only quotes values that need quoting, and supports provider-aware runtime env assembly.abxpkg activateprints sourceable shell output with shell-specific guidance comments and supports--bash,--zsh, and--fish.abxpkg run --helpandabxpkg exec --helpnow show subcommand help correctly instead of trying to resolve--helpas a binary name.- Binary override flag handling, env building, and command help text were cleaned up across install/run/update flows.
Docs and Site
- Refreshed the README to document the current install surface, shell activation flow, and runtime defaults more concisely.
- Updated the generated docs site and landing page styling to better match the current project structure and examples.
Full compare: v1.10.5...v1.10.7
v1.10.5
Highlights
- Fixed provider cache ownership so dependency cache entries no longer masquerade as installed binaries. This makes
update/upgradepick real owning providers again, e.g.brewcan upgradenodeeven when other providers cachenodeas an upstream dependency. - Added shared
BinProvider.depends_on_binaries()andBinProvider.installed_binaries()APIs and switched provider sections inabxpkg versionto use them directly. - Tightened update verification so normal post-update checks reuse cached installer dependencies when appropriate, while explicit
--no-cachestill forces a fully fresh path. - Cleaned up CLI output: provider binary rows in
abxpkg versionnow use a fixed-width version column, non-debug progress logs no longer inherit misleading deep indentation, and shared subprocess stderr/stdout formatting is more consistent.
Docs
- Updated the README and generated docs to match current defaults and flag behavior, especially around
Nonehandling forpostinstall_scripts/min_release_age, managedABXPKG_LIB_DIRinstall roots, and the current visible CLI surface.
v1.10.4
abxpkg v1.10.4
✨ Highlights
- Added richer CLI inspection commands with
abxpkg versionandabxpkg list, including per-provider runtime state, installer provenance, dependency binaries, and installed binary caches. - Tightened provider dependency provenance so wrapper providers now record the upstream runtimes they actually depend on (
node,python,ruby, installer binaries) instead of flattening everything into the active provider. - Improved
run --scriptoption merging so same-name script dependencies now contribute defaults to the final run binary without overriding an explicit--binproviders/ABXPKG_BINPROVIDERSselection. - Hardened the base provider action flow so nullable security options are resolved to real provider/action defaults before handlers run, instead of leaking
Noneinto provider-specific install/update code.
🧭 Quick Examples
abxpkg version
abxpkg version yt-dlp
abxpkg list
abxpkg list env playwright chromiumabxpkg --binproviders=env,uv,pip run yt-dlp --version
abx --global yt-dlp --version#!/usr/bin/env -S abxpkg run --script node
// /// script
// dependencies = [
// {name = "node", binproviders = ["env", "brew"], min_version = "22.0.0"},
// {name = "playwright", binproviders = ["playwright", "pnpm", "npm", "yarn"]},
// ]
// ///🛠 What Changed
- Added documented
abxpkg version/abxpkg listflows and refreshed the generated docs/site output to match the current provider/runtime model. - Refined cache handling so provider-local
derived.enventries preserve stable absolute paths, create missing cache directories lazily, and de-duplicate repeated installer/binary lines in global listings. - Fixed
Binary._binprovider_order()so cached providers are preferred without dropping uncached fallback providers during update/uninstall flows. - Made no-op providers like
envandbashstill resolve and validate binaries duringinstall()/update(), including enforcingmin_versionon the final loaded binary instead of silently accepting a mismatch. - Resolved nullable
postinstall_scripts/min_release_agein the baseBinProvider.install()/update()/uninstall()path using provider/action defaults, while preserving warnings for unsupported strict values. - Tightened installer provenance so
INSTALLER_BINARY()now preserves the real upstream provider that loaded the installer binary, instead of re-wrapping everything as if it came from the active provider. - Ensured explicit
--binproviders/ABXPKG_BINPROVIDERSremain an exact provider allowlist/order during installer and dependency resolution, instead of silently widening back to defaults. - Added explicit upstream dependency tracking for wrapper providers that really depend on another runtime binary:
npm,pnpm,yarn,playwright, andpuppeteernow cachenodepip,ansible, andpyinfranow cachepythongemnow cachesruby
- Fixed
GoGetProviderinstaller resolution sogois loaded through a propergo versionoverride instead of relying on generic--versionprobing. - Tightened
BrewProviderbehavior sopostinstall_scripts=Falseis only claimed forbrew install, notbrew upgrade, which has no equivalent--skip-post-installflag. - Improved script-mode dependency merging so same-name dependencies (for example
nodeinrun --script node) merge their defaults into the final run binary generically instead of only special-casingmin_version. - Updated provider summaries and list/version output so installer binaries, upstream dependency binaries, and installed binaries are reported more accurately and with less duplication.
⚠️ Behavioral Changes
- Explicit provider selection now stays explicit. If you pass
--binproviders=...or setABXPKG_BINPROVIDERS, dependency and installer resolution no longer silently re-add default providers behind your back. install()/update()on read-only/no-op providers still behave as no-ops for mutation, but they now validate the resolved binary and enforcemin_versionon the result.- Passing nullable security fields through provider instances or provider overrides is safer now:
Nonemeans “use the provider/action default”, not “let a provider handler crash on an assertion”.
v1.10.2
abxpkg v1.10.2
✨ Highlights
- Renamed the project from
abx-pkg/abx_pkgtoabxpkg, including the Python package name, docs, examples, and release surface. - Added a much richer CLI runtime model around
abxpkg run,abx, andabxpkg run --script, with consistent provider ENV/PATH merging for real subprocess execution. - Added provider-local
derived.envcaches for resolved binaries and installer binaries, includingversion,sha256,mtime, andeuidtracking. - 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 --versionabxpkg --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 largerBinProvider/Binaryruntime surface. - Added
loaded_mtimeandloaded_euidalongsideloaded_abspath,loaded_version, andloaded_sha256, and threaded them through provider caches, summaries, and binary models. - Added provider-local
derived.envmetadata caching, installer caching, and dependency caching so repeated loads can skip expensive version probes when the fingerprint still matches. - Standardized
pipanduvinstall-root layouts so hermetic environments live at<install_root>/venvwhile 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, andinstalled_binaries. - Extended the CLI with
--globalas a thin alias for--lib=None, hiddenupgradealiases, richer provider/version reporting, and direct handler-style override flags such as--install-args,--version,--abspath, and--packages. - Improved
abxso it stays a very thin wrapper overabxpkg run --install ...while still forwarding the expanded CLI surface correctly. - Added inline
/// scriptdependency parsing forabxpkg 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, notabx-pkg/abx_pkg. - CLI managed mode is now the default; use
--globalor--lib=Noneto 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.
v1.9.30
abx-pkg v1.9.30
✨ Highlights
- Added
abx-pkg run --script, which reads inline/// scriptmetadata blocks so scripts can declare binary dependencies andtool.abx-pkgsettings right at the top of the file. - Unified managed providers around shared
install_root/bin_dirbehavior, and madeABX_PKG_LIB_DIRresolve from the live environment so CLI--liboverrides behave consistently. - Added first-class
--no-cacheand--debugCLI controls, and tightened the shared binary lifecycle soload()/install()/update()/uninstall()all speak the same cache semantics. - Fixed several installer-resolution and recursion edge cases, while making the real Playwright and Puppeteer test paths much faster instead of faking them.
🧭 Quick Examples
abx-pkg --lib=/tmp/abx --no-cache install yt-dlp
abx-pkg --debug --binproviders=env,npm,playwright run --script node ./capture.js#!/usr/bin/env -S abx-pkg run --script node
// /// script
// dependencies = [
// {name = "playwright", binproviders = ["npm", "pnpm"]},
// {name = "chromium", binproviders = ["playwright", "puppeteer", "apt"], min_version = "131.0.0"},
// ]
// [tool.abx-pkg]
// ABX_PKG_POSTINSTALL_SCRIPTS = true
// ///🛠 What Changed
parse_script_metadata()andrun --scriptnow parse comment-prefix-agnostic/// scriptblocks, resolve declared dependencies before execution, merge[tool.abx-pkg]settings, and preserve child exit codes/stdout/stderr cleanly.- The provider constructor surface now consistently prefers
install_rootandbin_dir, while legacy provider-specific root aliases are still accepted through validation aliases. abx_pkg_install_root_default()now readsABX_PKG_LIB_DIRfrom the live environment instead of a module-import snapshot, so CLI--liband runtime env overrides propagate correctly across providers.- Removed
load_or_installfrom the public API / CLI in favor ofinstall(), and promotedno_cacheinto the shared lifecycle surface forBinaryandBinProvider. - Hardened installer resolution across providers: fixed
detect_euid()recursion, fixed dry-run version probing, corrected GoPATH/ env handling, restored Yarn Berry--forcebehavior forno_cache, and normalized installer-binary abspath handling. - Playwright and Puppeteer now share the cleaned
install_root/bin_dirmodel, bootstrap their installer binaries more predictably, and reuse seeded real browser installs in tests to cut redundant downloads. - CI now provisions both Yarn classic and Yarn Berry explicitly, pins pnpm to
10.19.0, and uses workflow concurrency cancellation plus job timeouts to prevent stale runs from piling up. - README and generated docs were refreshed to match the new CLI, lifecycle, and managed-root behavior.
⚠️ Behavioral Changes
- Use
Binary.install()/abx-pkg installinstead ofload_or_install. - CLI logging now defaults to
INFO; enable debug output explicitly with--debugorABX_PKG_DEBUG=1. --no-cache/ABX_PKG_NO_CACHE=1now apply consistently acrossload(),install(),update(),uninstall(), andrun.
🧪 Verification
uv run prek run --all-filespassed on the release commit.- Focused real-provider coverage was exercised for Playwright, Puppeteer, Bun, pnpm, Yarn classic, Yarn Berry, and GoGet lifecycle paths.
Thanks to everyone pushing on the install-root cleanup, browser provider edge cases, and CLI ergonomics. 🛠️