Skip to content

Rules · perf/*

Performance rules

Core Web Vitals and bytes: LCP, CLS, TBT, TTFB, JavaScript, CSS, fonts, images, caching and compression, measured as the median of several runs on a throttled mobile and a desktop profile.

$ void perf25 rules3 error · 20 warn · 2 infoupdated 16 Sept 2026
  1. perf/lcp-slowerrorLargest Contentful Paint is slowLCP is when the main content appears. Past 2.5 s on mobile users perceive the page as slow, bounce more, and Google's Core Web Vitals mark the URL as needing improvement.
  2. perf/cls-higherrorCumulative Layout Shift is highContent that moves after it renders makes people mis-tap and lose their place. CLS above 0.1 fails Core Web Vitals.
  3. perf/ttfb-slowwarnServer response (TTFB) is slowEvery millisecond before the first byte delays everything else. TTFB above ~800 ms usually makes a good LCP impossible.
  4. perf/fcp-slowwarnFirst Contentful Paint is slowUntil the first paint the user stares at a blank screen. FCP above 1.8 s feels broken on mobile.
  5. perf/tbt-highwarnMain thread is blocked by long tasks during loadLong tasks (>50 ms) make taps and typing unresponsive while the page loads. Total Blocking Time is the lab proxy for INP.
  6. perf/js-budgetwarnFirst-load JavaScript exceeds the budgetJavaScript is the most expensive byte: it must be downloaded, parsed, compiled and executed on the main thread. Marketing pages over ~170 KB compressed are slow on mid-range phones.
  7. perf/css-budgetwarnCSS transfer exceeds the budgetStylesheets are render-blocking: the browser paints nothing until they arrive and parse.
  8. perf/font-budgetwarnWeb font transfer exceeds the budgetFonts block text rendering or cause swaps and layout shifts. More than ~120 KB of fonts is rarely worth it.
  9. perf/too-many-fontswarnToo many font files are downloadedEach font file is a separate request that competes with the LCP resource and can cause a separate text reflow.
  10. perf/image-budgetwarnImage transfer exceeds the budgetHeavy images dominate page weight on content pages and slow LCP on constrained networks.
  11. perf/too-many-requestsinfoPage makes many requestsEvery request costs connection time and priority slots; very high counts usually mean unbundled assets or chatty third parties.
  12. perf/lcp-image-lazyerrorLCP image is lazy-loadedloading="lazy" tells the browser to wait for layout before fetching, which delays the most important image on the page by hundreds of milliseconds.
  13. perf/lcp-image-no-prioritywarnLCP image has no fetchpriority="high"Images start at low priority until layout proves they are in the viewport. fetchpriority="high" lets the LCP image download immediately, often saving 0.5-1 s.
  14. perf/lcp-background-imagewarnLCP element is a CSS background imageBackground images are discovered only after CSS is downloaded and applied, so they always start late and cannot use srcset or fetchpriority.
  15. perf/image-oversizedwarnImage is much larger than its rendered sizeDownloading a 2400px image to display at 300px wastes bytes, memory and decode time.
  16. perf/image-legacy-formatwarnImage served in a legacy formatAVIF and WebP are typically 25-50% smaller than JPEG/PNG at the same quality and are supported by every current browser.
  17. perf/images-missing-dimensionswarnImages without width/height or aspect-ratioWithout intrinsic dimensions the browser reserves 0px and shifts the layout when the image loads.
  18. perf/render-blockingwarnRender-blocking resources delay first paintSynchronous scripts in <head> and large stylesheets stop the browser from painting until they are fetched and executed.
  19. perf/no-text-compressionwarnText resources are served uncompressedHTML, CSS and JS compress 70-90% with brotli or gzip; uncompressed transfer multiplies download time.
  20. perf/cache-headerswarnHashed static assets are not cached long-termFingerprinted files never change, so anything short of a year-long immutable cache makes repeat visitors re-download them.
  21. perf/third-party-heavywarnHeavy third-party footprintThird-party scripts (analytics, chat, tag managers, embeds) are outside your control and are a leading cause of long tasks and poor INP.
  22. perf/dom-sizewarnDOM is very largeLarge DOM trees make style recalculation, layout and every interaction slower and increase memory.
  23. perf/bfcache-blockedwarnPage is not eligible for the back/forward cachebfcache makes back/forward navigations instant. An unload listener (or similar blocker) forces a full reload instead.
  24. perf/lighthouse-score-lowwarnLighthouse performance score is lowLighthouse's simulated-throttling score is a deterministic cross-machine summary of load performance.
  25. perf/lighthouse-auditinfoLighthouse flagged an opportunityLighthouse insights point at specific causes (unused JS, render-blocking requests, image delivery, third parties).