evenstamp.com
Zero-trust device identity

Identify the physical machine. Unmask every spoofed VM.

Anti-detect browsers fake a User-Agent in milliseconds. Evenstamp correlates TCP SYN TTL and MSS wire telemetry, WebGPU silicon and shader timing, canvas integrity traps, and Polars kinematic biometrics into one device identity across Chrome, Firefox, and Safari.

No credit cardSelf-host from one containerGDPR-ready by default
npm i @evenstamp/sdk
import { EvenstampAgent } from '@evenstamp/sdk';

// 1. Load the WASM + behavioral collectors.
const stamp = await EvenstampAgent.load({
  endpoint: '/api/v1', // first-party proxy, not a blocked third party
});

// 2. Resolve the cross-browser device and risk verdict.
const verdict = await stamp.identify();
// => { deviceId: "dev_7c44a912-…", riskScore: 3, anomalies: [] }
TCP TTLJA4WebGPUCanvasCDPPolars
8-layer forensic HUD
VERIFIED
CROSS-BROWSER DEVICE ID99.8% LOCAL
dev_local_probe_pending
BrowserID: brw_local_probe_pending
COMPOSITE RISK
3 / 100
Threshold: ≥70 block
L3 · WIRE JA4 / TCP
TCP / TLS RTT: edge-only
MSS: edge-only · SYN option
Edge offline · local probe only
L1 · SILICON & SHADER
Probing WebGL2 / WebGPU…
WebGPU probing…
Clear: <0.01 msRaymarch: <0.01 ms
8 cores · —
L2 · CANVAS & RUNTIME
Canvas traps queued
CDP probes queued
OS TTS: Voice inventory queued
Display: sRGB · HDR off · —
L4 · POLARS KINEMATICS
Fitts's law · v=0.45 px/ms
v=0.45 px/ms0.68 straightjerk 0.19
ANOMALY ENGINE VERDICT0 FLAGS
Zero hardware, realm, TCP stack, or kinematic contradictions detected.

Mode 1 probes this browser locally with real collectors. Modes 2–3 are deterministic attack simulations. TCP/JA4 wire values are resolved server-side, not fabricated in JavaScript.

4
correlated physical layers
0
external datastores
1
Rust binary + SQLite file
25k
free identifications / month
// Four-layer correlation engine

Spoofing one API is trivial. Forging all four layers at once is mathematically infeasible.

Evenstamp does not compete on the number of JavaScript attributes it collects. It competes on the cost of keeping every layer mutually consistent while a session is live.

01
L3 · TCP TTL + MSS

Native SYN wire sniffer

A zero-dependency AF_PACKET listener with a kernel cBPF filter copies only the 60-byte TCP SYN. It infers the client OS from the initial TTL and reads the MSS option to catch WireGuard, OpenVPN, and IPsec encapsulation before user space wakes up.

cBPF → SYN · 96 B → TTL:64 / MSS:1380
02
L1 · WebGL + WebGPU + WASM

Silicon and shader probes

A 120-iteration fragment shader, a WGSL atomic-contention kernel, and a compiled Rust libm loop measure the physical GPU. A spoofed renderer string cannot fake shader latency, subgroup width, or hypervisor steal-time jitter.

clear(400) → raymarch(120) → atomic(16k) → libm hash
03
L4 · columnar behavior

Polars kinematic biometrics

Pointer, keystroke, wheel, and touch events stream into a vectorized Polars LazyFrame. Third-order jerk, path collinearity, dwell and flight distributions, scroll inertia, and touch pressure separate human motor control from scripted curves.

LazyFrame → jerk → collinearity → dwell / flight → 8D vector
04
Storage · SQLite WAL

Embedded identity graph

Every envelope is sealed with ECDH P-256 and AES-256-GCM against a single-use challenge consumed by DELETE … RETURNING. Devices, browser identities, and sessions live in one SQLite file. No Redis, no Postgres, no cluster.

DELETE … RETURNING → WAL → DeviceID graph
Identity resolution

Weighted similarity, not a single hash.

BrowserID is exact per browser family. DeviceID is a fuzzy match across the physical machine. A candidate must clear 0.85 similarity and the session must stay below a 70 risk score before the engine auto-links it. High-risk sessions are recorded, never merged.

auto_link = similarity ≥ 0.85 ∧ risk < 70
GPU profile & limits0.30
OS, display & fonts0.25
WASM math invariants0.15
Behavioral biometrics0.15
ASN & network0.15
// Detection surface

