Quick Setup

Version 0.2.7 Updated Jul 22, 2026

Prerequisites

Install cargo-dylint and dylint-link:

cargo install cargo-dylint dylint-link

Options:

  • --cranelift — Tell the installer to add the rustc-codegen-cranelift component via rustup component add. The rustc-codegen-cranelift component is not included in the standard nightly toolchain, so enable --cranelift when a project or CI pipeline requires the Cranelift back-end and would otherwise need an explicit rustc-codegen-cranelift component-add step before running the installer.
  • --skip-deps — Skip cargo-dylint/dylint-link installation check
  • --skip-wrapper — Skip wrapper script generation (prints DYLINT_LIBRARY_PATH instructions instead)
  • --no-update — Don't update existing repository clone

Adding Whitaker to a project

Add the following to the workspace Cargo.toml:

[workspace.metadata.dylint]
libraries = [
  { git = "https://github.com/leynos/whitaker", pattern = "whitaker_suite" }
]

Then run the lints:

cargo dylint --all

Version pinning

For reproducible builds, pin to a specific release tag or commit:

[workspace.metadata.dylint]
libraries = [
  { git = "https://github.com/leynos/whitaker", pattern = "whitaker_suite", tag = "v0.1.0" }
]

Or pin to a specific commit:

[workspace.metadata.dylint]
libraries = [
  { git = "https://github.com/leynos/whitaker", pattern = "whitaker_suite", rev = "abc123def456" }
]

Rolling release downloads

Whitaker publishes a rolling pre-release tag that is continuously updated and overwritten on every push to main. It is intended for early adopters who want the latest available build outputs before the next stable release is cut.

Rolling releases are best-effort builds. If some matrix legs fail, Whitaker still publishes the artefacts that were built successfully. For example, a target-specific cargo-dylint archive may be missing from one rolling release even though other target archives were updated successfully. Do not assume that every supported target is present in every rolling release.

Stable releases differ from rolling: a stable tag is expected to contain the complete artefact set for the release. For production installs, pin to a stable release tag rather than consuming rolling.

Scripts or CI pipelines that consume rolling-release archives should verify that the required target archive exists before proceeding. Treat missing archives as an expected condition for rolling releases rather than assuming the artefact set is complete.

Selecting individual lints

To load specific lints instead of the full suite, specify each lint explicitly:

[workspace.metadata.dylint]
libraries = [
  { git = "https://github.com/leynos/whitaker", pattern = "crates/module_max_lines" },
  { git = "https://github.com/leynos/whitaker", pattern = "crates/no_expect_outside_tests" }
]

Standard vs Experimental Lints

Whitaker lints are divided into two categories:

  • Standard lints are stable, well-tested, and included in the default suite. They are recommended for general use and have predictable behaviour.
  • Experimental lints are newer or more aggressive checks that may produce false positives or undergo breaking changes between releases. They must be explicitly enabled.

The default whitaker_suite pattern includes only standard lints. Whitaker currently ships one experimental lint, rstest_helper_should_be_fixture, which is available only when experimental lints are enabled.

Enabling experimental lints

Via standalone installer

whitaker-installer --experimental

This enables experimental suite features when building whitaker_suite. To build experimental lints as individual libraries, combine it with --individual-lints. Explicit --lint requests for experimental lints also require --experimental; without that opt-in the installer rejects the request before building anything.