Skip to main content

ryl

ryl is a fast YAML linter and formatter written in Rust. It checks YAML style, applies safe lint fixes, and formats files with configurable layout. It is usable today, but edge-case behaviour is still maturing.

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

ryl targets YAML 1.2. See YAML version compatibility for how version directives and implicit types affect linting and formatting.

Coming from yamllint? See the migration guide.

Quick start

ryl enables no rules by default, so it needs a configuration or --enable that turns rules on. --enable ALL runs every rule 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 and the recommended form; ryl format is the formatter. 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 --enable ALL .

# Using npx (Node.js)
npx @owenlamont/ryl check --enable ALL .

# Format in place, or check formatting in CI
uvx ryl format .
uvx ryl format --check .

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

  • ryl format formats YAML in place without enabling lint rules. Its --check and --diff modes preview changes without writing; [format] in TOML controls the style. It also formats embedded YAML in Markdown with --markdown.
  • ryl includes 27 rules, including tags, merge-keys, block-scalar-chomping, and unicode-line-breaks. The rule reference and per-rule pages are at https://ryl-docs.pages.dev/rules/.
  • Auto-fixing (--fix) is supported for braces, brackets, colons, commas, comments, comments-indentation, document-end, document-start, empty-lines, hyphens, 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 lint.fixable/lint.unfixable keys.
  • --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 the lint.fixable/lint.unfixable fix policy, [lint.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/.
  • YAML configuration (.yamllint, .yamllint.yml, .yamllint.yaml, including the default, relaxed, and empty presets via extends) still works but is deprecated and warns; convert it 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 via ryl format. 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

The figure below times ryl and yamllint over 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.
  • 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.25.1

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.25.1
File Size Uploaded
ryl-0.25.1.tar.gz 658.1 kB Details

Built distributions (wheels)

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

Total release size: 46.3 MB

Release files / ryl-0.25.1.tar.gz

Download URL ryl-0.25.1.tar.gz
Size 658.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4da0ee09ad4299dfc2c4f1b29f249f12471d5f242a4cfe6e412d240bdfab3e95
BLAKE2b-256 checksum
How to use checksums
baae50848b61c62119f548dcdff1e61824474b933b6c478d5b47c4071be61a15
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-win_arm64.whl
Size 3.5 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
3ba99c15de8a3937819d46ad3e6199b96345f4fc42895a5a11a7dc9ed8b4ed0e
BLAKE2b-256 checksum
How to use checksums
4ae47c6d6cd1012d6d4d165fd98dbac28743bf812ac8c6490513d3d39ec400d4
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-win_amd64.whl
Size 3.7 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
55abe3fdefd413d4e81ffac1beebe634ba6bf304c1f1e5cfab5d495ac956072d
BLAKE2b-256 checksum
How to use checksums
7db521623feba87ceeb2e5e4820b20d33cb078c4ef801d7c3318fd1a472ba1ca
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-musllinux_1_2_x86_64.whl
Size 4.4 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
d1ee47b07bc962587988ec6308f7756196b14cca27f949ad6e1c22e2a1a7a606
BLAKE2b-256 checksum
How to use checksums
1c1406f22084bd0365176c38f67b46bf03ad27ec4a69c7aa0d93f3f0df3ace7f
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-musllinux_1_2_aarch64.whl
Size 4.2 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
502196884a704c3fc07f05102bc25c87ea28b809865bdf4249bea57863d3a21e
BLAKE2b-256 checksum
How to use checksums
26be689c164a2d6977993b684bcfbee331a716ff75916c86c5644ba024f401e7
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.2 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
8b3aa01296bcc6602a5625861de31736624303b3f64bf7f6bfaaa18331d4dc1e
BLAKE2b-256 checksum
How to use checksums
44abba35c89f918972c3626bc6bf2cedab472f1f7577ebe740e3fa8a25fc0682
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 4.4 MB
Tags Linux glibc 2.17+ IBM System/390x Python 3
SHA-256 checksum
How to use checksums
b8e3c3372ba904eca67d34399e6178a16aaa63cc78a90a5bf08c781473618d7d
BLAKE2b-256 checksum
How to use checksums
0fed664823ffb03d31ce385dfe6fd9de1861c3acc371d93732dd71782da9a0aa
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 4.7 MB
Tags Linux glibc 2.17+ PowerPC 64-le Python 3
SHA-256 checksum
How to use checksums
a134db5c9294d0fcaf651e07a136e291186599e7e0219126909f10b261ee3a2a
BLAKE2b-256 checksum
How to use checksums
c535e103834912daf4697fd2dfec6f45d067f805efe87478225622586308081c
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Size 4.6 MB
Tags Linux glibc 2.17+ x86-32 Python 3
SHA-256 checksum
How to use checksums
5607b40ff73f4023dc81a51d17dfc4001d8720c6398750e03e394ce99ec002ec
BLAKE2b-256 checksum
How to use checksums
401a2c9236ad882b460d4bdb6a95a718422907fca80ea7e4fa822f72bfbc6a27
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 4.1 MB
Tags Linux glibc 2.17+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
affa431227aa84fed3060bb76da96e736629cc5e6bfe6537d3642bac2d409c3e
BLAKE2b-256 checksum
How to use checksums
327c630f34f008abf7b0d5ef7972e91e230ec4be4c3e2220c660951c99434637
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.1 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
fb69cf31b531ecb951de56130e4e685904d1086e12bb9f6c61f6790c792666e1
BLAKE2b-256 checksum
How to use checksums
8c41053813f32680ffc0b4e0ffe74374b292babe0ce5c4b0b72c9774d378aaf3
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 16, 2026.

Transparency log

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

Download URL ryl-0.25.1-py3-none-macosx_11_0_arm64.whl
Size 3.9 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6db2bbbdfb01f736f603bd757443a7c5318b5704aaa8aabfe1318d6da643adae
BLAKE2b-256 checksum
How to use checksums
94faf3d1e299347c9016bd60deef9e98c787ce7e6287a713dcd8243bdafe6855
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 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.25.1 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