Home

Awesome

Vale: Your style, our editor Build status Go Report Card GitHub All Releases Docker Pulls Chocolatey Homebrew

<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

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:

:page_facing_up: License

FOSSA Status