Skip to content

uaParser

"Mozilla/5.0 (Windows NT..." — let's find out what that actually means.

What is it?

uaParser decodes User-Agent strings into structured info: browser name, OS, device type. Useful for analytics, logging, or tailoring responses based on whether someone's on mobile or desktop.

Access it as modules.uaParser.


How to use

Pass a User-Agent string, get a structured object:

let ua = modules.uaParser.parse(
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
)
// {
//   browser: { name: "Chrome", version: "120.0.0.0", major: "120" },
//   os: { name: "Windows", version: "10" },
//   device: { model: "", type: "", vendor: "" }
// }

Sync — no await needed.


Methods

Method Returns Description
parse(uaString) object Parse a User-Agent into browser, OS, and device
setUA(uaString) UAParser Set UA on an instance (advanced usage)

Parsed object shape

Field Description
browser.name Browser name (Chrome, Firefox, Safari, …)
browser.version Full version string
browser.major Major version number
os.name Operating system (Windows, macOS, Android, …)
os.version OS version
device.model Device model (often empty on desktop)
device.type "mobile", "tablet", or "" for desktop
device.vendor Device manufacturer

Try it

Log visitor info from a webhook

Bot replies in chat. The User-Agent is often in the request headers:

let uaString = request.headers["user-agent"] || ""
let ua = modules.uaParser.parse(uaString)

let summary = [
  "Browser: " + (ua.browser.name || "Unknown"),
  "OS: " + (ua.os.name || "Unknown"),
  "Device: " + (ua.device.type || "desktop")
].join("\n")

Bot.sendMessage("Visitor info:\n" + summary)

Customize message for mobile users

let ua = modules.uaParser.parse(request.headers["user-agent"] || "")

if (ua.device.type === "mobile") {
  Bot.sendMessage("Tip: open our mini-app for the best mobile experience.")
} else {
  Bot.sendMessage("Welcome! Use /help to get started.")
}

Store analytics in db

let ua = modules.uaParser.parse(request.headers["user-agent"] || "")

db.bot.set("analytics/last_visit", {
  browser: ua.browser.name,
  os: ua.os.name,
  device: ua.device.type || "desktop",
  user: user.id,
  at: Date.now()
})

Notes

  • Sync — no await needed
  • Device fields are often empty for desktop browsers — that's normal
  • User-Agent strings can be spoofed; don't rely on them for security decisions
  • Official package: ua-parser-js on npm