Fingerprint
Hashes configurable request fields (IP address, user agent, date, etc.) into a deterministic identifier and stores it on the event. No cookies, no PII stored — the same combination of inputs always produces the same hash.
When to use
Server-side tracking without cookies requires a way to consistently identify a user across requests. The fingerprint transformer creates that identifier from data already available in the request context: IP address, user agent string, and optionally a daily rotation to limit persistence.
Typical use cases:
- Session continuity: Generate a consistent
user.hashacross requests from the same client without relying on client-side IDs - Cookie-free analytics: Identify returning visitors server-side when no consent has been given for cookies
- Cross-domain stitching: Combine fields that are consistent across domains into a shared identity signal
Setup
- Integrated
- Bundled
Install the package:
Configure in your flow:
Configuration
| Setting | Type | Default | Description |
|---|---|---|---|
fields | Mapping.Value[] | required | Fields to include in the hash. Order matters — the same fields in a different order produce a different hash. |
output | string | "user.hash" | Dot-notation path where the hash is stored on the event. |
length | number | full (64 chars) | Truncate the SHA-256 hash to this length. |
Fields are resolved from { event, ingest } using walkerOS mapping. String values use dot notation ("ingest.ip"). Function values compute dynamically ({ fn: () => new Date().getDate() }).
Daily rotation
Without rotation, the same IP + user agent always produce the same hash — indefinitely. To limit persistence, add a daily rotation field:
The hash resets each day, limiting cross-day tracking while maintaining session continuity within a day.
IP anonymization
To avoid including the raw IP in the hash input, transform it before hashing:
Result
The hash is stored at the configured output path on the event:
If any field is missing (e.g., ingest.ip is undefined), it is treated as an empty string — the transformer never throws.