Command Line Tools
wheels packages
wheels packages is the CLI surface for the wheels-packages registry — a curated, git-based distribution channel for Wheels ecosystem packages. Every verb talks to the registry over plain HTTPS and installs into vendor/<name>/, where PackageLoader picks it up on next reload.
There is no ForgeBox and no CommandBox. The registry manifest is authoritative, tarballs live on the registry's GitHub Releases, and every tarball has a sha256 in the manifest that the installer verifies before extraction. Supply-chain attacks via force-pushed tags or drifted source archives are defeated by this design.
Synopsis
Section titled “Synopsis”wheels packages list [--tag=<tag>]wheels packages search <query>wheels packages show <name>wheels packages add <name>[@<version>] [--force]wheels packages update <name> --yeswheels packages update --all --yeswheels packages remove <name>wheels packages registry refreshwheels packages registry info| Verb | Description |
|------|-------------|
| list | Show every package in the registry, optionally filtered by --tag. |
| search | Substring match against name, description, and tags. |
| show | Detail page for a package: versions, homepage, license, install state. |
| add | Download, verify, extract into vendor/<name>/. |
| update | Re-install the latest compatible version. Explicit: requires --yes. |
| remove | Delete vendor/<name>/. Refuses dirs without a package.json. |
| registry refresh | Bust the 24h cache. |
| registry info | Print registry URL, branch, cache state. |
Design principles
Section titled “Design principles”- Explicit updates only.
updateis never implicit. There is no auto-pull on reload, no background upgrade. This is the only defense against malicious version-bump attacks — the user reviews every bump. - Registry-hosted tarballs.
tarballURLs always point atwheels-dev/wheels-packagesreleases, never at the author's repo. GitHub's source-archive URLs drift; release assets don't. - sha256 is mandatory. Installation aborts on mismatch. There is no
--skip-checksumflag. - 24h manifest cache.
~/.wheels/cache/packages/. Respects GitHub's 60 req/hr unauthenticated limit.registry refreshbusts it.
Configuration
Section titled “Configuration”| Env var | Purpose | Default |
|---------|---------|---------|
| WHEELS_PACKAGES_REGISTRY | Override the registry <org>/<repo>. Used for forks, mirrors, and test registries. | wheels-dev/wheels-packages |
Writing a package
Section titled “Writing a package”See the registry's CONTRIBUTING.md for the full submission checklist. The tl;dr:
- Build your package in its own repo with a valid
package.json(same schema as the first-party packages — seewheels-sentryfor a reference). - Tag a release on your repo (e.g.
v1.0.0). - Open a PR to
wheels-packagesaddingpackages/<your-name>/manifest.jsonwith the version entry (leavetarballandsha256blank — CI fills them). - After merge, the
mirror-tarballworkflow packages your tag, uploads it as a registry release asset, computes the sha256, and commits it back. - Users can now
wheels packages add <your-name>.