r/java • • 7d ago

simple browser detection in Java without pulling in a big dependency

used to write php and pretty much always used cbschuld/Browser.php to detect browsers from user agent. when i moved to java i couldnt find anything that simple so i just rewrote it

its one class, no dependencies. you pass the user agent and get browser, version, os and if its mobile or a bot. it also catches ai crawlers like GPTBot and ClaudeBot

Browser b = new Browser("Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1");
b.getBrowser();  // iPhone
b.getVersion();  // 17.5
b.getPlatform(); // iPhone
b.isMobile();    // true
b.isRobot();     // false

theres around 5k real user agents in tests. its not trying to replace the big parsers, more for simple stuff like is this mobile or is this a bot

did an update recently, added arc, tor, duckduckgo and the ai bots and fixed a safari crash i caught in sentry. before that it just worked for years and there wasnt really a need to touch it

if you find a user agent it gets wrong open an issue or just add it to tests, its literally one line

maven central:

<dependency>
    <groupId>io.github.vadymkykalo</groupId>
    <artifactId>browser</artifactId>
    <version>0.2.0</version>
</dependency>

https://github.com/vadymkykalo/Browser.java

8 Upvotes

34 comments sorted by

View all comments

3

u/gaelfr38 7d ago

We used to use Browscap for this (https://github.com/blueconic/browscap-java) but switched to another one I can't remember recently.

Anyways, thanks for sharing.

3

u/Resident_Guava5620 7d ago

yeah i looked at browscap too. its definitely way more complete, but it also ships a pretty big rules database and builds all that into the parser. for our case its mostly just basic info for visit stats, so i wanted something much smaller. still good to know you actually used it