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.
  • 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 and check-only (--fix does not modify Markdown). 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 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'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.13.0.tar.gz (262.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.13.0-py3-none-win_arm64.whl (2.3 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.13.0-py3-none-win_amd64.whl (2.4 MB view details)

Uploaded Python 3Windows x86-64

ryl-0.13.0-py3-none-musllinux_1_2_x86_64.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ryl-0.13.0-py3-none-musllinux_1_2_aarch64.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.13.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ryl-0.13.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.13.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ryl-0.13.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ryl-0.13.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ryl-0.13.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.13.0-py3-none-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: ryl-0.13.0.tar.gz
  • Upload date:
  • Size: 262.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.13.0.tar.gz
Algorithm Hash digest
SHA256 c8453e00ddb46804bc8efe8dfe4ab664e6babd49c3ea8c0e94e9d0db5b3be087
MD5 2422977493f82993d119e84eed1cd464
BLAKE2b-256 015128b48f73cadac40472be6385434417b893cda3bc1a661d712d2dd31d48ed

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.13.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 2.3 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.13.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 b8d32ba08722c16c3e402e80a095c8268395ef49ca5a3aa97ba76f0165276a05
MD5 b6efcc83768dbdf0abab33d3ea4e93f2
BLAKE2b-256 6d35519517b5ac6a713cffa5fb4a91ee0854d4e5b778121a8fa0cccd401b075d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.13.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.4 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.13.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e2133cdbec692860ad4ddfe47c0b7c7f45e06034ba30b3ca371b7e5122e3f35f
MD5 094e0cc73f44eecc6489ac215bc806ac
BLAKE2b-256 4d80e14c10e089156a054654d328d3a8ac3071ba454f2bd9b381fafa2ef297d5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.13.0-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.9 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.13.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 51cfe9e62943c54bbc6aacd09d3cc5ff66b383480994c5c4b209ed5235a2ed86
MD5 9429fbc083d9baf1cb902b9b6ae809a4
BLAKE2b-256 a9b14964bc54cda017d039c07abcc7b28a6bc5f7e2ebe33b358eaaf38820f00c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6a30e7ebf103acd43be523f5eaab69230133aeb664acdc3c7595ad0ab91688ab
MD5 9b3d7199956fdc1078496dfe939cd18b
BLAKE2b-256 00c34971ba01edc3bd553c8dbf287b261268393dbc6f17b4169a77188f533fda

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb275c681d0bc4ffe61c9c65be787317740150a7d3282760295c6a3e666e1088
MD5 74ad71423509610652932a6e8831b9c3
BLAKE2b-256 e2d07c657b9f6779935eaa2d0a494a79a7ca600b2a655c6191828e620558f855

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 9b47e7f9f156d8f9bc922bc1e4426501626b67d6ef81deee121fa621c39e31de
MD5 0da2c24f61cd4034d53e179fce32ea90
BLAKE2b-256 cdd305c8694f841f7ad76715cb995ef1dd2c2870992c6e9274a976f36e2277df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 d867dd61b7def4c7624615aaba47ecb148dd63ffcfc22ac55ec9bddca22b7b38
MD5 08fe1897afe988dbe5a0d40ee2ac2e5f
BLAKE2b-256 feb331163c0647124609932bec065d4b8691727c38e18ecd53e3a7d26befe5c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9c6fc4aad3688651a3ae0589e0f1fb15f5c98b4ccf245db82c7869390abe7821
MD5 28376bd0d0865168e780cc46e424a616
BLAKE2b-256 0f263910e790a3556d8dc4db0f1adb652271eca9efdc1b1dd4e037b78c28f38b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 497a85b0ee53bade36977d9d853519162d5f18ed355f7d9e797151c95d36c394
MD5 d0c2e30060e3fff6a2855c842bd41bdf
BLAKE2b-256 2c124a8e4076d5d57b68c73bbb6c003b5efd9a546d205c69bff44341c18ad19b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.13.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d4977f479d18892b4ac74b0874195697da6bc88d4331d576b51277e914447edf
MD5 a95e7e1915922f0b53aba0435efa9e76
BLAKE2b-256 a5a7f09d5eeec715a7e3ef731b97331715d4daee2c883ebefd3c15088621ac20

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.13.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.6 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.13.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1fd1f458be0efed06efcbc17541b630b5afe8eee812aacd64c8a8971c0faf429
MD5 7f518afccf7f7e0bbde6bb0a0bdeae23
BLAKE2b-256 c81fc170d10d53cffd9d263a66d26927eb4f3521e5610bf626c8e8c9d9ac9e9f

See more details on using hashes here.

Provenance

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