{"id":26010,"date":"2026-06-17T11:13:51","date_gmt":"2026-06-17T09:13:51","guid":{"rendered":"https:\/\/wpulike.com\/?p=26010"},"modified":"2026-06-17T15:20:00","modified_gmt":"2026-06-17T13:20:00","slug":"introducing-wp-toolkit-wordpress-plugin-developers","status":"publish","type":"post","link":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/","title":{"rendered":"Introducing wp-toolkit: Build &amp; Deploy WordPress Plugins"},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Compile assets. Strip dev files. Zip the plugin. Deploy. Tag SVN. Every WordPress plugin build tool should make that routine reliable \u2014 not leave you hoping source SCSS didn&#8217;t ship in the zip.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you maintain WordPress plugins, you know the release ritual: compile assets, strip dev files, bump versions in three places, zip it, rsync to staging, tag SVN, hope nothing broke. The work is repetitive. The mistakes are expensive. Therefore, we built a <strong>WordPress plugin build tool<\/strong> that handles the whole loop in one place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That tool is <strong>wp-toolkit<\/strong> \u2014 an npm-based build and deploy CLI for <strong>any<\/strong> WordPress plugin. One config file in your repo. One set of commands for local dev, production builds, server deploys, and WordPress.org releases. We use it every day on WP ULike and our other plugins. Now we&#8217;re sharing it with other plugin developers who want a modern workflow without Webpack complexity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Package: <code>@alimir\/wp-toolkit<\/code> \u00b7 <a href=\"https:\/\/www.npmjs.com\/package\/@alimir\/wp-toolkit\" rel=\"nofollow noopener\" target=\"_blank\">npm<\/a> \u00b7 <a href=\"https:\/\/github.com\/Alimir\/wp-toolkit\" rel=\"nofollow noopener\" target=\"_blank\">GitHub<\/a> \u00b7 MIT license<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is wp-toolkit, our WordPress plugin build tool?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>wp-toolkit<\/strong> is a config-first CLI for the whole plugin release loop. Install it as a dev dependency, add <code>wp-toolkit.config.mjs<\/code> to your plugin root, and you get a full pipeline:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Compile assets<\/strong> \u2014 SCSS to CSS (Sass + LightningCSS), JavaScript concat + Terser minify<\/li>\n\n\n\n<li><strong>Package releases<\/strong> \u2014 copy a clean production tree to <code>build\/&lt;slug&gt;\/<\/code> and zip it<\/li>\n\n\n\n<li><strong>Deploy<\/strong> \u2014 rsync over SSH to named targets (<code>prod<\/code>, <code>staging<\/code>, and more)<\/li>\n\n\n\n<li><strong>Publish to WordPress.org<\/strong> \u2014 sparse SVN checkout, sync trunk + assets, version tags, safety checks<\/li>\n\n\n\n<li><strong>Generate translations<\/strong> \u2014 <code>.pot<\/code> via WP-CLI, JSON from <code>.po<\/code> files<\/li>\n\n\n\n<li><strong>Watch mode<\/strong> \u2014 rebuild SCSS and JS on save during development<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Every asset path is explicit in config \u2014 wp-toolkit does not guess filenames from your slug. In addition, required sections are validated on startup with clear errors when something is missing or invalid.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install @alimir\/wp-toolkit --save-dev<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-style-default\"><img decoding=\"async\" width=\"1229\" height=\"385\" src=\"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/npm-wp-toolkit.png\" alt=\"WordPress plugin build tool wp-toolkit npm package for plugin developers\" class=\"wp-image-26015\" srcset=\"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/npm-wp-toolkit.png 1229w, https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/npm-wp-toolkit-300x94.png 300w, https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/npm-wp-toolkit-1024x321.png 1024w, https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/npm-wp-toolkit-768x241.png 768w\" sizes=\"(max-width: 1229px) 100vw, 1229px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why we built this plugin build tool<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Shipping a WordPress plugin means juggling more than code. Asset builds, packaging, deploy scripts, SVN steps, and translation files often live in different places \u2014 and every plugin does it slightly differently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because of that, we wanted one repeatable workflow instead of a pile of one-off scripts that only one person on the team fully understands. In addition, we wanted one standard workflow that handles:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Free plugins on WordPress.org<\/strong> \u2014 build, validate, publish to SVN<\/li>\n\n\n\n<li><strong>Commercial plugins<\/strong> \u2014 build, rsync to servers, versioned zip names<\/li>\n\n\n\n<li><strong>Hybrid teams<\/strong> \u2014 same tool, different config per plugin<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">wp-toolkit is the result: small, focused, and built for how WordPress plugins actually ship. As a result, you get one command set whether you publish to WordPress.org or deploy to a private server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What this plugin build tool is (and isn&#8217;t)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>It is:<\/strong> an asset build tool for typical plugin pipelines; a production packaging tool with sensible default excludes; a deploy helper for rsync over SSH; and a WordPress.org release assistant with guardrails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>It is not:<\/strong> a JavaScript bundler like Webpack or Vite (no module graph, no HMR); a WordPress coding framework; or a CI\/CD platform \u2014 though it plays nicely in GitHub Actions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your plugin needs concat + minify for front-end and admin scripts, SCSS compilation, and a reliable zip\/deploy\/release flow, wp-toolkit fits. However, if you&#8217;re building a React SPA inside a plugin, you&#8217;ll still want a bundler for that part \u2014 wp-toolkit handles the WordPress plugin lifecycle around it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the config is organized<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">All plugin-specific settings live in <code>wp-toolkit.config.mjs<\/code>. The file follows one consistent layout \u2014 identity, assets, build output, then delivery options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Identity<\/strong> \u2014 <code>slug<\/code>, <code>mainFile<\/code>, <code>textDomain<\/code><\/li>\n\n\n\n<li><strong>assets<\/strong> \u2014 <code>js.bundles<\/code>, <code>css.sassEntries<\/code> (use <code>[]<\/code> \/ <code>{}<\/code> when unused)<\/li>\n\n\n\n<li><strong>build<\/strong> \u2014 <code>excludes<\/code>, packaging options, preprocess flags, hooks<\/li>\n\n\n\n<li><strong>release<\/strong> \u2014 WordPress.org SVN (optional)<\/li>\n\n\n\n<li><strong>deploy<\/strong> \u2014 rsync targets for commercial or private plugins (optional)<\/li>\n\n\n\n<li><strong>i18n<\/strong> \u2014 POT generation (optional)<\/li>\n\n\n\n<li><strong>variants<\/strong> \u2014 alternate builds for regional or white-label editions (optional)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nothing is inferred from your slug. You declare every JS bundle output, every SCSS entry, and every exclude path yourself \u2014 so the config always matches your plugin folder structure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Plugin build tool commands at a glance<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>wp-toolkit build<\/strong> \u2014 full production build + zip<\/li>\n\n\n\n<li><strong>wp-toolkit build:js<\/strong> \u2014 JavaScript only<\/li>\n\n\n\n<li><strong>wp-toolkit build:css<\/strong> \u2014 SCSS\/CSS only<\/li>\n\n\n\n<li><strong>wp-toolkit dev<\/strong> \u2014 watch and rebuild assets<\/li>\n\n\n\n<li><strong>wp-toolkit deploy [name]<\/strong> \u2014 rsync build\/ to server (default: prod)<\/li>\n\n\n\n<li><strong>wp-toolkit product [name]<\/strong> \u2014 build, then deploy<\/li>\n\n\n\n<li><strong>wp-toolkit release<\/strong> \u2014 build, then publish to WordPress.org SVN<\/li>\n\n\n\n<li><strong>wp-toolkit i18n<\/strong> \u2014 generate .pot (requires WP-CLI)<\/li>\n\n\n\n<li><strong>wp-toolkit i18n:json<\/strong> \u2014 generate JSON from .po files<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Release safety flags:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WP_RELEASE_DRY_RUN=1 npm run release   # preview SVN changes, no commit\nWP_RELEASE_YES=1 npm run release       # skip interactive confirmation<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Getting started with the WordPress plugin build tool<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Install the build tool and copy config<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install @alimir\/wp-toolkit --save-dev\ncp node_modules\/@alimir\/wp-toolkit\/wp-toolkit.config.example.mjs wp-toolkit.config.mjs\ncp node_modules\/@alimir\/wp-toolkit\/.env.example .env<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First, commit <code>wp-toolkit.config.mjs<\/code>. Also, keep <code>.env<\/code> gitignored \u2014 deploy credentials and SVN passwords live there, never in config.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configure identity, assets, and build paths<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most plugins start with identity fields, one JS bundle, one SCSS entry, and build excludes. For WordPress.org plugins, add a <code>release<\/code> block. For commercial plugins, disable SVN and add <code>deploy<\/code> instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export default {\n  slug: 'my-plugin',\n  mainFile: 'my-plugin.php',\n  textDomain: 'my-plugin',\n\n  assets: {\n    js: {\n      bundles: [\n        {\n          sources: ['assets\/js\/src\/app.js'],\n          output: 'assets\/js\/my-plugin.js',\n          minOutput: 'assets\/js\/my-plugin.min.js',\n        },\n      ],\n    },\n    css: {\n      sassEntries: {\n        'assets\/css\/my-plugin.css': 'assets\/sass\/my-plugin.scss',\n      },\n    },\n  },\n\n  build: {\n    excludes: ['assets\/sass', 'assets\/js\/src'],\n  },\n\n  release: {\n    enabled: true,\n    svnUrl: 'https:\/\/plugins.svn.wordpress.org\/my-plugin',\n  },\n};<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For commercial plugins:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>release: { enabled: false },\ndeploy: { prod: { envPrefix: 'DEPLOY_PROD' } },<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Add npm scripts for the build tool<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"scripts\": {\n    \"build\": \"wp-toolkit build\",\n    \"dev\": \"wp-toolkit dev\",\n    \"product\": \"wp-toolkit product\",\n    \"release\": \"wp-toolkit release\",\n    \"i18n\": \"wp-toolkit i18n\"\n  },\n  \"devDependencies\": {\n    \"@alimir\/wp-toolkit\": \"^2.0.1\"\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Build and ship<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>npm run dev          # local development with file watching\nnpm run build        # build\/my-plugin\/ + build\/my-plugin.zip\nnpm run product      # build + rsync to prod\nnpm run release      # build + WordPress.org SVN publish<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s the core loop. Everything else \u2014 extra bundles, hooks, variants, versioned zip names \u2014 is optional when your plugin grows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Plugin build tool features developers use most<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Explicit JS bundles and SCSS entries<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Each JavaScript bundle declares its own <code>sources<\/code>, <code>output<\/code>, and <code>minOutput<\/code>. Front-end and admin scripts? Add another entry under <code>assets.js.bundles<\/code>. CSS-only plugin? Set <code>bundles: []<\/code> and keep your <code>sassEntries<\/code>. You can also list standalone minify targets in <code>assets.js.minify<\/code>, ship unminified CSS locally via <code>assets.css.minifySeparate<\/code>, and extend what <code>dev<\/code> watches through <code>assets.watch<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Build packaging that excludes the right files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">wp-toolkit copies your plugin to <code>build\/&lt;slug&gt;\/<\/code>, strips dev-only files, and zips the result. Use <code>build.excludes<\/code> for paths that never ship, and <code>build.devOnlyFiles<\/code> for files you need locally but not in the zip. By default, <code>validation.inheritExcludes<\/code> also blocks those paths from release zips \u2014 so an exclude in config doubles as a safety check.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trailing whitespace is trimmed from text files in the release bundle by default (<code>build.trimTrailingWhitespace<\/code>). Optional image compression (<code>pngquant<\/code>, <code>jpegoptim<\/code>) runs during build if those tools are installed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pre and post build hooks<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Need to run codegen, compile blocks, or ping Slack before or after a build? Use <code>build.hooks<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>build: {\n  hooks: {\n    preBuild: ['npm run codegen'],\n    postBuild: ['npm run notify:slack'],\n  },\n},<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hooks accept shell strings or objects with <code>command<\/code>, <code>args<\/code>, and <code>cwd<\/code> \u2014 handy when a step lives outside the plugin root.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Release validation before SVN<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before a WordPress.org release, wp-toolkit checks for required files, forbidden dev artifacts, version alignment across <code>package.json<\/code>, the main plugin file, and <code>readme.txt<\/code> Stable tag, and accidental re-release of the same SVN tag. It can also warn when PHP enqueues unminified assets (<code>validation.checkMinifiedAssets<\/code>). Therefore, you catch mistakes before they reach the directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Release uses a <strong>sparse SVN checkout<\/strong> \u2014 fast, quiet, and scoped to what you&#8217;re publishing. You type <code>yes<\/code> to confirm before anything commits.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Build variants<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Need a second zip with different strings or a regional domain swap? Variants handle find-replace, custom zip suffixes, and optional deploy targets:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>variants: {\n  regional: {\n    zipSuffix: '-regional',\n    replacements: [{ from: 'example.com', to: 'example.ir' }],\n    files: ['**\/*.php'],\n    deploy: 'staging',\n  },\n},<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Conditional compilation (LITE \/ PRO \/ DEV)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use preprocess flags in PHP, CSS, or readme files. Configure them under <code>build.preprocess<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/* @if PRO *\/\n\/\/ Pro-only code stripped from free builds\n\/* @endif *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">i18n and versioned zip names<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For translations, <code>npm run i18n<\/code> generates your <code>.pot<\/code> via WP-CLI, and <code>npm run i18n:json<\/code> builds JSON from <code>.po<\/code> files \u2014 configured in the <code>i18n<\/code> section. For commercial plugins, <code>build.zipName<\/code> and <code>build.versionFile<\/code> let you ship versioned zip filenames and include a version txt in the bundle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How we use this WordPress plugin build tool on WP ULike<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WP ULike is a real-world stress test: multiple JS bundles, several SCSS entry points, Gutenberg block sub-builds, preprocess flags for LITE vs PRO code paths, pre-build hooks, WordPress.org SVN releases, and a private production deploy. Our <code>wp-toolkit.config.mjs<\/code> defines every asset path explicitly \u2014 bundles, sass entries, excludes, and delivery targets in one file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One toolchain. Same commands every release. No digging through scattered scripts before you can ship.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements for the build tool<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Node.js 18+<\/li>\n\n\n\n<li><code>zip<\/code> and <code>rsync<\/code> on PATH<\/li>\n\n\n\n<li><code>svn<\/code> \u2014 WordPress.org release only<\/li>\n\n\n\n<li><code>wp<\/code> (WP-CLI) \u2014 <code>i18n<\/code> commands only<\/li>\n\n\n\n<li>Optional: <code>pngquant<\/code>, <code>jpegoptim<\/code> for image compression<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Try it on your next release<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If your release process still feels held together with shell scripts and crossed fingers, this <strong>WordPress plugin build tool<\/strong> is worth an afternoon. Install it from <a href=\"https:\/\/www.npmjs.com\/package\/@alimir\/wp-toolkit\" rel=\"nofollow noopener\" target=\"_blank\">npm<\/a> (<code>npm install @alimir\/wp-toolkit --save-dev<\/code>), copy and edit <code>wp-toolkit.config.mjs<\/code>, run <code>npm run dev<\/code> while you work and <code>npm run build<\/code> before you ship. Then use <code>npm run release<\/code> for WordPress.org or <code>npm run product<\/code> for rsync deploy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.npmjs.com\/package\/@alimir\/wp-toolkit\" rel=\"nofollow noopener\" target=\"_blank\">npm package<\/a> \u00b7 <a href=\"https:\/\/github.com\/Alimir\/wp-toolkit\" rel=\"nofollow noopener\" target=\"_blank\">GitHub repository<\/a> \u00b7 <a href=\"https:\/\/github.com\/Alimir\/wp-toolkit#readme\" rel=\"nofollow noopener\" target=\"_blank\">README &amp; config reference<\/a> \u00b7 <a href=\"https:\/\/github.com\/Alimir\/wp-toolkit\/issues\" rel=\"nofollow noopener\" target=\"_blank\">Report issues<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Built by the team behind <a href=\"https:\/\/wpulike.com\/\">WP ULike<\/a>. MIT licensed. Pull requests welcome.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Frequently asked questions<\/h3>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Is wp-toolkit free?<\/summary>\n<p class=\"wp-block-paragraph\">Yes. wp-toolkit is MIT licensed and free to use on personal, commercial, and client projects.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Do I need wp-toolkit if I already use Webpack or @wordpress\/scripts?<\/summary>\n<p class=\"wp-block-paragraph\">Not necessarily. Bundlers solve module graphs and modern JS tooling. wp-toolkit solves the WordPress plugin release lifecycle: compile classic assets, package a clean zip, deploy, publish to SVN, validate versions. Many teams use both.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can I use wp-toolkit without WordPress.org SVN?<\/summary>\n<p class=\"wp-block-paragraph\">Yes. Set <code>release: { enabled: false }<\/code> and configure <code>deploy<\/code> targets instead. <code>npm run product<\/code> builds and rsyncs to your server.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>What makes wp-toolkit different from a generic build setup?<\/summary>\n<p class=\"wp-block-paragraph\">It is built around how WordPress plugins actually ship: explicit asset bundles, release validation, deploy over rsync, and WordPress.org SVN publishing \u2014 all from one config file and one npm package.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can I use it in CI\/CD?<\/summary>\n<p class=\"wp-block-paragraph\">Yes. Run <code>wp-toolkit build<\/code> in GitHub Actions or similar. For releases, use <code>WP_RELEASE_DRY_RUN=1<\/code> in CI to preview, and run the actual SVN publish from a trusted environment with credentials in secrets.<\/p>\n<\/details>\n\n","protected":false},"excerpt":{"rendered":"<p>Compile assets. Strip dev files. Zip the plugin. Deploy. Tag SVN. Every WordPress plugin build tool should make that routine reliable \u2014 not leave you hoping source SCSS didn&#8217;t ship in the zip. If you maintain WordPress plugins, you know the release ritual: compile assets, strip dev files, bump versions in three places, zip it, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":26017,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-26010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>wp-toolkit: WordPress Plugin Build &amp; Deploy CLI<\/title>\n<meta name=\"description\" content=\"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"wp-toolkit: WordPress Plugin Build &amp; Deploy CLI\" \/>\n<meta property=\"og:description\" content=\"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/\" \/>\n<meta property=\"og:site_name\" content=\"WP ULike\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wpulike\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-17T09:13:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-17T13:20:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"896\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alimir\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wpulike\" \/>\n<meta name=\"twitter:site\" content=\"@wpulike\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alimir\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/\"},\"author\":{\"name\":\"Alimir\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/#\\\/schema\\\/person\\\/775669fad322a2d0abd7b90b0a13a343\"},\"headline\":\"Introducing wp-toolkit: Build &amp; Deploy WordPress Plugins\",\"datePublished\":\"2026-06-17T09:13:51+00:00\",\"dateModified\":\"2026-06-17T13:20:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/\"},\"wordCount\":1470,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/wp-toolkit.png\",\"articleSection\":[\"Articles\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/\",\"url\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/\",\"name\":\"wp-toolkit: WordPress Plugin Build & Deploy CLI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/wp-toolkit.png\",\"datePublished\":\"2026-06-17T09:13:51+00:00\",\"dateModified\":\"2026-06-17T13:20:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/#\\\/schema\\\/person\\\/775669fad322a2d0abd7b90b0a13a343\"},\"description\":\"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/wp-toolkit.png\",\"contentUrl\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/wp-toolkit.png\",\"width\":1200,\"height\":896},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/blog\\\/introducing-wp-toolkit-wordpress-plugin-developers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpulike.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing wp-toolkit: Build &amp; Deploy WordPress Plugins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/#website\",\"url\":\"https:\\\/\\\/wpulike.com\\\/\",\"name\":\"WP ULike\",\"description\":\"Turn Votes Into Actionable Audience Insight\",\"alternateName\":\"ULike\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wpulike.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/#\\\/schema\\\/person\\\/775669fad322a2d0abd7b90b0a13a343\",\"name\":\"Alimir\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/wp-ulike\\\/avatars\\\/f0wa6CDK9emd.jpg\",\"url\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/wp-ulike\\\/avatars\\\/f0wa6CDK9emd.jpg\",\"contentUrl\":\"https:\\\/\\\/wpulike.com\\\/wp-content\\\/uploads\\\/wp-ulike\\\/avatars\\\/f0wa6CDK9emd.jpg\",\"caption\":\"Alimir\"},\"description\":\"I'm an engineer with experience in management, leading teams by example, and I'm very connected to motivational initiatives that help them to innovate.\",\"sameAs\":[\"http:\\\/\\\/wpulike.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"wp-toolkit: WordPress Plugin Build & Deploy CLI","description":"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/","og_locale":"en_US","og_type":"article","og_title":"wp-toolkit: WordPress Plugin Build & Deploy CLI","og_description":"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.","og_url":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/","og_site_name":"WP ULike","article_publisher":"https:\/\/www.facebook.com\/wpulike\/","article_published_time":"2026-06-17T09:13:51+00:00","article_modified_time":"2026-06-17T13:20:00+00:00","og_image":[{"width":1200,"height":896,"url":"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png","type":"image\/png"}],"author":"Alimir","twitter_card":"summary_large_image","twitter_creator":"@wpulike","twitter_site":"@wpulike","twitter_misc":{"Written by":"Alimir","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#article","isPartOf":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/"},"author":{"name":"Alimir","@id":"https:\/\/wpulike.com\/#\/schema\/person\/775669fad322a2d0abd7b90b0a13a343"},"headline":"Introducing wp-toolkit: Build &amp; Deploy WordPress Plugins","datePublished":"2026-06-17T09:13:51+00:00","dateModified":"2026-06-17T13:20:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/"},"wordCount":1470,"commentCount":0,"image":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png","articleSection":["Articles"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/","url":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/","name":"wp-toolkit: WordPress Plugin Build & Deploy CLI","isPartOf":{"@id":"https:\/\/wpulike.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#primaryimage"},"image":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png","datePublished":"2026-06-17T09:13:51+00:00","dateModified":"2026-06-17T13:20:00+00:00","author":{"@id":"https:\/\/wpulike.com\/#\/schema\/person\/775669fad322a2d0abd7b90b0a13a343"},"description":"wp-toolkit is a free npm CLI for WordPress plugin devs \u2014 build assets, zip releases, rsync deploy, and publish to WordPress.org SVN.","breadcrumb":{"@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#primaryimage","url":"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png","contentUrl":"https:\/\/wpulike.com\/wp-content\/uploads\/2026\/06\/wp-toolkit.png","width":1200,"height":896},{"@type":"BreadcrumbList","@id":"https:\/\/wpulike.com\/blog\/introducing-wp-toolkit-wordpress-plugin-developers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpulike.com\/"},{"@type":"ListItem","position":2,"name":"Introducing wp-toolkit: Build &amp; Deploy WordPress Plugins"}]},{"@type":"WebSite","@id":"https:\/\/wpulike.com\/#website","url":"https:\/\/wpulike.com\/","name":"WP ULike","description":"Turn Votes Into Actionable Audience Insight","alternateName":"ULike","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpulike.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/wpulike.com\/#\/schema\/person\/775669fad322a2d0abd7b90b0a13a343","name":"Alimir","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpulike.com\/wp-content\/uploads\/wp-ulike\/avatars\/f0wa6CDK9emd.jpg","url":"https:\/\/wpulike.com\/wp-content\/uploads\/wp-ulike\/avatars\/f0wa6CDK9emd.jpg","contentUrl":"https:\/\/wpulike.com\/wp-content\/uploads\/wp-ulike\/avatars\/f0wa6CDK9emd.jpg","caption":"Alimir"},"description":"I'm an engineer with experience in management, leading teams by example, and I'm very connected to motivational initiatives that help them to innovate.","sameAs":["http:\/\/wpulike.com"]}]}},"_links":{"self":[{"href":"https:\/\/wpulike.com\/api\/wp\/v2\/posts\/26010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpulike.com\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpulike.com\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/comments?post=26010"}],"version-history":[{"count":6,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/posts\/26010\/revisions"}],"predecessor-version":[{"id":26020,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/posts\/26010\/revisions\/26020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/media\/26017"}],"wp:attachment":[{"href":"https:\/\/wpulike.com\/api\/wp\/v2\/media?parent=26010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/categories?post=26010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpulike.com\/api\/wp\/v2\/tags?post=26010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}