Skip to main content

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 or --enable that turns rules on. -d 'extends: default' opts into yamllint's standard rule set for a one-off run, and --enable <RULES> runs just the named rules; for a project, drop a .ryl.toml at the root (see Configuration).

ryl check is the lint subcommand (a ryl format formatter is coming) and the recommended form. Bare ryl <paths> still lints identically but is deprecated: it prints a warning to stderr (silenced by --no-warnings) and a later release will remove it, so prefer ryl check.

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

# Using npx (Node.js)
npx @owenlamont/ryl check -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
pixi global install ryl             # conda-forge
winget install owenlamont.ryl       # winget (Windows)

Building from source (cargo install, or a pip sdist) needs Rust 1.99.0 or newer. The prebuilt wheels, npm, conda-forge and winget packages do not.

Status and scope

  • All 23 yamllint rules are implemented, plus four ryl-only rules with no yamllint equivalent (tags, merge-keys, block-scalar-chomping, and unicode-line-breaks), 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, document-end, document-start, empty-lines, key-ordering, new-line-at-end-of-file, new-lines, quoted-strings, trailing-spaces, and truthy (case only, e.g. True to true). The set of rules that may apply fixes is configurable via the TOML [fix] table.
  • --diff previews those safe fixes as a unified diff on stdout instead of writing them (modelled on ruff check --diff); it is mutually exclusive with --fix, works with stdin, and exits 1 iff some file would change.
  • 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; --fix writes safe fixes back into the embedded blocks and --diff previews them at the host-file level. 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. --enable <RULES> runs exactly the listed rules (comma-separated IDs, or ALL) in place of the config's selection, and needs no config file.
  • 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; --fix cannot read from stdin, but --diff can.
  • ryl server runs ryl as a Language Server (LSP) over stdio, giving editors inline diagnostics, a source.fixAll.ryl code action, and formatting (= apply safe fixes). It complements Red Hat's yaml-language-server rather than replacing it, and is built in by default (a minimal binary without it builds with cargo install ryl --no-default-features). See https://ryl-docs.pages.dev/editor-integration/.
  • 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.

Metadata

Release files for ryl 0.24.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ryl 0.24.0
File Size Uploaded
ryl-0.24.0.tar.gz 478.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ryl 0.24.0
File
ryl-0.24.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
ryl-0.24.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ryl-0.24.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
ryl-0.24.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
ryl-0.24.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
ryl-0.24.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl Python 3 none Linux glibc 2.17+ IBM System/390x Details
ryl-0.24.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl Python 3 none Linux glibc 2.17+ PowerPC 64-le Details
ryl-0.24.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details
ryl-0.24.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details
ryl-0.24.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
ryl-0.24.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 42.7 MB

Release files / ryl-0.24.0.tar.gz

Download URL ryl-0.24.0.tar.gz
Size 478.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f22174a527f88f60977fbeab7a78efdcb24f0fe67a74263c29f21306659e6ba6
BLAKE2b-256 checksum
How to use checksums
f83db4e4db846e516fbc3eb619cfb014b819f77b81815ab65ee1ae82ba95bb75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-win_arm64.whl

Download URL ryl-0.24.0-py3-none-win_arm64.whl
Size 3.2 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
568e4c90d47bb228499eabf13e389e8ff4c87136cf3f65c7166b4cf69106be8c
BLAKE2b-256 checksum
How to use checksums
c30b9e27495151408b6d56c584f359eec63407d5aa4247e51aabfa05f22d2bd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-win_amd64.whl

Download URL ryl-0.24.0-py3-none-win_amd64.whl
Size 3.4 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
c1eba0d55051a51f381265dd84b29616d77768e9e864bfad1020dfbec49e9093
BLAKE2b-256 checksum
How to use checksums
a7fdb04af3967e72139586011ffb5ef58dcb9709e587fc76ac0e7ca424f2faf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-musllinux_1_2_x86_64.whl

Download URL ryl-0.24.0-py3-none-musllinux_1_2_x86_64.whl
Size 4.1 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
e1e29a90fe1686025088c0c64fae0638c44d8352cd229851df6a27ee07ddc74a
BLAKE2b-256 checksum
How to use checksums
242da41e9c621a4faf47c783fd674778df6bf8d99d61bf66540948c29fc5b638
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-musllinux_1_2_aarch64.whl

Download URL ryl-0.24.0-py3-none-musllinux_1_2_aarch64.whl
Size 3.9 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
4a6eb0ae2c3e5f936a87d803efef05741a5c1349a6d643c256391db635929cfe
BLAKE2b-256 checksum
How to use checksums
066646b66fc6cf60df0e972375a3c00eceae48739bec591420ab51d8a9c4effb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.9 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
fe676db9e51cbd7eced2822322724996dad721ed21074e714ab1c4dc03239bd8
BLAKE2b-256 checksum
How to use checksums
76da6ddd41af4449bfc8504cdf4b556d8cb3fecf568f7d9bc879dd9d5fc58dd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 4.0 MB
Tags Linux glibc 2.17+ IBM System/390x Python 3
SHA-256 checksum
How to use checksums
4dca4c67beacb13603f4bb6634338466219ca0ec4dbb13575777a4e567651b12
BLAKE2b-256 checksum
How to use checksums
a2479b77d3335b13347b2d863de7dce4e1122c2f7aad275e2b431c8191d8dfe1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 4.3 MB
Tags Linux glibc 2.17+ PowerPC 64-le Python 3
SHA-256 checksum
How to use checksums
f3860f869e24532fc10f133963c7125113d618241f48aeb595ff968179a0d9d3
BLAKE2b-256 checksum
How to use checksums
944b81d093786fc331b751838af5de2fc263d28839005deb856a92a2fa1aad2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Size 4.2 MB
Tags Linux glibc 2.17+ x86-32 Python 3
SHA-256 checksum
How to use checksums
36272d9be262320d769c2935574081fe0f385dd2697dd92b42b2647536b8cb39
BLAKE2b-256 checksum
How to use checksums
73d90edebab0a2e7895a8e2c799f0e84c359995a511955f1e7313f3bfa6d71d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 3.8 MB
Tags Linux glibc 2.17+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
3eb3bf8578ebbace4af15ae02ac293f54f730adff47858346db8119e91f96843
BLAKE2b-256 checksum
How to use checksums
8ed22344b070ca0e7540eb458982d0c77132f73e42da6316bac29e0f9d97258a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ryl-0.24.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 3.8 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
ff0433b4b6cfc1783320bd51ad51741d70ad2eda936c5aa6e665dffdb5de1037
BLAKE2b-256 checksum
How to use checksums
dd8fb546ce2e95366f98df5a8543584fa0006b0ea3475e1e36f9e0e1e47933d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / ryl-0.24.0-py3-none-macosx_11_0_arm64.whl

Download URL ryl-0.24.0-py3-none-macosx_11_0_arm64.whl
Size 3.6 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
76100f9da4e402ff875ced79772712f067e12163a061488a3029879f8fa014c8
BLAKE2b-256 checksum
How to use checksums
dc4beff5ee0a7b8e38509f6064e71b3d5bac26e4f88c640b7bac4aa3f80fdae8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.24.0 This release

12 release files

0.9.2

12 release files

0.8.0

12 release files

0.7.0

12 release files

0.6.0

12 release files

0.3.4

12 release files

0.3.3

12 release files

0.3.2

12 release files

0.3.1

13 release files

0.3.0

13 release files

0.2.0

13 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page