MW
Tutorial

Publishing Your Block Plugin

Ship your plugin to WordPress.org — readme.txt format, screenshots, the wp.org submission review process, and post-launch maintenance.

intermediate 30 min May 13, 2026
A polished plugin from Parts 10 + 11

PUBLISHING YOUR BLOCK PLUGIN

You’ve built, packaged, and tested a block plugin. Last step: getting it to real users. This tutorial walks the wordpress.org submission process — the most common distribution path — plus the alternatives if wp.org doesn’t fit.

Three distribution paths

PathReachFrictionBest for
wordpress.org plugin directory60M+ active installs across all pluginsSlow review (1-6 weeks), strict policiesOpen-source plugins, broad reach
Direct distribution (your own site)Whoever finds your siteNone — your rulesPremium plugins, niche audiences
Block directory (subset of wp.org)Users browsing blocks from the editor inserterSame as plugin directory + stricter (single block, no menu items, etc.)Pure-block plugins

We focus on wp.org because the inertia is real — many WP users only install plugins from the directory.

Step 1 — readme.txt

The plugin directory parses your readme.txt to build the listing page. The format is custom (not Markdown) — WordPress’s own spec:

=== My First Block ===
Contributors: maheshwaghmare
Tags: block, gutenberg, callout, notes
Requires at least: 6.4
Tested up to: 6.5
Stable tag: 1.0.0
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A styled callout block for posts and pages.

== Description ==

A polished Gutenberg block for adding callouts to your content. Supports four
types (info, tip, warning, error), inline rich text, nested blocks, and
multiple visual styles.

**Features**

* Four callout types with semantic color coding
* Editable title and body via RichText
* Nested blocks support — drop in lists, images, code
* Four visual styles: Boxed, Plain, Filled, Outlined
* Three preset variations: Tip, Warning, Error
* Accessibility-tested with screen readers

== Installation ==

1. Upload the plugin folder to wp-content/plugins/
2. Activate from the Plugins screen
3. The Callout block appears in the inserter under "Text"

== Frequently Asked Questions ==

= Does this work with full-site editing? =

Yes. The block is registered with `apiVersion: 3` and supports FSE templates.

= Can I extend it with custom styles? =

Yes — use `registerBlockStyle()` from your theme or another plugin to add styles.

== Changelog ==

= 1.0.0 =
* Initial release.

== Screenshots ==

1. The Callout block in the editor
2. Inspector controls for type and dismissibility
3. Front-end rendering of all four callout types
4. Block variations in the inserter

The headers (lines starting with =) become navigation tabs on the plugin page. Three sections matter most:

  • Description — the elevator pitch. First 100 words shown in search results.
  • Screenshots — referenced by number; actual files in /assets/ (covered below)
  • Changelog — every release documented. Plugin reviewers check this.

Step 2 — Screenshots and banner

The plugin directory pulls visual assets from an /assets/ directory in your wp.org SVN repo (NOT inside the plugin zip):

my-first-block/
assets/ in SVN /assets, not in the plugin zip
banner-772x250.png header banner
banner-1544x500.png retina header banner
icon-128x128.png plugin icon
icon-256x256.png retina icon
screenshot-1.png matches "1." in readme Screenshots
screenshot-2.png
screenshot-3.png
screenshot-4.png

Banner and icon are critical — they’re the first thing users see in the directory. Spend the time making them clean.

Step 3 — Submit for review

  1. Sign up at wordpress.org if you don’t have an account
  2. Visit Submit a plugin
  3. Upload your plugin ZIP (build it first via npm run plugin-zip@wordpress/scripts bundles it correctly)
  4. Wait for the email response

The review process:

  • Initial automated check — basic linting, file structure, license validation. Takes minutes.
  • Human review — a member of the Plugin Review Team manually audits your code. Takes 1-6 weeks (it’s variable; reviewers are volunteers).
  • Approval or revision requests — they’ll email you with either an approval link or a list of issues to fix.

Common revision requests:

IssueFix
Missing license headerAdd GPL-2.0+ to your main plugin file
wp_unslash() not called on $_POSTSanitize input properly: sanitize_text_field(wp_unslash($_POST['x']))
Direct $wpdb->query() with interpolationUse $wpdb->prepare()
External script loadBundle locally or document why it’s external
eval() or extract()Don’t use them — replace
Trademark conflict in nameRename — “WooCommerce Plus”, “Yoast SEO Pro” are all rejected

Step 4 — Post-approval: SVN

wp.org uses SVN, not git, for plugin hosting. You’ll get an SVN URL like: https://plugins.svn.wordpress.org/my-first-block/

The structure:

my-first-block/
├── trunk/        ← current development version
├── tags/         ← released versions (tags/1.0.0/, tags/1.1.0/, etc.)
├── branches/     ← optional, rarely used
└── assets/       ← screenshots, banner, icon

Releasing a new version:

Terminal — SVN release flow
$ svn co https://plugins.svn.wordpress.org/my-first-block svn-repo
$ cd svn-repo
$ cp -r ../my-first-block/* trunk/ # copy plugin files
$ svn add trunk/*
$ svn ci -m "Release 1.0.0"
$ svn cp trunk tags/1.0.0
$ svn ci -m "Tag 1.0.0"

Most plugin authors write a release script to automate this. Several open-source examples exist on GitHub — search “wp-plugin-svn-release”.

Step 5 — Submit to the Block Directory (optional)

The Block Directory is a wp.org subset that surfaces blocks from inside the editor’s inserter — users can install your block without leaving wp-admin. To qualify:

  • Plugin is a single block (not bundled with other plugins/features)
  • No admin menu items, settings pages, or shortcodes
  • No external service dependencies (or clearly documented)
  • All files under 1MB
  • Tested with the latest WordPress

If your plugin fits, the wp.org review team auto-considers it for Block Directory inclusion. You don’t apply separately.

Reader's site | Visit Site
Howdy, reader
r

Add Plugins

My First Block

A styled callout block for posts and pages.

★★★★★ (12)·1,000+ active installs

Maintenance after launch

Plugins on wp.org are expected to:

  • Update the “Tested up to” header for each new WP release (within ~3 months)
  • Respond to forum support questions (wordpress.org/support/plugin/my-first-block)
  • Fix security issues promptly (the security team will contact you)
  • Use the “Stable tag” field in readme.txt to point at the current release

Plugins that go untouched for 2+ years across multiple WordPress releases may be closed. Plan for at least a yearly “Tested up to” bump.

Wrapping up the series

You’ve gone end-to-end:

  1. Part 1 — Block model + architecture
  2. Part 2 — Dev environment + scaffold
  3. Part 3 — First custom block
  4. Part 4 — Attributes + serialization
  5. Part 5 — Inspector controls
  6. Part 6 — InnerBlocks + composition
  7. Part 7 — Styles + variations
  8. Part 8 — Block patterns
  9. Part 9 — Extending the editor with filters
  10. Part 10 — Plugin packaging
  11. Part 11 — Testing + debugging
  12. Part 12 — Publishing (you are here)

The output: a polished, distributable Gutenberg block plugin available to 60M+ WordPress sites worldwide.

Thanks for following along. If this series helped, sharing it with another WordPress developer is the best support you can give.

You've completed this tutorial!

Get the next one in your inbox. Practical tips, no fluff.

Subscribe

Get weekly notes in your inbox

Practical tips, tutorials and resources. No spam.