skillpack.co
All solutions

Vale

active

Open-source prose linter for docs-as-code pipelines. Markup-aware (Markdown, reStructuredText, AsciiDoc, HTML), CI/CD-native, extensible style packages (Microsoft, Google, write-good). Written in Go.

Score 80
Vale in action

Where it wins

Markup-aware: Markdown, reStructuredText, AsciiDoc, HTML — purpose-built for technical docs

CI/CD-native — runs in pipelines alongside code linting

Extensible style packages: Microsoft, Google, write-good, proselint-compatible

Enterprise adoption: Grafana, Datadog, Meilisearch (documented in public engineering blogs)

Pragmatic Bookshelf published a full book: 'Write Better with Vale' (Brian P. Hogan)

HN: 230pts/82 comments — strongest HN signal of any writing tool

Where to be skeptical

Style enforcement only — not a grammar checker (complements Harper/LanguageTool)

Requires configuration to set up style packages — not plug-and-play

No AI rewriting or generation capabilities

95 open issues — moderate maintenance load

Editorial verdict

The standard for docs-as-code style enforcement. Adopted by Grafana, Datadog, Meilisearch. Pragmatic Bookshelf published a dedicated book. HN 230pts — strongest writing-tool HN signal. No real competitor for CI/CD prose linting. 5,299 stars.

Related

Public evidence

strong2026
Grafana uses Vale in their docs pipeline

Full integration guide in Grafana's Writers' Toolkit. Real enterprise adoption by a major tech company.

Active documentation in Grafana Writers' ToolkitGrafana (major open-source company)
strong2026
Datadog engineering blog on Vale adoption

How Datadog uses Vale to improve their documentation editing process. Second major enterprise adoption confirmation.

Engineering blog postDatadog engineering team
moderate2026-01
Fern docs linting guide recommends Vale

Fern Writer integrates with Vale for API documentation linting. Growing ecosystem of integrations.

API docs platform integration guideFern (API docs platform)

Raw GitHub source

GitHub README peek

Constrained peek so you can sanity-check the source material without leaving the site.

<p align="center"> <img src="https://user-images.githubusercontent.com/8785025/96957750-5eab0d00-14b0-11eb-9f5f-52d862518ebf.png"> </p> <p align="center"> <b>Vale</b> is a command-line tool that brings code-like linting to prose. It's <b><a href="#mag-at-a-glance-vale-vs-">fast</a></b>, <b>cross-platform</b> (Windows, macOS, and Linux), and <b>highly customizable</b>. </p> <div align="center"> <table> <thead> <tr> <th><a href="https://vale.sh/docs/vale-cli/installation/">Documentation</a></th> <th><a href="https://vale.sh/#users">Case Studies</a></th> <th><a href="https://vale.sh/hub/">Package Hub</a></th> <th><a href="https://vale.sh/explorer/">Rule Explorer</a></th> <th><a href="https://vale.sh/generator/">Config Generator</a></th> </tr> </thead> </table> </div>

:heart: Sponsors

Hi there! I'm @jdkato, the sole developer of Vale. If you'd like to help me dedicate more time to developing, documenting, and supporting Vale, feel free to donate through the Open Collective. Any donation—big, small, one-time, or recurring—is greatly appreciated!

Organizations

<a href="https://opencollective.com/vale/organization/0/website"><img src="https://opencollective.com/vale/organization/0/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/1/website"><img src="https://opencollective.com/vale/organization/1/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/2/website"><img src="https://opencollective.com/vale/organization/2/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/3/website"><img src="https://opencollective.com/vale/organization/3/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/4/website"><img src="https://opencollective.com/vale/organization/4/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/5/website"><img src="https://opencollective.com/vale/organization/5/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/6/website"><img src="https://opencollective.com/vale/organization/6/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/7/website"><img src="https://opencollective.com/vale/organization/7/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/8/website"><img src="https://opencollective.com/vale/organization/8/avatar.svg?avatarHeight=100"></a> <a href="https://opencollective.com/vale/organization/9/website"><img src="https://opencollective.com/vale/organization/9/avatar.svg?avatarHeight=100"></a>

Individuals

<a href="https://opencollective.com/vale"><img src="https://opencollective.com/vale/individuals.svg?width=890"></a>

