Manifest position 102 · CrUX rank bucket 1000
https://www.twitch.tv
Coverage complete
Coverage-complete anonymous public-surface audit across homepage, directory, live channel, narrow viewport, preference conditions, and an error route.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | issues | high | The light-preference screenshot remains dark, and computed CSS reports body color-scheme: dark with no prefers-color-scheme rule. TW-01 medium: The interface stays in its dark theme when the user requests a light color scheme. |
respect-user-preferencesrespects-reduced-motion | issues | high | The reduced-motion probe found thirteen running animations, mostly 2 seconds long, and no prefers-reduced-motion rule in accessible stylesheets. TW-02 medium: Continuous animations remain active under reduced-motion. |
respect-user-preferencesrespects-contrast | pass | high | Under prefers-contrast:more and forced-colors:active, text, controls, player chrome, links, and focus-relevant edges remain visible with strong system colors. |
implement-natural-interactionsview-transitions | issues | high | CSS inspection found no view-transition rules or names across the rendered homepage. TW-03 low: Route and major state changes do not use View Transitions. |
implement-natural-interactionsscroll-driven-animations | not-applicable | high | No parallax, scrollytelling, or entry/exit reveal surface was present on the representative routes, so there is no scroll-linked animation to implement declaratively. |
implement-natural-interactionsphysical-gestures | pass | medium | Representative discovery and channel paths expose standard click, keyboard, range, and native scroll interactions; no custom pointer-drag surface fighting native scrolling was observed. |
provide-guided-navigationscroll-state-aware-chrome | issues | high | DOM/CSS inspection found no scroll-state container query, progress cue, or declarative scroll-position response on a long discovery feed. TW-04 low: Navigation chrome does not expose scroll-aware feedback. |
provide-guided-navigationanchored-positioning | not-applicable | medium | No edge-positioned tooltip or context-menu state was opened in the audited anonymous discovery/watch journey; the observed consent surface is not an anchored overlay. |
provide-guided-navigationdirects-attention | pass | high | Browse tabs, live-state badges, channel identity, active category tabs, and the unavailable-content recovery CTA consistently direct attention after navigation. |
maximize-content-reduce-noiseno-intrusive-interruptions | pass | medium | The consent surface is large but does not fully interstitial-block the product, offers equally visible Accept/Customize/Reject actions, and the stream discovery UI remains visible. |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | The live DOM reported 0 dialog elements and 0 popover elements while the page displayed a large consent surface and custom transient controls. TW-05 medium: Consent and transient surfaces are implemented without native dialog/popover primitives. |
maximize-content-reduce-noisereduced-chrome | pass | high | Homepage, directory, and channel layouts devote the central region to streams/categories/player while persistent chrome is compact and functional. |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | issues | high | At a requested 360x800 viewport, layout reported hasViewportMeta:false and a 980 CSS-pixel layout viewport; the screenshot shows tiny desktop text and controls. TW-06 high: The desktop page omits the viewport meta tag and is scaled down on a 360px screen. |
adapt-to-the-form-factorcomponent-level-responsiveness | issues | high | Accessible stylesheet inspection found no @container rules while the same cards/sidebar patterns appear across homepage and directory layouts. TW-07 low: Reusable discovery components show no container-query adaptation. |
adapt-to-the-form-factorinput-modality-aware | issues | high | The interaction probe found many controls below 24px high, including 17px links and 20px tags; shrink-to-fit mobile rendering makes them smaller still. TW-08 high: Many controls become undersized for touch and several controls have very small hit boxes. |
support-core-task-successclear-purpose-and-primary-action | pass | high | The homepage immediately exposes live streams and Browse/Search; directory says Browse and channel pages center the live player. |
support-core-task-successprimary-flow-completion | pass | high | The representative flow from homepage to directory to a live channel completes without login; a live player and channel details are visible on the channel route. |
support-core-task-successclear-system-state-and-recovery | pass | high | A nonexistent channel renders a clear unavailable state and a prominent Browse channels recovery action rather than a blank shell. |
be-fast-and-stablegood-core-web-vitals | issues | high | Lighthouse measured LCP 9.2s, FCP 6.4s, TBT 540ms, and time-to-interactive 12.3s, producing a 0.44 performance score. TW-09 high: Cold-load performance is poor under Lighthouse mobile conditions. |
be-fast-and-stablevisual-stability | issues | high | The layout primitive measured CLS 0.373 on the homepage mobile condition and 1.122 on the directory, with multiple shifts after 1.3s. TW-10 high: Large layout shifts occur during representative page loads. |
be-fast-and-stableefficient-main-thread | issues | high | The trace recorded 8 long tasks, a 179ms longest task, and 399.76ms total blocking time; Lighthouse independently measured 540ms TBT. TW-11 high: Heavy scripting blocks the main thread. |
be-fast-and-stableefficient-resource-delivery | issues | high | HAR recorded 252 requests and 2.92MB transferred, including 148 scripts totaling 2.02MB; numerous parser-inserted classic scripts were confirmed in the body without async/defer. TW-12 high: The initial route ships an expensive script-heavy dependency graph. |
be-fast-and-stabletrim-unused-and-duplicate-code | issues | high | HAR shows 148 scripts and 2.02MB of script transfer; DOM inspection confirms both nomodulePolyfills and a separate polyfills bundle on the page. TW-13 medium: JavaScript dominates the initial transfer and includes legacy/polyfill bundles. |
be-inclusivenames-roles-labels | pass | high | Lighthouse accessibility scored 1.00. Search has an accessible name and meaningful stream/category imagery generally carries descriptive alt; no audit violation was reported. |
be-inclusivesufficient-contrast | pass | high | Lighthouse accessibility scored 1.00 and the forced-colors capture preserves readable text and control contrast across the first viewport. |
be-inclusivestructure-and-focus | pass | medium | A focused first interactive element reports a visible auto outline, route landmarks/headings are present, and Lighthouse accessibility found no structural failure. |
be-inclusivelegible-text | pass | medium | At desktop width, headings, stream titles, channel metadata, and error copy are readable and not visibly clipped; the separate narrow reflow failure is recorded under zoom/reflow. |
be-inclusivezoom-reflow-targets-and-media | issues | high | The 360px capture is a 980px desktop canvas scaled to 0.367, making text and interactive targets materially too small even though no horizontal scrollbar is exposed. TW-14 medium: Mobile reflow and target sizing are not usable at the requested narrow viewport. |
follow-best-practicesno-console-errors | pass | medium | Lighthouse did not report its errors-in-console audit as failed during the captured run. |
follow-best-practicessound-document-and-assets | issues | high | The images primitive found all 31 images missing both width and height, 15 missing srcset, 13 oversized, and 5 missing alt attributes; Lighthouse also flagged low-resolution images. TW-15 medium: Images omit intrinsic dimensions and responsive delivery metadata. |
follow-best-practicesbrowser-platform-hygiene | issues | high | Lighthouse failed valid-source-maps, inspector-issues, and BFCache, reporting one back/forward cache failure reason. TW-16 medium: Browser hygiene issues include BFCache prevention and missing source maps. |
be-discoverabletitle-and-description | pass | high | The rendered page has title Twitch and a descriptive meta description explaining the livestreaming service. |
be-discoverablecrawlable-and-mobile-friendly | issues | high | Discoverability measured only 1% rendered-word coverage, isJsShell:true, and a crawler screenshot with no meaningful stream/category content; the viewport meta is also absent. TW-17 high: Public content is effectively absent from raw HTML and the mobile viewport signal is missing. |
be-discoverablecanonical-and-indexing-signals | pass | high | The homepage returns 200, declares canonical https://www.twitch.tv/, robots index, 28 hreflang links, and robots.txt advertises sitemapv2_index.xml.gz. |
be-discoverablestructured-and-shareable-metadata | pass | high | The homepage exposes JSON-LD and Open Graph site_name, title, URL, type, image, and description matching the visible Twitch service. |
be-private-and-securesecure-transport-and-headers | issues | high | Headers show no CSP, Referrer-Policy, or Permissions-Policy. Cookie evidence includes a non-Secure country cookie and an api_token cookie without HttpOnly; all six use SameSite=None. TW-18 high: Security headers and cookie attributes leave material gaps. |
be-private-and-securedata-minimisation-and-third-parties | issues | high | Network capture recorded 249 cross-origin requests and 2.85MB cross-origin transfer, including ad and telemetry endpoints; the consent panel names up to 109 partners. TW-19 medium: The pre-choice load has a broad data and third-party request surface. |
be-private-and-securein-context-permissions-and-modern-auth | pass | medium | No notification, geolocation, camera, or microphone permission prompt appeared on load. Authentication is optional for the core anonymous browse/watch flow. |
be-private-and-securedefensive-browser-policies | issues | high | HSTS, nosniff, and SAMEORIGIN are present, but CSP/frame-ancestors, Referrer-Policy, and Permissions-Policy are absent from the main response. TW-20 medium: Defensive browser policy coverage is incomplete. |
be-resilientprogressive-enhancement | issues | high | Raw HTML contains 1% of rendered content words and is classified as a JS shell; the crawler screenshot lacks streams, categories, and useful navigation content. TW-21 high: Core public content disappears without JavaScript. |
be-resilientresilient-runtime-behaviour | pass | medium | Discovery, channel, and missing-channel routes reached stable, bounded states; the custom player and navigation remained within the viewport at desktop conditions. |
be-resilientoffline-and-installable | not-applicable | high | Twitch live playback is intrinsically online and no installability intent is declared; offline media playback is not a meaningful expectation for this audited public web surface. |
be-resilientnetwork-and-http-failure-states | pass | high | A missing channel produces an intentional unavailable state with a Browse channels recovery action. |
be-internationalisedlang-dir-and-logical-properties | pass | high | The page declares lang=en-GB, exposes 28 hreflang variants, and accessible CSS inspection found logical inline/block properties. |
be-internationalisedlocale-aware-data | pass | medium | The en-GB route renders compact locale-appropriate viewer counts and exposes localized language metadata rather than hard-coding an unlabeled locale. |
be-internationalisedtime-zone-correctness | not-applicable | high | No calendar event, scheduled date/time entry, or user-editable time concept was present in the audited anonymous discovery/watch surfaces. |
be-trustworthyno-dark-patterns | pass | high | Accept, Customize, and Reject are equally prominent; viewing does not require signup, and the unavailable state offers a direct recovery route. |
be-trustworthyhumane-error-handling | pass | medium | The representative invalid channel error uses neutral language, explains unavailability, and offers a clear recovery action without blaming the user. |
be-trustworthytrustworthy-input-assistance | not-applicable | medium | The audited anonymous surfaces contain search and media controls but no address, payment, sign-in, or sign-up data-entry form requiring autofill tokens. |
be-trustworthysafe-commercial-and-account-flows | not-applicable | high | Checkout, subscription purchase, cancellation, and authenticated account management require credentials/payment and were explicitly not exercised in this anonymous public-surface audit. |
be-sustainableoptimised-assets | issues | high | Image evidence found 31 legacy PNG/JPEG images, no modern-format images, 13 oversized images, and 15 without responsive sources. TW-22 medium: Image delivery is not resolution- or format-efficient. |
be-sustainableno-wasteful-work | issues | high | The page makes 252 requests and loads 148 scripts before a user chooses a stream; trace evidence shows 399.76ms blocking time. TW-23 medium: Initial background and non-critical work is excessive. |
be-sustainablethird-party-and-media-budget | issues | high | The initial route transfers 2.92MB and starts a featured live player while also loading ad, telemetry, casting, and extensive discovery code. TW-24 medium: The homepage media/script budget is heavy before explicit interaction. |
be-agent-readystructured-agent-capabilities | issues | high | No structured agent capability was detected, and raw HTML exposes only 1% of rendered words despite public discovery and channel actions being useful to agents. TW-25 low: Agent access relies on scraping a JavaScript-rendered shell. |
be-agent-readyon-device-inference | not-applicable | high | No summarization or language-model task is exposed in the representative anonymous surfaces where on-device inference would clearly improve the current core journey. |
be-memory-efficientno-leak-under-repeated-interaction | pass | medium | After ten bottom/top feed traversals, heap self size rose from 55,406,433 to 56,122,869 bytes (1.29%) and nodes from 975,917 to 989,962 (1.44%), bounded growth rather than an obvious runaway leak. |
be-memory-efficientbounded-footprint | pass | medium | Baseline V8 heap self size was 55.4MB for a complex React livestream discovery page with player, images, and extensive UI; no single application constructor dominated the snapshot. |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | medium | Neither heap summary lists a Detached* constructor among the top retained constructors, and the repeated traversal produced only 1.29% total self-size growth. |
Provenance
Canonical report: results/atomic/reports/0102-www_twitch_tv.json
Report SHA-256: aa4219af1df16500ca9add05d8b7e675c67f28770b782eca7dea4b59b20a1222
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_twitch_tv/2026-07-18T10-45-50-962Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_twitch_tv/2026-07-18T10-45-50-962Z
Catalog SHA-256: sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7
Raw screenshots, HARs, traces, heaps, and other browser artifacts are retained at the local evidence root and intentionally are not committed. Artifact paths in the canonical report are relative to that root.