---
title: "Interactions are slow to respond (INP) (smooth/inp-slow)"
description: "smooth/inp-slow: Interaction to Next Paint measures the delay from tap/click to the next frame."
canonical: https://void-design.vercel.app/rules/smooth/inp-slow
lastModified: 2026-09-16
---

# Interactions are slow to respond (INP)

`smooth/inp-slow` · severity **warn** · category Smoothness · detected by `void smooth` and `void audit`

## Why it matters

Interaction to Next Paint measures the delay from tap/click to the next frame. Above 200 ms the UI feels laggy; above 500 ms it feels broken.

## How to fix it

Paint the visual acknowledgement synchronously, then defer the rest (startTransition, scheduler.yield()). Keep event handlers under 50 ms and avoid re-rendering large trees on click.

## Example

```
button.onclick = async () => { button.ariaBusy = 'true'; await scheduler.yield(); doExpensiveWork(); };
```

## References

- https://web.dev/articles/inp
- https://web.dev/articles/optimize-inp

## More smoothness rules

`void smooth` reports 13 rules in this category. 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.

- `scroll-jank` Frames are dropped while scrolling — [smooth/scroll-jank](https://void-design.vercel.app/rules/smooth/scroll-jank)
- `long-frames-during-scroll` Long animation frames block scrolling — [smooth/long-frames-during-scroll](https://void-design.vercel.app/rules/smooth/long-frames-during-scroll)
- `scroll-listener-nonpassive` Non-passive wheel/touch listener — [smooth/scroll-listener-nonpassive](https://void-design.vercel.app/rules/smooth/scroll-listener-nonpassive)
- `layout-shift-after-input` Layout shifts long after an interaction — [smooth/layout-shift-after-input](https://void-design.vercel.app/rules/smooth/layout-shift-after-input)
- `layout-shift-on-scroll` Layout shifts while scrolling — [smooth/layout-shift-on-scroll](https://void-design.vercel.app/rules/smooth/layout-shift-on-scroll)
- `animate-layout-property` Animation of a layout-triggering property — [smooth/animate-layout-property](https://void-design.vercel.app/rules/smooth/animate-layout-property)
- `transition-all` transition: all — [smooth/transition-all](https://void-design.vercel.app/rules/smooth/transition-all)
- `will-change-overuse` will-change is applied too broadly — [smooth/will-change-overuse](https://void-design.vercel.app/rules/smooth/will-change-overuse)

Detected by `void smooth` and `void audit`. Explain it in a terminal: `void rules smooth/inp-slow`