:boom: Key Features

  • Support for markup: Vale has a rich understanding of many markup formats, allowing it to avoid syntax-related false positives and intelligently exclude code snippets from prose-related rules.

  • A highly customizable extension system: Vale is capable of enforcing your style—be it a standard editorial style guide or a custom in-house set of rules (such as those created by GitLab, Homebrew, Linode, CockroachDB, and Spotify).

  • Easy-to-install, stand-alone binaries: Unlike other tools, Vale doesn't require you to install and configure a particular programming language and its related tooling (such as Python/pip or Node.js/npm).

See the documentation for more information.

:mag: At a Glance: Vale vs. <...>

NOTE: While all of the options listed below are open-source (CLI-based) linters for prose, their implementations and features vary significantly. And so, the "best" option will depends on your specific needs and preferences.

Functionality
ToolExtensibleChecksSupports MarkupBuilt WithLicense
ValeYes (via YAML)spelling, styleYes (Markdown, AsciiDoc, reStructuredText, HTML, XML, Org)GoMIT
textlintYes (via JavaScript)spelling, styleYes (Markdown, AsciiDoc, reStructuredText, HTML, Re:VIEW)JavaScriptMIT
RedPenYes (via Java)spelling, styleYes (Markdown, AsciiDoc, reStructuredText, Textile, Re:VIEW, and LaTeX)JavaApache-2.0
write-goodYes (via JavaScript)styleNoJavaScriptMIT
proselintNostyleNoPythonBSD 3-Clause
JoblintNostyleNoJavaScriptMIT
alexNostyleYes (Markdown)JavaScriptMIT

The exact definition of "Supports Markup" varies by tool but, in general, it means that the format is understood at a higher level than a regular plain-text file (for example, features like excluding code blocks from spell check).

Extensibility means that there's a built-in means of creating your own rules without modifying the original source code.

Benchmarks
<table> <tr> <td width="50%"> <a href="https://user-images.githubusercontent.com/8785025/97052257-809aa300-1535-11eb-83cd-65a52b29d6de.png"> <img src="https://user-images.githubusercontent.com/8785025/97052257-809aa300-1535-11eb-83cd-65a52b29d6de.png" width="100%"> </a> </td> <td width="50%"> <a href="https://user-images.githubusercontent.com/8785025/97051175-91e2b000-1533-11eb-9a57-9d44d6def4c3.png"> <img src="https://user-images.githubusercontent.com/8785025/97051175-91e2b000-1533-11eb-9a57-9d44d6def4c3.png" width="100%"> </a> </td> </tr> <tr> <td width="50%"> This benchmark has all three tools configured to use their implementations of the <code>write-good</code> rule set and Unix-style output. </td> <td width="50%">This benchmark runs Vale's implementation of <code>proselint</code>'s rule set against the original. Both tools are configured to use JSON output.</td> </tr> <tr> <td width="50%"> <a href="https://user-images.githubusercontent.com/8785025/97053402-c5bfd480-1537-11eb-815b-a33ab13a59cf.png"> <img src="https://user-images.githubusercontent.com/8785025/97053402-c5bfd480-1537-11eb-815b-a33ab13a59cf.png" width="100%"> </a> </td> <td width="50%"> <a href="https://user-images.githubusercontent.com/8785025/97055850-7b8d2200-153c-11eb-86fa-d882ce6babf8.png"> <img src="https://user-images.githubusercontent.com/8785025/97055850-7b8d2200-153c-11eb-86fa-d882ce6babf8.png" width="100%"> </a> </td> </tr> <tr> <td width="50%"> This benchmark runs Vale's implementation of Joblint's rule set against the original. Both tools are configured to use JSON output. </td> <td width="50%">This benchmark has all three tools configured to perform only English spell checking using their default output styles.</td> </tr> </table>

All benchmarking was performed using the open-source hyperfine tool on a MacBook Pro (2.9 GHz Intel Core i7):

hyperfine --warmup 3 '<command>'

The corpus IDs in the above plots—gitlab and ydkjs—correspond to the following files:

  • A snapshot of GitLab's open-source documentation (1,500 Markdown files).

  • A chapter from the open-source book You Don't Know JS.

:page_facing_up: License

FOSSA Status

View on GitHub →