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.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.25.0
File Size Uploaded
ryl-0.25.0.tar.gz 656.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ryl 0.25.0
File
ryl-0.25.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
ryl-0.25.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ryl-0.25.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
ryl-0.25.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
ryl-0.25.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
ryl-0.25.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl Python 3 none Linux glibc 2.17+ IBM System/390x Details
ryl-0.25.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl Python 3 none Linux glibc 2.17+ PowerPC 64-le Details
ryl-0.25.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details
ryl-0.25.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details
ryl-0.25.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
ryl-0.25.0-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.0.tar.gz

Download URL ryl-0.25.0.tar.gz
Size 656.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0071e3f6ab98d779140cf09855ac1060d016443764f0ecb9b3bbb2b2fed08387
BLAKE2b-256 checksum
How to use checksums
aaf4f695a510a104681b35efe09149382df610b33bc62bb1a9f89ed6f296bc9b
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.0-py3-none-win_arm64.whl

Download URL ryl-0.25.0-py3-none-win_arm64.whl
Size 3.5 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
24892e7d43e1310c24ba756af2fcb9f2af312f5427f0f4c35acffa48d36cfca5
BLAKE2b-256 checksum
How to use checksums
862ff820166655c7b6616ff7f997e17eae699e8841864acc29b37df3438ba010
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.0-py3-none-win_amd64.whl

Download URL ryl-0.25.0-py3-none-win_amd64.whl
Size 3.7 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
306905722bbc10028c936427026ff31ac7e40c99db22208ac2fb756fb904fa9b
BLAKE2b-256 checksum
How to use checksums
901d835ea7ee0d6169e7ac76cda5b6c808d2e93bb1bd1f53a4c40ec6bc959392
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.0-py3-none-musllinux_1_2_x86_64.whl

Download URL ryl-0.25.0-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
d92584af1f137e74ab29c33d905132f4009160da41e4d22842848ca675b66aa2
BLAKE2b-256 checksum
How to use checksums
6e1efcb73c85e326702808070955819ac9e0d2c386866401e7df62f7919a3240
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.0-py3-none-musllinux_1_2_aarch64.whl

Download URL ryl-0.25.0-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
429ad794235795451397f7dee32244e2aef25d81cc558c151bb059d92d8a42d0
BLAKE2b-256 checksum
How to use checksums
0574d3ea8c0b9c758cf898749fdc3f340934aedca7ae59f7a8d5550d67b18469
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.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ryl-0.25.0-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
ffc3621a3605c348d5ef82ea11cf39b4fe99e64f7bb3564bdd27e17bffd1ea2d
BLAKE2b-256 checksum
How to use checksums
abbb2f5b2c3a8813372aae12af460574246970675416a7eab23dd99091f30435
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.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL ryl-0.25.0-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
21a7fc67f4204de234074fad2cc2fa31b3a2593fd111ef83e61e50e67a0f3a87
BLAKE2b-256 checksum
How to use checksums
b4923e5ee87b7595b5df2196b80c1bc4a33b0641e3d2bd3fcf24d8960d1e1037
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.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL ryl-0.25.0-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
7b9b3d232c83d818f30139fcd9be3b8dab1f9637a38b00699c8d8645c5d94704
BLAKE2b-256 checksum
How to use checksums
f4e247e93b3847dafd87bd06e3160e77fd2874f56ca91468df495a96a1faf053
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.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL ryl-0.25.0-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
4ef392cd4589fbd95a4b67ae64c70d0a145c0058f1d763679a998105b6a32376
BLAKE2b-256 checksum
How to use checksums
36ba651cdb80250f6e649ebc315b70b8b78a126eac7da77b77cdbaab200035e2
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.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL ryl-0.25.0-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
4ffd924c1a005b0e8431026da839f6d4fe80bec502f52db57686b85f42a86cb7
BLAKE2b-256 checksum
How to use checksums
86fb33065bfd54709a63b74927a0c0e939cbec183cf397500551c2e39dcc2225
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.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ryl-0.25.0-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
a5964ff801a2088c48b5a7cd1dad9179d6eefb4c43a7881d30969d6dd36e0c20
BLAKE2b-256 checksum
How to use checksums
49b66b5d27a84e90f4dba2a73af12bd977b647c2872a8007a6fdc08f0697fb41
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.0-py3-none-macosx_11_0_arm64.whl

Download URL ryl-0.25.0-py3-none-macosx_11_0_arm64.whl
Size 3.8 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
30fe676071f1d62bd5b7b066fefdbe5c8af306b6b99d5fcab5c91954dd09e49d
BLAKE2b-256 checksum
How to use checksums
655828930b2f08e156566f6cbd9964420a7f9955bc9c430954189c2eb500a1fa
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.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