
Product
Introducing Socket Firewall Enterprise: Flexible, Configurable Protection for Modern Package Ecosystems
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.
@jsdevtools/host-environment
Advanced tools
Easily detect what host environment your code is running in
Host Environment is a universal JavaScript library that makes it easy to detect what host environment your code is running in. It lets you answer questions like:
Maybe some parts of your app are only available in Node and not in web browsers. Or maybe you need to determine whether to load a polyfill library. Or maybe you need to conditionally run tests in different environments. Whatever your reason, Host Environment can help.
import host from "@jsdevtools/host-environment";
if (host.browser) {
// Browser logic here
if (host.browser.IE) {
// Load a polyfill for Internet Explorer
}
}
if (host.node) {
// Node.js logic here
if (host.node.version < 8) {
// Load a polyfill for older versions of Node
}
if (host.os.windows) {
// Windows-specific logic here
}
}
Install using npm:
npm install @jsdevtools/host-environment
When using Host Environment in Node.js apps, you'll probably want to use CommonJS syntax:
const host = require("@jsdevtools/host-environment");
When using a transpiler such as Babel or TypeScript, or a bundler such as Webpack or Rollup, you can use ECMAScript modules syntax instead:
import host from "@jsdevtools/host-environment";
Host Environment supports recent versions of every major web browser. Older browsers may require Babel and/or polyfills.
To use Host Environment in a browser, you'll need to use a bundling tool such as Webpack, Rollup, Parcel, or Browserify. Some bundlers may require a bit of configuration, such as setting browser: true in rollup-plugin-resolve.
host.globalWhen running in a web browser, host.global is a reference to the window object. When running in Node.js, it's a reference to the global object.
host.pathThe path of the host process, as a string. When running in Node.js, this is set to process.execPath. When running in a web browser, it is the URL of the web page (window.location.href).
host.urlThe same as host.path, but as a parsed URL object. When running in Node.js, this will be a file:// URL.
host.cwdThe current working directory, as a string. When running in Node.js, this is set to process.cwd. When running in a web browser, it is the parent directory of the current web page
host.cwdURLThe same as host.cwd, but as a parsed URL object. When running in Node.js, this will be a file:// URL.
host.osThis property is an object with the following structure:
{
windows: false, // Windows or Windows Phone
mac: true, // Mac OS or iOS
linux: false // Linux, Android, or other *nix platforms
}
Note: Only one of the properties will be
true. All others arefalse.
host.envThis property is an object containing environment variables as key/value strings. When running in Node.js, it is set to process.env.
When running in a web browser, it is usually an empty object, since web browsers don't have access to environment variables. However, when paired with tools like karma-host-environment, it's possible to work-around this limitation and allow you to access environment variables in the browser.
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}
host.ciWhen running on a known CI/CD host, this property is an object containing informaation about the CI/CD host and the job that's being run.
When running outside of a CI/CD host, this property is false. Since CI/CD hosts are detected based on the presence of environment variables, this property will usually be false when running in a web browser (where environment variables aren't accessible). However, when paired with tools like karma-host-environment, it's possible to work-around this limitation and allow you to access CI/CD information in the browser.
{
name: "Travis CI", // The name of the CI/CD host
TRAVIS: true, // The CI/CD host as a boolean
pr: true, // Whether the CI/CD job was triggered by a pull-request
}
host.nodeThis property is false when running in a web browser. When running in Node.js it is an object with the following structure:
{
v7: true, // The major version, as a boolean
version: 7.3, // The major.minor version, as a float
majorVersion: 7, // The major version, as an integer
minorVersion: 3, // The minor version, as an integer
patchVersion: 24 // The patch version, as an integer
}
host.browserThis property is false when running in Node.js. When running in a browser it is an object with the following structure:
{
chrome: { // false if not Chrome
v58: true, // The major version, as a boolean
version: 58.4, // The major.minor version, as a float
majorVersion: 58, // The major version, as an integer
minorVersion: 4, // The minor version, as an integer
patchVersion: 3029, // The patch version, as an integer
mobile: false, // true on mobile
},
firefox: false, // An object like above if running in Firefox
safari: false, // An object like above if running in Safari
edge: false, // An object like above if running in Edge
IE: false, // An object like above if running in Internet Explorer
mobile: false, // true for any mobile browser (iOS, Android, Windows Phone, etc)
}
Note: Only one of the browser properties will be an object. All others are
false.
Contributions, enhancements, and bug-fixes are welcome! Open an issue on GitHub and submit a pull request.
To build the project locally on your computer:
Clone this repo
git clone https://github.com/JS-DevTools/host-environment.git
Install dependencies
npm install
Build the code
npm run build
Run the tests
npm test
Host Environment is 100% free and open-source, under the MIT license. Use it however you want.
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
Thanks to these awesome companies for their support of Open Source developers ❤
FAQs
Easily detect what host environment your code is running in
We found that @jsdevtools/host-environment demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authorities’ publishing activity, highlighting trends and transparency across the CVE ecosystem.

Product
Detect malware, unsafe data flows, and license issues in GitHub Actions with Socket’s new workflow scanning support.