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.17.0.tar.gz (377.5 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.17.0-py3-none-win_arm64.whl (2.6 MB view details)

Uploaded Python 3Windows ARM64

ryl-0.17.0-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

ryl-0.17.0-py3-none-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ryl-0.17.0-py3-none-musllinux_1_2_aarch64.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ryl-0.17.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

ryl-0.17.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ s390x

ryl-0.17.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

ryl-0.17.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

ryl-0.17.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

ryl-0.17.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

ryl-0.17.0-py3-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for ryl-0.17.0.tar.gz
Algorithm Hash digest
SHA256 733eb41f1042fcf82ca0b70e35880706146755d25199c4831958e0b8def4c1f1
MD5 68dd8326a590c3f8ac8a0f7e5db0aac2
BLAKE2b-256 43b0e55b27ec04ebb98a989ff0d039224429ea7ec601b259152dc158a56d2d4a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.17.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 2.6 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.17.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 e8407ebe3540f97861266ff28767fb5a7066e24b23e148f76451ddca61b15b7b
MD5 c49115c532acfd8570a092bee7cc7aaf
BLAKE2b-256 db5e3eea3ec607997b06d384adf54b6234e2ee5a4825623f808f932001074d4b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.17.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.8 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.17.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 73b09f735920a2bd7c488d28dfb188575079a046b827d150cce469ab3fb30641
MD5 dca9555fd732863bc98d787c65aed66e
BLAKE2b-256 b0f0304a59daba33f43010af84b747a0937310ed92c3ec51869b8ec61e4935a7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.17.0-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.4 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.17.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9262b8a99a20098cf4d071ad968322c409bc7516ca36093a337087206024401f
MD5 d335bc9e8aadebc6ee6129710a9dc905
BLAKE2b-256 b387bdc95372b6e1f3700c903d37fc46ed112271bee67165df4e260252c6daaf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 83a0f8f2d05551f4c82802e8b1331eea7ae43698ffdb9c27fa5a75718e8b062d
MD5 107d2896c395c6b80117cb4a6f411906
BLAKE2b-256 28db3ac7f64b33ed5f6f6ba56dfb778733bbe3951d0f3fe781ba3a218175390c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 29574d16eb9e17204a7fa4c628dab573db72ca00d1abe6b06d88dcc45239dd85
MD5 4064412a19931532e63d18a1ae778dd5
BLAKE2b-256 3d61aafc6e812ab6d21bfa651a76a2587cc31c891fe2e4bd436c8ae31787af77

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 04fe467b23422b6e66b3f2aa7337b05bab8600ccef81a22925a9ed147494b874
MD5 19cc6a2f1d03233c43db0776d135544c
BLAKE2b-256 ffee5486d3f1dd11dc0b57669b3f52213033aeaa95e88addb7fbc5cc8c70b372

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 14f2cdebf50a270a25f3c8cc4e42cd9ee8c91fbd642151402a558ea64ffc7f8b
MD5 a89cbadc1c3ce49dea14e132d43614b9
BLAKE2b-256 5898473c1890affdd575bc701c0fb80f219f4808fecfb8cf00a75dfe0c11f7bc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1f9d57fdab9df79834534ef107a7f0b2cdbe0be95541ced0a66620cae142dd73
MD5 459bd4de58b5bc4c18f7a73167b94e05
BLAKE2b-256 2d05b15847530ebb33de1cde64165a7422977248941860feb4400c3ea05b4264

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2c8383a36fd5516b58450a9367700d49af3f898d78c9d534e4dae85a2abb602e
MD5 8151afac35677523c8b8170dc631ddcb
BLAKE2b-256 9dcef3c7dd07c3206bf49174629425fefcdd508bd0e8814c34c9058491ed89ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for ryl-0.17.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5e4ae1e2a673ce437a11b3ef504dc94620f3f6fab003f44c58f656ecd158265e
MD5 24c6f4a6504d8c5700c779f1abfa28c0
BLAKE2b-256 5ddc76174f40885564c8adc3d5c9451d5331ce4d8afb9f6e8b5527b47fb91dc7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: ryl-0.17.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 3.0 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.17.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 73adeed1996db1ded4ceb5dd65fd86091d0c168df2b51bd9dddab48a7eaad665
MD5 075a754d619fcc02acebb4635fb7640b
BLAKE2b-256 191b0cf81282b50f2b2ed0321c084aced3dd97880f776b2a44fa44303c1078cd

See more details on using hashes here.

Provenance

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