Interaction to Next Paint (INP)
Interaction to Next Paint is the Core Web Vital that measures the responsiveness of a page to user interactions (clicks, taps, keypresses) throughout the entire page session. INP replaced First Input Delay (FID) in March 2024 with stricter measurement. The 'Good' threshold is 200ms or less at the 75th percentile of real users.
Also called: INP · Last updated: May 27, 2026 · By Joseph W. Anady
Why it matters.
INP is the strictest Core Web Vital and the most-failed in 2026. Where FID only measured the first interaction's delay, INP measures every interaction throughout the page session and reports the highest delay (technically the 98th percentile of interactions). This means a page that responds fast to the first click but slows to a crawl after 30 seconds of interaction will fail INP.
How it works.
Chrome measures INP per user interaction by timing from input event to the next paint (browser rendering frame). It captures discrete interactions (click, tap, keypress) and aggregates to the worst sustained interaction per page session. The final INP for a URL is computed at the 75th percentile of these worst-sustained-interaction-per-session values across all real users.
2026 reality check.
INP is the #1 Core Web Vital failure in 2026. Approximately 43% of sites fail INP at the 75th percentile (industry data). The dominant cause is JavaScript bloat — sites loading 500KB+ of framework code, plus 200KB+ of third-party widgets, plus 100KB+ of analytics tags. Each adds milliseconds to every interaction. The fix is aggressive JS reduction and third-party widget audit.
Data points
- Good threshold: <=200ms at 75th percentile of CrUX field data
- Needs Improvement: 200-500ms
- Poor: >500ms
- Replaced FID (First Input Delay) on March 12, 2024
- Approximately 43% of sites fail INP at p75 in 2026 (industry data)
First-hand insight from ThatDeveloperGuy.
ThatDeveloperGuy's INP optimization stack: vanilla JavaScript (no jQuery, no large framework bundles), passive event listeners ({passive: true} on scroll/touch), requestAnimationFrame for visual updates instead of setTimeout, code-splitting on non-critical interactive features, no third-party widget loading on the critical path (chat widgets, analytics, ads). Most TDG client sites achieve sub-100ms INP at p75.
How TDG approaches it
TDG's INP discipline: hand-coded vanilla JavaScript (no jQuery, no client-side framework where avoidable), passive event listeners on scroll/touch by default, debounced/throttled event handlers for high-frequency events, requestAnimationFrame for animations, no third-party widgets on critical interactive paths, Lottie/heavy animations gated behind viewport intersection observer.
Common mistakes.
- Loading large framework bundles (React/Vue/Angular) for non-interactive content sites
- Synchronous event handlers that block the main thread for >50ms
- Loading multiple third-party widgets (chat, analytics, A/B test, ads) without measuring INP impact
- Missing passive: true on touch/scroll event listeners
- Heavy work on initial click (lazy-load patterns that pause the page on first interaction)
FAQ.
Why did Google replace FID with INP?
FID only measured the first interaction's delay. INP measures every interaction throughout the page session, better reflecting real user experience. Many sites that passed FID fail INP — the stricter measurement reveals problems FID hid.
How do I check my INP?
PageSpeed Insights (pagespeed.web.dev) shows your URL's INP from CrUX field data. Chrome DevTools Performance panel can simulate INP during lab testing. The WebVitals Chrome extension shows live INP as you interact with a page.
What's the most common INP fix?
Reduce JavaScript bundle size. Most INP failures trace back to too much JS executing during interaction. Code-split, defer non-critical, audit third-party tags ruthlessly.
Does my CMS affect INP?
Yes substantially. WordPress with heavy themes + many plugins = high INP. Headless CMS with static export = low INP. Custom hand-coded = lowest INP. Webflow and Squarespace are middle ground (INP varies by template).
Can I exempt specific interactions from INP measurement?
No. INP measures all qualifying interactions. The only way to 'avoid' an interaction is not to have it.
Maintained by Joseph W. Anady at ThatDeveloperGuy. Back to glossary · Suggest a term