You fired up your VPN, checked your IP, and got a clean result. You think you’re invisible. You’re not.
In 2026, IP-only checks are the digital equivalent of wearing a mask and forgetting to change your shoes. Modern tracking infrastructure from Cloudflare’s bot management layer to Meta’s Pixel to the anti-fraud engines powering every major e-commerce platform, doesn’t care about your visible IP address. It is profiling the cryptographic fingerprint of your TLS handshake, the GPU-level rendering behavior of your browser’s canvas, and the precise nanosecond timing of your system’s audio stack. Your IP is the least interesting thing about you.
The tools that casual privacy-seekers rely on free VPN “IP checkers,” browser extension scanners miss 90% of what actually gets you flagged, blocked, or linked to a previous session. BrowserLeaks is the tool that doesn’t miss anything.
BrowserLeaks has been the gold standard for advanced browser fingerprint testing for years, and in 2026 it remains the most comprehensive, technically honest privacy audit tool available to the public. It doesn’t hide from ugly truths. If your setup leaks, BrowserLeaks finds it every time.
This guide is for the people who need to know exactly what BrowserLeaks is, how every test works at a protocol level, what the results actually mean, and how to act on them.
Test your current browser profile directly using our embedded native instance above before reading further.
What is BrowserLeaks and How Does It Work in 2026?
BrowserLeaks is a free, browser-based diagnostic suite that systematically probes every available JavaScript API, browser feature, and network behavior to reconstruct the full fingerprint your browser exposes to the web. No installation required. No account needed. It simply loads and immediately begins reading what your browser broadcasts about itself.
The Evolution from IP Checker to Fingerprint Lab
When BrowserLeaks launched, the state of online tracking was relatively primitive: ad networks relied primarily on third-party cookies, and “privacy” largely meant clearing your cookies or masking your IP. A simple IP leak checker was sufficient for most threat models.
The tracking ecosystem has since undergone a fundamental architectural shift. Third-party cookies are effectively deprecated across all major browsers. Regulatory pressure (GDPR, CCPA, and the 2025 EU Digital Identity Regulation) pushed advertisers and platforms to build cookie-independent identification systems. The result is a multi-layered fingerprinting infrastructure that is, in most implementations, more persistent and more precise than cookies ever were.
BrowserLeaks evolved in lockstep with this landscape. In 2026, it tests over 20 distinct fingerprinting surfaces, including several that have only become operationally important in the last 18 months:
- TLS/SSL handshake fingerprinting (JA3, JA4, JA4+) — detecting which client library initiated the connection at the protocol level
- HTTP/2 fingerprinting — analyzing HEADERS frame ordering and SETTINGS frame values to identify the underlying browser engine
- WebRTC network topology exposure — mapping internal network interfaces even behind NAT and VPN tunnels
- GPU-level rendering via WebGL and Canvas API — extracting hardware-specific rendering artifacts
- AudioContext timing analysis — reading hardware-level audio stack behavior
- Web API surface enumeration — detecting which browser APIs are present, absent, or behave unexpectedly

What makes BrowserLeaks uniquely valuable is its transparency. Every test displays raw output — the actual data your browser sends — rather than a simplified red/green “pass/fail” verdict. This is the difference between a diagnostic tool and a marketing widget.
Why Regular Checkers Miss the Mark
Standard “privacy check” tools typically validate three things: your visible IP, your approximate geolocation, and whether DNS queries route through your declared provider. This is a small subset of your exposed attack surface.
BrowserLeaks, by contrast, operates at the JavaScript API layer. It calls RTCPeerConnection directly to trigger WebRTC negotiation, executes OffscreenCanvas rendering operations to capture GPU-specific output, calls AudioContext.createOscillator() and measures the resulting waveform’s floating-point artifacts, and reads navigator.fonts.query() to enumerate system typefaces. These are not network-level requests — they execute entirely within your browser sandbox, which is precisely why a VPN offers zero protection against them.
In 2026’s threat model, passing a BrowserLeaks test is a prerequisite, not an afterthought, for any use case that involves account management, automated data collection, affiliate marketing, or any workflow where a platform might flag your session.
Deep-Dive: Key BrowserLeaks Tests You Must Run
IP Address & WebRTC Leak Test
The IP test on BrowserLeaks does two things that standard IP checkers don’t. First, it queries your visible public IP through normal HTTP channels — the same IP any website sees when your request arrives at their server. Second, and critically, it initiates a WebRTC peer connection negotiation to extract every IP address your system exposes through the STUN/TURN signaling protocol.

