Deploy WordPress plugin and theme to the WordPress.org plugin and theme directories.
Requires Node 22 or later.
npm install --save-dev wp-deployerRun from your project root (the directory that contains package.json with your wpDeployer config):
npx wp-deployerCLI sub-commands:
npx wp-deployer --help
npx wp-deployer --version
npx wp-deployer --assets
npx wp-deployer --dry-runUse --assets when you only want to push the assets directory (e.g. screenshots, banner) to WordPress.org and skip trunk and tag deployment.
Use --dry-run to run checkout, clear/copy, and local svn add / svn delete preparation only. No svn commit or remote tag copy runs, so nothing is pushed—useful to inspect the working copy before a real deploy.
Or add a script to package.json and run it:
npm run wpdeploywp-deployer is intended for deploying from your own computer to WordPress.org SVN. It does not store or read an SVN password.
usernameinwpDeployeris passed tosvnas--usernameonly.- Passwords are handled entirely by your Subversion client (prompt in the terminal and/or the OS keychain / SVN credential cache, depending on your setup).
- The first time you deploy (or after credentials expire), SVN may ask for your password. Later runs often do not prompt, because SVN reuses cached credentials—that is normal and secure on a personal machine.
- Follow WordPress.org’s current documentation for account access.
On a shared computer, review SVN’s credential storage and clear saved auth when you are done if needed.
- slug : Plugin or theme slug; Default:
namevalue inpackage.json - username : WordPress repository username; This is required.
- repoType: Repo type;
pluginortheme; Default:plugin. - buildDir: The directory where your theme or plugin exists as you want it on the repo. Default:
dist - deployTrunk: Whether to deploy to trunk. This could be set to false to only commit the assets directory. Applies for
pluginonly; Default:true - deployTag: Whether to create a tag for this version from trunk after a trunk deploy. Set to
falseto skip tagging. Iftrue,deployTrunkmust also betrue(tag-only deploys are not supported). Applies forpluginonly; Default:true - deployAssets: Whether to deploy assets. Applies for
pluginonly; Default:false - assetsDir: The directory where your plugins assets are kept; Default:
.wordpress-org - tmpDir: Parent directory for the SVN working copy (
slugis appended). Default: system temp directory fromos.tmpdir()(not hard-coded/tmp). - earlierVersion: Last released version. Applies for
themeonly; This is required ifrepoTypeistheme.
In package.json:
...
"wpDeployer": {
"username": "yourusername",
"buildDir": "dist"
},
...
"scripts": {
...
"wpdeploy": "wp-deployer"
}In package.json:
...
"wpDeployer": {
"repoType": "theme", // This is required
"earlierVersion": "1.0.2", // Required; Keep last released version
"username": "yourusername",
"buildDir": "dist"
},
...
"scripts": {
...
"wpdeploy": "wp-deployer"
}