Error patterns
GET /api/fingerprint/console-errorsConsole errors fingerprinting analyzes JavaScript error messages, stack trace formats, and console API implementations to identify JavaScript engines and platforms. Different JavaScript engines (V8 in Chrome/Edge, SpiderMonkey in Firefox, JavaScriptCore in Safari) generate distinctly formatted error messages and stack traces. Error messages for the same error type vary: a TypeError might say "Cannot read property 'x' of null" in Chrome but "null has no properties" in Firefox. Stack trace formats differ significantly: V8 uses indented multi-line traces with "at function (file:line:col)", SpiderMonkey uses "@file:line:col" format, JavaScriptCore has its own format. The technique intentionally triggers various error types (TypeError, ReferenceError, RangeError, SyntaxError) and captures their string representations and stack traces. Even the depth of captured stack traces varies by browser and recursion limits differ. Console API methods (console.log, console.error, console.table) have different implementations: some browsers stringify objects differently, array display formats vary, and custom formatters are engine-specific. Checking for non-standard console methods (console.memory in Chrome, console.exception in old Firefox) reveals browser types. Error.captureStackTrace availability (V8-specific) is a strong signal. The global Error object's properties (fileName, lineNumber, columnNumber, stack) are implemented inconsistently. This fingerprinting technique is particularly effective against headless browsers and automation tools (Puppeteer, Selenium) which often have distinctive error patterns or missing console implementations. Privacy browsers cannot easily normalize error behavior without potentially breaking error handling code.
Move from this collector to the CreepJS signal index, live checker, API docs, and other high-value fingerprinting explainers.