How WebRTC leaks break VPNs:
WebRTC (Web Real-Time Communication) is a browser-native API designed for peer-to-peer audio, video, and data communication. To establish a peer connection, it uses the ICE (Interactive Connectivity Establishment) protocol, which systematically gathers every candidate network address the machine can use — including local LAN addresses (192.168.x.x, 10.x.x.x), the actual public IP, and any addresses visible to configured STUN servers.
The critical failure mode: WebRTC operates below the VPN’s routing table in most implementations. When a browser calls new RTCPeerConnection() and ICE begins gathering, the operating system’s network stack answers before the VPN tunnel intercepts the request. The result is that your real residential or datacenter IP — the one the VPN is supposed to be hiding — gets transmitted directly to the STUN server and returned to the JavaScript context of any website running this check.
BrowserLeaks’ WebRTC test distinguishes between:
- Public IP candidates — your real WAN address, which can bypass VPN routing
- Local IP candidates — your LAN address (
192.168.x.x), which fingerprints your internal network topology - mDNS candidates — modern Chromium browsers can partially obfuscate local IPs using mDNS identifiers (e.g.,
a1b2c3d4-xxxx.local), but this obfuscation is inconsistently implemented and detectable as a behavior signal in itself
A VPN that doesn’t implement WebRTC request interception at the network driver level, or a browser that doesn’t route WebRTC through the proxy, will leak your real IP every single time. BrowserLeaks will show you exactly this in its IP candidates table.
What a clean result looks like: Public IP candidates show only your VPN/proxy server’s IP. No local IP candidates are visible (or mDNS obfuscation is active). No IPv6 addresses leak if your VPN only tunnels IPv4 (a common IPv6 leak vector).

Canvas & WebGL Fingerprinting
The Canvas and WebGL fingerprinting tests target something that VPNs, proxies, and standard privacy extensions have no mechanism to address: the physical behavior of your GPU and graphics driver stack.
How Canvas fingerprinting works:
When JavaScript calls the Canvas 2D API to render text and shapes, the output pixel array is processed through a chain that includes your CPU, GPU, graphics driver version, operating system font renderer, and anti-aliasing engine. Each component in this chain introduces tiny, deterministic variations floating-point rounding differences, sub-pixel rendering choices, color profile handling, that collectively produce a rendered image subtly different from every other hardware configuration.
BrowserLeaks renders a standardized Canvas scene typically a combination of Unicode text in multiple fonts, geometric shapes, and gradient fills — then reads the raw pixel data via canvas.toDataURL(). This pixel array is hashed (commonly SHA-256) into a compact fingerprint. The resulting value is:
- Deterministic: Your hardware produces the same hash every single time
- Persistent: Independent of cookies, sessions, IP addresses, or browser settings
- High-entropy: The collision probability across diverse hardware combinations is extremely low
WebGL goes deeper:
Where Canvas captures 2D rendering behavior, WebGL probes the 3D rendering pipeline directly. BrowserLeaks reads WEBGL_debug_renderer_info to extract strings like ANGLE (NVIDIA GeForce RTX 4090 Direct3D11 vs_5_0 ps_5_0) — the exact GPU model, driver interface, and shader model version. Even without the debug extension enabled, WebGL’s vertex and fragment shader execution produces hardware-specific floating-point artifacts that can be hashed into a stable fingerprint.
In 2026, major platforms use Canvas/WebGL hashes as a session resurrection signal: even after you clear all cookies and change your IP, a matching Canvas hash links your new session to your previous identity.

