Skip to main content

Fast YAML linter inspired by yamllint

Project description

ryl

ryl - the Rust YAML linter - is intended to ultimately be a drop-in replacement for yamllint. It is usable today, but parity and edge-case behaviour are still maturing.

Full documentation lives at https://ryl-docs.pages.dev/.

Compatibility note

  • ryl aims to match yamllint behaviour and includes many parity tests.
  • ryl uses the granit-parser parser stack, while yamllint uses the PyYAML parser stack.
  • granit-parser and PyYAML do not always agree on which files are valid YAML.
  • ryl targets YAML 1.2 strictly. yamllint defaults to YAML 1.1 semantics, so bareword booleans like yes / no / on / off (and case variants) are plain strings in ryl and booleans in yamllint. Leading-zero integers like 0755 are decimal in ryl and octal in yamllint. The same 1.2 semantics also apply when ryl parses .yamllint configuration files inherited from yamllint. See the YAML version compatibility page for the practical implications.

Quick start

ryl enables no rules by default, so it needs a configuration that turns rules on. -d 'extends: default' opts into yamllint's standard rule set for a one-off run; for a project, drop a .ryl.toml at the root (see Configuration).

# Using uv (Python)
uvx ryl -d 'extends: default' .

# Using npx (Node.js)
npx @owenlamont/ryl -d 'extends: default' .

For prek / pre-commit integration, see ryl-pre-commit.

Installation

uv tool install ryl                 # uv
npm install -g @owenlamont/ryl      # npm
pip install ryl                     # pip
cargo install ryl                   # cargo

Status and scope

  • All 23 yamllint rules are implemented, plus a ryl-only tags rule (forbids unsafe and non-portable YAML tags; configured in TOML only). The current rule reference and per-rule pages are at https://ryl-docs.pages.dev/rules/.
  • Auto-fixing (--fix) is supported for braces, brackets, commas, comments, comments-indentation, new-line-at-end-of-file, new-lines, and quoted-strings. The set of rules that may apply fixes is configurable via the TOML [fix] table.
  • TOML is the recommended configuration format and supports ryl-only features that have no upstream equivalent: the [fix] table, [per-file-ignores], and rule options such as allow-double-quotes-for-escaping.
  • TOML assigns each file a source kind via the [files] table (yaml = [...], markdown = [...]). The legacy yaml-files key is YAML-only; in TOML use [files].yaml.
  • YAML embedded in Markdown (front matter and fenced yaml/yml blocks) can be linted by listing globs under [files].markdown; diagnostics map back to the Markdown file. It is off by default and check-only (--fix does not modify Markdown). See https://ryl-docs.pages.dev/markdown/.
  • yamllint-style YAML configuration is also accepted (.yamllint, .yamllint.yml, .yamllint.yaml) for drop-in compatibility, including the built-in default, relaxed, and empty presets via extends. An existing yamllint configuration can be converted with ryl --migrate-configs --migrate-write.
  • --list-files prints the files ryl would lint (after ignores and config discovery) and exits, without running rules. --no-warnings suppresses warning-level diagnostics in the output. --strict turns a warning-only run into exit code 2.
  • Pass - as the input to read YAML from stdin (ruff convention). Add --stdin-filename <PATH> so diagnostics, project-config discovery, and path-based filtering (yaml-files, per-file-ignores, per-rule ignore) use that filename. Without it, diagnostics are labelled <stdin>, config is anchored at the current working directory, and all path-based filtering is skipped so every enabled rule runs. - cannot be combined with other inputs or with --fix.
  • Run ryl --help for the authoritative CLI reference.

For installation walkthroughs, configuration presets, and per-rule documentation, see the docs site.

Performance

ryl is significantly faster than yamllint on large trees. The figure below is from a 5x5 file-count × file-size matrix with 5 runs per point:

Benchmark: ryl vs yamllint scaling (5x5 matrix, 5 runs per point)

The benchmark script is in scripts/benchmark_perf_vs_yamllint.py; run it with --help for the full option set.

Acknowledgements

