grommasdietz / kirby-proofreader
Typographic suggestions for Kirby CMS
Package info
github.com/grommasdietz/kirby-proofreader
Type:kirby-plugin
pkg:composer/grommasdietz/kirby-proofreader
Requires
- php: ^8.2
- getkirby/composer-installer: ^1.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpunit/phpunit: ^11.5
- vimeo/psalm: ^6.15
README
Kirby Proofreader adds a Panel button on Kirby CMS for reviewing typographic corrections in page and site content before applying them. Field changes are saved to Kirby's changes version, title fixes use Kirby's native title action and save immediately.
Requirements
- Kirby 5+
- PHP 8.2+
Installation
composer require grommasdietz/kirby-proofreader
Tip
If you don’t use Composer, you can download this repository and copy it to site/plugins/kirby-proofreader.
Quickstart
Add the button to a page or site blueprint:
buttons: proofreader: true languages: true status: true settings: true
Options
The default rule order is unicode, ellipsis, quotes, apostrophes, dashes, spaces. dimensions is a predefined optional rule for values such as 5 x 5 cm. Rules can be reordered, disabled or extended. Configure via site/config/config.php:
return [ 'grommasdietz.proofreader.rules' => [ 'unicode', 'ellipsis', 'quotes' => false, 'apostrophes', 'dashes', 'spaces', 'dimensions', 'trademark' => [ 'label' => 'Trademark', 'callback' => static fn (string $text): string => str_replace( 'Label TM', 'Label™', $text ), ], ], ];
The keyed
falseentry disables the built-inquotesrule. The keyedtrademarkarray adds a custom callback rule.
Quote characters, dash characters and dash spacing follow Kirby's native SmartyPants options when configured globally or per language. Single-language installs need SmartyPants configuration to enable quote rule.
Default field coverage includes text, textarea, writer, list,
structure, blocks and layout fields. Custom field names or types can be included or excluded:
return [ 'grommasdietz.proofreader.fields' => [ 'include' => [ 'types' => [ 'custom-writer' => 'html', 'custom-text' => 'plain', 'custom-structure' => 'structure', ], 'names' => [ 'intro' => 'plain', ], ], 'exclude' => [ 'types' => ['text', 'textarea'], 'names' => ['intro'], ], ], ];
Documentation
Full reference for usage, contributions and maintenance lives in documentation.
Changelog
See CHANGELOG.md for version history and changes.
Security
See SECURITY.md for security policies and reporting vulnerabilities.
Contributing
See CONTRIBUTING.md for guidance and expectations.
License
MIT © 2026 Grommas Dietz
