bowser vs platform vs ua-parser-js
User Agent Detection Libraries
bowserplatformua-parser-jsSimilar Packages:

User Agent Detection Libraries

User agent detection libraries are essential tools in web development that allow developers to identify the browser, operating system, and device type of users visiting their web applications. This information can be crucial for optimizing user experience, ensuring compatibility, and delivering tailored content based on the user's environment. Each of these libraries offers unique features and capabilities for parsing user agent strings, enabling developers to make informed decisions about how to serve content and functionality based on the user's specific setup.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
bowser05,732258 kB912 months agoMIT
platform03,248-346 years agoMIT
ua-parser-js010,1031.31 MB192 months agoAGPL-3.0-or-later

Feature Comparison: bowser vs platform vs ua-parser-js

Detection Accuracy

  • bowser:

    Bowser provides high accuracy in detecting various browsers and their versions, including mobile and desktop environments. It uses a well-maintained database of user agent strings, ensuring that developers can rely on its results for making decisions about feature support and compatibility.

  • platform:

    Platform focuses on detecting the platform type (browser, OS) rather than detailed version information. While it is accurate for basic detection, it may not provide the granularity needed for applications that require precise browser versioning.

  • ua-parser-js:

    ua-parser-js excels in detection accuracy across a wide range of user agents, including less common browsers and devices. Its extensive parsing capabilities make it suitable for applications that need to handle diverse user environments.

Library Size

  • bowser:

    Bowser is designed to be lightweight, with a small footprint that makes it suitable for performance-sensitive applications. Its size allows for quick loading times, which is crucial for enhancing user experience on the web.

  • platform:

    Platform is extremely lightweight and minimalistic, making it an excellent choice for projects where performance is a top priority. Its small size ensures that it does not bloat the application bundle.

  • ua-parser-js:

    ua-parser-js is larger than Bowser and Platform due to its comprehensive feature set. While it offers extensive capabilities, developers should consider the trade-off between functionality and library size when integrating it into their projects.

Ease of Use

  • bowser:

    Bowser features a simple and intuitive API that allows developers to quickly implement user agent detection without a steep learning curve. Its straightforward methods make it easy to integrate and use within various projects.

  • platform:

    Platform is designed for simplicity, providing a very easy-to-use API that requires minimal setup. Developers can quickly get started with basic platform detection without any complicated configurations.

  • ua-parser-js:

    ua-parser-js has a slightly steeper learning curve due to its more extensive feature set. However, once understood, it provides powerful capabilities for detailed user agent parsing, making it worthwhile for complex applications.

Community and Maintenance

  • bowser:

    Bowser is actively maintained and has a strong community backing. Regular updates ensure that it stays current with new browser versions and user agent changes, making it a reliable choice for developers.

  • platform:

    Platform is also maintained, but it may not have as large of a community as Bowser. It is suitable for projects that do not require frequent updates or extensive support.

  • ua-parser-js:

    ua-parser-js has a robust community and is regularly updated to accommodate new user agents and browsers. Its active maintenance ensures that it remains a reliable choice for developers needing up-to-date detection capabilities.

Extensibility

  • bowser:

    Bowser can be extended through custom user agent strings, allowing developers to add support for specific browsers or versions as needed. This flexibility makes it adaptable for various projects.

  • platform:

    Platform is less extensible compared to Bowser and ua-parser-js, focusing on simplicity rather than customization. It is best suited for straightforward use cases where extensibility is not a primary concern.

  • ua-parser-js:

    ua-parser-js offers extensibility through its ability to add custom parsers and modify existing ones. This feature is beneficial for applications that require tailored detection logic for unique user agents.

How to Choose: bowser vs platform vs ua-parser-js

  • bowser:

    Choose Bowser if you need a lightweight, fast, and reliable library for parsing user agent strings. Bowser is particularly useful for projects that require accurate detection of browsers and their versions, and it has a simple API that makes it easy to integrate into existing codebases.

  • platform:

    Choose Platform if you want a straightforward library that provides a simple way to detect the platform (browser, OS, etc.) without the overhead of a full user agent parser. It is ideal for projects where you only need basic platform detection and prefer a minimalistic approach.

  • ua-parser-js:

    Choose ua-parser-js if you need a comprehensive solution for user agent parsing that supports a wide range of browsers and devices. It offers extensive capabilities for identifying not just the browser and OS, but also device types, making it suitable for applications that require detailed analytics and reporting.

README for bowser

Bowser

A small, fast and rich-API browser/platform/engine detector for both browser and node.

  • Small. Use plain ES5-version which is ~4.8kB gzipped.
  • Optimized. Use only those parsers you need — it doesn't do useless work.
  • Multi-platform. It's browser- and node-ready, so you can use it in any environment.

Don't hesitate to support the project on Github or OpenCollective if you like it ❤️ Also, contributors are always welcome!

Financial Contributors on Open Collective Downloads

Contents

Overview