Font Detection & AudioContext
Font enumeration:
System fonts are installed by OS version, language pack, software applications, and manual user installation. The combination of fonts present on a given machine is remarkably unique. A standard Windows 11 installation has a predictable base set. A developer’s machine with Adobe Creative Cloud adds hundreds of specific typefaces. A Linux system with a custom font stack looks entirely different.
BrowserLeaks uses two methods to enumerate fonts:
- CSS-based measurement: Hidden
<span>elements are rendered in every font from a large candidate list using a known fallback font as a reference. If a font is installed, text rendered in it measures differently than the fallback rendering — a width or height difference in the pixel range. This is measurable viagetBoundingClientRect()without explicit font listing permissions. document.fonts.check()API: Modern browsers expose theFontFaceSetAPI, which can directly query font availability. While browsers have begun gating this behind permissions in 2025, the CSS measurement method remains universally available.
A combination of ~50–100 detected fonts creates a uniqueness score that alone can identify users with near-certainty. Paired with other signals, it eliminates statistical ambiguity entirely.
AudioContext fingerprinting:
The Web Audio API (AudioContext) processes audio in software, but that processing runs through the OS audio stack and underlying hardware interfaces. BrowserLeaks creates an OscillatorNode generating a sine wave, passes it through a DynamicsCompressorNode, and reads the resulting floating-point waveform buffer.
The compression algorithm’s arithmetic is implemented differently across CPU architectures (x86 vs ARM), floating-point units, and OS audio subsystems. The tiny numerical differences that emerge differences in the 15th decimal place of a float, are stable across sessions and uniquely identify your hardware + OS combination. This technique requires no permissions and executes silently in under 100 milliseconds.
The 2026 Update: TLS (JA3/JA4) and HTTP/2 Fingerprinting
This is the most consequential development in browser fingerprinting in the last two years, and it’s the one most users and most tools completely miss.
What TLS fingerprinting actually captures:
Every time your browser establishes an HTTPS connection, it begins with a TLS handshake. The client (your browser) sends a ClientHello message to the server. This message contains a structured list of:
- Cipher suites supported — the cryptographic algorithms the client can use, in preference order
- TLS extensions — additional negotiation parameters, including server name indication (SNI), key share groups, signature algorithms, and more
- Extension ordering — the sequence in which extensions appear in the ClientHello byte stream
The JA3 algorithm (Salesforce, 2017) hashes these fields into a 32-character MD5 fingerprint. JA3 does not read your browser settings. It reads the actual byte structure of your TLS handshake at the socket level. This means it fingerprints the underlying TLS library (e.g., BoringSSL in Chromium, NSS in Firefox), not the browser UI layer.
JA4 and JA4+ (2024–2025):
JA4, developed by FoxIO, addresses JA3’s limitations and has become the dominant standard adopted by Cloudflare, Akamai, F5, and most major CDN/WAF providers in 2025–2026. JA4 improvements include:
- JA4 — captures cipher suite ordering, TLS version, extension types, and ALPN (Application-Layer Protocol Negotiation) values in a more collision-resistant format
- JA4+ — extends the fingerprint to include the full TLS extension ordering and values, making it substantially harder to spoof by reordering or randomizing individual fields
- JA4H — fingerprints HTTP/1.1 headers specifically
- JA4S — fingerprints the TLS ServerHello for server-side identification
HTTP/2 fingerprinting:
HTTP/2 connections begin with a SETTINGS frame and HEADERS frame, both of which contain implementation-specific values and ordering. Chromium’s HTTP/2 implementation sends a specific sequence of SETTINGS parameters with specific values. Firefox sends a different sequence. curl sends another. An automated script using Python’s httpx library sends yet another.
This creates a network-layer identity signal that is completely decoupled from your browser’s User-Agent string or JavaScript environment. A bot that correctly spoofs its User-Agent to Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 but uses a Chromium automation build’s HTTP/2 SETTINGS frame will be instantly identified as non-standard by any system that reads HTTP/2 fingerprints.
Why this matters for anti-bot detection:
Cloudflare’s Bot Management, PerimeterX (now HUMAN), DataDome, and Imperva all use TLS and HTTP/2 fingerprints as Tier 1 identification signals. They compare the incoming fingerprint against a known-good library of legitimate browser fingerprints. A mismatch between declared browser identity and TLS fingerprint is a near-instant detection vector.
BrowserLeaks’ TLS fingerprinting test shows you exactly what your JA3/JA4 hash is, and whether it matches the expected fingerprint for your declared browser. This single test is the most important one to run in 2026.
Technical Mapping Matrix: BrowserLeaks Tests vs. Gologin Protection
| BrowserLeaks Test Category | What It Tracks | How Gologin Protects It |
|---|---|---|
| IP / WebRTC Leak | Actual local and public IP addresses exposed via STUN/ICE negotiation, bypassing VPN routing at the OS level | Real-time WebRTC leak prevention with per-profile proxy binding; ICE candidate exposure is suppressed or spoofed to return only the assigned proxy IP, eliminating local network topology disclosure |
| JavaScript / Canvas | Hardware GPU rendering behavior producing a deterministic pixel-hash from Canvas 2D and WebGL shader execution | Canvas noise injection using real device profiles sourced from genuine browser sessions; returns statistically plausible, consistent values that match legitimate user hardware rather than blank or blocked output |
| Fonts & Features | System-installed font combinations enumerated via CSS width-measurement attacks and the FontFaceSet API; Web API surface availability and behavior | Per-profile custom font stack injection that matches the declared OS and locale; font enumeration returns a realistic, internally consistent set rather than the host machine’s actual font library |
| TLS (JA3/JA4) | SSL/TLS ClientHello byte structure including cipher suite order, extension types, and ALPN values; HTTP/2 SETTINGS and HEADERS frame fingerprints | Native TLS engine emulation that generates a ClientHello structurally identical to a real Chrome or Firefox build; SETTINGS frame values and ordering match legitimate browser behavior exactly, not approximated |
| AudioContext | Floating-point audio waveform artifacts from hardware DSP and OS audio stack execution | Audio fingerprint spoofing that returns consistent, device-plausible waveform values per profile without triggering anomaly detection via null or uniform output |
| Navigator / Platform | navigator.platform, navigator.hardwareConcurrency, navigator.deviceMemory, navigator.languages, and plugin enumeration |
Full navigator object spoofing with internally consistent values; hardwareConcurrency and deviceMemory are matched to declared device class to avoid cross-signal inconsistencies |
Passing the BrowserLeaks Test: Blocking vs. Spoofing
There are two philosophies for handling browser fingerprinting. One of them works. One of them makes you more detectable than doing nothing at all.
Why Blocking Fails and Backfires
Privacy extensions like uBlock Origin, Privacy Badger, NoScript, and Canvas Blocker take a blocking approach. When a fingerprinting script calls canvas.toDataURL(), they intercept the call and return either a blank value, a null value, or a randomized pixel array.
This sounds like good privacy hygiene. In practice, it is the single most reliable detection signal available to anti-fraud systems.
Here’s why: blocking JavaScript APIs is itself a highly anomalous behavior. Roughly 0.1% of real users have Canvas API blocking active. When an anti-fraud system’s risk model sees a browser with Canvas API returning null, it isn’t looking at “privacy-conscious user.” It is looking at a behavioral pattern correlated with bot traffic, account fraud, and automated scraping. Your “protection” has just placed you in the highest-risk behavioral bucket.
The same applies to:
- Font blocking — returning an empty font list or a minimal set matches no legitimate OS + browser combination
- WebRTC disabling —
about:configWebRTC disable in Firefox (media.peerconnection.enabled = false) returns no ICE candidates at all, which is statistically near-zero in real user populations - User-Agent randomization — rotating your UA string without changing the underlying TLS fingerprint creates a direct mismatch that is trivially detected
- Script blocking — sites that detect blocked scripts commonly serve degraded content, trigger CAPTCHAs, or hard-block the session before any interaction occurs
The blocking model treats fingerprinting as a threat to be suppressed. Anti-fraud systems have evolved specifically because they know blocking is the adversarial response, and they treat it accordingly.
Why Spoofing Works: Blending Into the Crowd
Gologin’s approach is architecturally different. Instead of blocking fingerprint API calls, it intercepts them and returns plausible, internally consistent, crowd-sourced values that make the browser profile indistinguishable from a legitimate user.
The core insight: anti-fraud systems don’t flag fingerprints because they’re fake. They flag fingerprints because they’re anomalous. A real Chrome 130 user on Windows 11 with a GeForce RTX 3070 produces a specific, expected set of fingerprint values. If your spoofed profile returns those same values — consistently, across every API call, with correct cross-signal consistency — there is nothing to flag.
Gologin achieves this through several mechanisms:
- Real device profile database: Fingerprint values are sourced from genuine browser sessions running on actual hardware. The Canvas hash you receive comes from a real GPU running a real Chrome build. This is fundamentally different from generated or randomized values.
- Cross-signal consistency enforcement: A profile declared as
Windows 11 / Chrome 130 / Intel Core i7 / 16GB RAMwill return AudioContext values consistent with Intel’s audio stack, font sets matching a standard Windows 11 + Chrome install, navigator values matching the declared hardware class, and a TLS fingerprint matching Chrome 130’s BoringSSL implementation. Every signal tells the same story. - Native TLS engine behavior: Gologin does not modify HTTP headers after the fact. It generates TLS handshakes using the actual cipher suite ordering and extension structure of the target browser. The JA4 hash that arrives at Cloudflare matches Chrome 130’s known-good fingerprint because it is structurally generated the same way Chrome generates it.
- Consistent persistence: The same profile returns the same fingerprint values across sessions. This is critical — real users’ Canvas hashes don’t change between visits. A profile that returns different Canvas values on every load looks exactly like what it is: a randomization attempt.
The strategic conclusion is simple. If BrowserLeaks shows that your Canvas API returns null or a known-blocked value, any sophisticated anti-fraud system has already flagged your session. If BrowserLeaks shows that your Canvas hash matches a plausible hardware profile, your TLS fingerprint matches Chrome’s known signature, and your WebRTC candidates show only your declared proxy IP you are, from the platform’s perspective, a normal user.
BrowserLeaks FAQ
1. What is the main purpose of a BrowserLeaks test?
A BrowserLeaks test audits every signal your browser exposes to websites beyond your IP address, to determine whether your digital identity can be uniquely tracked or linked across sessions.
Specifically, BrowserLeaks probes:
- WebRTC leak exposure: Whether your real IP address leaks through the browser’s peer-to-peer networking API, bypassing your VPN
- Canvas and WebGL fingerprints: A hash derived from your GPU’s hardware-level rendering behavior — unique per hardware configuration and persistent across sessions
- TLS/JA4 fingerprints: The cryptographic handshake signature that identifies your browser at the network protocol level, independent of any JavaScript or header spoofing
- Font enumeration and system API access: The combination of system fonts and available browser APIs that creates a near-unique identifier
- Audio hardware timing: Floating-point waveform artifacts from your audio processing stack
The test’s purpose is to show you exactly what tracking infrastructure can see about your browser, so you can evaluate whether your privacy or anti-detection setup is actually effective. A passing BrowserLeaks result means your fingerprint is consistent, non-anomalous, and matches a plausible real-user profile.
2. Does a premium VPN protect against BrowserLeaks WebRTC detection?
No. A premium VPN masks your IP address at the network routing layer, but WebRTC leaks operate at the browser API layer and most VPNs have no mechanism to intercept browser-internal API calls.
Here is the technical failure chain:
- Your browser calls
new RTCPeerConnection()with a STUN server configured - The browser’s ICE agent queries the OS network stack for all available interface addresses
- The OS responds with your actual WAN IP and LAN IP before the VPN tunnel intercepts the request
- These “candidates” are transmitted to the STUN server and returned to the JavaScript context of the page performing the test
The result: BrowserLeaks’ WebRTC test shows your real residential or datacenter IP address in the ICE candidates table, even with a VPN active and showing a clean result on a standard IP checker.
Exceptions: Browser-level VPN extensions (not OS-level VPN clients) that explicitly block WebRTC API calls, or browsers with built-in WebRTC handling, can prevent this leak. Gologin resolves this by binding WebRTC behavior to the assigned proxy at the profile level — ICE candidates return only the proxy’s IP.
3. What is a JA3/JA4 fingerprint on BrowserLeaks?
A JA3/JA4 fingerprint is a hash of your browser’s TLS ClientHello message, the opening handshake of every HTTPS connection. It identifies the specific browser engine and TLS library making the connection, independent of User-Agent strings, JavaScript, or any other spoofable header.
JA3 (2017) hashes five fields from the TLS ClientHello: TLS version, cipher suites, TLS extensions, elliptic curves, and elliptic curve point formats. The output is a 32-character MD5 hash. Example: Chrome 130 on Windows produces a consistent, known JA3 hash.
JA4 (2024–2026) improves on JA3 by capturing ALPN extension values (which protocols the client supports — h2, http/1.1), extension type counts, and ordering information in a more structured, collision-resistant format. It has been widely adopted by Cloudflare, Akamai, and major bot-detection platforms.
Why it matters for BrowserLeaks testing: If you’re running an automation framework (Playwright, Puppeteer, Selenium), a headless browser, or a non-standard Chromium build, your JA4 hash will not match the known-good hash for the browser you’re claiming to be. Anti-bot systems flag this mismatch instantly. BrowserLeaks shows you your current JA4 hash so you can verify whether it matches the expected value for your declared browser.
4. Why does my browser show a “unique” Canvas fingerprint?
Your browser shows a unique Canvas fingerprint because the combination of your specific GPU model, graphics driver version, operating system, and font renderer produces a pixel-level rendering output that differs from every other hardware configuration and this difference is deterministically measurable.
The Canvas API renders to a pixel buffer using your hardware’s graphics pipeline. Even rendering identical instructions (the same text, shapes, and colors), two machines will produce pixel arrays with different values at the sub-pixel level due to:
- GPU-specific floating-point arithmetic in the shader pipeline
- Driver-level anti-aliasing and gamma correction behavior
- OS font rendering engine (DirectWrite on Windows, Core Text on macOS, FreeType on Linux) producing different text pixel layouts
- Color profile and ICC calibration differences
When BrowserLeaks reports your Canvas fingerprint as “unique,” it means your hash was not found in its reference database of known fingerprints. This is not necessarily a problem — many hardware configurations are legitimately uncommon. The concern is consistency: a Canvas fingerprint should return the same hash every time the same browser runs on the same hardware. A fingerprint that changes between tests signals active blocking or randomization, which is itself a detection signal.
5. How can an anti-detect browser like Gologin fake BrowserLeaks results safely?
Gologin doesn’t “fake” BrowserLeaks results in the conventional sense, it substitutes your actual fingerprint with a real, internally consistent fingerprint sourced from genuine user hardware, making your profile statistically indistinguishable from a legitimate browser session.
The critical distinction is between spoofing (returning plausible real-world values) and blocking (returning null, empty, or randomized values). Anti-fraud systems are trained to detect both blocking and inconsistent spoofing. Gologin addresses this at four levels:
- Canvas and WebGL: Gologin injects a Canvas fingerprint derived from actual GPU rendering data from its device profile database. The hash is real — it came from a real GPU. It is consistent across sessions for the same profile, matching the behavior of a real user revisiting a site.
- TLS/JA4: Gologin generates TLS ClientHello messages using the actual cipher suite ordering and extension structure of the target browser build. The JA4 hash arriving at the server is identical to what a genuine Chrome 130 installation would produce, because it is generated by the same structural logic.
- WebRTC: ICE candidate gathering is intercepted at the profile level. The WebRTC stack returns only the assigned proxy IP as a candidate, with no local LAN addresses exposed.
- Cross-signal consistency: Every spoofed value is validated against the declared profile. A
Windows 11 / Chrome 130 / 8-core Intelprofile produces navigator, font, audio, and Canvas values that are all consistent with that hardware class — not randomly assigned values that contradict each other across APIs.
The result: BrowserLeaks shows a coherent, plausible profile with no leak indicators, no anomalous blocking signals, and fingerprint values that match known-good hardware configurations.
Conclusion: BrowserLeaks Is the Test. Gologin Is the Answer.
BrowserLeaks is not a tool for paranoid edge cases. In 2026, it is the baseline diagnostic that anyone running multiple accounts, managing affiliate traffic, conducting competitive research, or operating any web automation workflow needs to pass as a prerequisite.
The test surface has expanded dramatically. JA4 fingerprinting at the TLS layer means that headless automation is detectable at the network socket level before a single line of JavaScript executes. Canvas and AudioContext fingerprints mean your hardware is identifiable regardless of your VPN or browser settings. WebRTC leaks mean your real IP is often visible regardless of your proxy configuration.
Passing BrowserLeaks requires a coherent, consistent, hardware-accurate profile — not a blocked or randomized one. Gologin builds exactly that: browser profiles that present a single, internally consistent identity to every layer of the fingerprinting stack, from the TLS handshake through the JavaScript API surface.
Run the BrowserLeaks test above. Check your JA4 hash. Check your Canvas fingerprint. Check your WebRTC candidates. Then you’ll know exactly what you need to fix and why it matters.


