wp-cli/package-command
Lists, installs, and removes WP-CLI packages, community-maintained projects that extend WP-CLI. Commands include wp package list, wp package install (via Composer), wp package uninstall, and wp package browse to explore available packages.
^/~/@stable/dev-* constraints). Choosing it commits us to Composer as the packaging format for internal ops tooling.--no-interaction, --format=json|csv|ids|yaml, and wp package is-installed (exit 0/1) make it scriptable. That supports gating pipelines on tool presence/version and generating machine-readable inventories of installed commands.list --fields=name,version,update,update_version and update give us a cheap drift/audit report across client sites — useful for SLA reporting and security-patch cadence on ops tooling.wp package browse is explicitly deprecated and frozen. Any roadmap item involving in-product package discovery ("browse and install community commands from a dashboard") has no supported data source — deprioritize or fund a replacement index separately.--insecure (disables TLS validation) and the GitHub-token-in-global-Composer-config workflow are policy questions, not code questions: we decide whether those flags are permitted in CI.Consider it when:
wp package list --format=json) or a pre-flight gate before running a pipeline step (wp package is-installed vendor/pkg).~/.wp-cli/packages/, overridable with WP_CLI_PACKAGES_DIR) as the operational model — e.g. an ops workstation or a build agent, not an application repo.Look elsewhere — or deliberately constrain use — when:
wp package browse reads a permanently frozen index. Build discovery elsewhere.To executives: This is not a new purchase or a new dependency — it is already bundled with WP-CLI, MIT-licensed, and maintained by the WP-CLI project. The cost of adoption is process discipline, not licensing or integration. Its value is narrow and real: it lets us install, pin, audit, and update the command-line tooling our WordPress operations depend on, in an automatable way. The risks are equally narrow: the package-discovery command depends on a deprecated index (so no roadmap bets there), and installs are per-user rather than per-project (so it must not become our reproducibility story). Recommendation: adopt as part of a WP-CLI standardization effort, provision at image build rather than at runtime, and pin versions.
To engineering: Treat this as a provisioning primitive, not a deployment tool. Use wp package install <name>:<constraint> at image-build time with --no-interaction; never rely on the home-directory install as the source of truth for what's running. Prefer declaring these packages in the project's composer.json where you need reviewable, lockfile-backed reproducibility, and use this command only where per-user tooling is genuinely the model. Use wp package is-installed as a pipeline gate and wp package list --format=json --skip-update-check for fast inventory (--skip-update-check also avoids GitHub/Composer auth flakiness in CI). Block --insecure in CI. Manage GitHub tokens via scoped secrets, not ad-hoc composer config -g on shared agents. Note also that any internal package we distribute must be a valid Composer package and pass Behat-based acceptance tests — that's real engineering overhead to budget for, not a free distribution channel.
To security and platform: Three items need explicit sign-off rather than default acceptance: the --insecure flag (TLS validation bypass, MITM exposure), the GitHub Personal Access Token being written to global Composer config on build agents, and the unpinned install path. All three are manageable with policy; none is a blocker.
Honest framing to avoid: Do not describe this as a Laravel or application-framework package. It is WordPress operations tooling. Any pitch that places it in a Laravel service's dependency graph will not survive technical review.
How can I help you explore Laravel packages today?