A Stable tag mismatch is one of the most common notes a WordPress plugin gets
during Plugin Directory review, and one of the easiest to introduce by accident: your
readme.txt and your plugin's main file each carry their own version string, in two
different files, in two different formats, and nothing forces them to move together.
The Plugin Directory serves whichever version readme.txt's Stable tag
line names -- not your latest commit, not your latest tag, and not whatever the plugin header
says. Bump the version in your main plugin file and forget the matching line in
readme.txt (or the reverse) and the two drift apart. Users downloading or
auto-updating your plugin keep getting the old build even after you've shipped the new one.
| File | Line | What it controls |
|---|---|---|
readme.txt | Stable tag: 1.4.2 | Which tagged version the directory actually serves to users |
| Main plugin file (PHP header comment) | Version: 1.4.2 | What WordPress core shows in the Plugins screen and uses to detect an available update |
The two values should read identically at every release -- or Stable tag may
deliberately read trunk, which tells the directory to always serve whatever is in
the SVN trunk rather than a tagged release. That's a valid, if less common, choice; it just
isn't a version to compare against.
The checker on this site reads both files and tells you immediately if
they disagree, along with the other checks it runs (required readme/header fields, unescaped
superglobal output, missing nonce checks on $_POST handlers). It runs as a browser
tool (nothing uploaded) or a Node CLI you can add to your own pre-submission or pre-release check.
This is evidence of what the two files currently say, not a determination that Plugin Review will pass in every respect -- see the checker and its disclaimer for what else it can and can't see, and verify against the Plugin Directory's current guidelines before you submit or tag a release.