Vale: A customizable, syntax-aware linter for prose


#1

Hi everyone,

I’m here to announce a project that I’ve started recently: Vale. It’s a customizable, syntax-aware linter for prose written in Go. I know the idea of linting prose isn’t exactly novel, but I believe Vale differs from existing work in some important ways.

First, I intend to develop the project with writers—not programmers—in mind. Most of the existing options for prose linting are closely tied to programming. Their installation instructions include terms like “npm” and “pip,” and they require writing code for even the smallest of customizations. Vale, in contrast, is guided by three principles: be easy to install, be easy to use, and be easy to extend.

Secondly, my goal isn’t simply for people to download Vale and use it—I want them to be able to make it their own. In other words, I don’t intend on Vale becoming a general-purpose writing aid; I want its primary strength to be its extensibility. In practice, this means that it’s going to focus more on stylistic rules rather than grammar and punctuation. You can learn more about how Vale can be used by reading its wiki pages on Styles and Use Cases.

Features

It’s still in the early stages (officially version 0.1.0), but here are its core features:

  • Compiles to standalone binaries on Windows, macOS, and Linux—so you don’t need to have a particular runtime or interpreter installed (e.g., Node.js or Python).
  • Supports Markdown, reStructuredText, AsciiDoc, HTML, and source code comments.
  • Extensible without programming experience (in fact, all of its built-in rules are implemented through its extension system).
  • Expressive, EditorConfig-like configuration system.

Going Forward

As I work towards 1.0.0, I’m going to focus on five areas of improvement:

  1. Move file format handling to another project designed to output some type of abstract representation. This will allow Vale to stop worrying about the specifics of each syntax.
  2. Incorporate a part-of-speech tagger and lessen the role of regular expressions in style creation. I want to find the right balance between sophistication and ease-of-use.
  3. Implement a language-agnostic plugin system (perhaps via RPC).
  4. Improve the presentation of the project, including a website and better documentation.
  5. Create more reference styles to both showcase and test the extension system. These could be anything from collections of domain-specific rules (e.g., scientific writing, theater plays, etc.) to company-specific style guides. Let me know if you’re interested in having a style made!

Finally, I’d really appreciate any feedback, ideas, or general thoughts about the project. My goal is to make this project useful for writers in as many domains as possible.

Thanks!

(P.S. If you’re interested in contributing to development, feel free to open an Issue or submit a Pull Request!)