A fast formatter and linter for R.

HoovR lays R out the way styler does, checks it with every lintr default linter, and scores code health against budgets that fail a build when it gets worse. One executable, nothing else to install, and two to three orders of magnitude faster than the R tools.

$ hoovr lint R/
R/model.R:2:13: HR0004 Use `seq_along(x)` instead of `1:length(x)`, which is wrong when the input is empty
R/model.R:3:18: HR0005 Use `&&` in a condition, not `&`
R/model.R:4:12: HR0001 Use `<-` for assignment, not `=`
3 findings (3 fixable with `--fix`)

Install

Windows x64 and Linux x86-64. macOS is not supported in 1.0. Full instructions, including checking a download, updating and uninstalling.

Windows winget pending

Submitted to the Windows Package Manager and waiting for review. Until it is listed, download the zip from the releases page.

winget install HoovR.HoovR

Linux

One static binary for any glibc or musl distribution. Check it against the release's SHA256SUMS, then put it on your PATH.

sha256sum -c SHA256SUMS --ignore-missing
unzip hoovr-*-x86_64-unknown-linux-musl.zip
install -m 755 hoovr-*-linux-musl/hoovr ~/.local/bin/

R users

The hoovr package, under lintr's and styler's function names. Its source is on each release from 1.0.0; plain R, no compiler needed.

install.packages("jsonlite")
install.packages(
  "https://github.com/RDalziel/hoovr-releases/releases/download/v1.0.0/hoovr_1.0.0.tar.gz",
  repos = NULL, type = "source")
hoovr::install_hoovr()

What it does

Three tools over one parser, for R files, R Markdown and Quarto documents. Configuration is one hoovr.toml; exit codes are 0 clean, 1 findings, 2 could not run.

hoovr format

Tidyverse layout. By default it changes layout only, never tokens, and never loses a comment. --profile styler-compatible makes styler's decisions, token rewrites included.

hoovr format R/
hoovr format --check .   # CI gate

hoovr lint

Every lintr default linter, plus rules of its own, with fixes where the edit cannot change what the code does. lintr's # nolint comments work as written.

hoovr lint --fix R/
hoovr lint --format github .

hoovr metrics

Cyclomatic and cognitive complexity, nesting, size and more against budgets, with a committed baseline that fails a build only when a number gets worse.

hoovr metrics --update-baseline
hoovr metrics --check

Moving from lintr or styler? --profile lintr-compatible reports lintr's findings where HoovR would differ on purpose. The guide covers translating a .lintr and replacing styler.

Measured, not claimed

Every figure comes from running lintr and styler themselves on the same files. Measurements gives the method and the caveats.

95.4%
of 2,414 real R files byte-identical with styler 1.11.0, using HoovR's styler-compatible profile, across twelve packages
99.55%
of 13,925 real lintr 3.4.0 findings agreed, using HoovR's lintr-compatible profile (98.64% with its default profile), across eleven packages
195–697×
faster than lintr, on four tidyverse packages
939–4,909×
faster than styler at checking formatting
PackageFileshoovr lintlintrhoovr format --checkstyler
withr5822 ms4.39 s15 ms14.13 s
stringr6725 ms7.43 s16 ms17.32 s
tibble11451 ms13.77 s27 ms82.81 s
dplyr19556 ms38.97 s30 ms148.03 s

These are measurements of a build, not promises, and they are refreshed when a release is re-measured. All of them were taken on 25 September 2026 with the HoovR 1.0.0 release candidate (which reported itself as 0.1.1, before its version number was set), against lintr 3.4.0 and styler 1.11.0 on R 4.6.1. The speed figures are on x86-64 Linux with 16 CPUs, each tool doing its own default work; HoovR's time is the fastest of five runs, lintr's and styler's one run each. styler's dplyr run leaves out data-raw/starwars.R, on which styler does not finish, so it covers 194 of the 195 files. No figure is published against air, whose HoovR profile is experimental, against the other Rust tools for R, or for macOS.

Stable across 1.x

The full promise.

Documentation

Install

Windows, Linux and the R package; checking, updating, uninstalling.

Usage

Commands, profiles, configuration, CI, editors, output formats, migrating.

Rules

Every rule and budget, with its lintr equivalent.

Code health

The budgets, how each is counted, and the ratchet.

Release notes

What changed in each release, in plain English.

Issues

Bugs and questions. Security problems: report privately.