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 saphyr parser stack, while yamllint uses the PyYAML parser stack.
  • saphyr 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

# Using uv (Python)
uvx ryl .

# Using npx (Node.js)
npx @owenlamont/ryl .

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. 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.
  • 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.
  • 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 is built on 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.
  • 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.9.2.tar.gz (186.1 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.9.2-py3-none-win_arm64.whl (2.1 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.9.2-py3-none-win_amd64.whl (2.2 MB view details)

Uploaded Python 3Windows x86-64

ryl-0.9.2-py3-none-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ryl-0.9.2-py3-none-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ryl-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ryl-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ryl-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ryl-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.9.2-py3-none-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for ryl-0.9.2.tar.gz
Algorithm Hash digest
SHA256 825c7d6b53b01b1a3f5d334023d0c31fe13d8854b6472c7aac51c5de1aca10c1
MD5 4b785a2f5f31ef8ae1d9d9ae2a740c76
BLAKE2b-256 236fe4b2383d4f3f4b3d94a34fb9396c7f12235750c484c8beaa5ee611ff6512

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2.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.9.2-py3-none-win_arm64.whl.

File metadata

  • Download URL: ryl-0.9.2-py3-none-win_arm64.whl
  • Upload date:
  • Size: 2.1 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.9.2-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 fe3044aa6362723551e4d95c90eee86729e1b2ce378028b2b7d7479f4f3f3cfc
MD5 6c6d7d6c01fa30e913350e1077737b1d
BLAKE2b-256 1e160b31fc191a5810ebb1e361694619f7b49dda4f1c718e1d58ebe17f4a4c02

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: ryl-0.9.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.2 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.9.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b837f6f0c500669ede56351405eb61126b7f4c813165f1b11a51a5914e33082f
MD5 64693696fc791ba823139114d39251d0
BLAKE2b-256 783c7381b83ca6fb5069adf60656b1b08b6254392c1528e3f136ad55b7ee06e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: ryl-0.9.2-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.7 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.9.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 efebef6ee7daf96614afda3cad0ed82cf881529021e1c2781b2fb1236cd99100
MD5 ed4a22493371fbb0c5f5cf4e65ee51c7
BLAKE2b-256 2bcd306857b345629703b4a250f8ef5db33971725eaff6323010f49df66e520c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: ryl-0.9.2-py3-none-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: Python 3, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ryl-0.9.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a5b7f927dcbc7e15b77684d5049263e525f47f9438ece4e60fe92c414d85d633
MD5 11dd429517cf576575e84188fa0e959d
BLAKE2b-256 c3cf52be5485c892c5a032bec2b587ba9e580e3cb01a6c38e63febd5c00f9a50

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 108358f545bb25871f3423bfe2eabd8e140a10b371f0b64388c7d27184e0a1a0
MD5 963376ec03fb8e80e8ff8d656cb5212d
BLAKE2b-256 0b5c191a1f052c816da122f625c22617e7b8c070ad956803feb2b0d6c6cb1524

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a0e06237da4f0480e847ce1deae4983063427cf7136b063aa20c3e861f44ec70
MD5 dcc604a3c36eb6f91713caade26543af
BLAKE2b-256 9215f08c2947f63055722474f248357c0ce2de741671ab430541e114ebceda0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 44b3cdc12905655b05b8909997ea4a3fd0fd062a9a818004ba7f80466a16dc04
MD5 7877ec7541fcef7c26d47eafa182bfe3
BLAKE2b-256 d0e151a93df8c1006a5d712ac818392c505bafa6e0bd8715b665d3aebc3ca5fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2b24512316ae255181cbc2ff8edcdd1ad8992f053d5dee9c4998c537c51cd85e
MD5 317bc9d3673f7d624e5eb4652d4fe14a
BLAKE2b-256 8171e09504122be46a36ca47e815818dbc11c46642874a1ede4886ecef205c21

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5679ead44c76179b81e7178ea086a3a502a641afe2eb7256e69e5cacec8e58ae
MD5 082c0237e352255c615d6f29a53cf115
BLAKE2b-256 318c669174116f9efaa020b0db30138fc0fa83b4137740305577178d59a5dfe2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ryl-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 07aba29e82a6511c015331acc81991f681c5aba0aa20f717fdf64217e6712e83
MD5 f6a80fa41711bce8b1868391d84689c6
BLAKE2b-256 282889193502b7551bacb08a715e48cfc43e6308caefef35a53186ac1a7141d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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.9.2-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: ryl-0.9.2-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.4 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.9.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6138bf5a79a8af37c1cf3dab925a848a2cb89aa7fdf4bb60095e7adf2244147b
MD5 fded484dfecf8f66b9fcecb45813546a
BLAKE2b-256 e96758c69426bee999712b45828ea29b02073b435316f44dbfbaa27f1e7f9cb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ryl-0.9.2-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