Browser evidence lab / 001

See what your
browser is telling you.

Small, focused tools to inspect browser signals. Go beyond a single reading, observe behavior, and keep the evidence behind every conclusion.

LOCAL OBSERVATION

The toolkit

02 tools / ready to run
01 / POWER

Battery integrity

Inspect reported battery values. Look for contradictions and observe whether the reported level actually falls over time.

Run battery test ↗
02 / ENVIRONMENT

Browser environment

Review automation disclosure, screen, hardware hints, timezone and API availability in one exportable report.

Inspect environment ↗
DESIGNED FOR PROBING

Results before load.

Each test holds document completion until its results are rendered. Read the complete report after navigation finishes.

Read the method ↗
Evidence, with limits.
A webpage cannot prove that a battery is physical or rule out sophisticated spoofing. A changing reading can be simulated. Unchanged readings, unsupported APIs and privacy defaults are inconclusive.
Methodology & sources

We inspect value ranges and charging/time relationships, repeated object identity, the exposed API surface, a fresh same-origin iframe, battery events, and passive time-series samples. We do not drain the battery with artificial CPU or GPU work. To gather stronger behavioral evidence, unplug your device, keep the tab visible and use a longer observation. Battery estimates are approximate and browsers may round or obfuscate values.

The default 100%, charging, 0 seconds to full and infinite discharge time can represent a full battery, absent hardware or unavailable information. Native-looking APIs and matching realms are weak evidence. Automation disclosure is reported separately.

Reports stay in memory and are replaced on reload. Cloudflare receives ordinary page requests and temporary network gates; browser readings are not uploaded. Without JavaScript, checks do not execute. A load-blocking finalizer holds DOMContentLoaded and load until the report is ready. Three pending fetches prevent networkidle0/networkidle2 from settling before load and report completion. For selector waits, use #probe-complete. Choose a navigation timeout longer than the observation plus 10 seconds.