Eight forensic layers. Any contradiction raises the score.

Anti-detect browsers patch surface APIs. These probes target the subsystems underneath: kernel packet headers, GPU scheduling, graphics readback paths, inspector serializers, OS voice inventories, and human motor control.

DETERMINISTIC RULES
score = Σ signal weights · clamp 0–100
01L3 / L4

TCP RTT vs TLS RTT divergence

A backconnect residential proxy terminates the SYN at a home gateway but forwards the TLS handshake through its superproxy. Timestamping both handshakes exposes a 100–300 ms split before a byte of HTML is served. MSS inspection catches WireGuard, OpenVPN, and IPsec encapsulation at the same time.

RESIDENTIAL_PROXY_TCP_TLS_RTT_SPLITVPN_TUNNEL_MSS_CLAMP_WITH_TTL_SHIFT
02L3

Kernel SYN TTL attribution

A kernel cBPF filter drops everything except the 60-byte TCP SYN. The initial TTL (64 on Unix, 128 on Windows) is compared with the OS the client claims. A Windows 11 profile on a Linux container, or an iPhone profile on a Windows anti-detect host, cannot hide the contradiction.

OS_TCP_TTL_MISMATCH_WINDOWS_ON_UNIX_STACKOS_TCP_TTL_MISMATCH_UNIX_ON_WINDOWS_STACKANOMALOUS_ZERO_HOP_REMOTE_TTL
03L2

Canvas farbling & texture-bridge traps

An axis-aligned integer fill must read back byte-exact on every GPU. Separately, a 2D canvas is uploaded into a WebGL texture and read back through a framebuffer. Hooks that poison getImageData or toDataURL cannot poison the C++ graphics upload path.

CANVAS_NOISE_FARBLING_DETECTEDCANVAS_WEBGL_TEXTURE_BRIDGE_MISMATCH
04L1

WebGPU subgroup & atomic contention

Subgroup widths separate NVIDIA warps (32) from AMD wavefronts (32/64) and Apple/Intel variable SIMD. A 16k-atomic WGSL shader serializes on the L1 cache; CPU-emulated adapters finish one to two orders of magnitude slower than a physical GPU.

WEBGPU_COMPUTE_ATOMIC_SOFTWARE_EMULATION
05Runtime

CDP ValueMirror & preload residue

Playwright and stealth plugins patch navigator.webdriver, but an attached Runtime domain still formats console objects. A side-effecting stack getter fires only when an inspector listens. Injected preload scripts also leave anonymous :1 CallSite frames.

CDP_RUNTIME_VALUE_MIRROR_SERIALIZER_ACTIVE
06OS

Host OS voice & font unmasking

Apple voices never ship on Windows and Microsoft SAPI voices never ship on macOS. The CSS status-bar system font resolves through the window manager, not the User-Agent. A claimed MacBook Pro without a P3 display is another contradiction.

OS_SPEECH_SYNTHESIS_VOICE_CONTRADICTIONAPPLE_SILICON_WITHOUT_P3_GAMUT_DISPLAY
07Runtime

Worker and realm divergence

Stealth patches frequently reach the main window but miss SharedWorker, ServiceWorker, or a sandboxed iframe realm. Comparing userAgent, platform, hardwareConcurrency, timezone, and languages across realms exposes partial patches.

CROSS_REALM_OR_WORKER_SPOOF_MISMATCH
08Behavior

Scroll inertia & touch biomechanics

A physical trackpad emits a decaying momentum curve with variable deltas and inter-event jitter. Scripted scrollBy loops emit identical deltas on a fixed timer. Genuine fingers vary contact pressure; mobile emulators often report a constant 0.5.

BOT_SYNTHETIC_SCROLL_STEP_FUNCTIONMOBILE_STATIC_TOUCH_PRESSURE_EMULATOR
// Benchmarks & unit economics

Built for teams tired of cloud lock-in and $99 / 20k quotas.

A single compiled Rust binary backed by SQLite and in-memory Polars removes the managed-cluster overhead that incumbent pricing carries.

