Skip to content

Repository files navigation

supports-color

Detect whether a terminal supports color

Install

npm install supports-color

Usage

import supportsColor from 'supports-color';

if (supportsColor.stdout) {
	console.log('Terminal stdout supports color');
}

if (supportsColor.stdout.has256) {
	console.log('Terminal stdout supports 256 colors');
}

if (supportsColor.stderr.has16m) {
	console.log('Terminal stderr supports 16 million colors (truecolor)');
}

API

Returns an object with a stdout and stderr property for testing either streams. Each property is an Object, or false if color is not supported.

The stdout/stderr objects specifies a level of support for color through a .level property and a corresponding flag:

  • .level = 1 and .hasBasic = true: Basic color support (16 colors)
  • .level = 2 and .has256 = true: 256 color support
  • .level = 3 and .has16m = true: Truecolor support (16 million colors)

Custom instance

The package also exposes the named export createSupportColor function that takes an arbitrary write stream (for example, process.stdout) and an optional options object to (re-)evaluate color support for an arbitrary stream.

import {createSupportsColor} from 'supports-color';

const stdoutSupportsColor = createSupportsColor(process.stdout);

if (stdoutSupportsColor) {
	console.log('Terminal stdout supports color');
}

// `stdoutSupportsColor` is the same as `supportsColor.stdout`

The options object supports a single boolean property sniffFlags. By default it is true, which instructs the detection to sniff process.argv for the multitude of --color flags (see Info below). If false, then process.argv is not considered when determining color support.

Info

It obeys the --color and --no-color CLI flags.

For situations where using --color is not possible, use the environment variable FORCE_COLOR=1 (level 1), FORCE_COLOR=2 (level 2), or FORCE_COLOR=3 (level 3) to forcefully enable color, or FORCE_COLOR=0 to forcefully disable. A numeric FORCE_COLOR overrides the detected color support and sets the level directly, meaning the terminal cannot raise it to a higher level. Use FORCE_COLOR=true to instead only enable color and let the level be detected.

Explicit 256/Truecolor mode can be enabled using the --color=256 and --color=16m flags, respectively. These take precedence over a non-zero numeric FORCE_COLOR.

Related

Maintainers

About

Detect whether a terminal supports color

Resources

Security policy

Stars

371 stars

Watchers

11 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages