This tool is used to generate and browse random user agents. This is useful for web developers, (ethical) hackers, and security researchers.
Servers may respond differently depending on the user agent. A mobile device may be served smaller assets. An unsupported browser may be given an error. A scripting tool may be flagged as a bot and served status code 418. Fishing out such responses is useful during penetration tests.
Due to the nature of the generation algorithm, synthesised agents may not necessarily reflect actual agents, only mimicing in appearance. This means this tool may generate non-existent version numbers, build numbers, etc.
To copy a user agent, simply click on the row.
Custom
preset.Quite simply, I wanted a down-to-earth, feature-first, no-ads tool for generating and browsing user agents. During my pentesting engagements, I've encountered websites which offer no response to a minimal HTTP request, but return a full web page when provided a user agent. Sometimes any agent is fine, but sometimes a specific one is needed (e.g. Safari on iOS). This explains the need for enumerating sites with different agents.
Most other online solutions didn't work for me, were too simplistic, or full of ads. I also wanted a randomisation factor for better opsec, to avoid limiting myself to a few hard-coded user agents which could be easily blocked (assuming IP rotation is used). Hence, I decided to build this.
But truthfully, I also wanted to scratch my early 2025 programming itch by picking up technologies such as the Elm Programming Language and TailwindCSS. And this project was simple enough to give it a go.
Interestingly, some folks have introduced Elm Tailwind libraries, but they operate differently from regular Tailwind. TailwindCSS, unlike Bootstrap, predefines a ton of CSS classes, then strips unused classes by scouring HTML when the tailwindcss
CLI command is called.
Elm, however, has built-in minification capabilities thanks to Elm's guarantees and pure functional nature. This allows library authors to simply pre-define TailwindCSS classes as Elm symbols; when compiling, any unused symbol will be yeeted out. What this means is: minification is seamlessly unified into Elm's optimiser. There's no need for "yet another tool".
This not only applies to CSS, but also to icons!
Big thanks to UAParser.js for their awesome library and tests.
Honorable mentions:
table
component in Elmdropdown
component in ElmCheck out this project on GitHub . Issues and PRs are welcome.