# wp-deployer

> Deploy WordPress plugin and theme to the WordPress.org repo.

Latest version **2.1.0** (published 2026-08-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install wp-deployer
pnpm add wp-deployer
yarn add wp-deployer
bun add wp-deployer
```

Provides the command `wp-deployer`.

## Health

**Score 55/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2026-08-05 |
| First published | 2022-08-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Node | >=22.0.0 |
| Dependencies | 4 |
| Unpacked size | 38.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 6 |
| Author | Nilambar Sharma |
| Maintainers | nilambar |
| Keywords | WordPress, plugin, theme, deploy |

## Links

- npm: https://www.npmjs.com/package/wp-deployer
- Repository: https://github.com/ernilambar/wp-deployer
- Homepage: https://github.com/ernilambar/wp-deployer#readme
- Issues: https://github.com/ernilambar/wp-deployer/issues
- npm.io page: https://npm.io/package/wp-deployer

## Dependencies (4)

- [ajv](https://npm.io/package/ajv.md) ^8.20.0
- [chalk](https://npm.io/package/chalk.md) ^5.6.2
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.3.6
- [minimist](https://npm.io/package/minimist.md) ^1.2.8

## Recent versions

- 2.1.0 (latest) — 2026-08-05
- 2.0.1 — 2026-07-09
- 2.0.0 — 2026-03-19
- 1.0.3 — 2022-08-30
- 1.0.2 — 2022-08-29
- 1.0.1 — 2022-08-28
- 1.0.0 — 2022-08-28

## README

# wp-deployer

Deploy WordPress plugin and theme to the WordPress.org plugin and theme directories.

## Install

Requires **Node 22 or later**.

```sh
npm install --save-dev wp-deployer
```

## Usage

Run from your project root (the directory that contains your config — see [Config file](#config-file)):

```sh
npx wp-deployer
```

CLI sub-commands:

```sh
npx wp-deployer --help
npx wp-deployer --version
npx wp-deployer --assets
npx wp-deployer --dry-run
npx wp-deployer --config path/to/config.json
```

Use `--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:

```sh
npm run wpdeploy
```

## Config file

Settings can come from one of three places:

* **`wpDeployer`** key in `package.json`.
* **`wp-deployer.json`** in the project root — same shape as the `wpDeployer` object, as a standalone file.
* **`--config <path>`** — an explicit path to a config file, same shape.

`package.json#wpDeployer` and `wp-deployer.json` are **mutually exclusive**. If both exist, wp-deployer exits with an error rather than guessing which one to use — remove one. `--config` bypasses both and is used as-is.

## SVN authentication

wp-deployer is intended for **deploying from your own computer** to WordPress.org SVN. It does **not** store or read an SVN password.

* **`username`** in `wpDeployer` is passed to `svn` as `--username` only.
* **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](https://developer.wordpress.org/plugins/wordpress-org/how-to-use-subversion/) for account access.

On a **shared** computer, review SVN’s credential storage and clear saved auth when you are done if needed.

## Settings

* **slug** : Plugin or theme slug; Default: `name` value in `package.json`
* **username** : WordPress repository username; This is required.
* **repoType**: Repo type; `plugin` or `theme`; 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 `plugin` only; Default: `true`
* **deployTag**: Whether to create a tag for this version from trunk after a trunk deploy. Set to `false` to skip tagging. If `true`, `deployTrunk` must also be `true` (tag-only deploys are not supported). Applies for `plugin` only; Default: `true`
* **deployAssets**: Whether to deploy assets. Applies for `plugin` only; Default: `false`
* **assetsDir**: The directory where your plugins assets are kept; Default: `.wordpress-org`
* **tmpDir**: Parent directory for the SVN working copy (`slug` is appended). Default: system temp directory from `os.tmpdir()` (not hard-coded `/tmp`).
* **earlierVersion**: Last released version. Applies for `theme` only; This is required if `repoType` is `theme`.

## Example

### Deploy plugin

In `package.json`:

```json
...
"wpDeployer": {
  "username": "yourusername",
  "buildDir": "dist"
},
...
"scripts": {
  ...
  "wpdeploy": "wp-deployer"
}
```

### Deploy theme

In `package.json`:

```json
...
"wpDeployer": {
  "repoType": "theme", // This is required
  "earlierVersion": "1.0.2", // Required; Keep last released version
  "username": "yourusername",
  "buildDir": "dist"
},
...
"scripts": {
  ...
  "wpdeploy": "wp-deployer"
}
```

## License

[MIT](https://opensource.org/licenses/MIT)

---
_Source: https://npm.io/package/wp-deployer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
