Block Directory Plugin Checker

Opens a plugin .zip in your browser and checks it against the Block Directory rules: one block, valid block.json, no admin screens, no external dependencies.

This tool needs JavaScript: the zip is opened and read in your browser, and nothing is uploaded.

No plugin yet. This runs the Block Directory rules, which are narrower than the plugin directory ones.

The Block Directory is the list the block inserter searches while somebody is writing a post. Its rules are narrower than the plugin directory’s, and most rejections are about those extra rules rather than about the code: one block, nothing outside the editor, no accounts, no external services, no advertising.

Drop the plugin zip in and read the list. It is opened in your browser; nothing is uploaded.

How to use

Choose the zip, or drop it on the box. The archive is read in this tab and discarded when you leave.

Example

acme-block · 14 files · 24.1 KB
0 required · 1 worth fixing · 1 worth knowing

WORTH FIXING
2 top-level blocks
  the guidelines ask for one, unless a parent/child or container/content dependency makes more
  necessary. Bundles are rejected

WORTH KNOWING
build/block.json is apiVersion 2
  version 3 is current; 1 and 2 still work and lose the iframed editor

Pitfalls

One block, not a bundle. The guidelines are explicit: a block plugin is a single purpose block, not a collection. Several blocks are allowed only where a parent/child or container/content dependency makes them necessary, and “they go together nicely” is not that.

No interface outside the editor. No admin menu, no settings page, no dashboard widget. A plugin that needs a settings screen belongs in the plugin directory instead, and that is a perfectly good place to be.

It has to work by itself. No external service, no login, no API key, no payment. A block that renders data from your SaaS is not a Block Directory plugin.

block.json is the registration. The directory reads it, so name and title are required, and the guidelines want at least one of script or editorScript and at least one of style or editorStyle.

Namespaces are not decoration. core and wordpress belong to WordPress. Your namespace should be the plugin slug or your own name, and it is what the block is called forever after.

Keep the PHP minimal. The guidelines say server-side code should be kept to a minimum. There is no number attached, which means a reviewer decides; the size of your PHP is the thing they will look at.

Stable tag in readme.txt decides what is served. A tag that does not match the version you think you released is the commonest release accident in the directory.

Text Domain must match the folder. Translations from WordPress.org load by slug, so a mismatch means no translations and nothing to explain why.

Compatibility

Everything happens in your browser: the zip is opened with a reader written for this, using the platform’s own DecompressionStream for deflated entries. Nothing is uploaded, nothing is stored.

The rules come from the Block Directory guidelines on developer.wordpress.org: the single-block rule with its parent/child exception, the block.json fields, the namespace rules, independence from external services, the editor-only scope, and the ban on advertising. Where a rule is a judgement — whether PHP is “minimal”, whether a notice is promotional — this reports what it found and says a reviewer decides.

The plugin directory’s own basics are checked too, since a block plugin has to pass those as well: the plugin header fields, a GPL licence, readme.txt with a stable tag and a tested-up-to, development files left in the zip, and whether everything sits inside one folder.

Limits: 40MB for the archive, 1MB for a single file read as text, 400 text files.

Frequently asked questions

Is this the official check?
No. It applies the published guidelines to the files in a zip. The directory’s own review is done by people, and they read the code.
My plugin has three blocks that belong together.
Then it is a plugin directory plugin, and that is fine: it will still be installable and searchable, just not from inside the inserter. Split it only if one block genuinely stands alone.
Can a block plugin have a settings page?
No. Anything the block needs should be in the block’s own sidebar controls, stored in the post rather than in options.
Does it check JavaScript quality?
No. It looks for external dependencies and promotional text. Everything else about the JavaScript is out of scope here.
What about blocks bundled inside a larger plugin?
They are not Block Directory candidates at all: the directory lists plugins whose whole purpose is the block.

From the people who built this tool

WP Adminify

The WordPress admin, rebuilt: a dashboard worth looking at, menu and column control, a real file manager and the login page your client sees.

See WP Adminify Free version on WordPress.org

Weekly drops

New tools, when there are new tools

One email when something worth using ships. No schedule to fill, so no filler.

Your address goes nowhere else, and one click unsubscribes.