Browser fingerprinting library with the highest accuracy and stability.

Overview

FingerprintJS

Build status Current NPM version Monthly downloads from NPM Monthly downloads from jsDelivr

FingerprintJS is a browser fingerprinting library that queries browser attributes and computes a hashed visitor identifier from them. Unlike cookies and local storage, a fingerprint stays the same in incognito/private mode and even when browser data is purged.

View Our Demo.

Quick start

Install from CDN

<script>
  function initFingerprintJS() {
    FingerprintJS.load().then(fp => {
      // The FingerprintJS agent is ready.
      // Get a visitor identifier when you'd like to.
      fp.get().then(result => {
        // This is the visitor identifier:
        const visitorId = result.visitorId;
        console.log(visitorId);
      });
    });
  }
</script>
<script
  async
  src="//cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.min.js"
  onload="initFingerprintJS()"
></script>

Alternatively you can install from NPM to use with Webpack/Rollup/Browserify

npm i @fingerprintjs/fingerprintjs
# or
yarn add @fingerprintjs/fingerprintjs
import FingerprintJS from '@fingerprintjs/fingerprintjs';

(async () => {
  // We recommend to call `load` at application startup.
  const fp = await FingerprintJS.load();

  // The FingerprintJS agent is ready.
  // Get a visitor identifier when you'd like to.
  const result = await fp.get();

  // This is the visitor identifier:
  const visitorId = result.visitorId;
  console.log(visitorId);
})();

📕 Full documentation

Upgrade to Pro version to get 99.5% identification accuracy

FingerprintJS Pro is a professional visitor identification service that processes all information server-side and transmits it securely to your servers using server-to-server APIs. Pro combines browser fingerprinting with vast amounts of auxiliary data (IP addresses, time of visit patterns, URL changes and more) to be able to reliably deduplicate different users that have identical devices, resulting in 99.5% identification accuracy.

See our full product comparison for more information on the differences between open source and Pro.

Pro screenshot

Open Source version

Pro version

Identification accuracy 60% 99.5%
Incognito / Private mode detection
Geolocation
Security
Server API
Webhooks
Stable identifier between versions

Pro result example:

{
  "requestId": "HFMlljrzKEiZmhUNDx7Z",
  "visitorId": "kHqPGWS1Mj18sZFsP8Wl",
  "visitorFound": true,
  "incognito": false,
  "browserName": "Chrome",
  "browserVersion": "85.0.4183",
  "os": "Mac OS X",
  "osVersion": "10.15.6",
  "device": "Other",
  "ip": "192.65.67.131",
  "ipLocation": {
    "accuracyRadius": 100,
    "latitude": 37.409657,
    "longitude": -121.965467
    // ...
  }
}

🍿 Live demo

How to upgrade from Open Source to Pro in 30 seconds

📕 FingerprintJS Pro documentation

▶️ Video: use FingerprintJS Pro to prevent multiple signups

Open-source version reference

Installation

The library is shipped in various formats:

Global variable

<script>
  function initFingerprintJS() {
    // Start loading FingerprintJS here
  }
</script>
<script
  async
  src="//cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.min.js"
  onload="initFingerprintJS()"
></script>

UMD

require(
  ['//cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.umd.min.js'],
  (FingerprintJS) => {
    // Start loading FingerprintJS here
  }
);

ECMAScript module

# Install the package first:
npm i @fingerprintjs/fingerprintjs
# or
yarn add @fingerprintjs/fingerprintjs
import FingerprintJS from '@fingerprintjs/fingerprintjs';

// Start loading FingerprintJS here

CommonJS

# Install the package first:
npm i @fingerprintjs/fingerprintjs
# or
yarn add @fingerprintjs/fingerprintjs
const FingerprintJS = require('@fingerprintjs/fingerprintjs');

// Start loading FingerprintJS here

API

FingerprintJS.load({ delayFallback?: number }): Promise<Agent>

Builds an instance of Agent and waits a delay required for a proper operation. delayFallback is an optional parameter that sets duration (milliseconds) of the fallback for browsers that don't support requestIdleCallback; it has a good default value which we don't recommend to change.

agent.get({ debug?: boolean }): Promise<object>

Gets the visitor identifier. debug: true prints debug messages to the console. Result object fields:

  • visitorId The visitor identifier
  • components A dictionary of components that have formed the identifier. Each value is an object like { value: any, duration: number } in case of success and { error: object, duration: number } in case of an unexpected error during getting the component.
  • version The fingerprinting algorithm version which is equal to the library version. See the version policy section for more details.

See the extending guide to learn how to remove and add entropy components.

FingerprintJS.hashComponents(components: object): string

Converts a dictionary of components (described above) into a short hash string a.k.a. a visitor identifier. Designed for extending the library with your own components.

FingerprintJS.componentsToDebugString(components: object): string

Converts a dictionary of components (described above) into human-friendly format.

Migrating from v2

Version policy

