Skip to content

Releases: vale-cli/vale

v3.15.1

12 Jun 21:09
Immutable release. Only release title and notes can be modified.
8c4ed0d

Choose a tag to compare

See v3.15.0 for full notes.

Changelog

  • 8c4ed0d chore: support immutable releases

v3.15.0

12 Jun 20:53
Immutable release. Only release title and notes can be modified.
948bd96

Choose a tag to compare

Vocabularies now support multi-word entries — phrases that are valid as a unit but whose individual words shouldn't be accepted on their own.

Previously, an accept.txt entry like mea culpa couldn't work: spell-checking splits text into single words, so mea and culpa were each checked (and flagged) separately. Your only option was accepting each word individually — which also silently allowed them everywhere else.

Now you can add the phrase directly:

mea culpa
  • mea culpa is accepted as a phrase
  • a stray mea or culpa on its own is still flagged

Changelog

  • 948bd96 feat: support presence checks in conditional rules
  • 4d281c3 fix: render occurrence count as a number
  • 3b43f73 fix: preserve relative indentation in code-comment markup (#1028)
  • 32cd425 fix: don't pad dashes adjacent to inline markup (#1029)
  • fa67a3e feat: accept multi-word phrases in the vocabulary (#1035)
  • 072ac4f fix: don't treat substitution replacements as regexes (#1038)
  • d372163 fix: don't pad inline content adjacent to brackets (#1056)
  • 2680b53 fix: don't apply word Vocab to nonword existence rules (#1058)
  • 8558c4f fix: handle Danish-style hunspell dictionaries (#1065)
  • 0da27dd fix: ignore generated TOC and section numbers in AsciiDoc (#1101)
  • a686cae fix: don't require a python executable to lint reStructuredText (#1102)
  • 813e6c8 fix: prevent crash when masking read-only context (#1099)
  • c1533d1 fix: create configured StylesPath during sync (#1105) (#1106)

v3.14.2

15 May 20:57
810868b

Choose a tag to compare

Changelog

  • 810868b chore: drop yaml v2
  • 20fcb4d fix: move to gopkg.in/yaml.v3
  • cdf6f9e Bugfix/path expansion (#1096)
  • 3b9c8bf chore(deps): upgrade github.com/olekukonko/tablewriter from v0.0.5 to v1.1.4 (#1092)
  • e251662 fix: add FLAG num support for agglutinative languages (#1090)
  • 831ded9 chore: update clone path
  • 806283c chore(deps): bump github.com/tomwright/dasel/v3 from 3.3.1 to 3.3.2 (#1088)

v3.14.1

20 Mar 19:46
41f3b22

Choose a tag to compare

Changelog

  • 41f3b22 fix: correctly ignore class values in HTML

v3.14.0

13 Mar 00:16
046a128

Choose a tag to compare

This release introduces support for Dasel v3, which is notably capable of performing predicate-based recursive search.

See Vale & The OpenAPI Specification [2026 update] for an example use case.

Changelog

  • c7fc3a1 feat: support dasel v3
  • 10a8e86 chore: update go to 1.25.7 (#1085)
  • f9f5e68 fix(core): use byte offsets for position reporting in raw-scoped script rules (#1081)
  • 034c5f1 feat: set path for stdin cli (#1076)
  • 6539915 feat(lint): apply defaultIgnoreDirectories to nested directories (#1072)

v3.13.1

06 Feb 14:15
f544f49

Choose a tag to compare

Changelog

  • f544f49 docs: Update DigitalOcean referral information in README
  • bbf1933 Fix #1046 - handle xsd as xml (#1067)
  • a9ea7b8 Fix handling of xslt path and possible args pollution for xslt calls (#1066)

v3.13.0

22 Oct 23:34
27593b0

Choose a tag to compare

This release introduces tree-sitter support for Java source code files. See the View docs for more information.

Changelog

  • 27161c8 feat: add tree-sitter support for Java
  • 25f5a77 fix: don't error on continuation characters

v3.12.0

09 Jun 01:19
44c18b3

Choose a tag to compare

🚀 New Feature: Views – Targeted Linting for Structured (YAML, JSON, TOML) and Source Code Files

We’re introducing Views, a new way to define custom, structured representations of your files—giving you fine-grained control over what gets linted and how.

Views allow you to extract specific content from structured data (like YAML, JSON, or TOML) and source code and apply scoped linting rules to just those sections.

🔍 What’s a View?

A View is a user-defined configuration that transforms a file into a set of named scopes. This enables you to lint only relevant parts of a file—such as metadata descriptions, comments, or docstrings—without affecting the rest.

Here's an example using an OpenAPI file:

openapi: 3.0.0
info:
  title: sample API
  description: Optional multiline or single-line description in [CommonMark](http://commonmark.org/help/) or HTML.
  version: 0.1.9

servers:
  - url: http://api.example.com/v1
    description: Optional server description, e.g. Main (production) serrver
  - url: http://staging-api.example.com
    description: |
      Optional server description, e.g. 
      Internal staging serrver for testing
  - url: http://api.example.com/v2
    description: Optional server description, e.g. Main (production) serrver

And here's a View that extracts title, description, and each server's description:

# config/views/OpenAPI.yml
engine: dasel
scopes:
  - name: title
    expr: info.title

  - expr: info.description
    type: md

  - expr: servers.all().description
    type: md

type: md indicates that the description values are formatted are Markdown. We enable this be using the View key in our .vale.ini:

StylesPath = ../../styles
MinAlertLevel = suggestion

[API.yml]
BasedOnStyles = Vale

View = OpenAPI

See the documentation for more information.

Changelog

  • 44c18b3 test: add more cases
  • 8ab88af refactor: blueprint -> view
  • 3a996da fix: remove erroneous "+1"
  • fdaa335 chore(deps): bump golang.org/x/net from 0.36.0 to 0.38.0 (#996)

v3.11.2

07 Apr 00:49
dc4c479

Choose a tag to compare

Changelog

  • dc4c479 fix: adjust comment offset (#992)
  • a219fa2 refactor: improve front matter error messages
  • 3843d07 test: add case for IgnoredScopes

v3.11.1

03 Apr 09:21
6aa8bb9

Choose a tag to compare

Changelog

  • 6aa8bb9 fix: don't error on duplicate fields