Editorial QA for Craft CMS
Your Style Guide, Enforced
RedPen marks up every entry against the rules your organisation actually wrote down — banned terms, brand capitalisation, headings, alt text, readability — before anyone hits Save.
It is a spellchecker a house style guide that runs on your content.
Free Lite edition · $99 Pro + $79/yr
Not a Spellchecker
Your browser already red-squiggles every field, for free, on every site you own. Shipping that as a plugin is not a product.
RedPen checks the things a browser cannot: that nobody wrote “Github”, that the link says something out of context, that the image has alt text, that the headings do not skip a level, and that the words your style guide banned two years ago are still banned.
Zero cost
The default backend is a pure-PHP rule engine. No API keys, no network calls, no per-check billing, no service to go down.
Zero surprises
Suggestions are never applied for you. Every one lands in a diff with accept or reject, because a tool that silently rewrites copy is a liability.
Zero noise on day one
Save-blocking is off until you turn it on, and the opinionated rules ship as notices. A wall of warnings the day you install just teaches people to ignore it.
See It in Action
Findings land in a panel beside the entry, each one clickable straight through to the text that caused it. The same rules run in your pipeline.
-
Link text “click here” means nothing out of context.
accessibility.link-text · body
-
Use use instead of utilize.
terminology.banned-terms · intro
-
“Github” should be written GitHub.
terminology.brand-capitalization · body
-
Heading level jumps from H2 to H4.
structure.heading-hierarchy · body
-
Sentence runs to 41 words.
style.sentence-length · body
$ php craft redpen/check --sections=news --fail-on=error Checking content… news/hiring-two-engineers error accessibility.link-text “read more” warning terminology.banned-terms “leverage” news/q3-product-update warning terminology.brand-capitalization “Javascript” notice readability.grade-level grade 14.2 42 entries checked · 4 issues · health 88 Failing: 1 issue at severity error or worse. $ echo $? 1
--fail-on is the one that matters in CI: the command exits non-zero when content breaks the style guide, so a pipeline can refuse to deploy it.
Twelve Rules, Seven Categories
Every rule can be switched off, re-severitied and configured per profile — and the whole library is in both editions, including the free one.
Terminology
The words your organisation decided on.
-
Banned and preferred terms
One per line.
utilize => usesuggests a replacement; a baresynergyflags it without one.terminology.banned-terms
-
Brand capitalisation
Your product names written exactly as they should appear, plus a built-in list of technology names like GitHub, JavaScript and macOS.
terminology.brand-capitalization
Accessibility
The things a screen reader will trip over.
-
Image alt text
Missing alt text, and alt text that says nothing —
image,photo, the file name.accessibility.image-alt
-
Link text
“Click here” and “read more”, empty links, and links that go nowhere.
accessibility.link-text
Structure
Headings that make an outline, not a mess.
-
Heading hierarchy
Levels that skip, headings that are empty, and the same heading twice. Configurable top level, and H1 in body content is off by default.
structure.heading-hierarchy
Typography
The residue of copy-paste.
-
Spacing
Double spaces, a space before punctuation, and a missing space after it.
typography.spacing
Grammar
The mistake everyone makes and nobody sees.
-
Repeated words
the the, and and, of of.
grammar.repeated-words
Inclusivity
Terms with settled neutral equivalents.
-
Inclusive language
Gendered job titles, ableist metaphors, and terms the industry has already moved on from.
inclusivity.terms
Style and readability
Matters of taste — so these ship off, or as notices.
-
Weasel words
Hedges and intensifiers that add length without meaning.
style.weasel-words
-
Passive voice
Off by default: passive is often the right choice in technical copy.
style.passive-voice
-
Sentence length
Off by default. Configurable maximum, 30 words out of the box.
style.sentence-length
-
Flesch–Kincaid grade level
Off by default. Configurable target; 8–10 is plain-language guidance for a general audience.
readability.grade-level
Need one of your own? A rule is a single class with four methods and no Craft dependencies. See Extending RedPen.
Features
Everything you need to hold a whole site to one editorial standard.
A Review Panel Where the Writing Happens
Findings appear beside the entry as you edit it, grouped by severity and scored out of 100. Click any finding and RedPen highlights the exact words that caused it — in plain text fields, in CKEditor, and inside nested Matrix blocks.
Style Profiles in Project Config
A profile is a named house style: which rules run, at what severity, with what options. It lives in project config, so your style guide moves between environments with the rest of the site’s configuration instead of being re-typed in production. Scope a profile to a section, a site, or both.
Validation at Save Time
Give a rule the error severity and RedPen can refuse the save outright. It never fires on drafts, revisions, propagating saves, resaves or disabled entries, so a bulk re-save never turns into a wall of failures.
Site-Wide Audits
Queue a run across every entry and get a report: a per-rule breakdown, the worst-offending entries, a filterable table of every finding, and a dashboard widget tracking the health score over time. The same run is available from the command line.
Dismissals That Stick
“This one is fine” is recorded against the offending text, not its position in the field. Edit the paragraph around it and the dismissal holds; put the flagged phrase back and the finding returns.
Every Field Type That Holds Words
Extractors ship for Plain Text, CKEditor, Redactor, Table and Matrix — recursively, with a depth limit — plus element titles. Teach RedPen a field type of your own with one event.
A Gate for Your Pipeline
php craft redpen/check --fail-on=error exits non-zero when the content breaks the style guide, so a deploy can be stopped by an editorial problem the same way it is stopped by a failing test.
Three Backends, One Panel
RedPen runs up to three checkers in order and merges their findings. An unconfigured backend reports itself unavailable and is skipped, so a missing endpoint never breaks a check the rule engine could have answered.
Style rules
The built-in library. Pure PHP, no network, no cost, works on shared hosting and on Craft Cloud alike. This is the default and it is in both editions.
LanguageTool
Point RedPen at a self-hosted LanguageTool server for real grammar checking. One Docker container and a URL in the settings.
RedPen never calls LanguageTool’s public API. Their terms forbid automated requests, and defaulting to it would break every install at once the first time they enforce that.
AI review
Bring your own Anthropic or OpenAI key for grammar rewriting and brand-voice review. Suggestions land in a diff with per-item accept and reject.
Billed to you, at your rates, on your key. RedPen never rewrites copy on its own, and never trusts a model’s character offsets.
Lite and Pro
The whole rule library is free. Pro adds the things a team needs once more than one person is writing.
Lite
For a single writer, or a first look.
Free
Every rule, the review panel, click-to-highlight, dismissals, and one default profile. No trial period and no expiry.
Install LitePro
For teamsFor a newsroom, an agency, or anyone with a style guide.
$99 one-time + $79/year for updates
Everything in Lite, plus multiple scoped profiles, save-time validation, site-wide audits, both network backends, the CI command and editorial sign-off.
Buy Pro — $99| Feature | Lite | Pro |
|---|---|---|
| Full rule library — all twelve rules | ✓ | ✓ |
| Review panel on the entry edit screen | ✓ | ✓ |
| Click-to-highlight in text, CKEditor and Matrix | ✓ | ✓ |
| Per-element dismissals | ✓ | ✓ |
| One default style profile | ✓ | ✓ |
| Multiple profiles, scoped per section and site | — | ✓ |
| Save-time validation — warn or block | — | ✓ |
| Site-wide audits, reports and dashboard widget | — | ✓ |
| Self-hosted LanguageTool backend | — | ✓ |
| Bring-your-own-key AI review | — | ✓ |
| redpen/check console command for CI | — | ✓ |
| Editorial sign-off | — | ✓ |
Frequently Asked Questions
Common questions about RedPen.
No, and that is deliberate. Every browser already red-squiggles every text field and every CKEditor instance, for free. RedPen checks the things a browser cannot: banned and preferred terms, brand capitalisation, heading structure, alt text, link text, inclusive language, typography and readability — the rules your organisation wrote down. If you want true grammar and spelling on top, that is what the optional LanguageTool and AI backends are for.
The Lite edition is free forever and includes the entire rule library, the review panel on the entry edit screen, click-to-highlight, per-element dismissals and one default style profile. Pro is $99 one-time plus $79/year for updates, and adds multiple scoped profiles, save-time validation, site-wide audits and reporting, the LanguageTool and AI backends, the CI console command and editorial sign-off.
No. Both checkOnSave and blockOnError default to off, so out of the box the panel is advisory only. A plugin that starts refusing saves the moment it is installed is a support ticket, so switching that on is a deliberate act. The four opinionated rules — passive voice, sentence length, weasel words and grade level — also ship off or as notices for the same reason.
Plain Text, CKEditor, Redactor, Table and Matrix — recursively, with a depth limit — plus element titles. Rich text is converted to prose for checking and every finding is mapped back to an offset in the original HTML, which is what makes click-to-highlight work. You can teach RedPen a custom field type with one event.
In project config, under redpen.profiles. That means a style guide moves between environments with the rest of your site’s configuration rather than being re-entered by hand in production, and it lands in version control where changes to it can be reviewed like any other change.
No. The default backend is a pure-PHP rule engine with no dependencies and no network calls, so RedPen works on shared hosting and on Craft Cloud with nothing configured. The LanguageTool and AI backends are strictly optional additions on top.
Because their terms forbid exactly this use. api.languagetool.org prohibits automated requests from applications, caps at 20 requests a minute per IP, and truncates suggestions. Shipping it as a default would break every install at once the first time it is enforced. Self-hosting LanguageTool is free and genuinely supported — docker run -p 8010:8010 erikvl87/languagetool and a URL in the settings.
Never on its own. Suggestions land in a diff with per-suggestion accept and reject, and RedPen does not trust a model’s character offsets — it re-locates the text itself. You bring your own Anthropic or OpenAI key, so the tokens are billed to you at your rates and nothing is proxied through a service of ours.
Yes. A rule is one small class with an id, a label, a category and a check() method, and it touches no database and no Craft services. Register it on Rules::EVENT_REGISTER_RULES; reuse a built-in id to override it. There are matching events for custom field extractors and for whole validation backends.
Yes, with Pro. php craft redpen/check --fail-on=error exits non-zero when anything at that severity or worse is found, so a pipeline can refuse to deploy copy that breaks the style guide. Add --sections, --profile, --limit and --store to narrow the run or keep it as an audit in the control panel.
Yes, and it is keyed to the offending text rather than its position in the field. That means editing the paragraph around it does not resurrect the finding, but putting the flagged phrase back does.
Craft CMS 5.3 or later and PHP 8.2 or later, with the dom, json and mbstring extensions — all of which a Craft install already has. No system binaries, no queue worker requirement for the review panel, and no external service.
Hold the Whole Site to One Standard
Start free. Move to Pro when more than one person is writing.
Free Lite · $99 Pro one-time · $79/year for updates