Version 5.0.0
August 18, 2026
Initial release.
Added
- Find and replace across element titles, custom field content, slugs, asset filenames and alt text, and configured non-element database tables.
- A preview that shares its code path with the run, showing every match in context with the old and new text side by side.
- Scoping by element type, section, volume, group, entry type, field, site and element ID, with drafts, revisions and trashed elements excluded by default.
- Plain, whole-word and regular expression matching, with capture groups, optional case sensitivity, and a case-preserving replacement that works word by word.
- Undo: every changed value recorded before and after, restored exactly, and refused where the value has been edited since the run.
- Safe writes through
saveElement()— search index, caches, events and revisions all intact — plus an opt-in fast path that writes the content column directly and queues the re-index. - Real-time rules that rewrite rendered output without changing anything stored, HTML-aware so that tags, attributes, class names, scripts and stylesheets are left alone.
- On-save rules, so new content arrives already corrected.
- Saved rules with handles, schedules and a
|scrubTwig filter. - A run ledger with history, per-run detail and one-click undo, plus
storage/logs/scrub.log. - Console commands
scrub/run/replace,scrub/run/rule,scrub/run/due,scrub/run/revertandscrub/run/rules, all defaulting to a dry run. - Guardrails: a per-run ceiling, protected fields and sources, a queue threshold, and separate permissions for previewing, replacing, undoing, managing rules and writing to database tables.
Targets::EVENT_REGISTER_TARGETSfor adding somewhere else to look, plus cancellablebeforeScrubandbeforeWriteUnitevents.- Craft's own Find and Replace utility is hidden by default, and can be brought back with one setting.