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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- perf/css-budgetwarnCSS transfer exceeds the budgetStylesheets are render-blocking: the browser paints nothing until they arrive and parse.
- 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.
- 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.
- perf/image-budgetwarnImage transfer exceeds the budgetHeavy images dominate page weight on content pages and slow LCP on constrained networks.
- 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.
- 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.
- 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.
- 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.
- perf/image-oversizedwarnImage is much larger than its rendered sizeDownloading a 2400px image to display at 300px wastes bytes, memory and decode time.
- 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.
- perf/images-missing-dimensionswarnImages without width/height or aspect-ratioWithout intrinsic dimensions the browser reserves 0px and shifts the layout when the image loads.
- 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.
- perf/no-text-compressionwarnText resources are served uncompressedHTML, CSS and JS compress 70-90% with brotli or gzip; uncompressed transfer multiplies download time.
- 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.
- 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.
- perf/dom-sizewarnDOM is very largeLarge DOM trees make style recalculation, layout and every interaction slower and increase memory.
- 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.
- perf/lighthouse-score-lowwarnLighthouse performance score is lowLighthouse's simulated-throttling score is a deterministic cross-machine summary of load performance.
- perf/lighthouse-auditinfoLighthouse flagged an opportunityLighthouse insights point at specific causes (unused JS, render-blocking requests, image delivery, third parties).