Skip to content

Support List

All built-in definitions come from src/constants/ and are strictly consistent with runtime behavior.

Browsers

Detection priority runs from lowest to highest. When multiple rules match the same UA, the one with the highest priority wins. App webviews (WeChat, DingTalk, etc.) have the highest priority to prevent them from being overridden by generic Chrome detection.

General Browsers

BrowserBrowserNamePriority
Apple SafariSafari10
Google Chrome / Chrome iOSChrome20
Microsoft IEIE30
Microsoft Edge (all platforms)Edge40
Mozilla Firefox / Firefox iOSFirefox50
Firefox FocusFirefox Focus55
ChromiumChromium60
OperaOpera70
VivaldiVivaldi80
Yandex BrowserYandex90
Samsung InternetSamsung Internet92
DuckDuckGo BrowserDuckDuckGo94
PuffinPuffin96
Coc Coc (Vietnam)Coc Coc130
Amazon Kindle / SilkKindle140
KonquerorKonqueror160
SeaMonkeySeaMonkey180
EpiphanyEpiphany190
MaxthonMaxthon200

Chinese Browsers

BrowserBrowserNamePriority
360 Browser (mobile)360300
360 Secure Browser360SE310
360 Speed Browser360EE320
UC BrowserUC330
QQ BrowserQQBrowser340
QQ App in-appQQ345
Baidu Browser / Baidu AppBaidu350
Sogou BrowserSogou360
Liebao BrowserLiebao370
2345 Explorer2345Explorer380
115 Browser115Browser390
TheWorld BrowserTheWorld400
Xiaomi MIUI BrowserXiaoMi410
Vivo BrowserVivo420
Huawei BrowserHuawei430
OPPO / OnePlus BrowserOPPO440
Quark BrowserQuark450
Qiyu BrowserQiyu460

App Webviews

