# ranvir7/neoprint architecture

> Architecture diagram of the GitHub repository ranvir7/neoprint, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ranvir7/neoprint
- Repository: https://github.com/ranvir7/neoprint

## Overview

Neoprint is a browser-fingerprinting library. The primary workflow collects browser and device signals, derives several identifiers and quality measures, then exposes intelligence and persistence APIs. The README documents additional capabilities beyond the sampled implementation; those are included as modules where the tree supports them. Worker offloading is currently disabled, so the graph does not model active worker execution.

Main entry points: [`src/index.ts`](https://github.com/ranvir7/neoprint/blob/main/src/index.ts) (Public API), [`src/core/engine.ts`](https://github.com/ranvir7/neoprint/blob/main/src/core/engine.ts) (Collection engine), [`src/collectors/index.ts`](https://github.com/ranvir7/neoprint/blob/main/src/collectors/index.ts) (Built-in collectors), [`src/session/index.ts`](https://github.com/ranvir7/neoprint/blob/main/src/session/index.ts) (Session linking)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Signal capture"]
  node_collector_set["Built-in collectors<br/>[index.ts]"]
  node_canvas["Canvas signal<br/>[canvas.ts]"]
  node_webgl["WebGL signals<br/>[webgl.ts]"]
  node_other_collectors["Device signals"]
end

subgraph group_identity["Identity engine"]
  node_api["Public API<br/>[index.ts]"]
  node_engine["Collection engine<br/>[engine.ts]"]
  node_protocol["Protocol filter<br/>[protocol.ts]"]
  node_worker["Worker runner<br/>[worker-runner.ts]"]
  node_hash["Fingerprint hashing<br/>[hash.ts]"]
  node_stable_id["Stable ID<br/>[stable-id.ts]"]
  node_weighted_id["Weighted ID<br/>[weighted-id.ts]"]
  node_cross_id["Cross-browser ID<br/>[cross-browser.ts]"]
end

subgraph group_intelligence["Fingerprint intelligence"]
  node_quality["Confidence and entropy"]
  node_spoofing["Spoofing checks<br/>[inconsistency.ts]"]
  node_bot["Bot detection<br/>[bot.ts]"]
  node_environment["Environment profile<br/>[environment.ts]"]
  node_compare["Fuzzy comparison<br/>[compare.ts]"]
  node_extras["Risk and signal checks"]
end

subgraph group_continuity["Behavior and continuity"]
  node_behavior["Behavioral biometrics<br/>[index.ts]"]
  node_session["Session linking<br/>[index.ts]"]
  node_lifecycle["Fingerprint lifecycle<br/>[index.ts]"]
end

node_client(("Library caller"))
node_browser_store[("Browser storage")]

node_client -->|"calls"| node_api
node_api -->|"registers"| node_collector_set
node_api -->|"collects"| node_engine
node_collector_set -->|"provides collectors"| node_engine
node_engine -->|"filters names"| node_protocol
node_engine -->|"invokes collector"| node_canvas
node_engine -->|"invokes collector"| node_webgl
node_engine -->|"invokes collectors"| node_other_collectors
node_engine -->|"checks availability"| node_worker
node_engine -->|"hashes components"| node_hash
node_engine -->|"computes ID"| node_stable_id
node_engine -->|"computes ID"| node_weighted_id
node_engine -->|"computes ID"| node_cross_id
node_api -->|"analyzes components"| node_spoofing
node_api -->|"scores components"| node_quality
node_api -->|"detects bots"| node_bot
node_api -->|"profiles environment"| node_environment
node_api -->|"compares fingerprints"| node_compare
node_api -->|"exposes analysis"| node_extras
node_api -->|"starts collection"| node_behavior
node_api -->|"creates linker"| node_session
node_api -->|"exposes lifecycle"| node_lifecycle
node_session -->|"reads and writes"| node_browser_store
node_lifecycle -->|"persists history"| node_browser_store

click node_api "https://github.com/ranvir7/neoprint/blob/main/src/index.ts"
click node_collector_set "https://github.com/ranvir7/neoprint/blob/main/src/collectors/index.ts"
click node_canvas "https://github.com/ranvir7/neoprint/blob/main/src/collectors/canvas.ts"
click node_webgl "https://github.com/ranvir7/neoprint/blob/main/src/collectors/webgl.ts"
click node_other_collectors "https://github.com/ranvir7/neoprint/tree/main/src/collectors"
click node_engine "https://github.com/ranvir7/neoprint/blob/main/src/core/engine.ts"
click node_protocol "https://github.com/ranvir7/neoprint/blob/main/src/analysis/protocol.ts"
click node_worker "https://github.com/ranvir7/neoprint/blob/main/src/core/worker-runner.ts"
click node_hash "https://github.com/ranvir7/neoprint/blob/main/src/core/hash.ts"
click node_stable_id "https://github.com/ranvir7/neoprint/blob/main/src/analysis/stable-id.ts"
click node_weighted_id "https://github.com/ranvir7/neoprint/blob/main/src/analysis/weighted-id.ts"
click node_cross_id "https://github.com/ranvir7/neoprint/blob/main/src/analysis/cross-browser.ts"
click node_quality "https://github.com/ranvir7/neoprint/tree/main/src/analysis"
click node_spoofing "https://github.com/ranvir7/neoprint/blob/main/src/analysis/inconsistency.ts"
click node_bot "https://github.com/ranvir7/neoprint/blob/main/src/analysis/bot.ts"
click node_environment "https://github.com/ranvir7/neoprint/blob/main/src/analysis/environment.ts"
click node_compare "https://github.com/ranvir7/neoprint/blob/main/src/analysis/compare.ts"
click node_extras "https://github.com/ranvir7/neoprint/tree/main/src/analysis"
click node_behavior "https://github.com/ranvir7/neoprint/blob/main/src/behavior/index.ts"
click node_session "https://github.com/ranvir7/neoprint/blob/main/src/session/index.ts"
click node_lifecycle "https://github.com/ranvir7/neoprint/blob/main/src/lifecycle/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_collector_set,node_canvas,node_webgl,node_other_collectors toneBlue
class node_api,node_engine,node_protocol,node_worker,node_hash,node_stable_id,node_weighted_id,node_cross_id,node_browser_store toneAmber
class node_quality,node_spoofing,node_bot,node_environment,node_compare,node_extras toneMint
class node_behavior,node_session,node_lifecycle toneRose
class node_client toneIndigo
```

## Components

### Signal capture

- [Built-in collectors](https://github.com/ranvir7/neoprint/blob/main/src/collectors/index.ts): `src/collectors/index.ts`
- [Canvas signal](https://github.com/ranvir7/neoprint/blob/main/src/collectors/canvas.ts): `src/collectors/canvas.ts`
- [WebGL signals](https://github.com/ranvir7/neoprint/blob/main/src/collectors/webgl.ts): `src/collectors/webgl.ts`
- [Device signals](https://github.com/ranvir7/neoprint/tree/main/src/collectors): `src/collectors`

### Identity engine

- [Public API](https://github.com/ranvir7/neoprint/blob/main/src/index.ts): `src/index.ts`
- [Collection engine](https://github.com/ranvir7/neoprint/blob/main/src/core/engine.ts): `src/core/engine.ts`
- [Protocol filter](https://github.com/ranvir7/neoprint/blob/main/src/analysis/protocol.ts): `src/analysis/protocol.ts`
- [Worker runner](https://github.com/ranvir7/neoprint/blob/main/src/core/worker-runner.ts): `src/core/worker-runner.ts`
- [Fingerprint hashing](https://github.com/ranvir7/neoprint/blob/main/src/core/hash.ts): `src/core/hash.ts`
- [Stable ID](https://github.com/ranvir7/neoprint/blob/main/src/analysis/stable-id.ts): `src/analysis/stable-id.ts`
- [Weighted ID](https://github.com/ranvir7/neoprint/blob/main/src/analysis/weighted-id.ts): `src/analysis/weighted-id.ts`
- [Cross-browser ID](https://github.com/ranvir7/neoprint/blob/main/src/analysis/cross-browser.ts): `src/analysis/cross-browser.ts`

### Fingerprint intelligence

- [Confidence and entropy](https://github.com/ranvir7/neoprint/tree/main/src/analysis): `src/analysis`
- [Spoofing checks](https://github.com/ranvir7/neoprint/blob/main/src/analysis/inconsistency.ts): `src/analysis/inconsistency.ts`
- [Bot detection](https://github.com/ranvir7/neoprint/blob/main/src/analysis/bot.ts): `src/analysis/bot.ts`
- [Environment profile](https://github.com/ranvir7/neoprint/blob/main/src/analysis/environment.ts): `src/analysis/environment.ts`
- [Fuzzy comparison](https://github.com/ranvir7/neoprint/blob/main/src/analysis/compare.ts): `src/analysis/compare.ts`
- [Risk and signal checks](https://github.com/ranvir7/neoprint/tree/main/src/analysis): `src/analysis`

### Behavior and continuity

- [Behavioral biometrics](https://github.com/ranvir7/neoprint/blob/main/src/behavior/index.ts): `src/behavior/index.ts`
- [Session linking](https://github.com/ranvir7/neoprint/blob/main/src/session/index.ts): `src/session/index.ts`
- [Fingerprint lifecycle](https://github.com/ranvir7/neoprint/blob/main/src/lifecycle/index.ts): `src/lifecycle/index.ts`

### Other components

- **Library caller**
- **Browser storage**

## Connections

- Library caller → Public API: calls
- Public API → Built-in collectors: registers
- Public API → Collection engine: collects
- Built-in collectors → Collection engine: provides collectors
- Collection engine → Protocol filter: filters names
- Collection engine → Canvas signal: invokes collector
- Collection engine → WebGL signals: invokes collector
- Collection engine → Device signals: invokes collectors
- Collection engine → Worker runner: checks availability
- Collection engine → Fingerprint hashing: hashes components
- Collection engine → Stable ID: computes ID
- Collection engine → Weighted ID: computes ID
- Collection engine → Cross-browser ID: computes ID
- Public API → Spoofing checks: analyzes components
- Public API → Confidence and entropy: scores components
- Public API → Bot detection: detects bots
- Public API → Environment profile: profiles environment
- Public API → Fuzzy comparison: compares fingerprints
- Public API → Risk and signal checks: exposes analysis
- Public API → Behavioral biometrics: starts collection
- Public API → Session linking: creates linker
- Public API → Fingerprint lifecycle: exposes lifecycle
- Session linking → Browser storage: reads and writes
- Fingerprint lifecycle → Browser storage: persists history
