Skip to content

DevsDaddy/fgprint

Repository files navigation

Welcome to fgprint - an advanced fingerprinting library

Advanced Fingerprinting - fgprint

fgprint library on NPM fgprint license

fgprint - The most powerful, fast, and convenient library for browser and device fingerprinting in pure TypeScript.


Zero dependencies · Modern architecture · 100% Typed · Extendable


🚀 Why fgprint?

Most fingerprinting libraries are either outdated, use a limited set of signals, or have bloated dependencies. Fgprint was built from the ground up to be:

  • Full-featured: collects over 30 stable and unique signals, including WebGPU, WebCodecs, Canvas, AudioContext, WebGL, fonts, math artifacts, and many others.
  • Fast: a synchronous fingerprint is calculated in <10 ms, an asynchronous fingerprint in 100–300 ms.
  • Client side - no required API keys or payments;
  • Modular: you can use only the components you need or add your own.
  • Typed: written on pure TypeScript with type preservation in all public methods.
  • Independent: dependency free, works even in the most confined environments.

✨ Features list

🧩 Unique signals

  • Basic: Navigator, Screen, Timezone, Plugins;
  • Graphics: Canvas, WebGL, WebGPU;
  • Audio: AudioContext with dynamic buffer;
  • System: Networking, performance, fonts, virtual keyboard;
  • Extended: Math Precision, CSS-properties;

⚡ Performance and reliability

  • Built-in results caching;
  • Configurable timeouts for asynchronous operations;
  • Robust data normalization (e.g. rounding of screen sizes);
  • Sync and Async modes;
  • SHA-512 cached fingerprints;

🧪 For developers

  • Full typing with autocompletion in the IDE
  • Clear OOP design with abstract class FingerprintComponent
  • Component getters with generics: fp.getComponent<CanvasFingerprinter>('canvas')
  • Ready-to-use demo with visual debugging

Comparison with analogues

Characteristic fgprint FingerprintJS ClientJS CreepJS (browser extension)
Signals 30+ ~20 ~15 ~40+
WebGPU / WebCodecs ✅ (partial)
Audio Fingerprint ✅ (no sound)
Math
Caching
Typed (TypeScript)
Size (min+gzip) ~7 KB ~14 KB ~10 KB N/A
Modular ✅ (any components) ⚠️ (fixed)
Dependencies 0 0 0 -

Get started

📦 Installation

Installation using NPM:

npm install @neurosell/fgprint

Or using GitHub:

git clone https://github.com/devsdaddy/fgprint
cd ./fgprint

🏁 Simple usage

import { Fingerprint } from "@neurosell/fgprint";

/* Create basic fingerprint */
const fp = Fingerprint.createDefault();
const fingerprint = await fp.getFingerprint();
console.log('Full fingerprint:', fingerprint);

🔧 Advanced usage

Components selection:

import { Fingerprint, NavigatorFingerprint, CanvasFingerprint } from '@neurosell/fgprint';

const fp = new Fingerprint({
  components: [
    new NavigatorFingerprint(),
    new CanvasFingerprint(),
  ],
  exclude: [],                // Exclude components
  timeout: 2000,              // Async operations timeout
  debug: false,               // Debug data
});

const hash = await fp.getFingerprint();

Access to component data:

// Get registred component with type
const webgl = fp.getComponent<WebGLFingerprint>('webgl');
if (webgl) {
  const data = webgl.getData(); // Has data
  console.log('GPU:', data.unmaskedRenderer);
}

// Get directly typed data from component
const navData = await fp.getComponentDataTyped<{ userAgent: string }>('navigator');
console.log(navData?.userAgent);

Create your own signals:

import { FingerprintComponent } from '@neurosell/fgprint';

class MyComponent extends FingerprintComponent<string> {
  name = 'myComponent';
  
  public override getData() {
    return 'custom data';
  }
}

fp.registerComponent(new MyComponent());

📋 Components list

Note: Asynchronous components are automatically handled with a timeout, and their failure does not affect the final print.

Component Mode Description
NavigatorFingerprint Sync User agent, platform, languahes. harware etc.
ScreenFingerprint Sync Screen size, color depth, orientation etc.
TimezoneFingerprint Sync Timezone information
PluginsFingerprint Sync Browser plugins
CanvasFingerprint Sync Canvas fingerprint based on GPU/OS
WebGLFingerprint Sync WebGL Features
FontsFingerprint Sync List of available fonts
MiscFingerprint Sync Additional small signals (touch support, pointer events etc.)
AudioFingerprint Async An unique audio-fingerprint based on signal generator
MediaDevicesFingerprint Async (require user permission!) list of cameras, mics etc.
NetworkFingerprint Sync Connection type, RTT, downlink, saveData
WebGPUFingerprint Async GPU information based on modern WebGPU API
WebCodecsFingerprint Async List of codecs
PerformanceFingerprint Sync (unique) Memory usage from JS-heap and speed of math functions
MathPrecisionFingerprint Sync Compute artifacts of some math functions
SensorFingerprint Sync Sensors availability
GamepadFingerprint Sync Gamepad list info
SpeechSynthesisFingerprint Sync Speech synthesis fingerprint
CSSFeaturesFingerprint Sync CSS features list

🖥️ Demo and Debug

The repository contains a demo/ folder with a ready-made page for visual testing.

git clone https://github.com/devsdaddy/fgprint.git
cd ./fgprint
npm install
npm run build:demo
npx serve demo

Open http://localhost:3000 to view demo data and fingerprints.


Licensing

Fgprint library is distributed under the MIT license. You can use it however you like. I would appreciate any feedback and suggestions for improvement. Full license text can be found here


Why? | Features | Get Started | Contact

About

fgprint - a powerful library for fast and stable user fingerprinting based on a variety of parameters, written in TypeScript.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Contributors