When you upload a zip for a plugin that is already installed, WordPress shows a small table (name, version, author, requirements) and a button to replace it. Patchmark takes over that screen and turns it into a proper review, with Cancel and Replace in its top bar. When there are serious findings, Replace takes a second click.
Everything worth a second look, most serious first, each linked to the exact file and line:
PHP is read with the tokenizer, so $db->exec() or “eval” in a comment is not mistaken for the real thing, and only code that was not in the installed copy of the same file is reported.
git apply applies to the installed copy.The entries from readme.txt (or CHANGELOG.md) between the installed and the uploaded version, plus the Upgrade Notice for the new version. For a downgrade, the entries you would give up.
Functions, classes, public methods, hooks, REST routes, shortcodes, post types and blocks the upload adds or removes, plus Composer libraries that are added, removed or updated. Removed names are what breaks themes, snippets and other plugins that rely on them.
Nothing runs except on the upload screen, and only when the plugin is already installed. Only files that changed are read. Nothing is stored in the database and nothing is sent anywhere; leaving the page discards the review.
A clean review is not a guarantee. Only install code from sources you trust.
The files in build/ are compiled from TypeScript and SCSS but not minified, so you can read them as they are.
The source code and build setup are on GitHub: https://github.com/ClearanceClarence-Software/Patchmark
To build it yourself you need Node 20 or newer:
npm ci
npm run build
npm run zip makes the same plugin zip that's published here.<h3>Credits</h3>
Patchmark bundles the Bricolage Grotesque font (Copyright 2022 The Bricolage Grotesque Project Authors) and the Atkinson Hyperlegible Next and Atkinson Hyperlegible Mono fonts (Copyright 2020-2024 The Atkinson Hyperlegible Next / Mono Project Authors), all licensed under the SIL Open Font License 1.1. The license texts are in the licenses/ folder. The fonts are served from the plugin folder, not from Google.
Syntax highlighting uses Prism (https://prismjs.com), MIT license, bundled with the plugin.