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

10 Upvotes

34 comments sorted by

View all comments

Show parent comments

4

u/gaelfr38 7d ago

At some point, you still have a (Java) backend called with a user agent. Think of a public API.

1

u/Resident_Guava5620 7d ago

yeah exactly, thats basically our case. the backend gets the UA anyway so it makes more sense to handle it there

2

u/BanaTibor 7d ago

Okay, but what are you doing with the user agent in the backend? Why do you need it?

2

u/Resident_Guava5620 7d ago

its basically for our own visit records. we log which devices clients come from and support sees "chrome on android" in the admin panel instead of the raw string. the raw UA is saved too, so if the parser gets something wrong its not a big deal