The library is made to help to detect what browser your user has and gives you a convenient API to filter the users somehow depending on their browsers. Check it out on this page: https://bowser-js.github.io/bowser-online/.

⚠️ Version 2.0 breaking changes ⚠️

Version 2.0 has drastically changed the API. All available methods are on the docs page.

For legacy code, check out the 1.x branch and install it through npm install bowser@1.9.4.

Use cases

First of all, require the library. This is a UMD Module, so it will work for AMD, TypeScript, ES6, and CommonJS module systems.

const Bowser = require("bowser"); // CommonJS

import * as Bowser from "bowser"; // TypeScript

import Bowser from "bowser"; // ES6 (and TypeScript with --esModuleInterop enabled)

By default, the exported version is the ES5 transpiled version, which do not include any polyfills.

In case you don't use your own babel-polyfill you may need to have pre-built bundle with all needed polyfills. So, for you it's suitable to require bowser like this: require('bowser/bundled'). As the result, you get a ES5 version of bowser with babel-polyfill bundled together.

You may need to use the source files, so they will be available in the package as well.

Browser props detection

Often we need to pick users' browser properties such as the name, the version, the rendering engine and so on. Here is an example how to do it with Bowser:

const browser = Bowser.getParser(window.navigator.userAgent);

console.log(`The current browser name is "${browser.getBrowserName()}"`);
// The current browser name is "Internet Explorer"

Using User-Agent Client Hints

Modern browsers support User-Agent Client Hints, which provide a more privacy-friendly and structured way to access browser information. Bowser can use Client Hints data to improve browser detection accuracy.

// Pass Client Hints as the second parameter
const browser = Bowser.getParser(
  window.navigator.userAgent,
  window.navigator.userAgentData
);

console.log(`The current browser name is "${browser.getBrowserName()}"`);
// More accurate detection using Client Hints

Working with Client Hints

Bowser provides methods to access and query Client Hints data:

const browser = Bowser.getParser(
  window.navigator.userAgent,
  window.navigator.userAgentData
);

// Get the full Client Hints object
const hints = browser.getHints();
// Returns the ClientHints object or null if not provided

// Check if a specific brand exists
if (browser.hasBrand('Google Chrome')) {
  console.log('This is Chrome!');
}

// Get the version of a specific brand
const chromeVersion = browser.getBrandVersion('Google Chrome');
console.log(`Chrome version: ${chromeVersion}`);

The Client Hints object structure:

{
  brands: [
    { brand: 'Google Chrome', version: '131' },
    { brand: 'Chromium', version: '131' },
    { brand: 'Not_A Brand', version: '24' }
  ],
  mobile: false,
  platform: 'Windows',
  platformVersion: '15.0.0',
  architecture: 'x86',
  model: '',
  wow64: false
}

Note: Client Hints improve detection for browsers like DuckDuckGo and other Chromium-based browsers that may have similar User-Agent strings. When Client Hints are not provided, Bowser falls back to standard User-Agent string parsing.

or

const browser = Bowser.getParser(window.navigator.userAgent);
console.log(browser.getBrowser());

// outputs
{
  name: "Internet Explorer"
  version: "11.0"
}

or

console.log(Bowser.parse(window.navigator.userAgent));

// outputs
{
  browser: {
    name: "Internet Explorer"
    version: "11.0"
  },
  os: {
    name: "Windows"
    version: "NT 6.3"
    versionName: "8.1"
  },
  platform: {
    type: "desktop"
  },
  engine: {
    name: "Trident"
    version: "7.0"
  }
}

You can also use Bowser.parse() with Client Hints:

console.log(Bowser.parse(window.navigator.userAgent, window.navigator.userAgentData));

// Same output structure, but with enhanced detection from Client Hints

Filtering browsers

You could want to filter some particular browsers to provide any special support for them or make any workarounds. It could look like this:

const browser = Bowser.getParser(window.navigator.userAgent);
const isValidBrowser = browser.satisfies({
  // declare browsers per OS
  windows: {
    "internet explorer": ">10",
  },
  macos: {
    safari: ">10.1"
  },

  // per platform (mobile, desktop or tablet)
  mobile: {
    safari: '>=9',
    'android browser': '>3.10'
  },

  // or in general
  chrome: "~20.1.1432",
  firefox: ">31",
  opera: ">=22",

  // also supports equality operator
  chrome: "=20.1.1432", // will match particular build only

  // and loose-equality operator
  chrome: "~20",        // will match any 20.* sub-version
  chrome: "~20.1"       // will match any 20.1.* sub-version (20.1.19 as well as 20.1.12.42-alpha.1)
});

Settings for any particular OS or platform has more priority and redefines settings of standalone browsers. Thus, you can define OS or platform specific rules and they will have more priority in the end.

More of API and possibilities you will find in the docs folder.

Browser names for .satisfies()

By default you are supposed to use the full browser name for .satisfies. But, there's a short way to define a browser using short aliases. The full list of aliases can be found in the file.

Similar Projects

  • Kong - A C# port of Bowser.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

License

Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.