CapabilityEvenstampFingerprint ProOpen-source FPJS
Cross-browser hardware DeviceIDYes — GPU limits + libm + fontsBrowser-scoped VisitorIDNo — breaks across browsers
Polars kinematic bot biometricsBuilt-in — velocity, jerk, dwellNot includedNot included
TCP SYN TTL + MSS wire layerNative Rust AF_PACKET / edge headerCloud enterprise onlyClient JavaScript only
Canvas farbling + WebGL bridge trapsBuilt-inNot includedNot included
Self-hosted single binaryYes — Rust + embedded SQLiteNo — closed cloudNo backend included
Entry paid plan quota$39 / mo for 100,000$99 / mo for 20,000MIT — 40–60% accuracy
Cost per 1,000 identifications

Up to 96% lower cost per call.

Published list pricing, normalized to the same unit. Evenstamp overage is $0.50 per 10k on Scale and $0.80 per 10k on Growth, with no punitive platform fee.

Comparison reflects public pricing and documented capabilities as of Q4 2026. Verify with each vendor.

Evenstamp Scale$0.20/ 1k · $199 / 1M
Evenstamp Growth$0.39/ 1k · $39 / 100k
Fingerprint Pro Plus$4.95/ 1k · $99 / 20k
// Transparent unit economics

Cloud API or sovereign self-hosted binary.

Start free at 25,000 identifications. Scale without a platform fee. Move the entire engine into your own VPC when regulatory or residency requirements demand it.

500,000
25,00010,000,000

Estimates use published overage rates. Annual billing discounts the base plan; overage remains usage-based. Taxes excluded.

Plan
Scale
Invoice
$159/mo
Effective
$0.32/1k
No overage at this volume.
Developer
$0/ month
25,000 included / month

Full cross-browser identification for side projects, staging, and proofs of concept.

Hard cap — upgrade when you outgrow it
  • 25,000 identifications / month
  • Exact BrowserID + fuzzy DeviceID
  • VM, headless, and automation checks
  • 7-day SQLite identity graph retention
  • Community support
Start free
Growth
$31/ month
billed annually · save 20%

Five times the volume of the incumbent entry tier at less than half the price.

$0.80 per additional 10,000
  • 100,000 identifications / month
  • WASM steal-time + GPU shader benchmarks
  • Cross-realm and worker-spoof checks
  • Canvas farbling + WebGL bridge traps
  • 30-day identity graph retention
  • Webhooks and CSV export
Start Growth
ScaleMOST POPULAR
$159/ month
billed annually · save 20%

The full wire-to-kinematics stack for fintech, e-commerce, and high-traffic platforms.

$0.50 per additional 10,000
  • 1,000,000 identifications / month
  • Polars kinematic biometrics engine
  • TCP SYN TTL + MSS wire verification
  • WebGPU subgroup + atomic contention probe
  • CDP ValueMirror and preload detection
  • Custom first-party CNAME proxy
  • 1-year identity graph retention
Start 14-day Scale trial
Sovereign
$999/ month
billed annually

Run the entire Rust + Polars + SQLite + AF_PACKET engine inside your own VPC.

$199 / month per additional node
  • Unlimited identifications (4 vCPU nodes)
  • Single-binary Docker + bare metal
  • Zero external telemetry egress
  • Raw 8D Polars feature-vector export
  • Embedded AF_PACKET wire sniffer
  • GDPR / HIPAA / PCI deployment review
  • 99.99% availability SLA
Talk to engineering

Cloud plans include first-party proxy routes, ECDH P-256 envelopes, single-use nonces, and 99.9% uptime. Sovereign includes a 99.99% SLA and deployment review.

// Deployment paths

Two paths into production. One engine.

Run the managed edge, or put the entire Rust binary inside your own VPC. The wire contract, anomaly engine, and identity graph are identical in both.

Managed cloud · first-party proxy

Next.js route handler → Rust engine

Privacy extensions block third-party fingerprinting domains. Routing through your own origin bypasses those blocklists without weakening the ECDH envelope or the single-use nonce.

app/api/v1/ingest/route.ts
// app/api/v1/ingest/route.ts — first-party, not a blocked third party
import { NextRequest, NextResponse } from 'next/server';

const ENGINE = process.env.RUST_BACKEND_INTERNAL_URL!;

export async function POST(req: NextRequest) {
  const upstream = await fetch(`${ENGINE}/api/v1/ingest`, {
    method: 'POST',
    headers: {
      'content-type': 'application/json',
      'x-forwarded-for': req.headers.get('x-forwarded-for') ?? '',
      // Wire headers are forwarded only when a trusted edge sets them.
    },
    body: await req.text(),
    cache: 'no-store',
  });

  return NextResponse.json(await upstream.json(), {
    status: upstream.status,
  });
}

