Interaction to Next Paint (INP)
INP measures responsiveness: the time from a tap, click or key press until the next frame is painted. It replaced First Input Delay as a Core Web Vital in March 2024. 200 ms or less is good.
Feel the difference: measure your own INP
Tap each button. It runs a JavaScript loop that blocks the main thread for the stated time, then updates the counter. Your browser measures how long until the next frame painted.
Counter: 0. Latency is timed from the event's timestamp to the next painted frame — the same span INP measures.
Your worst interaction (≈ INP)
—
How INP works
Every interaction has three parts: input delay (waiting for the main thread to be free), processing time (running your event handlers), and presentation delay (style, layout and paint of the next frame).
INP reports roughly the worst interaction during the visit — the slowest one, ignoring one outlier for every 50 interactions on very interactive pages.
Because it needs real interactions, INP can only be measured in the field or by interacting yourself. Lab tools use Total Blocking Time as a proxy.
Common causes of a poor INP
- Long tasks on the main thread
- A 300 ms JavaScript task that happens to be running when the user taps delays the response by up to 300 ms.
- Heavy event handlers
- Doing all the work synchronously in the click handler before the browser can paint any feedback.
- Large DOM and expensive rendering
- Thousands of nodes make every style and layout recalculation slow.
- Third-party scripts
- Tag managers, chat widgets and ad scripts compete for the same main thread.
How to improve INP
- Show feedback first, then do the work: update the UI, then yield (await scheduler.yield() or setTimeout) before the heavy part.
- Break long tasks into chunks under 50 ms.
- Debounce input handlers and avoid layout thrashing (reading layout after writing styles).
- Move heavy computation to a Web Worker.
- Audit and defer third-party scripts; keep the DOM small.
A heavy JavaScript payload is the usual root cause; the page size checker shows how much script your page ships.
Enter your field numbers in the Core Web Vitals checker to see whether you pass.
INP questions
What is a good INP score?
200 milliseconds or less is good, 200 to 500 ms needs improvement and above 500 ms is poor, measured at the 75th percentile of page visits.
What replaced First Input Delay?
INP replaced FID as a Core Web Vital on 12 March 2024. FID only measured the input delay of the first interaction; INP measures the full latency of all interactions.
Which interactions count for INP?
Clicks, taps (pointer down/up) and key presses. Hovering and scrolling do not count, although scrolling with the keyboard triggers key events that do.
How do I measure INP on my site?
Field data from CrUX (in PageSpeed Insights or Search Console) shows it for real users. To debug, use the Performance panel in Chrome DevTools, which shows live INP as you interact, or the web-vitals JavaScript library with attribution.