Lightweight user-agent string parser.
Extracts browser name, version, and operating system from User-Agent header strings using regex matching. Designed for session display ("Chrome 120 on macOS") rather than comprehensive UA analysis.
Supported Browsers
Edge, Opera, Samsung Internet, Chrome (including CriOS on iOS), Firefox, Safari. Match order is significant: Edge and Opera are checked before Chrome since their UA strings contain "Chrome".
Supported Operating Systems
iOS, Android, Chrome OS, macOS, Windows, Linux.
Summary
Functions
Returns a human-readable name from a parsed user-agent map.
Parses a user-agent string into a structured map.
Types
Functions
Returns a human-readable name from a parsed user-agent map.
Examples
iex> Sigra.UAParser.friendly_name(%{browser: "Chrome", browser_version: "120", os: "macOS"})
"Chrome 120 on macOS"
iex> Sigra.UAParser.friendly_name(%{browser: "Unknown", browser_version: nil, os: "Unknown"})
"Unknown browser"
Parses a user-agent string into a structured map.
Returns %{browser: String.t(), browser_version: String.t() | nil, os: String.t()}.
Returns %{browser: "Unknown", browser_version: nil, os: "Unknown"} for
nil, empty, or unrecognized input.
Examples
iex> Sigra.UAParser.parse("Mozilla/5.0 ... Chrome/120.0.0.0 Safari/537.36")
%{browser: "Chrome", browser_version: "120", os: ...}
iex> Sigra.UAParser.parse(nil)
%{browser: "Unknown", browser_version: nil, os: "Unknown"}