{"id":13396567,"url":"https://github.com/faisalman/ua-parser-js","last_synced_at":"2026-10-18T22:23:11.101Z","repository":{"id":2357385,"uuid":"3320710","full_name":"faisalman/ua-parser-js","owner":"faisalman","description":"UAParser.js: The Essential Web Development Tool for User-Agent Detection. Detect Browsers, OS, Devices, Bots, Apps, AI Crawlers, and more. Run in Browser or Node","archived":false,"fork":false,"pushed_at":"2026-09-29T05:34:12.000Z","size":21384,"stargazers_count":10202,"open_issues_count":17,"forks_count":1213,"subscribers_count":131,"default_branch":"master","last_synced_at":"2026-10-17T23:19:08.095Z","etag":null,"topics":["analytics","bot-detection","browser-detection","client-hints","device-detection","mobile-detection","user-agent","user-agent-parser"],"latest_commit_sha":null,"homepage":"https://uaparser.dev/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faisalman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/funding.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","accessibility":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"faisalman","patreon":null,"open_collective":"ua-parser-js","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.paypal.me/faisalman/","https://uaparser.dev"]}},"created_at":"2012-02-01T01:11:49.000Z","updated_at":"2026-10-17T11:49:40.000Z","dependencies_parsed_at":"2026-10-03T06:36:26.586Z","dependency_job_id":null,"html_url":"https://github.com/faisalman/ua-parser-js","commit_stats":{"total_commits":952,"total_committers":158,"mean_commits":6.025316455696203,"dds":0.5903361344537815,"last_synced_commit":"d024fe20067fa09d8292d920ab0fd795be3b422a"},"previous_names":[],"tags_count":122,"template":false,"template_full_name":null,"purl":"pkg:github/faisalman/ua-parser-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalman%2Fua-parser-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalman%2Fua-parser-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalman%2Fua-parser-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalman%2Fua-parser-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faisalman","download_url":"https://codeload.github.com/faisalman/ua-parser-js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalman%2Fua-parser-js/sbom","scorecard":{"id":165379,"data":{"date":"2024-03-19","repo":{"name":"github.com/faisalman/ua-parser-js","commit":"a43d6595777b5caa510ddf198497187464f7d5f8"},"scorecard":{"version":"v4.10.2","commit":"376f465c111c39c6a5ad7408e8896cd790cb5219"},"score":8.1,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":2,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'force pushes' disabled on branch 'master'","Info: 'allow deletion' disabled on branch 'master'","Warn: settings do not apply to administrators on branch 'master'","Info: status checks require up-to-date branches for 'master'","Warn: 'last push approval' disabled on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Warn: number of required reviewers is only 1 on branch 'master'","Info: stale review dismissal enabled on branch 'master'","Warn: codeowner review is not required on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":8,"reason":"4 out of 5 merged PRs checked by a CI test -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":1,"reason":"5 out of last 30 changesets reviewed before merge -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"14 different organizations found -- score normalized to 10","details":["Info: contributors work for MetaParticle,SpongePowered,WirVsVirus-Hackathon-Corona-Calendar,appmotion,clio-lang,coderwall-beaver,coderwall-lemmings100,cyberssl,google,hflabs,iCasa,kivra ab,starship,texas-robocamp"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: Dependabot detected"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":10,"reason":"project is fuzzed with [OSSFuzz]","details":null,"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE.md:1","Info: FSF or OSI recognized license: LICENSE.md:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"11 commit(s) out of 30 and 4 issue activity out of 30 found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#maintained"}},{"name":"Packaging","score":10,"reason":"publishing workflow detected","details":["Info: GitHub publishing workflow used in run https://api.github.com/repos/faisalman/ua-parser-js/actions/runs/7736637718: .github/workflows/publish-npm-packages.yml:8"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/analysis-codeql.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/analysis-codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/analysis-codeql.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/analysis-codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/analysis-codeql.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/analysis-codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/analysis-dependency.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/analysis-dependency.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/analysis-dependency.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/analysis-dependency.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-github-packages.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-github-packages.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-github-packages.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-github-packages.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-npm-packages.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-npm-packages.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-npm-packages.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-npm-packages.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ci.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/test-ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ci.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/test-ci.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/publish-npm-packages.yml:20","Info: Third-party GitHubActions are pinned","Info: Dockerfile dependencies are pinned","Info: no insecure (not pinned by hash) dependency downloads found in Dockerfiles","Info: no insecure (not pinned by hash) dependency downloads found in shell scripts"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commmits","details":["Warn: 0 commits out of 5 are checked with a SAST tool","Info: SAST tool detected: CodeQL"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: Found linked content in security policy: SECURITY.md","Info: Found text in security policy: SECURITY.md","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md","Info: security policy detected in current repo: SECURITY.md"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":["Warn: no GitHub releases found"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":9,"reason":"non read-only tokens detected in GitHub workflows","details":["Info: topLevel permissions set to 'read-all': .github/workflows/analysis-codeql.yml:23","Info: jobLevel 'contents' permission set to 'read': .github/workflows/analysis-codeql.yml:31","Info: jobLevel 'actions' permission set to 'read': .github/workflows/analysis-codeql.yml:30","Info: topLevel 'contents' permission set to 'read': .github/workflows/analysis-dependency.yml:11","Info: topLevel permissions set to 'read-all': .github/workflows/analysis-scorecard.yml:18","Warn: no topLevel permission defined: .github/workflows/publish-github-packages.yml:1: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-github-packages.yml/master?enable=permissions","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-github-packages.yml:11","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/publish-github-packages.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-github-packages.yml/master?enable=permissions","Warn: no topLevel permission defined: .github/workflows/publish-npm-packages.yml:1: update your workflow using https://app.stepsecurity.io/secureworkflow/faisalman/ua-parser-js/publish-npm-packages.yml/master?enable=permissions","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-npm-packages.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/test-ci.yml:6"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":-1,"reason":"internal error: vulnerabilitiesClient.ListUnfixedVulnerabilities: osvscanner.DoScan: vulnerabilities found","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/376f465c111c39c6a5ad7408e8896cd790cb5219/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T14:40:06.884Z","repository_id":2357385,"created_at":"2025-08-16T14:40:06.884Z","updated_at":"2025-08-16T14:40:06.884Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38336092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-17T02:00:06.547Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","bot-detection","browser-detection","client-hints","device-detection","mobile-detection","user-agent","user-agent-parser"],"created_at":"2024-07-30T18:00:57.048Z","updated_at":"2026-10-18T22:23:11.095Z","avatar_url":"https://github.com/faisalman.png","language":"JavaScript","funding_links":["https://github.com/sponsors/faisalman","https://opencollective.com/ua-parser-js","https://www.paypal.me/faisalman/","https://uaparser.dev","https://paypal.me/faisalman"],"categories":["http","JavaScript","Packages","analytics","Grouping","目录","Utilities","Daftar Proyek","Code \u0026 Developer Tools"],"sub_categories":["Browser related","Library","React Components","Data","Text Processing"],"readme":"\u003cp\u003e\u003ca href=\"https://uaparser.dev\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/uap-header.png\" alt=\"UAParser.js\" width=\"100%\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://uaparser.dev\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/a626166c-17cc-45e3-8ff6-d7e948a5ded0\" alt=\"UAParser.js\" width=\"33%\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://uaparser.dev\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/50da50fc-7c8a-46e3-a2bc-6a8249914372\" alt=\"UAParser.js\" width=\"33%\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://uaparser.dev\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/9f2aaff0-a9b4-4ac9-bdf3-eea8081a2582\" alt=\"UAParser.js\" width=\"33%\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# UAParser.js\n\nPowerful User-Agent detection in a compact, ES5-friendly, dependency-free JavaScript library.\n\n* ✅ **Comprehensive detection**: Identify various kind of browsers, OS, devices, bots, apps, AI crawlers, and more\n* ✅ **Battle-tested at scale**: Backed by an actively maintained, extensive detection database, trusted by leading tech companies\n* ✅ **Runs everywhere**: Use seamlessly in browsers, Node.js, and modern JavaScript runtimes\n\n# Demo\n\n  * Live demo: https://uaparser.dev\n\n# Documentation\n\n  * `version 1.x` : https://docs.uaparser.dev/v1\n  * `version 2.x` : https://docs.uaparser.dev\n\nBefore upgrading from `v0.7` / `v1.0`, please read [CHANGELOG](CHANGELOG.md) to see what's new \u0026 breaking.\n\n# Package Options\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003e\u003c/th\u003e\n            \u003cth colspan=\"2\"\u003eOpen-Source Editions\u003c/th\u003e\n            \u003cth colspan=\"3\"\u003ePRO / Commercial Editions\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eLicense options\u003c/td\u003e\n            \u003ctd\u003eMIT (v1.x)\u003c/td\u003e\n            \u003ctd\u003eAGPL (v2.x)\u003c/td\u003e\n            \u003ctd\u003ePRO Personal\u003c/td\u003e\n            \u003ctd\u003ePRO Business\u003c/td\u003e\n            \u003ctd\u003ePRO Enterprise\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eBrowser Detection\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Basic detection\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eCPU Detection\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Basic detection\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eDevice Detection\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Basic detection\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eRendering Engine Detection\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Basic detection\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eOS detection\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Basic detection\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eEnhanced+ Accuracy\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eBot Detection\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eAI Detection\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eExtra Detections (Apps, Libs, Emails, Media Players, Crawlers, and more)\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eClient Hints Support\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eCommonJS Support\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eESM Support\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eTypeScript Definitions\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"#demo\" title=\"Community version\"\u003e✅\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003enpm Module Available\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eDirect Downloads Available\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eCommercial Use Allowed\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003ePermissive (non-Copyleft) License\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"Copyleft license\"\u003e❌\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eNo Open-Source Obligations\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"Copyleft license\"\u003e❌\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eUnlimited End-Products\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"1 end-product per license\"\u003e❌\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eUnlimited Deployments\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"1 TLD or deliverable per license\"\u003e❌\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e1-year Product Support\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e❌\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eLifetime Updates\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n            \u003ctd\u003e✅\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003ePrice\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"Pay as you want\"\u003eFREE\u003csup\u003e*\u003c/sup\u003e (\u003ca target=\"_blank\" href=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/1.0.x/license.md\"\u003eLicense\u003c/a\u003e)\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"Pay as you want\"\u003eFREE\u003csup\u003e*\u003c/sup\u003e (\u003ca target=\"_blank\" href=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/master/LICENSE.md\"\u003eLicense\u003c/a\u003e)\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"$14 (one-time fee)\"\u003e$14 (\u003ca target=\"_blank\" href=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/pro-personal/LICENSE.md\"\u003eLicense\u003c/a\u003e)\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"$29 (one-time fee)\"\u003e$29 (\u003ca target=\"_blank\" href=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/pro-business/LICENSE.md\"\u003eLicense\u003c/a\u003e)\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cstrong title=\"$599 (one-time fee)\"\u003e$599 (\u003ca target=\"_blank\" href=\"https://raw.githubusercontent.com/faisalman/ua-parser-js/pro-enterprise/LICENSE.md\"\u003eLicense\u003c/a\u003e)\u003c/strong\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n    \u003ctfoot\u003e\n        \u003ctr\u003e\n            \u003cth align=\"right\" colspan=\"6\"\u003e\n                \u003ch3\u003e\u003ca target=\"_blank\" href=\"https://uaparserjs.lemonsqueezy.com/buy/e236ea87-9b2b-400e-9683-24367f731b35\"\u003e GET THE PRO PACKAGES 📥\u003c/a\u003e\u003c/h3\u003e\n            \u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/tfoot\u003e\n\u003c/table\u003e\n\n## NEW: Managed REST API\n\nSkip the installation, use the User-Agent API in any application:\n\n\u003ca href=\"https://uaparser.dev/#rest-api\"\u003e\u003cimg src=\"https://uaparser.dev/images/uap-cloud-api.png\" width=\"50%\"\u003e\u003c/a\u003e\n\n* ✅ **Works everywhere**: Integrate with JavaScript, Python, PHP, Java, or any HTTP client\n* ✅ **Production-ready**: Powered by UAParser.js and continuously updated\n* ✅ **Zero maintenance**: We manage the packages, parser updates, device data, and infrastructure for you\n\nLearn more and start building at [uaparser.dev/#rest-api](https://uaparser.dev/#rest-api)\n\n# Development\n\n## Contributors\n\nThis project wouldn't be possible without all the amazing people in the open-source community. Thanks to everyone who contributed, reported issues, and shared feedback.\n\n\u003ca href=\"https://github.com/faisalman/ua-parser-js/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=faisalman/ua-parser-js\" /\u003e\n\u003c/a\u003e\n\nMade with [contributors-img](https://contrib.rocks).\n\nContributions are welcome! Please read the [CONTRIBUTING GUIDE](CONTRIBUTING.md) first for detailed contribution instructions.\n\n## Backers \u0026 Sponsors\n\n\u003ca href=\"https://opencollective.com/ua-parser-js\"\u003e\u003cimg src=\"https://opencollective.com/ua-parser-js/organizations.svg?avatarHeight=64\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/ua-parser-js\"\u003e\u003cimg src=\"https://opencollective.com/ua-parser-js/individuals.svg?avatarHeight=64\"\u003e\u003c/a\u003e\n\nSupport the **open-source editions** of UAParser.js through one of the following options:\n\n[![OpenCollective](https://img.shields.io/badge/OpenCollective-dddddd?style=for-the-badge\u0026logo=opencollective\u0026color=dddddd\n)](https://opencollective.com/ua-parser-js)\n[![GitHub Sponsors](https://img.shields.io/badge/GitHub_Sponsors-333333?style=for-the-badge\u0026logo=githubsponsors\u0026color=333333\n)](https://github.com/sponsors/faisalman)\n[![PayPal](https://img.shields.io/badge/Paypal-003087?style=for-the-badge\u0026logo=paypal\u0026color=003087\n)](https://paypal.me/faisalman)\n[![WeChat/Alipay](https://img.shields.io/badge/Other_Payment_Methods-Including_Alipay_/_WeChat_Pay-09b83e?style=for-the-badge\u0026logo=mastercard\u0026color=09b83e\n)](https://uaparserjs.lemonsqueezy.com/checkout/buy/3d71f2f3-cf4d-473c-892a-9d4497c890be)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaisalman%2Fua-parser-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaisalman%2Fua-parser-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaisalman%2Fua-parser-js/lists"}