[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3621":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":24,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":38,"readmeContent":39,"aiSummary":40,"trendingCount":15,"starSnapshotCount":15,"syncStatus":41,"lastSyncTime":42,"discoverSource":43},3621,"fingerprintjs","fingerprintjs\u002Ffingerprintjs","The most advanced free and open-source browser fingerprinting library","https:\u002F\u002Ffingerprint.com\u002Fgithub\u002F",null,"TypeScript",27282,2536,424,17,0,5,36,191,27,108,"MIT License",false,"master",true,[26,27,28,29,30,31,32,5,33,34,35,36,37],"audio-fingerprinting","browser","browser-fingerprint","browser-fingerprinting","detection","fingerprint","fingerprinting","fraud","fraud-detection","identification","javascript","visitor-identifier","2026-06-12 04:00:18","\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ffingerprint.com\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"resources\u002Flogo_light.svg\" \u002F>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"resources\u002Flogo_dark.svg\" \u002F>\n      \u003Cimg src=\"resources\u002Flogo_dark.svg\" alt=\"FingerprintJS logo\" width=\"312px\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Factions\u002Fworkflows\u002Ftest.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Factions\u002Fworkflows\u002Ftest.yml\u002Fbadge.svg\" alt=\"Build status\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@fingerprintjs\u002Ffingerprintjs\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@fingerprintjs\u002Ffingerprintjs.svg\" alt=\"Current NPM version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@fingerprintjs\u002Ffingerprintjs\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002F@fingerprintjs\u002Ffingerprintjs.svg\" alt=\"Monthly downloads from NPM\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.jsdelivr.com\u002Fpackage\u002Fnpm\u002F@fingerprintjs\u002Ffingerprintjs\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fjsdelivr\u002Fnpm\u002Fhm\u002F@fingerprintjs\u002Ffingerprintjs.svg\" alt=\"Monthly downloads from jsDelivr\">\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F39EpE2neBg\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F852099967190433792?style=for-the-badge&label=Discord&logo=Discord&logoColor=white&color=5865F2\" alt=\"Discord server\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nFingerprintJS is an open-source, client-side, 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\u002Fprivate mode and even when browser data is purged.\n\nFingerprintJS is available under the [MIT license](docs\u002Flicensing.md).\n\n## Demo\n\nVisit [https:\u002F\u002Ffingerprintjs.github.io\u002Ffingerprintjs](https:\u002F\u002Ffingerprintjs.github.io\u002Ffingerprintjs) to see your visitor identifier.\n\nNow, try visiting the same page in private\u002Fincognito mode and notice that the visitor identifier remains the **same**!\n\n## Installation\n\n### npm\n\n```bash\nnpm install @fingerprintjs\u002Ffingerprintjs\n```\n\n```jsx\nimport FingerprintJS from '@fingerprintjs\u002Ffingerprintjs'\n\n\u002F\u002F Initialize the agent at application startup.\nconst fpPromise = FingerprintJS.load();\n\n(async () => {\n  \u002F\u002F Get the visitor identifier when you need it.\n  const fp = await fpPromise\n  const result = await fp.get()\n  console.log(result.visitorId)\n})()\n```\n\n### CDN\n\n```html\n\u003Cscript>\n  \u002F\u002F Initialize the agent at application startup.\n  \u002F\u002F If you're using an ad blocker or Brave\u002FFirefox, this import will not work.\n  \u002F\u002F Please use the npm package instead: https:\u002F\u002Ft.ly\u002FORyXk\n  const fpPromise = import('https:\u002F\u002Fopenfpcdn.io\u002Ffingerprintjs\u002Fv5')\n    .then(FingerprintJS => FingerprintJS.load());\n\n  (async () => {\n    \u002F\u002F Get the visitor identifier when you need it.\n    const fp = await fpPromise\n    const result = await fp.get()\n    console.log(result.visitorId)\n  })()\n\u003C\u002Fscript>\n```\n\n[Run this code](https:\u002F\u002Fstackblitz.com\u002Fedit\u002Ffpjs-5-cdn?file=index.html&devtoolsheight=100)\n\n### Resources\n\n📕 [API Reference](docs\u002Fapi.md)\n\n⚛️ [Sample usage with React on the StackBlitz platform](https:\u002F\u002Fstackblitz.com\u002Fedit\u002Ffingerprintjs-react-demo)\n\n🔑 [FingerprintJS Licensing](docs\u002Flicensing.md)\n\n## Limitations\n\n### Accuracy\n\nSince FingerprintJS processes and generates fingerprints in the browser itself, the accuracy is significantly lower than in the [commercial version](https:\u002F\u002Ffingerprint.com\u002Fpricing)\n\n### Security\n\nBecause fingerprints are generated and processed in the browser, they are vulnerable to spoofing and reverse engineering.\n\n## Want higher accuracy? Upgrade to Fingerprint Identification for free\n\nFingerprintJS is great for getting started, but if you need production-grade accuracy for web or mobile, consider [**Fingerprint Identification**](https:\u002F\u002Ffingerprint.com\u002Fproducts\u002Fidentification\u002F). You can [**sign up for a free account**](https:\u002F\u002Fdashboard.fingerprint.com\u002Fsignup) to get started.\n\nFingerprint Identification is a **closed-source, commercial** device intelligence platform designed to prevent fraud and improve user experiences. It's an enhanced version of FingerprintJS, fully redesigned to solve the most challenging identification use cases. Unlike FingerprintJS, it combines client-side signal collection with server-side processing. It collects over 100 browser and device signals, which are then analyzed server-side alongside network-level data, including signals that are entirely invisible to the browser, allowing it to reliably deduplicate visitors with identical devices. This server-side processing also validates that signals have not been tampered with or replayed, and generates a stable visitor identifier with **industry-leading accuracy** that is significantly harder to spoof than a purely client-side fingerprint.\n\nUpgrading for free also unlocks access to the [Fingerprint MCP Server](https:\u002F\u002Fdocs.fingerprint.com\u002Fdocs\u002Fmcp-server), letting your AI coding assistant build and interact directly with Fingerprint. To access [Smart Signals](https:\u002F\u002Ffingerprint.com\u002Fproducts\u002Fsmart-signals\u002F) (device signals such as bot detection, VPN detection, and browser tampering detection), a 14-day free trial of the full platform is available.\n\nCheck out our [comparison table](docs\u002Fcomparison.md) for a detailed breakdown of the differences between FingerprintJS and Fingerprint Identification.\n\n### Fingerprint Identification resources\n\n🍿 [Fingerprint Identification live demo](https:\u002F\u002Fdemo.fingerprint.com\u002Fplayground)\n\n📕 [Fingerprint Identification documentation](https:\u002F\u002Fdev.fingerprint.com)\n\n▶️ [Video: Use Fingerprint Identification to prevent multiple signups by the same user](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jWX9P5_jZn8)\n\n⏱️ [How to upgrade from FingerprintJS to Fingerprint Identification in 30 seconds](https:\u002F\u002Fdev.fingerprint.com\u002Fdocs\u002Fmigrating-from-fingerprintjs-to-fingerprint-pro)\n\n## Migrating to v5\n\n| Migrating from | Migration Guide | Documentation |\n|----------|-----------|-----------|\n| **v4** | [Migrating from v4 to v5](docs\u002Fmigration\u002Fv4_v5.md) | [v4 documentation](https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Ftree\u002Fv4) |\n| **v3** | [Migrating from v3 to v5](docs\u002Fmigration\u002Fv3_v5.md) | [v3 documentation](https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Ftree\u002Fv3) |\n\n## Version policy\n\nSee the compatibility policy for the API and visitor identifiers in the [version policy guide](docs\u002Fversion_policy.md).\n\n## Supported browsers\n\nThe library supports all popular browsers. See more details and learn how to run the library in old browsers in the [browser support guide](docs\u002Fbrowser_support.md).\n\n## Where to get support\n\nUsing [Issues](https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Fissues) and [Discussions](https:\u002F\u002Fgithub.com\u002Ffingerprintjs\u002Ffingerprintjs\u002Fdiscussions) publicly will help the community and other users with similar issues.\n\nYou can also join our [Discord server](https:\u002F\u002Fdiscord.gg\u002Fad6R2ttHVX) to ask questions, share feedback, and connect with other developers.\n\nIf you require private support for FingerprintJS, please email us at [oss-support@fingerprint.com](mailto:oss-support@fingerprint.com).\n\n## Contributing\n\nSee the [Contribution guidelines](contributing.md) to learn how to contribute to the project or run the project locally.\nPlease read it carefully before making a pull request.\n","FingerprintJS 是一个先进的开源浏览器指纹识别库，使用 TypeScript 编写。它通过查询浏览器属性来计算一个哈希访客标识符，即使在无痕模式或清除浏览器数据后也能保持一致，这是与 cookie 和本地存储的主要区别之一。项目支持多种安装方式，包括 npm 和 CDN，方便集成到不同类型的 Web 应用中。FingerprintJS 适用于需要进行欺诈检测、用户行为分析等场景，尤其是在传统身份验证方法不足以满足需求时。",2,"2026-06-11 02:55:02","top_language"]