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.
  • 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 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.10.0.tar.gz (204.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.10.0-py3-none-win_arm64.whl (2.1 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.10.0-py3-none-win_amd64.whl (2.3 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.10.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

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

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.10.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

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

Uploaded Python 3manylinux: glibc 2.17+ i686

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

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.10.0-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.10.0.tar.gz.

File metadata

  • Download URL: ryl-0.10.0.tar.gz
  • Upload date:
  • Size: 204.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.10.0.tar.gz
Algorithm Hash digest
SHA256 0a923aa8ae66e51be12ff64c9bd35c7a45c87d842bdf92d44b87da60810a913c
MD5 5162992fa6c739db0bdd309456b6136b
BLAKE2b-256 92bffd462b81d9d51724e7b765650a3cc91dbf2408c29e759b6611a25f2be2d1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.10.0-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.10.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 edb5fe2b20eebca65ce42d20667807d9a1ca1de413a1a0fd9489c4642fa4c9c3
MD5 5c66bbd4eda251106e66ae0ed2fdf53b
BLAKE2b-256 1a1880db77fc87bb96e98791508dd8b4c1dfdcfceabef684ec8dad21b45b96c9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.10.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.3 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.10.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 8a385f71ba8a1f03a1a72d9fd5e8f313ba9f1f6e3b1b1a988851779aed4bdf40
MD5 f2e990935f837f4e17ba72b0799ec369
BLAKE2b-256 669e7a1fe8a9dae722f19c4c9c9db23484aeb49517d6cd96373700b0b3976002

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.10.0-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.10.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a47c94f1f223828f9e90f79202ef244a7d2e40a07f92730c0f55f935a8bb3be0
MD5 482d5a86c1931637f004b39b8936011a
BLAKE2b-256 727a8e6ca9f31a04736e2c01ab4ad0e6128418c8dcc711308650c018bbf427f1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 87c013a6de5c5c64e1c12be7398bc1e54ca426cebe445bf7a715cd3356103222
MD5 f03da37a5d16305606980ec6dfdeac21
BLAKE2b-256 fc4cb8841ed590b232f572454bb5184640aac7e21e0003ebe99f82da7b6a4c14

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 59f62ae0a04c359f0897641b9e304d8d7e5e1c70a3f1dc2f41a61c5794f688d9
MD5 5b3a01ac069ba1dd49e2243d42cc0e69
BLAKE2b-256 21920b2a0f65bff75e72f5f22cb424024e73559b0802a7507f667734b6b4e8c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2d6ab0249df7d039bf3515d43585db2612df427064201c9a99557c8669dc56e4
MD5 0e976a8476a38d1fd1275fff56e285a4
BLAKE2b-256 a5a92020fdc998a4afbee95ff64e2301150e76ec05cb8648f667e96d390bcec5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 081b6c3aa6cc83d339adf27a5904ca25b54d415827a512c00c8e5058246fd711
MD5 46e6449115994d52892eb390420f3efa
BLAKE2b-256 0ad85dc71b3e74414995c7d2ba2114c297b53b67edf3e883b3ea866d6c712b87

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5262bb296adcfe689be99bb52aff6dab333448730494f652f4d59e8d774b9910
MD5 f586c1391c57009b5e086c8e2f1c934b
BLAKE2b-256 46d452a14d9401ba7d2f495e712b5a6a1a8402f61b255f3305ee632726efeef8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fadd2f4dced952f141422bb03503d8da09c1ee703d8a636c31cac497dc8408ad
MD5 e19513594b3ec33d76e65619c64a31f1
BLAKE2b-256 71edab9c9a19f384578c73f85cca5df5b64bda2e77188fffcb2bc57622c66305

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.10.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f62f8194955d26fb76d4264e7767efc18aec97da28adeaf2a3a1b4d3456f90f2
MD5 2033da09a506f1d81ca3250848ab6a9a
BLAKE2b-256 1f7bb79e0fc9b718ab7c27b2ff1e5c99c5c4bb04a793b63b6e8650f8ba726b66

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.10.0-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.10.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 703e25fe779ecd9360cde9c9a737ac8739337f833a3beed803463c1369ac4998
MD5 3ce26caf5d4d3fd42f05b31a0f04e641
BLAKE2b-256 bf5cbe52f8195fdae999715b6eb5219fe6b181b63c59caa2d13dd43e8939d95b

See more details on using hashes here.

Provenance

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