AppBrowserNamePriority
WeCom (Enterprise WeChat)WechatWork500
WeChatWechat510
TaobaoTaobao520
AlipayAlipay530
WeiboWeibo540
DoubanDouban550
SuningSuning560
iQiYiiQiYi570
DingTalkDingTalk580
TikTok (Douyin)Douyin590
BilibiliBilibili592
Kuaishou (Kwai)Kuaishou594
Xiaohongshu (RedNote)Xiaohongshu596
Feishu / LarkFeishu597
Toutiao (Today's Headlines)Toutiao598
JD (Pingou)JD599
MeituanMeituan600

Operating Systems

OSOsNameVersion examples
WindowsWindows10, 11, 8.1, 8, 7, Vista, XP, 2000
AndroidAndroid14, 13, 12...
iOSiOS17.4, 16.0...
macOSMacOS10.15.7...
HarmonyOSHarmonyOS2, 3, 4 (mapped from Android version); 5.0.0 (HarmonyOS Next, extracted directly)
OpenHarmonyOpenHarmony4.1, 3.2...
Chrome OSChrome OS
TizenTizen6.0, 5.5... (Samsung Smart TV / wearables)
KaiOSKaiOS2.5, 3.0... (feature phones in developing markets)
LinuxLinux
UbuntuUbuntu
DebianDebian
FreeBSDFreeBSD
Windows PhoneWindows Phone
BlackBerryBlackBerry
MeeGoMeeGo
SymbianSymbian
WebOSWebOS

HarmonyOS version mapping

HarmonyOS 2/3/4 is based on the Android compatibility layer. The UA contains an Android version token that is mapped to the HarmonyOS display version:

Android versionHarmonyOS version
102
113
123
134

HarmonyOS Next (5.0+) UAs do not contain an Android token. The version is extracted directly from HarmonyOS 5.0.0.

Windows NT version mapping

NT versionDisplay version
10.010 (use getWindowsVersion() to distinguish 10/11)
6.38.1
6.28
6.17
6.0Vista
5.2 / 5.1XP
5.02000

Rendering Engines

EngineEngineNameRepresentative browsers
BlinkBlinkChrome 28+, Edge (new), Opera 15+
WebKitWebKitSafari, all iOS browsers
GeckoGeckoFirefox
TridentTridentIE
EdgeHTMLEdgeHTMLEdge (legacy, < 79)
PrestoPrestoOpera (legacy, < 15)
KHTMLKHTMLKonqueror
ArkWebArkWebHarmonyOS Next built-in rendering engine (explicit token only)

Blink upgrade

Before Chrome 28, the engine was WebKit. When Chrome 28+ is detected, the engine is automatically upgraded to Blink.

ArkWeb

ArkWeb is only returned when the UA string explicitly contains the ArkWeb token. HarmonyOS Next UAs without the token are correctly identified as Blink (Chromium-based).


Device Types

TypeDeviceNameDetection rule
MobileMobileUA contains Mobi or iPh
TabletTabletUA contains iPad, Tablet, or Pad; Android without Mobile marker; iPadOS (MacIntel + touch points > 1)
Smart TVTVUA contains SMART-TV, HbbTV, SmartTV, Android TV, or GoogleTV
DesktopPCNone of the above

CPU Architecture

As of v1.1.0, a four-layer priority chain is used. Earlier layers take precedence:

LayerSignal sourceCoverage
1UA Client Hints (navigator.userAgentData)Chrome / Edge — precise
2WebGL renderer stringResolves Apple Silicon vs Intel Mac
3navigator.platform inferenceSynchronous; covers iPhone / iPad / Linux aarch64
4UA string pattern matchingFallback — same as v1.0 behaviour

Output values:

ArchitectureArchNameCommon UA / signal markers
ARM 64-bitarm64Client Hints arm/64; WebGL Apple M1/M2/A15; platform iPhone/iPad; UA aarch64, arm64
ARM 32-bitarmClient Hints arm/32; platform arm; UA ARM
x86 64-bitx86_64Client Hints x86/64; WebGL Intel/AMD/NVIDIA; platform Win64; UA x86_64, WOW64
x86 32-bitx86Client Hints x86/32; platform Win32; UA i686
UnknownunknownNo match in any layer

Bots / Crawlers

Search Engine Bots

BotBotNameOwner
GooglebotGooglebotGoogle
Bingbot / BingPreviewBingbotMicrosoft
BaiduspiderBaiduspiderBaidu
BytespiderBytespiderByteDance
YandexBotYandexBotYandex
DuckDuckBotDuckDuckBotDuckDuckGo
SlurpSlurpYahoo
Sogou SpiderSogouSogou
360Spider360Spider360
PetalBotPetalBotHuawei
ApplebotApplebotApple

AI / LLM Crawlers

BotBotNameOwner
GPTBotGPTBotOpenAI
ClaudeBotClaudeBotAnthropic
PerplexityBotPerplexityBotPerplexity AI
CCBotCCBotCommon Crawl
AdsBot-GoogleAdsBotGoogle Ads

Social Media Crawlers

BotBotNameOwner
facebookexternalhit / FacebookBotFacebookbotMeta
TwitterbotTwitterbotX (Twitter)
LinkedInBotLinkedInBotLinkedIn

SEO Tool Crawlers

BotBotNameOwner
SemrushBotSemrushBotSemrush
AhrefsBotAhrefsBotAhrefs
MJ12botMJ12botMajestic

Generic Fallback

Any UA containing bot, crawler, spider, crawling, or scraper (case-insensitive) is identified as GenericBot.


Headless / Automated Browsers

The following UA markers cause isHeadless to return true:

MarkerScenario
HeadlessChromeChrome launched with --headless
HeadlessGeneric headless marker
PhantomJSPhantomJS
Electron/Electron apps
PlaywrightPlaywright automation
jsdom/Node.js DOM simulation (Jest / Vitest environments)
SeleniumSome Selenium / WebDriver configurations

Note

Cypress and WebdriverIO do not modify the UA by default and cannot be detected at the UA level. Modern stealth libraries (e.g. puppeteer-stealth) can bypass all of the above markers — this detection only covers common unmodified setups.


Runtime Browser Compatibility

This section describes which browsers can run ua-browser itself — separate from which browsers it can detect.

Core functions

parseUA(), detectBrowser(), detectOs() and all other synchronous detection functions are pure regex operations with no browser API dependencies. They run in any modern JS environment (browser, Node.js, Deno, SSR).

Build output JS syntax

FeatureSourceBuild output (target: es2018)
Optional chaining ?.Transpiled to (x == null ? void 0 : x.y)
Nullish coalescing ??Transpiled to equivalent ES5 form
async / awaitKept as-is (ES2017, within es2018 target)

Minimum syntax compatibility: Chrome 63 / Safari 12 / Firefox 55 / Edge 79 (Chromium)

getEnvContext() API compatibility

APIChromeSafariFirefoxEdgeNotes
canvas + measureText9+3.1+3.5+12+Font probes for OS confirmation
WebGL renderer9+8+4+12+Resolves Apple Silicon vs Intel Mac
window.matchMedia9+5.1+6+12+Pointer / hover capability
navigator.hardwareConcurrency37+10.1+48+15+CPU core count
navigator.deviceMemory63+79+Memory size, Chrome-only
userAgentData.getHighEntropyValues90+90+UA Client Hints — most accurate arch source

Graceful degradation

All DOM API calls are wrapped in try/catch and typeof window !== 'undefined' guards. APIs unavailable in Safari or Firefox are silently skipped. getEnvContext() never throws in any environment.

parseHeaders() compatibility

Pure server-side function with no browser API dependencies. Client Hints headers (Sec-CH-UA-Arch, etc.) are only sent automatically by Chrome / Edge 90+. Safari and Firefox do not send them; in those cases arch and other fields fall back to UA string matching.

Released under the MIT License.