This project exists thanks to the tooling and ecosystems around YAML linting and developer automation, especially:

  • yamllint - for giving me the shoulders to stand on and the source of many of the automated tests that ryl uses now to check for behaviour parity. Copying the behaviour of an existing tool is infinitely easier than building one from scratch - there'd be no ryl without yamllint.
  • ruff - for showing the power of Rust tooling for Python development and inspiring the config and API for ryl.
  • rumdl - for giving me another template to follow for Rust tooling and showing me almost the only dev tool I was still using after this that wasn't written in Rust was yamllint (which inspired me to tackle this project).
  • saphyr - ryl's vendored YAML DOM is derived from saphyr, and saphyr's developers were very patient in showing some of the nuance and complexity of parsing YAML which I was embarrassingly ignorant of when starting ryl.
  • granit-parser - a saphyr-parser fork with comment and style metadata that ryl uses for event-stream parsing.
  • esbuild and biome - for providing the "binary wrapper" blueprint for distributing high-performance native tools via NPM.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ryl-0.14.0.tar.gz (295.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ryl-0.14.0-py3-none-win_arm64.whl (2.3 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.14.0-py3-none-win_amd64.whl (2.5 MB view details)

Uploaded Python 3Windows x86-64

ryl-0.14.0-py3-none-musllinux_1_2_x86_64.whl (3.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ryl-0.14.0-py3-none-musllinux_1_2_aarch64.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ryl-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ryl-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ryl-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ryl-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.14.0-py3-none-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ryl-0.14.0.tar.gz.

File metadata

  • Download URL: ryl-0.14.0.tar.gz
  • Upload date:
  • Size: 295.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.14.0.tar.gz
Algorithm Hash digest
SHA256 5b847634efd6af9b9f4340a47e90cc08722e194d8287b571fff90a33bf7dfd37
MD5 af1cfc4aeb26dc3480c053f735fc2bc8
BLAKE2b-256 f55152aae41786a975878f8af2a11e973ce3cdd17f12805f0946e3b0ca93a23d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0.tar.gz:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-win_arm64.whl.

File metadata

  • Download URL: ryl-0.14.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.14.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 a8d30dae9c7957585e400e80285798b429814363f5c0f3e4ab63766cb1077483
MD5 bf8b93ee6fc99766026a30fa5d59842d
BLAKE2b-256 6fb768612e7b760e17e80a5ea6286433e07243e21ea99f43dac3f7893b2cc1cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-win_arm64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: ryl-0.14.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.14.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2ac8c6d9f7970ab3174ecf2d345be6c33377d86f5f237492cb59dbd7fc7597a7
MD5 79de68cf6127befbc6155b622c5e1225
BLAKE2b-256 f0ff94238ab2e5ca666cfe1c36ccd5e7e921b4f0b102f50c43e638545762326f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-win_amd64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: ryl-0.14.0-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: Python 3, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.14.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 79cdb36026da9e0b096e9633ad18fe92aaccb27ae2369a6113da961e0cf20390
MD5 a672ece28e2aa4153f59cc5de8989bc3
BLAKE2b-256 7f33adbc68aec13e631cec88fe7e0976c36eef2c1474fca73dbc064bee80872a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-musllinux_1_2_x86_64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 39e3d4ecc420f192ee7b26fb670c94e4bf101950a76bdd292ba701fefef40362
MD5 f7b1bbd374e898858638d3583abd3b91
BLAKE2b-256 f53db9bb643ccd6a6b89193ff54250d64e5fc51350681ea9f80b7cd620de1932

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-musllinux_1_2_aarch64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb7c249757e329ba0fe68570c1894b99237f95fd523d368f1e796fdcbdfd9745
MD5 c82cd2f0da4950a12abcfb4087f64d56
BLAKE2b-256 2186809e628c8ee72856b091bb4ee5a8287b6ad1d962af2c1b92f269e38e67d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 da9ca47af2e750110da53d9a4aa1b6ca66f9510f5f1904f6b8d51cf71f920407
MD5 3c51501b55155c5727071b67ef322651
BLAKE2b-256 f09af9655114efea6fdefc2d67365990f08d72f3adc752dd3e7eace9a65e8590

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 9c42e37bdec04d4243c5ddaa9929d3640b3a6e78312a6bc282800ca129492439
MD5 e3981f8a34db00fcdede975fc272e9b1
BLAKE2b-256 d88f16b0dc66411eea370d0583a5be0e0f78c32f1ae422453f0f54ecdf8dc946

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 586cdf48fde02b163fbd08a56e203606dccf58fae1167929af99d6ae3508285b
MD5 d0577ca0031056beec39666ef0af8e66
BLAKE2b-256 e21000c6e7c937d0cd2574a1fc4252c04ef102dc9a4b737c4cc2eaf9e385efd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0d1265e4c628a9ce9bb48ddc30862e318de61ce2d76ae388bbe58f4d19ed6bf3
MD5 160dfe0de772e51aeb08d0e3335ba16b
BLAKE2b-256 fcc1b7f410c07360d71e4b01509d9319d01f63caaa595bb5a5a50e37aa8308e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ryl-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 36a0450a00aae39f8b1a6ced47ac9b4ae5f73650390de82b7ca870f4b9464801
MD5 c9b77ea36d244ecb1e509d7aee26b74b
BLAKE2b-256 7354b43408bf0748635bc8e04142886a599b4d5d55d498221125e90e97897293

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ryl-0.14.0-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ryl-0.14.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.14.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4eb00e17be75bad686f13ca68492fc33397cbfca846665a592156c0646c7ae4a
MD5 8ef835b09873b165a073bfe95aed8cf7
BLAKE2b-256 2c88c84ae168d412102296a3d44ac09495abb370d4adc5abd96713e65f5b4d6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.14.0-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on owenlamont/ryl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page