---
title: "Smoothness rules (smooth/*)"
description: "All 18 smoothness rules void reports, each with severity, why it matters and how to fix it."
canonical: https://void.parthkapoor.me/rules/smooth
lastModified: 2026-09-16
---

# Smoothness rules

How the page feels after it loads: dropped frames during a scripted scroll, long animation frames, INP of real clicks, shifts after input, animated layout properties, idle rAF loops and reduced-motion handling. Run `void smooth` or `void audit`.

| Rule | Severity | Problem |
| --- | --- | --- |
| [`smooth/scroll-jank`](https://void.parthkapoor.me/rules/smooth/scroll-jank.md) | warn | Frames are dropped while scrolling |
| [`smooth/long-frames-during-scroll`](https://void.parthkapoor.me/rules/smooth/long-frames-during-scroll.md) | warn | Long animation frames block scrolling |
| [`smooth/scroll-listener-nonpassive`](https://void.parthkapoor.me/rules/smooth/scroll-listener-nonpassive.md) | warn | Non-passive wheel/touch listener |
| [`smooth/inp-slow`](https://void.parthkapoor.me/rules/smooth/inp-slow.md) | warn | Interactions are slow to respond (INP) |
| [`smooth/layout-shift-after-input`](https://void.parthkapoor.me/rules/smooth/layout-shift-after-input.md) | warn | Layout shifts long after an interaction |
| [`smooth/layout-shift-on-scroll`](https://void.parthkapoor.me/rules/smooth/layout-shift-on-scroll.md) | warn | Layout shifts while scrolling |
| [`smooth/animate-layout-property`](https://void.parthkapoor.me/rules/smooth/animate-layout-property.md) | warn | Animation of a layout-triggering property |
| [`smooth/transition-all`](https://void.parthkapoor.me/rules/smooth/transition-all.md) | warn | transition: all |
| [`smooth/will-change-overuse`](https://void.parthkapoor.me/rules/smooth/will-change-overuse.md) | info | will-change is applied too broadly |
| [`smooth/reduced-motion-ignored`](https://void.parthkapoor.me/rules/smooth/reduced-motion-ignored.md) | warn | Animations keep running with prefers-reduced-motion |
| [`smooth/raf-loop-idle`](https://void.parthkapoor.me/rules/smooth/raf-loop-idle.md) | warn | requestAnimationFrame loop runs while idle |
| [`smooth/scroll-timeline-no-fallback`](https://void.parthkapoor.me/rules/smooth/scroll-timeline-no-fallback.md) | error | Content is invisible without scroll-driven-animation support |
| [`smooth/multiple-webgl-contexts`](https://void.parthkapoor.me/rules/smooth/multiple-webgl-contexts.md) | warn | Multiple WebGL contexts |
| [`smooth/react-commits-on-scroll`](https://void.parthkapoor.me/rules/smooth/react-commits-on-scroll.md) | warn | React re-renders while the page scrolls |
| [`smooth/react-wasted-renders`](https://void.parthkapoor.me/rules/smooth/react-wasted-renders.md) | warn | React component re-renders with unchanged props |
| [`smooth/react-render-storm`](https://void.parthkapoor.me/rules/smooth/react-render-storm.md) | error | One React commit re-renders hundreds of components |
| [`smooth/react-idle-commits`](https://void.parthkapoor.me/rules/smooth/react-idle-commits.md) | warn | React keeps committing while the page is idle |
| [`smooth/react-no-names`](https://void.parthkapoor.me/rules/smooth/react-no-names.md) | info | React component names are minified |
