Plugin readme.txt Validator and Previewer
Check a plugin readme.txt against what WordPress.org actually reads, and see the plugin page it would build, before you commit it.
Enable JavaScript to check your own readme.txt; the report below is for the example.
Nothing is uploaded. The checking happens in this tab.
3 warnings · 8 notes
- 1 note
- 1 note
- 1 note
- 1 note
- 3 warning
- 3 note
- 5 note
- 6 note
- 7 note
- 18 warning
- 22 warning
Nothing in this readme will render wrong or be dropped.
Contact Bucket
A contact form for WordPress that blocks spam without a captcha, without an account, and without sending anything to a third party.
Description
One form, one shortcode, and a honeypot that catches most of it. Nothing leaves the site.
Works in the block editor and in classic themes
Stores entries in the database, not in an external service
Changelog
Fixed the honeypot.
Upgrade Notice
Update if you use the shortcode.
readme.txt — Contact Bucket
Stable tag trunk · Tested up to 6.8.1 · Requires at least 6.5
Sections: Description, Changelog, Upgrade Notice
3 warnings · 8 notes
1 note Missing Requires PHP. Requires PHP stops the plugin installing where it would fatal.
1 note No == Frequently Asked Questions == section. An FAQ section becomes the FAQ tab.
1 note No == Installation == section. Installation is a tab on the plugin page.
1 note No == Screenshots == section. Screenshot captions come from this section.
3 warning 6 tags given; WordPress.org uses the first 5 and drops the rest.
3 note The tag "wordpress" matches every plugin in the directory, so it sorts nothing.
5 note Tested up to reads the first two numbers, so "6.8.1" is the same as "6.8".
6 note Stable tag: trunk ships every commit. A version number ships only what you tagged.
7 note License is set but License URI is not, so the licence is not linked.
18 warning The changelog has no = version = headings, so no release can be linked to.
22 warning Upgrade Notice needs a = version = heading per release; text on its own is never shown.
readme.txt is the only file in a plugin whose mistakes cost something and warn
nobody. PHP errors on a typo. theme.json fails schema validation. readme.txt
just quietly renders: a short description one character too long is cut
mid-word in every search result, a Stable tag that names no tag falls back to
trunk, and an Upgrade Notice written as plain text is never shown to anyone.
This checks the file against what WordPress.org reads, and shows the plugin page it would build from it.
How to use
- Paste the whole readme.txt, headers and all. The first line has to be
=== Plugin Name ===; without it nothing below is read as a readme. - Read the report. Problems change what the directory serves or shows. Warnings change the plugin page. Notes are things that work but read badly.
- Read the preview underneath. Sections are shown in the order the plugin page puts them, with the markdown flattened to the plain text it renders as, so a heading that did not parse is obvious: it turns up as body text.
- Untick Include notes once the problems are gone, to see whether anything is left.
Nothing is uploaded. The file is parsed in the tab, so an unreleased plugin can be checked against the rules without leaving the browser.
Example
A readme that looks finished and is not:
=== Contact Bucket ===
Tags: contact form, spam, honeypot, wordpress, forms, email
Tested up to: 6.8.1
Stable tag: trunk
A contact form.
== Changelog ==
Fixed the honeypot.
Six things come back, and only one of them is a typo:
Tagshas six entries. WordPress.org uses the first five and drops the rest, soemailnever indexes.wordpressas a tag matches every plugin in the directory, so it sorts nothing.Tested up to: 6.8.1reads as 6.8. The third number is ignored, so the patch release it was actually tested against is not recorded anywhere.Stable tag: trunkships every commit to every install. A version number ships only what was tagged.Requires at leastis missing, so an install on older WordPress is offered an update that may not run.- The changelog has no
= 1.0 =heading, so there is no release to link to and the Updates screen has nothing to show.
Fixing the changelog is one line:
== Changelog ==
= 1.0.1 =
* Fixed the honeypot.
Pitfalls
The short description is the second paragraph, not the second line. Anything after a blank line is dropped rather than moved into the description, so a two-paragraph opening loses the second half silently.
150 characters is a hard cut. Not a warning, not an ellipsis at a word boundary: WordPress.org truncates the string and that is what appears in search results and in the plugin’s card.
Upgrade Notice needs a = version = heading per release. Without one the
text is parsed as the section body and shown nowhere, which is why upgrade
notices so often appear to be ignored.
Contributors takes WordPress.org usernames. A display name or an email
address links to no profile, and the plugin never appears on anyone’s profile
page.
Screenshot captions are matched by number, not by order. 1. is
screenshot-1.png. Skip a number in the list and the images shift under the
captions.
Headings are closed, not opened. == Description with no trailing == is
body text, and the section it was meant to open becomes part of whatever came
before it.
Compatibility
The rules here follow the readme format WordPress.org has used since the directory moved to the current plugin pages, and were checked against WordPress 6.5 through 6.8. Header names are matched case-insensitively, as WordPress.org matches them.
Two details are deliberately stricter than the directory: Stable tag: trunk
is reported as a note rather than accepted silently, and a missing Requires PHP is mentioned, because without it the plugin installs where it will fatal.
The checking runs in the browser, in any version that ships the Interactivity API runtime WordPress 6.5 introduced. The report is plain text, so it can go straight into a commit message or a code review.
Frequently asked questions
Does this upload my readme.txt anywhere?
Is a clean report the same as a readme WordPress.org will accept?
Why is my Tested up to: 6.8.1 only a note?
Can I check a theme’s readme.txt with this?
Stable tag and needs no Upgrade Notice, so those two lines can be ignored.