https://github.com/vweevers/win-detect-browsers
Fast and native browser detection on Windows.
https://github.com/vweevers/win-detect-browsers
browser-detection browsers nodejs windows
Last synced: 2 months ago
JSON representation
Fast and native browser detection on Windows.
- Host: GitHub
- URL: https://github.com/vweevers/win-detect-browsers
- Owner: vweevers
- License: mit
- Created: 2014-07-18T17:18:51.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-06-16T03:01:24.000Z (over 2 years ago)
- Last Synced: 2025-08-11T22:38:21.770Z (2 months ago)
- Topics: browser-detection, browsers, nodejs, windows
- Language: JavaScript
- Homepage:
- Size: 242 KB
- Stars: 39
- Watchers: 3
- Forks: 15
- Open Issues: 6
-
Metadata Files:
- Readme: readme.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# win-detect-browsers
**Fast and native browser detection on Windows. Detects installed versions of [Beaker](https://beakerbrowser.com/), [Brave](https://brave.com/), [Chrome](https://www.google.com/chrome/), [Chromium](https://www.chromium.org/), [Firefox](https://www.mozilla.org/en-US/firefox/), [Internet Explorer](https://en.wikipedia.org/wiki/Internet_Explorer), [Maxthon](http://www.maxthon.com/), [Opera](https://www.opera.com/), [Safari](https://www.apple.com/safari/) and [Yandex](https://browser.yandex.com/).**
[](https://www.npmjs.com/package/win-detect-browsers)
[](https://www.npmjs.com/package/win-detect-browsers)
[](https://github.com/vweevers/win-detect-browsers/actions/workflows/test.yml)
[](https://standardjs.com)
[](https://common-changelog.org)## Table of Contents
Click to expand
- [Usage](#usage)
- [API](#api)
- [`detect([names][, callback])`](#detectnames-callback)
- [CLI](#cli)
- [Sample](#sample)
- [Install](#install)
- [Background](#background)
- [License](#license)## Usage
_If you are upgrading: please see the [changelog](CHANGELOG.md)._
```js
const detect = require('win-detect-browsers')// All browsers
detect(function (err, browsers) {
if (err) throw err
console.log(browsers)
})// All browsers with promise
const browsers = await detect()// Search only for Chrome and Firefox
detect(['chrome', 'firefox'], function (err, browsers) {
if (err) throw errfor (let b of browsers) {
console.log(b.version) // '57.0.2931.0'
console.log(b.channel) // 'canary'
}
})
```## API
### `detect([names][, callback])`
`names` is an array of browser names you want to find. If omitted or empty, it will detect _[everything](http://youtu.be/k1yvvNvlXtg)_. The `callback` receives an error if any and an array of `results`. A result is excluded if its path has no `.exe` extension or if its version could not be read. If no callback is provided, a promise is returned.
Each `result` is an object with the following properties:
- `name` (string): `chrome`, `chromium`, `firefox`, `beaker`, `brave`, `ie`, `msedge`, `maxthon`, `opera`, `safari`, `yandex`
- `path` (string): absolute path to executable
- `version` (string)
- `arch` (string): CPU type the executable was built for: `amd64`, `i386` or [other](https://github.com/vweevers/pe-machine-type#types);
- `info` (object): executable metadata (see [sample](#sample) below).Additional properties are usually available but not guaranteed:
- `channel` (string):
- Chrome: `stable`, `canary`, `beta` or `dev`
- Firefox: `release`, `developer`, `nightly` or [`esr`](https://www.mozilla.org/en-US/firefox/organizations/faq/)
- Older versions of Firefox: `aurora`, `beta` or `rc`;
- Opera: `stable`, `beta` or `developer`.## CLI
```
win-detect-browsers [options] [name, name..]
```Write browsers to stdout as a JSON array. Includes all browsers unless one or more names are given (see list above).
Options:
- `--help` `-h`: Show help
- `--version` `-v`: Show CLI version number
- `--summary` `-s`: Less properties;
- `--debug` `-d`: Enable debug output.### Sample
On Windows 10:
Click to expand
```json
[
{
"name": "ie",
"path": "C:\\Program Files\\Internet Explorer\\iexplore.exe",
"version": "11.0.17134.1",
"arch": "amd64",
"info": {
"FileVersion": "11.0.17134.1",
"CompanyName": "Microsoft Corporation",
"FileDescription": "Internet Explorer",
"InternalName": "iexplore",
"LegalCopyright": "© Microsoft Corporation. Alle rechten voorbehouden.",
"OriginalFilename": "IEXPLORE.EXE.MUI",
"ProductName": "Internet Explorer",
"ProductVersion": "11.00.17134.1"
}
},
{
"name": "ie",
"path": "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe",
"version": "11.0.17134.1",
"arch": "i386",
"info": {
"FileVersion": "11.0.17134.1",
"CompanyName": "Microsoft Corporation",
"FileDescription": "Internet Explorer",
"InternalName": "iexplore",
"LegalCopyright": "© Microsoft Corporation. Alle rechten voorbehouden.",
"OriginalFilename": "IEXPLORE.EXE.MUI",
"ProductName": "Internet Explorer",
"ProductVersion": "11.00.17134.1"
}
},
{
"name": "firefox",
"path": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"version": "61.0.0.6711",
"channel": "release",
"arch": "amd64",
"info": {
"FileVersion": "61.0.0.6711",
"LegalCopyright": "©Firefox and Mozilla Developers; available under the MPL 2 license.",
"CompanyName": "Mozilla Corporation",
"FileDescription": "Firefox",
"ProductVersion": "61.0",
"InternalName": "Firefox",
"LegalTrademarks": "Firefox is a Trademark of The Mozilla Foundation.",
"OriginalFilename": "../../dist/bin/firefox.exe",
"ProductName": "Firefox",
"BuildID": "20180517141400"
}
},
{
"name": "firefox",
"path": "C:\\Program Files\\Firefox Developer Edition\\firefox.exe",
"version": "61.0.0.6711",
"channel": "developer",
"arch": "amd64",
"info": {
"FileVersion": "61.0.0.6711",
"LegalCopyright": "©Firefox and Mozilla Developers; available under the MPL 2 license.",
"CompanyName": "Mozilla Corporation",
"FileDescription": "Firefox Developer Edition",
"ProductVersion": "61.0",
"InternalName": "Firefox Developer Edition",
"LegalTrademarks": "Firefox is a Trademark of The Mozilla Foundation.",
"OriginalFilename": "../../dist/bin/firefox.exe",
"ProductName": "Firefox Developer Edition",
"BuildID": "20180517141400"
}
},
{
"name": "firefox",
"path": "C:\\Program Files\\Firefox Nightly\\firefox.exe",
"version": "62.0.0.6712",
"channel": "nightly",
"arch": "amd64",
"info": {
"FileVersion": "62.0.0.6712",
"LegalCopyright": "©Firefox and Mozilla Developers; available under the MPL 2 license.",
"CompanyName": "Mozilla Corporation",
"FileDescription": "Firefox Nightly",
"ProductVersion": "62.0a1",
"InternalName": "Firefox Nightly",
"LegalTrademarks": "Firefox is a Trademark of The Mozilla Foundation.",
"OriginalFilename": "firefox.exe",
"ProductName": "Firefox Nightly",
"BuildID": "20180518222751"
}
},
{
"name": "chrome",
"path": "C:\\Users\\vweevers\\AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe",
"version": "68.0.3436.0",
"channel": "canary",
"arch": "amd64",
"info": {
"FileVersion": "68.0.3436.0",
"CompanyName": "Google Inc.",
"FileDescription": "Google Chrome",
"InternalName": "chrome_exe",
"LegalCopyright": "Copyright 2017 Google Inc. All rights reserved.",
"OriginalFilename": "chrome.exe",
"ProductName": "Google Chrome",
"ProductVersion": "68.0.3436.0",
"CompanyShortName": "Google",
"ProductShortName": "Chrome",
"LastChange": "e0f81fe637f233bf12e821915b72bc8d2194c3f2-refs/branch-heads/3436@{#1}",
"Official Build": "1"
}
},
{
"name": "chrome",
"path": "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
"version": "66.0.3359.181",
"channel": "stable",
"arch": "amd64",
"info": {
"FileVersion": "66.0.3359.181",
"CompanyName": "Google Inc.",
"FileDescription": "Google Chrome",
"InternalName": "chrome_exe",
"LegalCopyright": "Copyright 2017 Google Inc. All rights reserved.",
"OriginalFilename": "chrome.exe",
"ProductName": "Google Chrome",
"ProductVersion": "66.0.3359.181",
"CompanyShortName": "Google",
"ProductShortName": "Chrome",
"LastChange": "a10b9cedb40738cb152f8148ddab4891df876959-refs/branch-heads/3359@{#828}",
"Official Build": "1"
}
},
{
"name": "opera",
"path": "C:\\Program Files\\Opera beta\\Launcher.exe",
"version": "53.0.2907.31",
"channel": "beta",
"arch": "amd64",
"info": {
"FileVersion": "53.0.2907.31",
"LegalCopyright": "Copyright Opera Software 2018",
"InternalName": "Opera",
"CompanyName": "Opera Software",
"ProductName": "Opera beta Internet Browser",
"ProductVersion": "53.0.2907.31",
"FileDescription": "Opera beta Internet Browser"
}
}
]
```## Install
With [npm](https://npmjs.org) do:
```bash
npm install win-detect-browsers # For API
npm install win-detect-browsers -g # For CLI
```## Background
Browser detection on Windows can't be done right. This is the _try-everything-and-fail-silently_ approach. It accounts for architecture differences, normalizes environment variables, tries default locations, searches the registry (in the HKLM and HKCU hives as well as WoW counterparts) (including [Start Menu Internet Applications](http://msdn.microsoft.com/en-us/library/windows/desktop/dd203067(v=vs.85).aspx), Google Updater and more), and looks in `PATH`. Version numbers are then read from the executable metadata.
`browser-launcher` by substack has [poor Windows support](https://github.com/substack/browser-launcher/issues/7), and it prompted me to create this module. It is now used in [browser-launcher2](https://github.com/benderjs/browser-launcher2), ~~an active~~ a once active fork of `browser-launcher`.
## License
[MIT](./LICENSE)