wpc v2 renames its commands. What used to be wpc plugin:ls is now
wpc plugin list — one word for the thing, one word for what you do to it, the
shape you already know from docker, git and gh.
The command names you have written keep working. Every v1 name is a
permanent alias, and so is --paged. A pipeline pulling the latest Docker
image moves to v2 without anyone typing a command, so renaming things must not
break it.
v2 does change how failures are reported and how JSON answers are shaped. If a
script reads exit codes or parses --output=json, read
what changed for scripts before you upgrade.
The new names
The
theme:* commands follow the same pattern. The list option --paged is
now --page; --paged keeps working.
ls and start survive as aliases of the new names too, so wpc plugin ls
does what you would expect.
What you will see
Run an old name, or--paged, and wpc prints one line on standard error:
wpc plugin:ls --output=json | jq keeps
working untouched, and the notice still shows up in your CI log — which is the
only place it can reach whoever maintains the pipeline.
It is silenced by --output=json, by -q/--quiet, and by an environment
variable if you would rather deal with it later:
We do not plan to remove the old names. The notice exists so new
documentation, new scripts and new colleagues converge on one spelling — not
as a countdown.
What changed for scripts
Exit codes
Every command now uses the same three codes:
Several failures moved from
1 to 2, and a push refused by the registry moved
from 2 to 1. If a script compares exit codes to specific values, check them
against this table.
Stricter input
- An unknown
--outputvalue is rejected with exit code2. v1 silently fell back tohuman. list,info,pushandbuild --pushrequire an API key and fail with exit code2before any network call when it is missing.init,build(without--push),manifestandself-updatedo not need one.build --headerrequires theName=valueform. A value without=(e.g.--header "Version: 1.0.1") fails with exit code2; v1 silently ignored it.inforequires a slug.initalways turns an explicit slug into a valid one (my_pluginbecomesmy-plugin).
Standard output and standard error
Inhuman and plain modes, stdout only carries the answer. Errors, progress
(now one line per step instead of a progress bar) and notices go to stderr.
JSON answers
- Every error is one object on stdout,
{"code", "message", "errors"}, wherecodeis the HTTP status or the exit code, never0. -q/--quietno longer suppresses the JSON answer.- Slashes are no longer escaped (
"https://…"instead of"https:\/\/…"). - New shapes:
initanswers{"path": "…"};manifest --get <Header>answers{"<Header>": "value"}, e.g.{"Version": "1.0.0"};self-updateanswers in JSON;wpcandwpc listanswer{"usage", "commands", "options"}.
In a terminal
listandinfoare interactive: browse with the arrow keys. Use--output=plainorWPC_NO_TUI=1for the static tables.initopens a wizard; the line-by-line questions remain outside a terminal. Options passed on the command line are no longer overwritten by the defaults, and the name is optional (it is asked for, or fails with exit code2under-n).init --no-interactionnow fills in theAuthorandAuthor URIknown to your organization when you do not pass them, as the interactive mode does.- Tables have a new style, and the theme list shows
downloaded,creation_timeanddescription. - The “Did you mean… run instead?” suggestion is gone.
Docker image
latestnow runs PHP 8.5 instead of 8.2. Use thephp8.2tag, or<version>-php8.2, to stay on PHP 8.2.- The image is slimmer: it keeps the
zipextension, composer, git and unzip, but drops the other PHP extensions (pdo, gd, intl, bcmath…). If your build needs them, use your own image (see Integrate in your CI/CD).
New in v2
- The
<noun> <verb>grammar,wpc helpand shell completion. wpc self-update, with--check,--rollbackand--major.- Interactive mode and the
WPC_NO_TUI,WPC_ACCENT_COLOR,WPC_NO_UPDATE_CHECKandWPC_NO_DEPRECATED_WARNINGenvironment variables.
Discovering the commands
wpc on its own now lists the two nouns rather than every command at once:
wpc plugin
offers the verbs: