Vale CMS Need more than a rule playground? Explore
OPEN SOURCE · MIT · 6.1K STARS

Your style.
Our editor.

GitHub stars
6.1K
downloads
13.5M
teams listed
90

Vale brings code-like linting to prose. Turn your team’s writing guidelines into checks that run in your editor and alongside your code.

macOS, Windows & Linux · Runs offline

01Your guideline

Writing guide · Terminology

The product is Vale CLI. Don’t write Vale cli or vale-cli.

02A rule you own

styles/Docs/Terms.yml

extends: substitution
message: "Use '%s' instead of '%s'."
level: error
swap:
  'Vale cli|vale-cli': Vale CLI
03Feedback where you write

docs/install.md

  1. # Installation
  2. Vale cli runs on macOS, Windows, and Linux.
error Use 'Vale CLI' instead of 'Vale cli'. Docs.Terms
Encode your guidelines in YAML, or start with a published style guide.

Why Vale

Most tools see text. Vale sees a document.

Check the writing in context. Target a heading, a comment, or a description, while leaving the code around it alone.

01Scopes

Your document has structure.
Your rules should too.

Apply different checks to headings, lists, and table cells. Vale parses the markup first, so code blocks and link URLs stay out of the way.

Explore markup and scopes
guide.mdWhat Vale sees
# Getting startedheading
Write with your team’s voice.paragraph
- Keep instructions clear.list
[Read the guide](https://example.com)URL skipped
```sh
vale docs/
```
code skipped

Check the prose. Preserve the code.

12 markup formats

  • Markdown
  • AsciiDoc
  • reStructuredText
  • MDX
  • MyST
  • Quarto
  • Typst
  • HTML
  • XML
  • DITA
  • Org
  • QDoc

02Code

The comments count, too.

Extract comments with tree-sitter grammars, then check the Markdown inside them. A comment marker inside a string stays code.

Markdown inside a doc comment
/// Creates a person with the given name. paragraph
///
/// # Examples heading
/// ``` code skipped
/// let person = Person::new("name");
/// ```
pub fn new(name: &str) -> Person { not a comment

19 languages

  • Go
  • Rust
  • Python
  • Ruby
  • C++
  • C
  • JavaScript
  • TypeScript
  • TSX
  • Java
  • Haskell
  • Julia
  • Lua
  • PHP
  • R
  • QML
  • Protobuf
  • YAML
  • CSS
Explore code comments

03Views

Find prose in unexpected places.

A View selects the writing inside structured files. Check an API description, a notebook cell, or a commit message with rules for that context.

Select the description
openapi: 3.1.0
info:
title: Example API
version: 1.0.0
description: Manage your projects. description
paths:
/projects: {}

Beyond documents

  • OpenAPI
  • Jupyter
  • Commit messages
  • Transcripts
  • Docstrings
  • JSON
  • YAML
  • TOML
Explore Views

04Speed

Built for the whole repository.

One Go binary. Parallel checks. No separate runtime.

See the benchmark

GitLab documentation · one run

Markdown pages
2,827
Rules applied
82
Start to finish
<20s

Distribution

Where Vale is downloaded

Seven registries publish a download count, and each counts a different window, so they sit side by side here rather than in one total.

13.5M
downloads to date
GitHub Releases, Docker Hub, conda-forge, Chocolatey · the channels reporting a lifetime total
6.1K
stars on GitHub
vale-cli/vale
64
contributors
across the main repository

Sources: GitHub, Docker Hub, PyPI, npm, conda-forge, Homebrew, Chocolatey, WinGet, Snapcraft, and Repology · updated 2026-08-28

A few lines of config.
A consistent first draft.

Start with an existing style guide. Keep the configuration in your project so everyone runs the same checks.

  1. Install Vale.Choose a package for your operating system.
  2. Pick your styles.Save this as .vale.ini in your project.
  3. Sync, then lint.Download the styles and check your docs.
StylesPath = styles
MinAlertLevel = suggestion
Packages = Microsoft

[*.md]
BasedOnStyles = Vale, Microsoft
$ vale sync
$ vale docs/
Make it your own with a YAML rule
extends: substitution
message: "Use '%s' instead of '%s'."
level: warning
swap:
  utilize: use
Learn to write rules →