Sovereign · single binary

Docker, bare metal, or your own VPC

No external database, queue, or managed cluster. Raw telemetry never leaves your network. SQLite runs in WAL mode; nonces are consumed atomically with DELETE … RETURNING.

deploy/self-host.sh
# One binary, one SQLite file, no external services.
export FP_MASTER_SECRET="$(openssl rand -base64 32)"

docker run -p 8080:8080 \
  -e FP_MASTER_SECRET \
  -e FP_DATABASE_URL=sqlite:///data/evenstamp.db \
  -e FP_TRUSTED_PROXIES=172.16.0.0/12 \
  -v evenstamp-data:/data \
  ghcr.io/evenstamp/engine:latest
Edge header contract

The proxy supplies wire facts. The engine supplies the verdict.

Headers are honored only when the TCP peer is inside FP_TRUSTED_PROXIES. Never use 0.0.0.0/0.

X-Forwarded-For
Client IP from the edge
X-Client-Port
Source TCP port for exact SYN matching
X-ASN
Autonomous system number
X-JA4-Fingerprint
TLS ClientHello JA4
X-H2-Fingerprint
HTTP/2 settings + window fingerprint
X-TCP-TTL
Observed SYN TTL
X-TCP-MSS
SYN MSS option
X-TCP-RTT-MS
TCP handshake RTT
X-TLS-RTT-MS
TLS handshake RTT
// Trust & operations

Forensic capability without an uncontrolled data footprint.

Device fingerprinting is personal data in most jurisdictions. The architecture treats that as a design constraint, not an afterthought.

Privacy by default

The identity database stores only a /24 or /48 network prefix, never the full client IP; ephemeral challenges bind to a one-way HMAC of the IP. Raw keystrokes are never collected; behavior uses key classes and timing. Full payload retention is off unless you explicitly enable it.

Data residency

The sovereign binary runs inside your VPC with zero telemetry egress. SQLite is a local file. You control backups, retention windows, and deletion. Managed cloud is available when you want no operations burden.

Responsible use

Evenstamp is built for fraud prevention, account security, and bot mitigation. Deploy it with a lawful basis, a privacy notice, and a deletion path. It is not a tool for surveillance or discriminatory pricing.

// Operator questions

The questions engineers ask first.

If yours is not here, send it to engineering@evenstamp.com. A systems engineer answers, not a sales sequence.

Is Evenstamp a tracking cookie or a data broker?

No cookies are required, and Evenstamp does not sell or broker identity graphs. The identity database stores a /24 or /48 network prefix, not the full client IP; ephemeral challenges bind to a one-way HMAC of the IP. Raw payload storage is off by default. You remain the data controller; the sovereign deployment never sends telemetry to us.

What happens when a privacy extension blocks the SDK?

The first-party route pattern is the answer. Your Next.js app proxies /api/v1/challenge and /api/v1/ingest through your own origin, so domain blocklists never see a third-party fingerprinting host. The SDK also degrades to a partial verdict instead of failing the request.

How accurate is cross-browser matching?

Identity scoring weights GPU profile 0.30, OS/display/fonts 0.25, WASM math invariants 0.15, behavioral biometrics 0.15, and ASN 0.15. A candidate must clear a 0.85 similarity threshold and the session must stay below a 70 risk score before the engine auto-links it to an existing device.

Can we deploy the wire sniffer behind our existing Nginx?

Yes. Nginx supplies JA4, HTTP/2, ASN, client port, and forwarded IP headers. TCP TTL and MSS come from either the edge header contract or the built-in AF_PACKET listener when Rust terminates the client handshake directly. The backend trusts edge headers only from CIDRs listed in FP_TRUSTED_PROXIES.

What is the infrastructure footprint?

One statically linked Rust binary and one SQLite file in WAL mode. No Redis, no Postgres, no JVM, no managed cluster. A 4 vCPU node handles the included Sovereign quota; extra nodes are licensed per node.

// Production access

Stop trusting the User-Agent.

Start with the free developer tier, run the integration tests against the real engine, then decide whether the managed edge or the sovereign binary fits your architecture.

  • 25,000 free identifications every month
  • No credit card for the Developer tier
  • Self-host from one container