Skip to content

Releases: ArchiveBox/abxpkg

v1.11.81

31 May 08:11
99cd52f

Choose a tag to compare

v1.11.80

31 May 08:04
dc646fc

Choose a tag to compare

Full Changelog: v1.11.79...v1.11.80

v1.11.10

27 May 19:47
9d8b0c3

Choose a tag to compare

Full Changelog: v1.11.9...v1.11.10

v1.11.9

27 May 17:56
e7a180d

Choose a tag to compare

Full Changelog: v1.11.8...v1.11.9

v1.11.8

27 May 11:32
05d31f6

Choose a tag to compare

What's Changed

  • Add docs_url support across all binary providers by @pirate in #34
  • Add search() method to query package indexes across all providers by @pirate in #35

Full Changelog: v1.10.7...v1.11.8

v1.10.7

27 Apr 14:56
0c8f0c6

Choose a tag to compare

Highlights

  • Added new shell-facing CLI commands: abxpkg env, abxpkg activate, and hidden abxpkg exec alias support. env now reuses the run resolution path, emits dotenv-style output with shell-safe quoting, and activate can generate bash, zsh, and fish activation 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 abxpkg expects.
  • 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 env now emits raw KEY=value output by default, only quotes values that need quoting, and supports provider-aware runtime env assembly.
  • abxpkg activate prints sourceable shell output with shell-specific guidance comments and supports --bash, --zsh, and --fish.
  • abxpkg run --help and abxpkg exec --help now show subcommand help correctly instead of trying to resolve --help as 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

14 Apr 23:47
df70e87

Choose a tag to compare

Highlights

  • Fixed provider cache ownership so dependency cache entries no longer masquerade as installed binaries. This makes update / upgrade pick real owning providers again, e.g. brew can upgrade node even when other providers cache node as an upstream dependency.
  • Added shared BinProvider.depends_on_binaries() and BinProvider.installed_binaries() APIs and switched provider sections in abxpkg version to use them directly.
  • Tightened update verification so normal post-update checks reuse cached installer dependencies when appropriate, while explicit --no-cache still forces a fully fresh path.
  • Cleaned up CLI output: provider binary rows in abxpkg version now 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 None handling for postinstall_scripts / min_release_age, managed ABXPKG_LIB_DIR install roots, and the current visible CLI surface.

v1.10.4

14 Apr 22:53
4d78ca7

Choose a tag to compare

abxpkg v1.10.4

✨ Highlights

  • Added richer CLI inspection commands with abxpkg version and abxpkg 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 --script option merging so same-name script dependencies now contribute defaults to the final run binary without overriding an explicit --binproviders / ABXPKG_BINPROVIDERS selection.
  • Hardened the base provider action flow so nullable security options are resolved to real provider/action defaults before handlers run, instead of leaking None into provider-specific install/update code.

🧭 Quick Examples

abxpkg version
abxpkg version yt-dlp
abxpkg list
abxpkg list env playwright chromium
abxpkg --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 list flows and refreshed the generated docs/site output to match the current provider/runtime model.
  • Refined cache handling so provider-local derived.env entries 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 env and bash still resolve and validate binaries during install() / update(), including enforcing min_version on the final loaded binary instead of silently accepting a mismatch.
  • Resolved nullable postinstall_scripts / min_release_age in the base BinProvider.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_BINPROVIDERS remain 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, and puppeteer now cache node
    • pip, ansible, and pyinfra now cache python
    • gem now caches ruby
  • Fixed GoGetProvider installer resolution so go is loaded through a proper go version override instead of relying on generic --version probing.
  • Tightened BrewProvider behavior so postinstall_scripts=False is only claimed for brew install, not brew upgrade, which has no equivalent --skip-post-install flag.
  • Improved script-mode dependency merging so same-name dependencies (for example node in run --script node) merge their defaults into the final run binary generically instead of only special-casing min_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 set ABXPKG_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 enforce min_version on the result.
  • Passing nullable security fields through provider instances or provider overrides is safer now: None means “use the provider/action default”, not “let a provider handler crash on an assertion”.

v1.10.2

13 Apr 11:03
b677650

Choose a tag to compare

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.

v1.9.30

12 Apr 19:39
b2bf7f6

Choose a tag to compare

abx-pkg v1.9.30

✨ Highlights

  • Added abx-pkg run --script, which reads inline /// script metadata blocks so scripts can declare binary dependencies and tool.abx-pkg settings right at the top of the file.
  • Unified managed providers around shared install_root / bin_dir behavior, and made ABX_PKG_LIB_DIR resolve from the live environment so CLI --lib overrides behave consistently.
  • Added first-class --no-cache and --debug CLI controls, and tightened the shared binary lifecycle so load() / 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() and run --script now parse comment-prefix-agnostic /// script blocks, 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_root and bin_dir, while legacy provider-specific root aliases are still accepted through validation aliases.
  • abx_pkg_install_root_default() now reads ABX_PKG_LIB_DIR from the live environment instead of a module-import snapshot, so CLI --lib and runtime env overrides propagate correctly across providers.
  • Removed load_or_install from the public API / CLI in favor of install(), and promoted no_cache into the shared lifecycle surface for Binary and BinProvider.
  • Hardened installer resolution across providers: fixed detect_euid() recursion, fixed dry-run version probing, corrected Go PATH / env handling, restored Yarn Berry --force behavior for no_cache, and normalized installer-binary abspath handling.
  • Playwright and Puppeteer now share the cleaned install_root / bin_dir model, 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 install instead of load_or_install.
  • CLI logging now defaults to INFO; enable debug output explicitly with --debug or ABX_PKG_DEBUG=1.
  • --no-cache / ABX_PKG_NO_CACHE=1 now apply consistently across load(), install(), update(), uninstall(), and run.

🧪 Verification

  • uv run prek run --all-files passed 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. 🛠️