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

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

# Using npx (Node.js)
npx @owenlamont/ryl -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

Status and scope

  • All 23 yamllint rules are implemented, plus a ryl-only tags rule (forbids unsafe and non-portable YAML tags; 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, 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.
  • --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.
  • 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.
  • 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.

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.16.0.tar.gz (335.3 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.16.0-py3-none-win_arm64.whl (2.5 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.16.0-py3-none-win_amd64.whl (2.6 MB view details)

Uploaded Python 3Windows x86-64

ryl-0.16.0-py3-none-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ryl-0.16.0-py3-none-musllinux_1_2_aarch64.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ryl-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ryl-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ryl-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ryl-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.16.0-py3-none-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for ryl-0.16.0.tar.gz
Algorithm Hash digest
SHA256 c38420090b50d9953356994b628eca55f45b888c9158710a5d6e9da706e3e98a
MD5 07dd7dbdad6f62d0512552ef904e5874
BLAKE2b-256 bc3dd3b1c465f4f51415d5be78c29e48b52b1d6c1c20a4532ffbd150cff13152

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.16.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 2.5 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.16.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 3d4380f84cc3cc523b84d34e5d481477f8aaad9732020d27eb775d4c9ae73a38
MD5 33355fc0e631466bd68f7c65978c6201
BLAKE2b-256 a835085c7344989e2afcea1ea119f87b55c6175c59d0da47ff0973999157b1fb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.16.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.16.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f101475435822dc55072d172fa1b51dbf12172cd07ff6fe0f031c7d951f6399d
MD5 26cfb21f65523bcfe4ce06c85da238b3
BLAKE2b-256 286b76b341bd4d43950cdc06c81c9a9fbf65b39c9abcb4154b945c8d90e1336d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.16.0-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.2 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.16.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1fb4476f52b50344755b69aa12eb9fef43505fe669ca1df4cd7c8c2e5e972962
MD5 ecba13b5067c37823fd87e3e1a59c7b6
BLAKE2b-256 57095a980e2e97098c4f75197c5ffe5a1cda9942b2e63028790a314d407a293c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 27f12b4366a9a5a603324c79687ac0184ced23149fd6ae2e54f9db1d0e40131a
MD5 9a3411df2e00fad330defedf722eb06a
BLAKE2b-256 de153c55d3de566b73001845a3f41358145917c27d086bd14ea46baa99109bb1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4c99c84d739be8a38ea09d1dcf8d93002539c921d7b1decf20c9e46f1322ff1b
MD5 b4aee2fa8e0c2e39c59323d4020ff520
BLAKE2b-256 6a3e1f1155828f4e1b9de283e85e70d22d75c3340ae2cd7331c0628ae81597f8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 9ac364a2b32d4881726e7ebe209a3662aa809e716175dc199453254f90750a34
MD5 6d7539d4d406a32535eee3487d824b01
BLAKE2b-256 83c0f08261771d3db4ee1a9ec33d8fcfd3188e64add723d0364955df73735e50

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1c9ec36f53d681891b059f5b8b6f381dcc687f294cb3465e80075fa91a8a7d30
MD5 d7d8db2f28758642f7bc41097a2c2d8e
BLAKE2b-256 7951e77266863ec65827d5a7818da03385d1001d9ed32947b3491f64b1bba66b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 83c33a727ce17a395b2d37d4ae47d739846dfe01e4a43029ca1133f5ea571c42
MD5 c5f77ea126f61cfcc413ff93b4539019
BLAKE2b-256 3e2162ce3a77818bc22dce8039035310247c2e254f913f2bc5599ca2dd2accab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9d4045faa0c4a931a7fff96ede964680a5d4c1420baf3295bb18c66113dd3f9a
MD5 87a3757cb16eaa8e9a3284f444beb9df
BLAKE2b-256 6a28c946d6b1ac009e2b55b20bf11d564e1deea545d55315eadb4d7bdfc00a55

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 995273dd6024b73092346e9418c47c32b486672fb07eaa9979a13a22ebb764f0
MD5 cfda3101dbc0b819347d0178471ff390
BLAKE2b-256 ad6d799680edae4f6ff47472d98568d816488bf2ae6a1ba2f046e44794395f4f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.16.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.8 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.16.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7269736468a1566b9f7b8241b0d46657f2b14e320d08b8df1caf5947c9233eeb
MD5 6407364add7d26fc5413598402e81df7
BLAKE2b-256 bd9cbd906909406909c77dd06e23c307836040ae5d7722f8a12a0362adb213ea

See more details on using hashes here.

Provenance

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