The Vale module checks the prose in your text fields against a style guide, with the Vale linter. An error stops the save and is marked on the field. Warnings and suggestions are shown to the author, and the content saves.

Vale applies rules for style, tone and terminology. Write your own, or use a published style such as Microsoft, Google, write-good or proselint.

A node edit form with the save refused. The error message lists two Vale alerts with their rule, message, line and matched text, and the Body field is marked in red.

 

Features:

  • Checks every save that validates: forms, JSON:API, REST and workspace publishing.
  • Lists every error in a value at once, each starting with its field's label.
  • Reads Markdown as Markdown and HTML as HTML, so code is not checked as prose.
  • Per field: a minimum level, a level for any rule, and a profile that .vale.ini sections match.
  • Publish-only mode, so drafts save with their errors. It follows Content Moderation.
  • Checks a workspace's changes before it is published, and can block the publish.
  • A report of the alerts in stored content, with filters and a CSV export.
  • Drush commands for CI: vale:lint exits with 1 on an error.
  • A check endpoint that returns the alerts a save would give, for editors and frontends.
  • Paragraphs: opted-in fields on paragraphs are checked, and publishing a page checks its paragraphs.
  • drush vale:install downloads Vale and checks it against the release's checksum.

 

Requirements:

  • PHP 8.3 or later
  • Drupal 10.3, 11 or 12
  • Vale 3 on every web server and in the CLI container, with the styles your .vale.ini uses

 

Usage/Configuration:

Install Vale with drush vale:install, add a .vale.ini beside your web root, and run vale sync to download its styles. Point the site at both in settings.php:

$settings['vale_binary'] = $app_root . '/../bin/vale';
$settings['vale_config'] = $app_root . '/../.vale.ini';

Then turn on Check with Vale for each field you want checked.

Example: Structure > Content types > Basic page > Manage fields > Body > Prose checks

The README covers the site settings, permissions, the content report, Drush, JSON:API and the check endpoint.

 

Frequently Asked Questions:

  • Why are the paths in settings.php and not in the admin UI?
    Vale's script rules run code, so a ruleset belongs in your codebase. The module never accepts a binary path or a ruleset through the site.
  • Does it detect text written by AI?
    No. It checks style. Some Vale styles flag phrases that AI tools overuse, and the module applies them like any other rule.
  • What happens if Vale is missing, times out or fails?
    Content saves, and the author is told it was not checked. drush vale:lint and workspace blocking fail instead, so an unchecked deploy does not pass. Set fail_closed to refuse the save too.
  • Does it check Canvas pages?
    No. Canvas keeps a page's text in component props, not in fields you can opt in. Node fields on a Drupal CMS site are checked, including node text that Canvas renders through a content template.

 

Project information

Releases