In this page
GreyCat User-Agent Library
@library("useragent", "0.0.0");
HTTP User-Agent string parser for GreyCat. Extracts browser, operating system, and device information from User-Agent headers — useful for web analytics, compatibility detection, and device-specific content delivery.
Quick Start
var ua = UserAgent::parse(
"Mozilla/5.0 (Linux; Android 4.4.2; QMV7A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36"
);
info("Browser: ${ua.browserFamily} ${ua.browserMajor}.${ua.browserMinor}"); // Chrome 36.0
info("OS: ${ua.osFamily} ${ua.osMajor}.${ua.osMinor}.${ua.osPatch}"); // Android 4.4.2
info("Device: ${ua.deviceBrand} ${ua.deviceFamily}"); // Generic_Android_Tablet QMV7A
API Reference
UserAgent
Parsed User-Agent information containing browser, OS, and device details.
Static Methods:
| Method | Returns | Description |
|---|---|---|
UserAgent::parse(userAgent) |
UserAgent |
Parse a User-Agent string into its components |
Browser Fields:
| Field | Type | Example | Description |
|---|---|---|---|
browserFamily |
String? |
"Chrome" |
Browser name |
browserMajor |
String? |
"36" |
Major version |
browserMinor |
String? |
"0" |
Minor version |
browserPatch |
String? |
"1985" |
Patch version |
OS Fields:
| Field | Type | Example | Description |
|---|---|---|---|
osFamily |
String? |
"Android" |
Operating system name |
osMajor |
String? |
"4" |
Major version |
osMinor |
String? |
"4" |
Minor version |
osPatch |
String? |
"2" |
Patch version |
osPatchMinor |
String? |
null |
Minor patch version |
Device Fields:
| Field | Type | Example | Description |
|---|---|---|---|
deviceFamily |
String? |
"QMV7A" |
Device name |
deviceBrand |
String? |
"Generic_Android_Tablet" |
Device brand or category |
deviceModel |
String? |
"QMV7A" |
Device model identifier |
All fields are nullable — values are null when the parser cannot extract them from the User-Agent string.
Examples
Parsing Different User-Agents
// Android tablet
var ua = UserAgent::parse(
"Mozilla/5.0 (Linux; Android 4.4.2; QMV7A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36"
);
Assert::equals(ua.browserFamily, "Chrome");
Assert::equals(ua.browserMajor, "36");
Assert::equals(ua.browserMinor, "0");
Assert::equals(ua.browserPatch, "1985");
Assert::equals(ua.osFamily, "Android");
Assert::equals(ua.osMajor, "4");
Assert::equals(ua.osMinor, "4");
Assert::equals(ua.osPatch, "2");
Assert::equals(ua.osPatchMinor, null);
Assert::equals(ua.deviceFamily, "QMV7A");
Assert::equals(ua.deviceBrand, "Generic_Android_Tablet");
Assert::equals(ua.deviceModel, "QMV7A");
Web Analytics — Counting Browsers
fn trackUserAgent(raw: String, browserCounts: Map<String, int>) {
var ua = UserAgent::parse(raw);
var browser = ua.browserFamily ?? "Unknown";
browserCounts.set(browser, (browserCounts.get(browser) ?? 0) + 1);
}
Device-Specific Logic
fn isMobile(raw: String): bool {
var ua = UserAgent::parse(raw);
var os = ua.osFamily ?? "";
return os == "Android" || os == "iOS";
}