The official aux4 package manager.
aux4/pkger is the core package management system for the aux4 ecosystem. It enables you to discover, install, manage, and publish aux4 packages from the aux4 hub. Whether you're using existing packages to extend your CLI capabilities or creating and sharing your own packages, aux4/pkger provides all the tools you need.
The package manager also handles system-level dependencies, automatically installing required tools from package managers like brew, apt, pkgx, or npm when packages need them.
aux4 aux4 pkger install aux4/pkger
List all installed packages:
aux4 aux4 pkger list
Install a package from the aux4 hub:
aux4 aux4 pkger install scope/package-name
Install several packages at once:
aux4 aux4 pkger install aux4/2table aux4/adapter aux4/config
Install from a specific repository:
aux4 aux4 pkger install scope/package-name --repository private
Install from a local file:
aux4 aux4 pkger install --fromFile ./my-package.tar.gz
Force a reinstall or downgrade. --force overrides the currently installed version regardless of dependencies, so you can reinstall a package or drop to an older version without first uninstalling everything that depends on it:
aux4 aux4 pkger install scope/package-name@1.2.0 --force
View all installed packages:
aux4 aux4 pkger list
Filter packages by name:
aux4 aux4 pkger list --filter aws
Show packages with their dependencies:
aux4 aux4 pkger list --showDependencies
list and search answer "which packages exist"; find answers "which command do I run". It searches the documentation of everything installed — each package README and every command man page — and returns runnable command lines:
aux4 aux4 pkger find "get a configuration value"
aux4 config get (aux4/config)
If file is not provided it will look for a file named config.yaml, config.yml, or config.json in the current directory.
aux4 config set (aux4/config)
If file is not provided it will look for a file named config.yaml, config.yml, or config.json in the current directory.
The first line of each result is the exact command to run, with its package beside it; the line below is a short description from its documentation. Search by what you want to do rather than by package name — pkger list --filter returns package names, which are not commands.
Limit the number of results:
aux4 aux4 pkger find "send an email" --limit 3
The index lives at ~/.aux4.config/.pkg-index/index.json. You should never need to manage it: it is built lazily the first time you search, and rebuilt automatically whenever your set of installed packages has changed, by comparing the index against the package ledger. Installing and uninstalling also rebuild it ahead of time, so the cost rarely lands on a search. To force a rebuild:
aux4 aux4 pkger reindex
Display the manual for a package:
aux4 aux4 pkger man aux4/aws
Open documentation in your browser:
aux4 aux4 pkger man aux4/aws --browser
Output raw markdown:
aux4 aux4 pkger man aux4/aws --markdown
Remove an installed package:
aux4 aux4 pkger uninstall scope/package-name
Remove several packages at once:
aux4 aux4 pkger uninstall aux4/2table aux4/adapter
Force the removal of a package even when other packages still depend on it. --force cascades: the package and every package that depends on it (directly or transitively) are removed together, so the package database is never left with a dangling reference:
aux4 aux4 pkger uninstall scope/package-name --force
verify checks installed packages against the hub's authoritative per-file integrity manifest for the exact version that is installed. At publish time the hub records a SHA-256 of every file shipped in a package (the .aux4, the dist/ binaries, and lib/*.mjs), keyed by platform. verify fetches that manifest over HTTPS for the pinned version recorded in the lockfile (all.json) — never latest — re-hashes the files on disk, and compares them to the hub's copy. This detects post-install local tampering by anchoring the check to a trusted remote reference. Packages are fetched and hashed in parallel:
aux4 aux4 pkger verify
Verifying installed packages against the hub...
✓ aux4/aux4 5.1.29 (matches hub)
✓ aux4/config 1.0.0 (matches hub)
Rebuilding global.aux4 from verified sources...
✓ global.aux4 rebuilt
Summary: 2 verified, 0 unverifiable, 0 FAILED
Each package is reported as ✓ OK (matches hub), ! unverifiable (no hub reference for the pinned version — the package/version is not on the hub, or the hub returned no manifest), or x CHANGED (a changed, missing, or extra file, a missing directory, or a version that disagrees with the lockfile). When every package verifies cleanly, verify re-derives global.aux4 from the verified sources; if verification fails, it refuses to rebuild from unverified sources and exits non-zero.
Strict vs --soft: by default verify is strict and fail-closed — a mismatch fails, and an unverifiable package also fails. With --soft, a genuine mismatch still fails (a real tamper is never hidden), but an unverifiable package is tolerated as a warning and its files are compared against the local install-time manifest to report drift (local drift: none or the drifted files):
aux4 aux4 pkger verify --soft
Note: until the hub ships per-file manifests and the existing catalog is backfilled, most packages have no hub manifest yet and are reported as unverifiable. During that window, use --soft to tolerate unverifiable packages while still catching genuine tampering.
Note: on macOS the installer ad-hoc codesigns dist/darwin/** binaries after extraction, which mutates them, so their on-disk hash cannot match the hub manifest. verify does not hard-fail those files; it reconciles them against the local install-time manifest and labels them codesigned locally, hub re-hash n/a. Every other file stays hub-anchored.
Pass a filter to verify only a subset of packages. This is a diagnostic mode: it checks the matching packages but intentionally skips the global.aux4 rebuild, since only part of the tree was verified:
aux4 aux4 pkger verify aux4/config
Build a package including specific files:
aux4 aux4 pkger build .aux4 LICENSE README.md
Build a package including all files in the current directory:
aux4 aux4 pkger build .
Specify an output directory:
aux4 aux4 pkger build . --out ./dist
The build command generates a .tar.gz package file ready for publishing.
Your package must include a .aux4 configuration file:
{
"scope": "your-scope",
"name": "package-name",
"version": "1.0.0",
"description": "Your package description",
"license": "MIT",
"dependencies": [
"aux4/aux4"
],
"profiles": [
...
]
}
Include a LICENSE file and a README.md for documentation.
First, login to the aux4 hub:
aux4 aux4 login
You can create an aux4 account if you don't have one.
Then publish your package:
aux4 aux4 pkger publish my-package-1.0.0.tar.gz
Publish to a specific repository:
aux4 aux4 pkger publish my-package-1.0.0.tar.gz --repository private
Logout when finished:
aux4 aux4 logout
aux4/pkger can automatically manage system-level dependencies for packages. When a package requires external tools, the system installer handles installation automatically.
In your .aux4 file, specify system dependencies:
{
"scope": "your-scope",
"name": "package-name",
"version": "1.0.0",
"system": [
["test:aws --version", "pkgx:aws", "brew:awscli"],
["test:jq --version", "pkgx:jq", "brew:jq"]
],
"profiles": [
...
]
}
Each dependency is an array containing:
Users need one of these system installers to install packages with system dependencies:
Install a system package:
aux4 aux4 pkger system brew install jq
Uninstall a system package:
aux4 aux4 pkger system brew uninstall jq
Add documentation for specific commands by creating markdown files in a man/ directory:
man/<profile_name>__<command_name>.md
Replace colons in profile names with underscores. For example, documentation for the build command in the aux4:pkger profile would be:
man/aux4_pkger__build.md
Include usage examples by creating test files in a test/ directory:
test/<profile_name>__<command_name>.test.md
This package is licensed under a Commercial License.
See LICENSE for details.