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

Your style.
Our editor.

GitHub stars
6.2K
downloads
14.2M
teams listed
90

Vale brings code-like linting to prose. Turn a team’s style guide, a house voice, or a journal’s author 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
action:
  name: replace
swap:
  'Vale cli|vale-cli': Vale CLI
  'style ?guide': style guide
  'e-?mail': email
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: Microsoft, Google, or Red Hat. Browse them all in the Explorer.

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.

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

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

From the blog

Notes from building Vale.

Releases, the standard library, and prose linting in the age of agents. Every post ships with Vale's own report on it.

  • Which kind of page is this?

    Diataxis is a Vale package for the four kinds of documentation in Diátaxis: tutorials, how-to guides, reference, and explanation, each checked against the job it claims to do.

    0 alerts 6 min

  • Linting a manuscript

    Journals is a Vale package for scientific papers: the conventions every journal shares, the Nature and PLOS ONE author guidelines, and the CONSORT, STROBE, and PRISMA checklists, read section by section.

    0 alerts 7 min

  • Linting commit messages

    Commits is a Vale package for the log: nine conventions, the rule sets of commitlint, gitlint, committed, conform, and commitizen, spelling on the body, and a hook that runs in 12 ms.

    0 alerts 6 min

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 →