Manifest position 958 · CrUX rank bucket 1000
https://www.threads.com
Coverage complete
Coverage-complete external audit of anonymous public surfaces. Authenticated posting, settings, notifications, account deletion and live checkout/commercial flows were not covered because no credentials were provided.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | pass | high | The consent and underlying application surfaces switch from white/black in light mode to #101010/dark surfaces in dark mode. |
respect-user-preferencesrespects-reduced-motion | issues | high | With prefers-reduced-motion: reduce matched, the evaluate probe still found a running 800 ms animation plus multiple 0.2–0.5 s transitions. WU-001 medium: Reduced-motion preference still leaves non-essential motion running |
respect-user-preferencesrespects-contrast | issues | high | Default rendering already fails normal-text contrast, so preference/contrast robustness is not met. WU-012 medium: Muted text fails WCAG contrast |
implement-natural-interactionsview-transitions | pass | medium | Loaded CSS contains view-transition rules and route/navigation surfaces remain continuous. |
implement-natural-interactionsscroll-driven-animations | not-applicable | high | No parallax, scrollytelling, or scroll-linked animation is present on the representative public surfaces, so there is no scroll-driven motion to implement. |
implement-natural-interactionsphysical-gestures | pass | medium | The public feed uses native vertical scrolling and standard link/button activation; no custom pointer-drag surface was observed. |
provide-guided-navigationscroll-state-aware-chrome | issues | high | CSS inspection found no scroll timeline or scroll-state behavior; desktop and mobile captures show static navigation with no progress or state-aware header treatment. WU-004 low: Feed chrome does not expose scroll-state feedback |
provide-guided-navigationanchored-positioning | pass | medium | The loaded stylesheet contains anchor positioning/position-try declarations for overlay placement. |
provide-guided-navigationdirects-attention | pass | medium | The selected Home label, page h1, profile headings and Thread heading consistently identify the current location. |
maximize-content-reduce-noiseno-intrusive-interruptions | issues | high | Desktop and 360 px screenshots show the consent dialog obscuring the entire feed before any interaction; the mobile dialog consumes nearly the full viewport. WU-002 high: A full-page cookie dialog interrupts every first visit |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | DOM probes found zero native dialog/popover/details elements; consent is a div with role=dialog and its actions are div role=button controls. WU-003 medium: Consent and promotional overlays are custom div dialogs |
maximize-content-reduce-noisereduced-chrome | pass | high | After consent dismissal, content occupies the main surface with restrained navigation and minimal borders; the mobile feed gives almost all space to posts. |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | pass | high | scrollWidth, clientWidth and innerWidth were all 360 px, horizontalOverflowPx was 0, and the feed reflowed into a single mobile column. |
adapt-to-the-form-factorcomponent-level-responsiveness | pass | high | Loaded CSS contains @container rules; the feed/navigation components materially reorganise between desktop sidebar and mobile bottom navigation. |
adapt-to-the-form-factorinput-modality-aware | issues | high | The focus probe reported many anchors and role=button controls with outline-style none; panorama buttons measured only 10 px wide, below a usable touch target. WU-005 medium: Several focusable controls have invisible focus and tiny geometry |
support-core-task-successclear-purpose-and-primary-action | pass | high | Home, profile identity and Thread headings clearly communicate each surface; Log in is visible while public browsing remains available. |
support-core-task-successprimary-flow-completion | pass | medium | Public feed, profile and thread details loaded end-to-end without login; search accepted a query and navigated to the expected query URL. |
support-core-task-successclear-system-state-and-recovery | issues | high | A submitted search navigated to a query URL but exposed only the query and footer after 2.5 s, with no loading/empty guidance; an unknown URL silently redirected to login instead of a clear not-found state. WU-006 medium: Search and unknown-route states do not explain what happened |
be-fast-and-stablegood-core-web-vitals | issues | high | Lighthouse measured FCP 7.0 s, LCP 16.2 s, Speed Index 13.9 s and performance score 0.30; the raw CDP trace independently measured FCP 6.70 s and LCP 11.34 s. WU-007 critical: Initial rendering is extremely slow |
be-fast-and-stablevisual-stability | issues | high | Lighthouse measured CLS 1.0 and reported one large layout shift, far above the 0.1 good threshold, although the settled mobile primitive observed no later shifts. WU-008 high: The loading experience produces a severe layout shift |
be-fast-and-stableefficient-main-thread | pass | high | Lighthouse TBT was 70 ms and the trace summary found zero >50 ms long tasks and 0 ms total blocking time in its captured window. |
be-fast-and-stableefficient-resource-delivery | issues | high | HAR captured 105 requests and 3,191,522 transferred bytes; 29 scripts transferred 1.52 MB and the parser-inserted stylesheet took 5.20 s. WU-009 high: The anonymous feed has a heavy and slow critical delivery path |
be-fast-and-stabletrim-unused-and-duplicate-code | issues | high | Lighthouse estimated 871 KiB unused JavaScript and 103 KiB unused CSS, including 96.5% of the main stylesheet. WU-010 high: Most shipped CSS and substantial JavaScript are unused on the audited view |
be-inclusivenames-roles-labels | issues | high | Lighthouse found an unnamed role=dialog; the image primitive found five of eleven images without alt text, including content imagery. WU-011 high: Dialogs and media lack accessible names or alternatives |
be-inclusivesufficient-contrast | issues | high | Lighthouse found timestamps at 4.24:1 on #101010 and promo copy at 3.96:1 on #181818, below the required 4.5:1 for normal text. WU-012 medium: Muted text fails WCAG contrast |
be-inclusivestructure-and-focus | issues | high | Programmatic focus on navigation and feed controls repeatedly produced outline-style none and no box shadow; the DOM also relies heavily on generic div role=button controls. WU-013 high: Keyboard focus is not consistently visible |
be-inclusivelegible-text | pass | medium | Primary post text uses readable line lengths, stable wrapping and unclipped 15–16 px body text on both viewports; contrast defects are recorded separately. |
be-inclusivezoom-reflow-targets-and-media | issues | high | Lighthouse failed meta-viewport because maximum-scale was below 5; the probe also found 10 px-wide focusable panorama controls. WU-014 high: Mobile zoom is restricted and some targets are too small |
follow-best-practicesno-console-errors | pass | high | Lighthouse scored the console-errors audit 1.0 with no logged browser errors. |
follow-best-practicessound-document-and-assets | issues | high | Lighthouse reported a missing/late charset; image inspection found seven oversized images and nine legacy-format images. WU-015 medium: Document and image hygiene has avoidable defects |
follow-best-practicesbrowser-platform-hygiene | issues | high | Lighthouse reported an unload event listener in the primary Instagram CDN bundle, an API Chrome is removing. WU-016 medium: A deprecated unload listener harms platform hygiene and BFCache readiness |
be-discoverabletitle-and-description | pass | high | Home, profile and post each expose a descriptive title and meta description; the profile/post values reflect visible content. |
be-discoverablecrawlable-and-mobile-friendly | issues | high | Discoverability measured only 6% raw-HTML coverage on home (isJsShell=true) and 16% on the thread detail; the crawler screenshots expose far less content than rendered views. WU-017 high: The home feed and thread content are largely absent without JavaScript |
be-discoverablecanonical-and-indexing-signals | pass | medium | Representative pages returned 200, exposed self-canonicals, and public profile/post routes are represented by a substantial sitemap; robots restrictions are deliberate and agent-specific restrictions are judged under agent readiness. |
be-discoverablestructured-and-shareable-metadata | issues | high | Profile and thread probes found useful Open Graph metadata but zero JSON-LD blocks for ProfilePage/Person or SocialMediaPosting entities. WU-018 low: Rich public entities have social metadata but no structured data |
be-private-and-securesecure-transport-and-headers | issues | high | Headers show HTTPS, HSTS and CSP, but style-src allows unsafe-inline, Referrer-Policy is absent, and the 400-day csrftoken uses SameSite=None. WU-019 medium: Security policy has avoidable gaps |
be-private-and-securedata-minimisation-and-third-parties | pass | medium | No known tracker domains or exposed secrets were found; observed cross-origin requests were Meta/Instagram asset and media CDNs disclosed by the consent surface. |
be-private-and-securein-context-permissions-and-modern-auth | pass | medium | No permission prompt appeared on load; Permissions-Policy disables most capabilities, and login markup includes username/current-password autocomplete plus WebAuthn/passkey-related code. |
be-private-and-securedefensive-browser-policies | issues | high | HSTS, X-Frame-Options DENY, nosniff and a broad Permissions-Policy are present, but the missing Referrer-Policy, unsafe-inline style policy and SameSite=None CSRF cookie leave gaps. WU-019 medium: Security policy has avoidable gaps |
be-resilientprogressive-enhancement | issues | high | Raw server HTML retained only 6% of rendered home words and 16% on the thread detail, leaving important public content unavailable to non-JS and failure conditions. WU-020 high: Core public content depends heavily on JavaScript |
be-resilientresilient-runtime-behaviour | pass | medium | Home, profile, post and search rendered without clipped primary chrome or runtime errors at desktop/mobile widths; CSS includes anchored positioning and container queries. |
be-resilientoffline-and-installable | issues | high | A valid standalone manifest and icons exist, but the runtime probe found no active service-worker controller on the app-like home experience. WU-021 medium: The app manifest is present but the page is not controlled for offline use |
be-resilientnetwork-and-http-failure-states | issues | high | The intentionally unknown public URL redirected to /login/?next=... with no 404 explanation, recovery action, or indication that the requested resource does not exist. WU-022 medium: Unknown routes fail into an unrelated login screen |
be-internationalisedlang-dir-and-logical-properties | pass | high | The document declares lang=en and dir=ltr; loaded CSS includes logical inline properties and content spans use dir=auto where appropriate. |
be-internationalisedlocale-aware-data | pass | medium | Public time values are human-readable relative durations such as 8h/16h rather than hard-coded locale-specific absolute date strings; no currency or numeric form entry appears in audited surfaces. |
be-internationalisedtime-zone-correctness | not-applicable | high | The audited public feed/profile/thread surfaces expose relative ages only and no scheduled event, recurrence, calendar input, or absolute cross-zone time requiring DST coordination. |
be-trustworthyno-dark-patterns | pass | medium | Consent presents both Allow all and Decline optional choices without confirmshaming, and public browsing does not force account creation. |
be-trustworthyhumane-error-handling | issues | high | After empty submission, focus moved to the username field but the probe found no :invalid elements, aria-invalid state, alert or live-region message. WU-023 low: Empty login submission gives no explicit accessible feedback |
be-trustworthytrustworthy-input-assistance | pass | high | Login uses autocomplete=username and current-password; the search field uses the native search input type. |
be-trustworthysafe-commercial-and-account-flows | pass | medium | The visible account entry offers direct login, password recovery and Continue with Instagram without pricing, forced subscription or disguised commercial commitment. |
be-sustainableoptimised-assets | issues | high | Image inspection found seven oversized images, nine legacy-format images and seven below-fold images without lazy loading. WU-024 medium: Images are frequently oversized, legacy-format, and eagerly loaded |
be-sustainableno-wasteful-work | pass | medium | Despite a heavy startup payload, the captured trace had no long tasks and no known third-party trackers; waste attributable to unused code/assets is recorded in adjacent checks. |
be-sustainablethird-party-and-media-budget | issues | high | HAR attributed 3.02 MB and 87 of 105 requests to CDN origins outside www.threads.com, including 1.27 MB of images and media fetched during initial load. WU-025 high: Anonymous browsing transfers a disproportionate third-party/media payload |
be-agent-readystructured-agent-capabilities | not-applicable | high | Threads explicitly disallows major AI agents in robots.txt and exposes no intended agent-facing action surface; this emerging capability is therefore judged outside the declared public surface. |
be-agent-readyon-device-inference | not-applicable | high | No summarisation/composition inference feature is offered on the audited anonymous surfaces, so on-device inference has no applicable user task here. |
be-memory-efficientno-leak-under-repeated-interaction | pass | medium | After ten bottom/top scroll cycles, heap self-size decreased from 35,314,814 to 34,996,483 bytes and snapshot node count decreased from 696,984 to 675,806; no retained-growth signal appeared. |
be-memory-efficientbounded-footprint | pass | medium | The settled anonymous feed used about 35 MB V8 self-size; its largest categories were native/code/object allocations and the footprint remained bounded after exercise. |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | medium | Neither summary exposed Detached* constructors among top retained constructors, and closure/object counts fell after repeated scrolling rather than accumulating. |
Provenance
Canonical report: results/atomic/reports/0958-www_threads_com.json
Report SHA-256: 8541860340863070d0230709484727afd5890ac13e1ee0e178aaf9b081097494
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_threads_com/2026-07-24T03-41-50-417Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_threads_com/2026-07-24T03-41-50-417Z
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.