The library tries to keep visitor identifiers the same within a minor version (i.e. when the first 2 numbers of the version don't change). Some visitor identifiers may change within a minor version due to stability fixes. To get identifiers that remain stable up to 1 year, please consider upgrading to pro.

Agent get() function returns the version together with the visitor identifier. You can use it to decide whether a couple of identifiers can be matched together. Example:

if (
  result1.version.split('.').slice(0, 2).join('.') ===
  result2.version.split('.').slice(0, 2).join('.')
) {
  return result1.visitorId === result2.visitorId ? 'same' : 'different';
} else {
  return 'unknown';
}

The documented JS API follows Semantic Versioning. Use undocumented features at your own risk.

Browser support

npx browserslist "cover 95% in us, not IE < 10"

See more details and learn how to run the library in old browsers in the documentation article.

Contributing

See the contributing guidelines to learn how to start a playground, test and build.

Comments
  • fingerprintjs2 helps to spy of users

    fingerprintjs2 helps to spy of users

    Hello. How do you feel about the fact that this library has become an instrument of unjust power over users?

    The Canvas-based identification method has been extended due to the emergence of the fingerprintjs2 library, which can also take into account for generating an identifier such parameters as screen resolution, specific HTTP headers, lists of installed plug-ins and fonts, the activity of certain Web API, and WebGL.

    You can read the detailed study done by Antoine Vastel https://antoinevastel.com/browser%20fingerprinting/2019/02/19/canvas-fingerprint-on-the-web.html

    opened by proninyaroslav 74
  • Errors and promise

    Errors and promise

    New Implementation

    There are Breaking changes

    Resistant by default

    The new implementation is resistant by default to errors

    Component

    A components is an object with at least key and getData keys, example:

    {key: 'user_agent', getData: UserAgent, pauseBefore: false}
    

    getData value is the components function.

    Component function

    A components function takes done as first argument, and options as an optional second argument. It must call done with a String exactly once. Or something that can be cast to a String ? It must wrap all unreachable code (setTimeout, requestAnimationFrame, etc) in its own try catch, it should use catch as an opportunity to give a unique String to done

    function (done, options) { done(navigator.userAgent) }

    Exclude

    The component key can be used to exclude the component

    var options = {excludes: ['userAgent']}
    

    Unknown values

    Not used everywhere yet

    not available'

    The browser does not give information

    'error'

    An error occured while retrieving this information Only use generic 'error' as a last resort: Errors generally contain additional information.

    'excluded'

    This option was condionally excluded from the options (example with excludeAudioIOS11)

    Removed undocumented customEntropyFunction

    allowed to add 1 component via options(it had to be sync)

    Other changes

    • merge key 'ie_plugins' and 'regular_plugins' into 'plugins'
    • audioTimeout is an option, default 1000
    • add pauseBefore: true options for components
    • Some tests are no longer applicable
    • rename 'js_fonts' into 'fonts'
    • rename 'user_agent' into 'userAgent'
    • replace options.customFunction with options.extraComponents It allows to extend with more than one function.
    • options.extraComponents should be an array with components (see above)
    • fingerprint2.js is smaller

    Upgrade Guide

    replace

    var options = {}
    var fp = new Fingerprint2(options)
    fp.get(function(result, components) {
    
    }
    

    with

    Fingerprint2.get(options, function (components) {
        var values = Object.values(components).map(function (value) {
         if (value && typeof value.join === 'function') {
            return value.join(';')
          }
          return value
        })
        var murmur = Fingerprint2.x64hash128(values.join('~~~'), 31)
        var results = murmur;
    })
    

    or

    Fingerprint2.getPromise(options).then(function (components) {
        var values = Object.values(components).map(function (value) {
         if (value && typeof value.join === 'function') {
            return value.join(';')
          }
          return value
        })
        var murmur = Fingerprint2.x64hash128(values.join('~~~'), 31)
        var results = murmur;
    })
    

    Replace individual excludes with an array of excludes:

    var options = {
        excludes: [
            'enumerateDevices',
            'pixelRatio',
            'doNotTrack',
            'fontsFlash'
        ]
    }
    

    See also https://github.com/Valve/fingerprintjs2/issues/384

    opened by GrosSacASac 32
  • The fonts component gives different results

    The fonts component gives different results

    hi, i test firefox fp on the demo website(https://valve.github.io/fingerprintjs2/), when i first get the fp, the value is "c47be56e91cdb14ae31367c66851e4f3", then i open another tab, the value changed to "9af57a294ebb17e521c91c8a8a61fa4c", i compared component and found some difference on the component of "js_fonts", the former was "js_fonts = Arial,Arial Black,Arial Narrow,Arial Rounded MT Bold,Arial Unicode MS,Book Antiqua,Bookman Old Style", and the latter was "js_fonts = Arial,Arial Rounded MT Bold,Arial Unicode MS,Book Antiqua,Bookman Old Style,Calibri,Cambria,Cambria ", i want to know how to exclude font detection completely? I tried "extendedJsFonts: true" but it did not worked. This just happened on firefox , other browser worked fine.

    bug needinfo 
    opened by LesterDong 26
  • 【IOS WeChat 】No return data!

    【IOS WeChat 】No return data!

    Scenario

    userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.2(0x18000239) NetType/WIFI Language/zh_CN

    • use cdn last version sdk fingerprintjs@3
        <script>
          function initFingerprintJS() {
    
            // Initialize an agent at application startup.
            const fpPromise = FingerprintJS.load();
    
            // Get the visitor identifier when you need it.
            fpPromise
              .then((fp) => {
                 // Here can get  fp
                 return  fp.get()
               })
              .then((result) => {
                // No executed!! 
    
                // This is the visitor identifier:
                const visitorId = result.visitorId;
                alert(visitorId);
              });
          }
        </script>
        <script
          async
          src="//cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.min.js"
          onload="initFingerprintJS()"
        ></script>
    
    
    bug 
    opened by FeSeason 25
  • Same browser different fingerprint

    Same browser different fingerprint

    Hello there!

    I encountered a very specific fingerprint behaviour. So my js code resides on some different websites (directly) and I receive on the same chrome browser the same id. That's fine. But, if my code is exported to some other website in iframe or is pushed by another js then I get totally different Id. So the same browser get's different Ids if JS is direct to browser or through some intermediary.

    Is it a bug or normal behaviour?

    needinfo 
    opened by kolykhalov 24
  • enumerate_devices keep changing

    enumerate_devices keep changing

    Every time I open a new browser session the enumerate_devices completely change.

    ac6b79a27e86490542ccf7f580926218

    [{
    
    	"key": "user_agent",
    	"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    }, {
    	"key": "language",
    	"value": "en-US"
    }, {
    	"key": "color_depth",
    	"value": 24
    }, {
    	"key": "device_memory",
    	"value": 8
    }, {
    	"key": "hardware_concurrency",
    	"value": 4
    }, {
    	"key": "resolution",
    	"value": [
    		1920,
    		1200
    	]
    }, {
    	"key": "available_resolution",
    	"value": [
    		1920,
    		1160
    	]
    }, {
    	"key": "timezone_offset",
    	"value": 300
    }, {
    	"key": "timezone",
    	"value": "America/Chicago"
    }, {
    	"key": "session_storage",
    	"value": 1
    }, {
    	"key": "local_storage",
    	"value": 1
    }, {
    	"key": "indexed_db",
    	"value": 1
    }, {
    	"key": "open_database",
    	"value": 1
    }, {
    	"key": "cpu_class",
    	"value": "unknown"
    }, {
    	"key": "navigator_platform",
    	"value": "Win32"
    }, {
    	"key": "regular_plugins",
    	"value": [
    		"Chrome PDF Plugin::Portable Document Format::application/x-google-chrome-pdf~pdf",
    		"Chrome PDF Viewer::::application/pdf~pdf",
    		"Native Client::::application/x-nacl~,application/x-pnacl~"
    	]
    }, {
    	"key": "canvas",
    	"value": "canvas winding:yes~canvas fp:data:image/png;base64,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Ao0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgACdxdOnAAAF70lEQVQBAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoASB/wEY7y1tcp0e0AAAAABJRU5ErkJggg=="
    }, {
    	"key": "webgl",
    	"value": "data:image/png;base64,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~extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_filter_anisotropic;WEBKIT_EXT_texture_filter_anisotropic;EXT_sRGB;OES_element_index_uint;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBKIT_WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBKIT_WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBKIT_WEBGL_lose_context~webgl aliased line width range:[1, 1]~webgl aliased point size range:[1, 1024]~webgl alpha bits:8~webgl antialiasing:yes~webgl blue bits:8~webgl depth bits:24~webgl green bits:8~webgl max anisotropy:16~webgl max combined texture image units:32~webgl max cube map texture size:16384~webgl max fragment uniform vectors:1024~webgl max render buffer size:16384~webgl max texture image units:16~webgl max texture size:16384~webgl max varying vectors:30~webgl max vertex attribs:16~webgl max vertex texture image units:16~webgl max vertex uniform vectors:4095~webgl max viewport dims:[16384, 16384]~webgl red bits:8~webgl renderer:WebKit WebGL~webgl shading language version:WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)~webgl stencil bits:0~webgl vendor:WebKit~webgl version:WebGL 1.0 (OpenGL ES 2.0 Chromium)~webgl unmasked vendor:Google Inc.~webgl unmasked renderer:ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D11 vs_5_0 ps_5_0)~webgl vertex shader high float precision:23~webgl vertex shader high float precision rangeMin:127~webgl vertex shader high float precision rangeMax:127~webgl vertex shader medium float precision:23~webgl vertex shader medium float precision rangeMin:127~webgl vertex shader medium float precision rangeMax:127~webgl vertex shader low float precision:23~webgl vertex shader low float precision rangeMin:127~webgl vertex shader low float precision rangeMax:127~webgl fragment shader high float precision:23~webgl fragment shader high float precision rangeMin:127~webgl fragment shader high float precision rangeMax:127~webgl fragment shader medium float precision:23~webgl fragment shader medium float precision rangeMin:127~webgl fragment shader medium float precision rangeMax:127~webgl fragment shader low float precision:23~webgl fragment shader low float precision rangeMin:127~webgl fragment shader low float precision rangeMax:127~webgl vertex shader high int precision:0~webgl vertex shader high int precision rangeMin:31~webgl vertex shader high int precision rangeMax:30~webgl vertex shader medium int precision:0~webgl vertex shader medium int precision rangeMin:31~webgl vertex shader medium int precision rangeMax:30~webgl vertex shader low int precision:0~webgl vertex shader low int precision rangeMin:31~webgl vertex shader low int precision rangeMax:30~webgl fragment shader high int precision:0~webgl fragment shader high int precision rangeMin:31~webgl fragment shader high int precision rangeMax:30~webgl fragment shader medium int precision:0~webgl fragment shader medium int precision rangeMin:31~webgl fragment shader medium int precision rangeMax:30~webgl fragment shader low int precision:0~webgl fragment shader low int precision rangeMin:31~webgl fragment shader low int precision rangeMax:30"
    }, {
    	"key": "webgl_vendor",
    	"value": "Google Inc.~ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D11 vs_5_0 ps_5_0)"
    }, {
    	"key": "adblock",
    	"value": false
    }, {
    	"key": "has_lied_languages",
    	"value": false
    }, {
    	"key": "has_lied_resolution",
    	"value": false
    }, {
    	"key": "has_lied_os",
    	"value": false
    }, {
    	"key": "has_lied_browser",
    	"value": false
    }, {
    	"key": "touch_support",
    	"value": [
    		0,
    		false,
    		false
    	]
    }, {
    	"key": "js_fonts",
    	"value": [
    		"Arial",
    		"Arial Black",
    		"Arial Narrow",
    		"Book Antiqua",
    		"Bookman Old Style",
    		"Calibri",
    		"Cambria",
    		"Cambria Math",
    		"Century",
    		"Century Gothic",
    		"Century Schoolbook",
    		"Comic Sans MS",
    		"Consolas",
    		"Courier",
    		"Courier New",
    		"Georgia",
    		"Helvetica",
    		"Impact",
    		"Lucida Bright",
    		"Lucida Calligraphy",
    		"Lucida Console",
    		"Lucida Fax",
    		"Lucida Handwriting",
    		"Lucida Sans",
    		"Lucida Sans Typewriter",
    		"Lucida Sans Unicode",
    		"Microsoft Sans Serif",
    		"Monotype Corsiva",
    		"MS Gothic",
    		"MS PGothic",
    		"MS Reference Sans Serif",
    		"MS Sans Serif",
    		"MS Serif",
    		"Palatino Linotype",
    		"Segoe Print",
    		"Segoe Script",
    		"Segoe UI",
    		"Segoe UI Light",
    		"Segoe UI Semibold",
    		"Segoe UI Symbol",
    		"Tahoma",
    		"Times",
    		"Times New Roman",
    		"Trebuchet MS",
    		"Verdana",
    		"Wingdings",
    		"Wingdings 2",
    		"Wingdings 3"
    	]
    }, {
    	"key": "audio_fp",
    	"value": "124.0434474653739"
    }, {
    	"key": "enumerate_devices",
    	"value": [
    		"id=default;gid=f82be04d8eb132c3dbdfa1211afca4cf136bfb1fb0220af50bf558ce938e997e;audioinput;",
    		"id=communications;gid=f82be04d8eb132c3dbdfa1211afca4cf136bfb1fb0220af50bf558ce938e997e;audioinput;",
    		"id=e7213bf5974f5fdbad6828fa4edef3f252f03dbb973600d02e70a53d5a8a3b5c;gid=f82be04d8eb132c3dbdfa1211afca4cf136bfb1fb0220af50bf558ce938e997e;audioinput;",
    		"id=default;gid=39f4ee48dcd5536e38f209b0a823e8e84828eb970d1b28732eb28b1914eb6449;audiooutput;",
    		"id=communications;gid=39f4ee48dcd5536e38f209b0a823e8e84828eb970d1b28732eb28b1914eb6449;audiooutput;",
    		"id=909340ed28126ab49541826aa66b05342bd4f802e54060f2693a97bf061847f5;gid=f82be04d8eb132c3dbdfa1211afca4cf136bfb1fb0220af50bf558ce938e997e;audiooutput;",
    		"id=33fea070a04d1555c3e5eb813510f67d568b1dfa5ce8c23f1c0a1b7c588a928e;gid=39f4ee48dcd5536e38f209b0a823e8e84828eb970d1b28732eb28b1914eb6449;audiooutput;",
    		"id=afa406ceddc40601174312fe3f0cf01f35ce9af037ddb67bebdff12e64acee7e;gid=6af833c10bbdf9b95e8333c73973b9b24d345b8db2cc73e1b503711a905eab12;audiooutput;",
    		"id=3282886083804c2657c47e41412b750f5a72673489a30d8b3332f6da20db0d20;gid=36816e053237ba34d9c881d2e52590d49a470a527925bade6a54eb4364cd9084;audiooutput;",
    		"id=ca674b030a9118c8cda10f1b359ace93ff9db5d1efb5c769fbd00864f056f42d;gid=b10682a546ac3bf5439f18e1f0bb8b456022a346f60b30203efbbd0c878e4c13;audiooutput;"
    	]
    }]
    

    28424362516318817b7ee8fe716dc955

    [{
    		"key": "user_agent",
    		"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    	},
    	{
    		"key": "language",
    		"value": "en-US"
    	},
    	{
    		"key": "color_depth",
    		"value": 24
    	},
    	{
    		"key": "device_memory",
    		"value": 8
    	},
    	{
    		"key": "hardware_concurrency",
    		"value": 4
    	},
    	{
    		"key": "resolution",
    		"value": [
    			1920,
    			1200
    		]
    	},
    	{
    		"key": "available_resolution",
    		"value": [
    			1920,
    			1160
    		]
    	},
    	{
    		"key": "timezone_offset",
    		"value": 300
    	},
    	{
    		"key": "timezone",
    		"value": "America/Chicago"
    	},
    	{
    		"key": "session_storage",
    		"value": 1
    	},
    	{
    		"key": "local_storage",
    		"value": 1
    	},
    	{
    		"key": "indexed_db",
    		"value": 1
    	},
    	{
    		"key": "open_database",
    		"value": 1
    	},
    	{
    		"key": "cpu_class",
    		"value": "unknown"
    	},
    	{
    		"key": "navigator_platform",
    		"value": "Win32"
    	},
    	{
    		"key": "regular_plugins",
    		"value": [
    			"Chrome PDF Plugin::Portable Document Format::application/x-google-chrome-pdf~pdf",
    			"Chrome PDF Viewer::::application/pdf~pdf",
    			"Native Client::::application/x-nacl~,application/x-pnacl~"
    		]
    	},
    	{
    		"key": "canvas",
    		"value": "canvas winding:yes~canvas fp:data:image/png;base64,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Ao0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgACdxdOnAAAF70lEQVQBAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQBA3oJLchAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0LGNAbr0AAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChBwIBeQgsyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDjAgb0xisQgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKEDCgl9CCDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQuIABvfEKBCBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgQM6CW0IAMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC5gQG+8AgEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoASB/wEY7y1tcp0e0AAAAABJRU5ErkJggg=="
    	},
    	{
    		"key": "webgl",
    		"value": "data:image/png;base64,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~extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_filter_anisotropic;WEBKIT_EXT_texture_filter_anisotropic;EXT_sRGB;OES_element_index_uint;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBKIT_WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBKIT_WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBKIT_WEBGL_lose_context~webgl aliased line width range:[1, 1]~webgl aliased point size range:[1, 1024]~webgl alpha bits:8~webgl antialiasing:yes~webgl blue bits:8~webgl depth bits:24~webgl green bits:8~webgl max anisotropy:16~webgl max combined texture image units:32~webgl max cube map texture size:16384~webgl max fragment uniform vectors:1024~webgl max render buffer size:16384~webgl max texture image units:16~webgl max texture size:16384~webgl max varying vectors:30~webgl max vertex attribs:16~webgl max vertex texture image units:16~webgl max vertex uniform vectors:4095~webgl max viewport dims:[16384, 16384]~webgl red bits:8~webgl renderer:WebKit WebGL~webgl shading language version:WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)~webgl stencil bits:0~webgl vendor:WebKit~webgl version:WebGL 1.0 (OpenGL ES 2.0 Chromium)~webgl unmasked vendor:Google Inc.~webgl unmasked renderer:ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D11 vs_5_0 ps_5_0)~webgl vertex shader high float precision:23~webgl vertex shader high float precision rangeMin:127~webgl vertex shader high float precision rangeMax:127~webgl vertex shader medium float precision:23~webgl vertex shader medium float precision rangeMin:127~webgl vertex shader medium float precision rangeMax:127~webgl vertex shader low float precision:23~webgl vertex shader low float precision rangeMin:127~webgl vertex shader low float precision rangeMax:127~webgl fragment shader high float precision:23~webgl fragment shader high float precision rangeMin:127~webgl fragment shader high float precision rangeMax:127~webgl fragment shader medium float precision:23~webgl fragment shader medium float precision rangeMin:127~webgl fragment shader medium float precision rangeMax:127~webgl fragment shader low float precision:23~webgl fragment shader low float precision rangeMin:127~webgl fragment shader low float precision rangeMax:127~webgl vertex shader high int precision:0~webgl vertex shader high int precision rangeMin:31~webgl vertex shader high int precision rangeMax:30~webgl vertex shader medium int precision:0~webgl vertex shader medium int precision rangeMin:31~webgl vertex shader medium int precision rangeMax:30~webgl vertex shader low int precision:0~webgl vertex shader low int precision rangeMin:31~webgl vertex shader low int precision rangeMax:30~webgl fragment shader high int precision:0~webgl fragment shader high int precision rangeMin:31~webgl fragment shader high int precision rangeMax:30~webgl fragment shader medium int precision:0~webgl fragment shader medium int precision rangeMin:31~webgl fragment shader medium int precision rangeMax:30~webgl fragment shader low int precision:0~webgl fragment shader low int precision rangeMin:31~webgl fragment shader low int precision rangeMax:30"
    	},
    	{
    		"key": "webgl_vendor",
    		"value": "Google Inc.~ANGLE (NVIDIA GeForce GTX 660 Ti Direct3D11 vs_5_0 ps_5_0)"
    	},
    	{
    		"key": "adblock",
    		"value": false
    	},
    	{
    		"key": "has_lied_languages",
    		"value": false
    	},
    	{
    		"key": "has_lied_resolution",
    		"value": false
    	},
    	{
    		"key": "has_lied_os",
    		"value": false
    	},
    	{
    		"key": "has_lied_browser",
    		"value": false
    	},
    	{
    		"key": "touch_support",
    		"value": [
    			0,
    			false,
    			false
    		]
    	},
    	{
    		"key": "js_fonts",
    		"value": [
    			"Arial",
    			"Arial Black",
    			"Arial Narrow",
    			"Book Antiqua",
    			"Bookman Old Style",
    			"Calibri",
    			"Cambria",
    			"Cambria Math",
    			"Century",
    			"Century Gothic",
    			"Century Schoolbook",
    			"Comic Sans MS",
    			"Consolas",
    			"Courier",
    			"Courier New",
    			"Georgia",
    			"Helvetica",
    			"Impact",
    			"Lucida Bright",
    			"Lucida Calligraphy",
    			"Lucida Console",
    			"Lucida Fax",
    			"Lucida Handwriting",
    			"Lucida Sans",
    			"Lucida Sans Typewriter",
    			"Lucida Sans Unicode",
    			"Microsoft Sans Serif",
    			"Monotype Corsiva",
    			"MS Gothic",
    			"MS PGothic",
    			"MS Reference Sans Serif",
    			"MS Sans Serif",
    			"MS Serif",
    			"Palatino Linotype",
    			"Segoe Print",
    			"Segoe Script",
    			"Segoe UI",
    			"Segoe UI Light",
    			"Segoe UI Semibold",
    			"Segoe UI Symbol",
    			"Tahoma",
    			"Times",
    			"Times New Roman",
    			"Trebuchet MS",
    			"Verdana",
    			"Wingdings",
    			"Wingdings 2",
    			"Wingdings 3"
    		]
    	},
    	{
    		"key": "audio_fp",
    		"value": "124.0434474653739"
    	},
    	{
    		"key": "enumerate_devices",
    		"value": [
    			"id=default;gid=eccafc7405b2c75ee94f00ce79fa8debcee30fa1ced593c2dc95fcc42444d7f2;audioinput;",
    			"id=communications;gid=eccafc7405b2c75ee94f00ce79fa8debcee30fa1ced593c2dc95fcc42444d7f2;audioinput;",
    			"id=e7213bf5974f5fdbad6828fa4edef3f252f03dbb973600d02e70a53d5a8a3b5c;gid=eccafc7405b2c75ee94f00ce79fa8debcee30fa1ced593c2dc95fcc42444d7f2;audioinput;",
    			"id=default;gid=6f14b30d9aea340330f460f22d636fe727b17d7efd7e5d9e66aaeaccbef91559;audiooutput;",
    			"id=communications;gid=6f14b30d9aea340330f460f22d636fe727b17d7efd7e5d9e66aaeaccbef91559;audiooutput;",
    			"id=909340ed28126ab49541826aa66b05342bd4f802e54060f2693a97bf061847f5;gid=eccafc7405b2c75ee94f00ce79fa8debcee30fa1ced593c2dc95fcc42444d7f2;audiooutput;",
    			"id=33fea070a04d1555c3e5eb813510f67d568b1dfa5ce8c23f1c0a1b7c588a928e;gid=6f14b30d9aea340330f460f22d636fe727b17d7efd7e5d9e66aaeaccbef91559;audiooutput;",
    			"id=afa406ceddc40601174312fe3f0cf01f35ce9af037ddb67bebdff12e64acee7e;gid=83f68f6880d29e8dc0f58b32ce711abf982646071fa01f5cfd7432c3867ddeb3;audiooutput;",
    			"id=3282886083804c2657c47e41412b750f5a72673489a30d8b3332f6da20db0d20;gid=4732261d95c26daf4bf14ee3dd7e2ce2c308ea09a9e1f7555634569cb9b23229;audiooutput;",
    			"id=ca674b030a9118c8cda10f1b359ace93ff9db5d1efb5c769fbd00864f056f42d;gid=691fcee7940916c24d2b8a85b694668c9dc93ef096da1275a6918b4eb16c5e67;audiooutput;"
    		]
    	}
    ]
    

    [X ] I can reproduce the bug in [fingerprintjs master]

    Minimal reproducing example

    [ X] I can reproduce the bug with this jsfiddle: https://jsfiddle.net/L2gLq4rg/ [ ] Alternatively, I have provided a jsfiddle that reproduces the bug here:

    help wanted needinfo 
    opened by mtstedman 23
  • Fingerprint changes due to switching between GPUs

    Fingerprint changes due to switching between GPUs

    Update: See https://github.com/Valve/fingerprintjs2/issues/226#issuecomment-336246243 for the probable cause

    Hi!

    Sometimes i do find website visitors who i identified using a cookie.

    In their Sessions, the do have identical Fingerprints, but the Hash-Value is not identical.

    Did anyone else notice this, and what might be an explaination for this?

    enhancement help wanted hard 
    opened by mhasenberg 23
  • Different WebGL values on devices

    Different WebGL values on devices

    I don't have with devices.

    1. different webgl bits User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; ASUS_T00J Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36

    "key":"webgl","value":" ... ~webgl alpha bits:8~webgl antialiasing:yes~webgl blue bits:8~webgl depth bits:16~webgl green bits:8~ ...

    "key":"webgl","value":" ... ~webgl alpha bits:0~webgl antialiasing:yes~webgl blue bits:0~webgl depth bits:0~webgl green bits:0~ ...

    1. different canvas User-Agent: Mozilla/5.0 (Linux; Android 5.0.1; GT-I9500 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36

    "key":"webgl","value":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAANC0lEQVR4Xu2dTYhlRxXHb/UgkkUIIhKCzGKQMGAIEkUhyNAdBSWLgCGLgI ... "key":"webgl","value":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAANAklEQVR4Xu2dS4ilRxXHv+pBJIsgIhIkDCFIGDAEiaIQwtAdBSWLgJJFQF ...

    1. different canvas User-Agent: Mozilla/5.0 (Linux; Android 4.2.2; IdeaTab S6000-H Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Safari/537.36
    opened by alexber220 23
  • Why does the same browser generate two fingerprint IDS?

    Why does the same browser generate two fingerprint IDS?

    image

    const fpPromise = import('./esm.min.js')
                .then(FingerprintJS => FingerprintJS.load());
              fpPromise
                .then(fp => fp.get())
                .then(result => {
                  const visitorId = result.visitorId
                  console.log(visitorId);
                  document.write(visitorId);
                })
                .catch(error => console.error(error))
    
    opened by cnwp007 21
  • Fingerprint UUID is different on initial page load (and when refreshing without cache)

    Fingerprint UUID is different on initial page load (and when refreshing without cache)

    (I couldn't find any previous issues regarding this) This is happening with all major browsers on both Windows 10 and macOS High Sierra.

    Upon the first page load, a particular fingerprint UUID is given. However, after every subsequent load, the fingerprint UUID is different (and will remain constant with each normal refresh).

    However - if you shift-reload the page, the UUID goes back to the original one that was first given on first load.

    Does this have something to do with items being cached? I can't get it to output a consistent UUID between first load and subsequent loads. (and obviously, the first load will generally be pretty important).

    opened by Hypermedia 20
  • Improve the available screen resolution component

    Improve the available screen resolution component

    Resolves #568

    • The component is disabled in browsers where it's unstable or gives no information. It's enabled in: Chrome ≤ 83 on Windows, Firefox on Windows, IE, pre-chromium Edge, Chrome 57–78 on macOS, Safari ≤11 on macOS. Approximate share of such users is 9.3% and it decreases. See raw research data at https://github.com/fingerprintjs/fingerprintjs/issues/568#issuecomment-722272726.
    • Top-left corner position of available screen is added.
    • The dimensions are rounded by 10 pixels to mitigate small random changes of the position (e.g. 1900x1440 → 1900x1439, the reason and steps to reproduce are unknown).

    This PR will change every visitor identifier.

    opened by Finesse 19
  • How is it used in Chrome Extensions with manifest V3?

    How is it used in Chrome Extensions with manifest V3?

    Scenario

    • We were using @fingerprintjs/fingerprintjs-pro in our chrome extension and didn't experience any issues with the chrome manifest V2. As of January 2023, chrome requires that manifest v3 be used and one of the restrictions is the impossibility of loading external JS files (as requested by fingerprint in the documentation). This impossibility is because in mv3, chrome limits the possible values of the content_security_policy: Chrome Documentation. Is it possible to use fingerprintjs without the need to import a JS dynamically? An important fact, our apiKey is dynamic.

    • Device: Browser - Chrome

    • Version: @fingerprintjs/fingerprintjs-pro 3.7.1

    Fingerprint data

    Visitor identifier: 4c92206b6c3bc6d96d2068fd3b615018 Time took to get the identifier: 366ms Confidence: {"score":0.5,"comment":"0.995 if upgrade to Pro: https://fpjs.dev/pro"} User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36

    opened by nicolaswww 1
  • Amend the readme

    Amend the readme

    • Remove an unused image
    • Split the description from the accuracy note. I think it's important to have a simple answer to a "why may I need this" question. A single short paragraph is used for this.
    • Move a link to a React usage example from the Pro section to an OSS section. Also change the icon to an emoji resembling React logo.
    • Stick to the common file naming style
    • Add timestamps to the Pro response example
    • Hide a Pro response example under a spoiler, because it's bulky, and an example is already given on the Pro picture
    • Change "FingerprintJS Pro" to "Fingerprint Pro"
    opened by Finesse 1
  • Can I specify parameters to use when generating fingerprints with fingerprint.js?

    Can I specify parameters to use when generating fingerprints with fingerprint.js?

    Hello fingerprintsjs team. Let me ask you one question.

    Is it possible to specify parameters to use when generating fingerprints with fingerprint.js? For example, "do not use the language setting of the browser".

    opened by mule-engineer13 5
  • NotSupportError - The operation is not supported in Safari on IOS 16

    NotSupportError - The operation is not supported in Safari on IOS 16

    Scenario

    • It is happened DOM Exception: NotSupportError - The operation is not supported in Safari on IOS 16
    • Iphone with IOS 16 on Safari
    • FingerprintJS v3.3.6

    Fingerprint Data

    Mozilla/5.0 (iPhone; CPU iPhone OS 16_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1

    needinfo 
    opened by chuotnhat1985 3
  • Incognito tests with Selenium

    Incognito tests with Selenium

    Since you were not able to run tests in incognito/private mode with Karma at BrowserStack (https://github.com/fingerprintjs/fingerprintjs/issues/560) you might want to consider the following solution that depends on Selenium and BrowserStack. I'm not sure what a complete test runner you meant in https://github.com/fingerprintjs/fingerprintjs/issues/563#issuecomment-817458927 but I think that my solution could be a good starting point.

    opened by rafalku 0
  • Unstable 'hdr' entropy source in Safari

    Unstable 'hdr' entropy source in Safari

    Scenario

    • What causes the fingerprint to change?

    unstable 'hdr' entropy source

    • What device and browser are you using?

    iOS 15.6.1 with Safari

    Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Mobile/15E148 Safari/604.1
    
    • What version of FingerprintJS are you using?

    FingerprintJS v3.3.5

    Fingerprint data

    Seems like the hdr entropy source is not stable in Safari, after two days when I check the result.visitorId in my iPhone, it's changed, the diff is here: https://www.diffchecker.com/ts58uNPT

    bug 
    opened by tvvocold 1
Releases(v3.3.6)
  • v3.3.6(Sep 8, 2022)

  • v3.3.5(Aug 23, 2022)

    • Obfuscate the inappropriate selectors in the distributive code of the library (#803)

      Note: this change is for automated analyzers and beginner security researches. FingerprintJS doesn't put any ads, links or other content on your website. You can learn how we use advertisement selectors in a blog post.

    Source code(tar.gz)
    Source code(zip)
  • v3.3.4(Jul 29, 2022)

  • v3.3.3(Feb 24, 2022)

  • v3.3.2(Dec 22, 2021)

  • v3.3.1(Dec 8, 2021)

    Important:

    • Add an AJAX request that collects installation statistics. The request is performed only by version installed from NPM. See the documentation is you want to turn it off. (#709)

    Miscellaneous:

    • Move some top level declarations to improve tree-shaking (#700)
    • Actualize the environment detection functions (#701)
    • Actualize the list of supported browsers (#713)
    • fix: An indefinite setTimeout loop in Firefox (#717)
    • Actualize the list of DOM blockers (#719)
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Jul 29, 2021)

    • Add a new result field: confidence score (#689). The confidence score field tells how much the agent is sure about the visitor identifier. See the API reference for more details.
    • Actualize the list of DOM blockers
    • Fix an error that occurs in Firefox Add-ons (#684)
    • Handle missing iframe.contentWindow.document, for example in JSDOM (#686)

    The visitor identifiers are compatible with version 3.2.0.

    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Jun 23, 2021)

    • Make the entropy sources start running in load function (#678). It will make get run much faster when some time passes between calling load() and get(). See an example in the quick start guide.

    The visitor identifiers are compatible with version 3.1.0.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.3(Jun 14, 2021)

  • v3.1.2(May 11, 2021)

  • v3.1.1(Apr 28, 2021)

  • v3.1.0(Apr 13, 2021)

    • Make the entropy sources run in parallel (#622)
    • Update the set of entropy sources. It will change fingerprint for all visitors. The documented JS API stays the same.
      • Replace the availableScreenResolution entropy source with screenFrame that is more stable (#585)
      • Combine the timezone and timezoneOffset sources into a single source because timezoneOffset gives no entropy when timezone is available
      • Stabilize the canvas entropy source (#574)
      • Split the canvas image into 2 images (https://github.com/fingerprintjs/fingerprintjs/issues/583#issuecomment-792758292, https://github.com/fingerprintjs/fingerprintjs/issues/103#issuecomment-809881647)
      • Distinguish cases where hardware concurrency is unavailable and where it's known to equal 1
      • Enable the plugins entropy source in IE
      • Remove the following entropy sources because they give no entropy in combination to other sources: pluginsSupport, productSub, emptyEvalLength and errorFF
      • Fix the incorrect platform value when desktop mode is requested in an iOS browser (#609)
      • Replace the chrome source with the vendorFlavors source that checks many vendor-specific variables (#621)
      • Add a DOM blockers entropy source (387eb8384c10c180d54a7f9cc58df4630c71becb)
      • Add a set of CSS media query entropy sources (d1c3ccf0b29f8753c9c9e71b487567c14b66f9c8)
      • Add a math entropy source (8e3a6a8d6ddfc431279b2652dde064ce5894b118)
      • Add a font preferences entropy source (5306b58842ec9534acf65ac0746a6b5d361d5239)
    Source code(tar.gz)
    Source code(zip)
  • v3.0.7(Apr 2, 2021)

    • fix: Canvas fingerprint depends on the script encoding (#588)
    • Improve the audio entropy source performance (3201a7d61bb4df2816c226d8364cc98bb4235e59)
    • Encapsulate the fonts entropy source so that it doesn't affect and isn't affected by the page style (#635)
    • Return the version together with the visitor identifier (db55bedfde7cfd50a0ad756bbeef7b2d831505c9)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.5(Apr 2, 2021)

  • v3.0.6(Feb 9, 2021)

    • Actualize the productSub component TypeScript type (the component value is undefined in IE)
    • Make FingerprintJS work in server side rendering environments like Next.js and Gatsby (#610)
    Source code(tar.gz)
    Source code(zip)
  • v3.0.5(Jan 8, 2021)

  • v3.0.4(Dec 18, 2020)

  • v3.0.3(Nov 11, 2020)

  • v3.0.1(Nov 2, 2020)

    • Support elder browsers like IE 11, Chrome 42 and Firefox 48 (a Promise polyfill is required, see the browser support guide to learn more) (#577)
    • Handle cases where new Date().getTimezoneOffset() returns a string (#577)
    • fix: The timezoneOffset component changes due to DST shifts (#577)
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Oct 16, 2020)

    The library has been rewritten in TypeScript from scratch, has got a modular code structure and various shipping formats.

    • See the readme to get familiar with the new installation methods and the new API.
    • See the migration guide to learn how to migrate to from version 2 to version 3.
    • The wiki has moved to the v2 branch.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.4(Sep 17, 2020)

    • #376 Use a more reliable addBehavior check implementation (#544)
    • #481 Fix the undefined timezone component result in IE11 (#546). It will change fingerprint in IE11.
    • Drop the IE 9 and older support officially (the library didn't work there anyway)
    • #405 Exclude the adBlock component in the default options
    • #438 Fix fingerprint difference between normal and private modes in IE and Edge. It will change fingerprint in IE and Edge.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Sep 7, 2020)

    • #176 Fix console error on too many active WEBGL contexts (#484)
    • #485 IE8 compatibility
    • Various changes dealing with false positives on hasLiedOs() and hasLiedBrowser() (#499)
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Sep 7, 2020)

  • 2.1.0(May 18, 2019)

    Note: This version's fingerprints may be different from the previous version's fingerprints.

    • Add navigator.webdriver component (https://github.com/Valve/fingerprintjs2/pull/433)
    • Fixes
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Oct 9, 2018)

    Note: This version's fingerprints may be different from the previous version's fingerprints.

    Breaking changes to usage! See https://github.com/Valve/fingerprintjs2#upgrade-guide-from-182-to-200 for details.

    Other changes:

    • Add enumerateDevices support (#350)
    • Exclude audio fingerprint on iOS 11 by default (#342)
    • Add timezone component (#364)
    • Exclude enumerateDevices component by default (unreliable on Windows)
    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Apr 9, 2018)

    Note: This version's fingerprints may be different from the previous version's fingerprints.

    • Fix #311 Different fingerprint on zoom: Exclude devicePixelRatio from fingerprinting by default.
    • Fix #312 Typo in CSS property name
    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Mar 21, 2018)

    Note: This version's fingerprints may be different from the previous version's fingerprints.

    • Improve font detection: #300, #284
    • Improve incognito mode fingerprinting: Disable Do Not Track component by default (cf412ddc5bade2269de6fae25c5f575e0194b62f)
    • Fix bug: #301
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Jan 23, 2018)

    Note: This version's fingerprints may be different from the previous version's fingerprints.

    • Add preprocessor option
    • Add webglVendorAndRenderer component
    • Add navigator.deviceMemory support
    • Add Google closure compiler support
    • Handle anti-canvas fingerprinting extensions
    • Fix loads of bugs
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Feb 8, 2017)

Owner
FingerprintJS
Fraud detection API for the Internet
FingerprintJS
SiJago - GraphQL Client for Browser and Node.js

SiJago is GraphQL Client for Browser and Node.js, You can write request GraphQL schema using JavaScript Object Style, Why i create this tools, Because for reducing typo when writing GraphQL schema using HTTP client like Axios, Fetch or GraphQL client using Apollo and also to simplify calling the GraphQL schema easy to understand for human.

Restu Wahyu Saputra 7 Mar 13, 2022
🌳 Tiny & elegant JavaScript HTTP client based on the browser Fetch API

Huge thanks to for sponsoring me! Ky is a tiny and elegant HTTP client based on the browser Fetch API Ky targets modern browsers and Deno. For older b

Sindre Sorhus 8.5k Jan 2, 2023
a browser detector

Bowser A small, fast and rich-API browser/platform/engine detector for both browser and node. Small. Use plain ES5-version which is ~4.8kB gzipped. Op

Denis Demchenko 5.2k Jan 2, 2023
A Featureful File Browser for Cockpit

Cockpit Navigator A Featureful File System Browser for Cockpit - remotely browse, manage, edit, upload, and download files on your server through your

45Drives 226 Dec 27, 2022
The perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on existing HTML.

List.js Perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on

Jonny Strömberg 10.9k Jan 1, 2023
Drag and drop library for two-dimensional, resizable and responsive lists

GridList Drag and drop library for a two-dimensional resizable and responsive list of items Demo: http://hootsuite.github.io/grid/ The GridList librar

Hootsuite 3.6k Dec 14, 2022
A high-performance, dependency-free library for animated filtering, sorting, insertion, removal and more

MixItUp 3 MixItUp is a high-performance, dependency-free library for animated DOM manipulation, giving you the power to filter, sort, add and remove D

Patrick Kunka 4.5k Dec 24, 2022
JavaScript Survey and Form Library

SurveyJS is a JavaScript Survey and Form Library. SurveyJS is a modern way to add surveys and forms to your website. It has versions for Angular, jQue

SurveyJS 3.5k Jan 1, 2023
Extensive math expression evaluator library for JavaScript and Node.js

?? Homepage Fcaljs is an extensive math expression evaluator library for JavaScript and Node.js. Using fcal, you can perform basic arithmetic, percent

Santhosh Kumar 93 Dec 19, 2022
autoNumeric is a standalone library that provides live as-you-type formatting for international numbers and currencies.

What is autoNumeric? autoNumeric is a standalone Javascript library that provides live as-you-type formatting for international numbers and currencies

AutoNumeric 1.7k Dec 16, 2022
A platform detection library.

Platform.js v1.3.6 A platform detection library that works on nearly all JavaScript platforms. Disclaimer Platform.js is for informational purposes on

BestieJS Modules 3.1k Dec 31, 2022
A benchmarking library. As used on jsPerf.com.

Benchmark.js v2.1.4 A robust benchmarking library that supports high-resolution timers & returns statistically significant results. As seen on jsPerf.

BestieJS Modules 5.3k Dec 28, 2022
A wrapper library for Jitsi Meet that adds audio spatialization, to be able to create virtual meeting rooms.

A wrapper library for Jitsi Meet that adds audio spatialization, to be able to create virtual meeting rooms.

Sean T. McBeth 1.1k Dec 27, 2022
Solid.js library adding signaling to built-in non-primitives

This package provides signaled versions of Javascript's built-in objects. Thanks to it, all theirs properties will be automatically tracked while using standard API.

Maciej Kwaśniak 40 Dec 29, 2022
This library was designed to be used in SPA framework wrappers for the FingerprintJS Pro Javascript Agent

Framework-agnostic SPA service wrapper. Use it to build a FingerprintJS Pro wrapper for your favorite framework.

FingerprintJS 12 Sep 3, 2022
ChelseaJS - a Javascript library for creative, generative Coding

ChelseaJS is a Javascript library for creative, generative Coding. It's simple and intuitive syntax makes it easy for everyone (including non-coders)

Prakrisht Dahiya 26 Oct 6, 2022
Estrela - a JavaScript library for building reactive web components inspired by lit

Estrela ⭐ Full Reactive Web Components Estrela is a JavaScript library for building reactive web components inspired by lit. Just like Lit, Estrela is

null 50 Oct 31, 2022
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings

JavaScript Algorithms and Data Structures This repository contains JavaScript based examples of many popular algorithms and data structures. Each algo

Oleksii Trekhleb 158k Dec 31, 2022
A lightweight jQuery plugin for collapsing and expanding long blocks of text with "Read more" and "Close" links.

Readmore.js V3 alpha I am deprecating the 2.x version of Readmore.js. A new version is coming soon! Check it out and help me test it! Readmore.js A sm

Jed Foster 1.5k Nov 30, 2022