Sigra.UAParser (Sigra v1.20.0)

Copy Markdown View Source

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

parsed()

@type parsed() :: %{
  browser: String.t(),
  browser_version: String.t() | nil,
  os: String.t()
}

Functions

friendly_name(map)

(since 0.1.0)
@spec friendly_name(parsed()) :: String.t()

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"

parse(ua)

(since 0.1.0)
@spec parse(String.t() | nil) :: parsed()

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"}