How we verify

Every build, against real Safari

We do not ask you to take our word for it. Every change to Lumen is built on a Mac with real Safari: a profile is compared with it, every request around the proxy is looked for, and the results are recorded.

Latest runs
macOS 26.6.2, Safari 26.6.2comparison with Safari - build bd9628e, 1 November 2026leaks and build steps - ce64ca1, 29 October
Every check passedReport in JSON

A profile against Safari on the same Mac

The profile is checked as you get it: a process of its own, Safari’s window and a proxy in its settings. Next to it, real Safari on the same Mac. One page measures both, and a server on this Mac reads their TLS and request headers. The proxy in this run does not answer, and the page is on the Mac itself and loads directly - so the profile keeps the same language and time zone as Safari.

What is comparedIdenticalDetails
Navigator
everything the browser says about itself
21 of 22
one difference

User-Agent, platform, language and Intl, time zone, core count. Only the number of navigator’s properties differs: a profile with a proxy has no navigator.credentials - below.

Screen
size, colour, density
9 of 9
identical

Screen size and its available part, colour depth, pixel density, pointer and touch.

The window’s bars
how much of the window they take
0 of 1
differs

A page sees it as the window’s outer size minus its inner size. The window’s own size and place are each window’s own: these 8 values are shown, not compared.

Request headers
navigation, fetch and XHR
31 of 31
set and order

The same headers in the same order as the server got them from Safari.

TLS
the ClientHello as a server sees it
9 of 9
identical

What any https server sees first: JA3, JA4, ciphers and extensions.

APIs
which interfaces a page has
406 of 418
12 differences

Permission states, storage quota, speech voices and hundreds of WebKit’s interfaces. The twelve differences - interfaces a profile with a proxy turns off, and the window’s property count - are below.

Rendering
canvas, WebGL, audio, fonts
17 of 17
identical

Canvas - the same picture byte for byte, WebGL - vendor, renderer, extensions and parameters, audio, font metrics.

Apple Pay and Web Push
what their calls answer
17 of 17
as in Safari

A profile has ApplePaySession, PaymentRequest and PushManager, and each of the 17 calls checked answers as it does in Safari on this Mac.

identicaldiffers - details below

What differs - and why

Of 507 values, 14 differ. We show all of them. Eleven are interfaces a profile turns off because their traffic or their checks would go around the proxy. Two are property counts that change with them. One is the window’s bars.

SignalsCountWhenWhy
WebRTCRTCPeerConnection, RTCDataChannel, RTCEncodedVideoFrame, RTCRtpScriptTransform and the RTCPeerConnection function itself 5 without one too With a proxy WebRTC is off: its UDP would go around the proxy. Without a proxy it is off by default.
Web Authentication (passkeys)PublicKeyCredential, Credential, navigator.credentials, the Web Authentication check 4 with a proxy Passkeys live in the owner’s iCloud Keychain, one set for Safari and every profile, and the system’s services check them, not the profile. Without a proxy these interfaces are there.
WebTransportWebTransport 1 with a proxy It runs over HTTP/3, that is QUIC over UDP, which neither an HTTP nor a SOCKS5 proxy carries: the connection would go around the proxy.
Private Click Measurementad attribution 1 with a proxy WebKit sends attribution reports later, outside the page’s session. With a proxy it is off, and reports already stored are removed at launch.
Number of window’s own propertieswindowOwnCount 1 without one too Follows from the rows above: 1005 for a profile with a proxy, 1044 for Safari. Two more interfaces are missing without a proxy too - DigitalCredential and MediaSessionCoordinator: WebKit turns them on only for an app with special Apple entitlements, which Safari has.
Number of navigator’s propertiesnavigatorProtoCount 1 with a proxy Follows from it: a profile with a proxy has no navigator.credentials.
The window’s barsgeometry.chrome 1 without one too How much of the window’s height the bars take: for a profile in Safari’s window this number differs from Safari’s own on this Mac.

Leak checks

Separate checks run a profile behind real proxies on the CI machine and look for any way around them. A check fails at the first request that goes around.

QUIC and HTTP/3
stays on the proxy

Without a proxy, cloudflare-quic.com answers a profile over HTTP/3; through an HTTP or SOCKS5 proxy, over HTTP/2, and the proxy sees every request. UDP is never even asked of the proxy.

leak_check · every build

WebRTC
off in a proxied profile

No RTCPeerConnection in the page, its frames or its workers. A control without a proxy does get its public address over STUN - so the check sees a leak when there is one.

leak_check and the self-test

DNS
never around the proxy

The test page asks for names to be resolved early: dns-prefetch, preconnect, a Link header. The packet capture holds no DNS question for any of them.

egress_check

Requests to the computer itself
refused

A page, a frame and a worker reach for 127.0.0.1, localhost, ::1 and 0.0.0.0. Each request is refused; a loopback listener takes no connection.

self-test

Certificates
refused at the handshake

A test server presents a certificate the system would go to the network to complete. In a proxied profile it is refused at the handshake - through the proxy.

self-test

Every packet off the machine
none around the proxy

While a profile opens a page that makes every kind of request, CI records every packet leaving the machine with the process that sent it: 2,410 packets in the latest run.

egress_check · pktap

Writes to disk
nothing in Safari’s folders

Every write of the app and WebKit is traced: a profile writes nothing where the real Safari keeps its data. In the latest run, a trace of 606,017 lines.

disk_check · fs_usage

Safari’s services
never called

Search suggestions, Safe Browsing, translation, Apple Pay and the other services that go to the network from processes of their own are not called from a profile’s process: connections to them are refused.

self-test and packet capture

What every build checks

These steps run on every change to the code. If any required one fails, the build is red.

Every step of a build
StepWhat it checksLatest run
Core unit testsEncryption, the vault, sync, cookie import, warm-up - on Linux and on macOS223 tests on macOS, 0 failures
Scripts in two enginesThe scripts a profile adds to a page behave like built-in functions - in V8 and in JavaScriptCore, Safari’s enginepassed
Self-test on real WebKitProfile isolation, the proxy and fail-closed, sealing on stop, passwords, cookies, sync between two Macs, warm-up, Safari’s window in a profile’s process274 checks, 0 failures
Safari’s classesThat Safari’s interface in a profile finds everything it relies on: if a macOS update removes something, the build shows itpassed
Compared with SafariA probe of 448 signals: a profile and Safari on one machine434 of 448; 0 must-match differences
LeaksQUIC, WebRTC, DNS, requests to the computer itselfpassed
Packets and diskEvery packet off the machine and every write to disk around the self-testno packet around the proxy
LogsNothing of yours reaches the system log in the clearpassed
LanguagesThe Russian and English interfaces hold the same stringspassed

Check it yourself

All you need is your Mac and any proxy.

  1. The address

    In a profile with a proxy, open a page that shows your IP address. It must be the proxy’s.

  2. Fail-closed

    Switch the proxy off and reload. The page must not open - let alone show your real address.

  3. The fingerprint

    Open the same fingerprint test page in Safari and in a profile on this Mac. The values match - apart from those listed above, which a profile turns off so that nothing goes around the proxy.

If the test page says “Canvas: Spoofed”, open it in plain Safari 26: deviceinfo.me says the same there. Its test knows only an older PNG length, and today’s WebKit encodes the same picture differently.

Reports

The raw data of the comparison with Safari and the leak checks - JSON you can open and compare yourself. No build logs and no build machine paths: only what was measured.

Release of 29 October 2026macOS 26.6.2 · Safari 26.6.2JSON
Published here with every release
JSON

A question about our checks?

Write to us: if there is something we do not measure, we want to know.