Skip to main content
Vale uses a style-based architecture to organize rules (also called “checks”). A style is a collection of individual rules stored as YAML files, allowing you to maintain reusable rule sets for different writing standards.

What is a style?

A style is a directory containing one or more rule files. Each rule file defines a single check that Vale applies to your content. For example:
MyStyle/
├── Headings.yml
├── Terms.yml
└── Spelling.yml
You can create custom styles or use pre-built ones from the Vale package hub. Popular styles include Microsoft, Google, write-good, and proselint.

Extension points

Vale provides 12 extension points that define how rules match and evaluate text. Each rule file must declare which extension point it uses via the extends key.
Checks for the presence of specific words or patterns.
extends: existence
message: "Avoid using '%s'"
level: error
tokens:
  - obviously
  - simply
  - just
Use existence when you want to flag specific terms, phrases, or patterns. The rule triggers whenever any token is found in the text.Key attributes:
  • tokens: List of terms to search for
  • ignorecase: Whether to ignore case (default: true)
  • nonword: Match anywhere, not just word boundaries
  • exceptions: Terms to ignore even if they match

Rule definition structure

Every rule file follows this basic structure:
extends: existence
message: "Consider removing '%s'"
description: "Optional longer explanation"
level: warning
link: https://example.com/style-guide
scope: text
action:
  name: remove
  • extends: The extension point (one of the 12 types)
  • message: The alert message shown to users
  • description: Extended explanation of the rule
  • level: Severity level (suggestion, warning, or error)
  • link: URL to style guide or documentation
  • scope: Where the rule applies (see Scoping)
  • action: Automated fix definition
  • limit: Maximum number of alerts per file

Built-in styles

Vale includes a minimal built-in style called “Vale” with four rules:
An existence rule with an empty token list. You can customize this via your vocabulary.
extends: existence
message: "Avoid using '%s'"
level: error
A substitution rule for term consistency, integrated with vocabularies.
extends: substitution
message: "Use '%s' instead of '%s'"
level: error
A repetition rule that catches repeated words.
extends: repetition
message: "'%s' is repeated!"
level: error
A spelling rule that integrates with your vocabularies.
extends: spelling
message: "Did you really mean '%s'?"
level: error

Using multiple styles

You can apply multiple styles to your content by listing them in your configuration:
[*.md]
BasedOnStyles = Vale, Google, Microsoft
Vale loads rules from all specified styles and applies them in order. If rules conflict, the last style’s rules take precedence.

Style loading order

Vale searches for styles in this order:
  1. The StylesPath directory specified in .vale.ini
  2. The global styles directory (when using vale sync)
  3. Built-in styles
Implementation reference: internal/check/definition.go:46-60, internal/check/definition.go:122-166

Build docs developers (and LLMs) love