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.
The install verb is add. wheels packages install <name> never reaches this command — LuCLI’s built-in extension installer intercepts the literal install subcommand and prints No git or extension dependencies to install without touching vendor/.
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>.