ANSI escape codes for styling strings in the terminal
462
stars
113
commits
JavaScript
primary language
Jul 26, 2026
updated
ANSI escape codes for styling strings in the terminal
You probably want the higher-level chalk module for styling your strings.

npm install ansi-styles
import styles from 'ansi-styles';
console.log(`${styles.green.open}Hello world!${styles.green.close}`);
// Color conversion between 256/truecolor
// NOTE: When converting from truecolor to 256 colors, the original color
// may be degraded to fit the new color palette. This means terminals
// that do not support 16 million colors will best-match the
// original color.
console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`)
console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`)
console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`)
open and closeEach style has an open and close property.
modifierNames, foregroundColorNames, backgroundColorNames, underlineColorNames, and colorNamesAll supported style strings are exposed as an array of strings for convenience. colorNames is the combination of foregroundColorNames and backgroundColorNames. Underline color names are kept separate in underlineColorNames.
This can be useful if you need to validate input:
import {modifierNames, foregroundColorNames} from 'ansi-styles';
console.log(modifierNames.includes('bold'));
//=> true
console.log(foregroundColorNames.includes('pink'));
//=> false
resetbolddimitalic (Not widely supported)underline - Put a horizontal line below the text. (Not widely supported)underlineDouble - Put a double horizontal line below the text. (Not widely supported)underlineCurly - Put a curly horizontal line below the text. (Not widely supported)underlineDotted - Put a dotted horizontal line below the text. (Not widely supported)underlineDashed - Put a dashed horizontal line below the text. (Not widely supported)overline Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.inversehiddenstrikethrough (Not widely supported)blackredgreenyellowbluemagentacyanwhiteblackBright (alias: gray, grey)redBrightgreenBrightyellowBrightblueBrightmagentaBrightcyanBrightwhiteBrightbgBlackbgRedbgGreenbgYellowbgBluebgMagentabgCyanbgWhitebgBlackBright (alias: bgGray, bgGrey)bgRedBrightbgGreenBrightbgYellowBrightbgBlueBrightbgMagentaBrightbgCyanBrightbgWhiteBrightThe underline color is set independently of the text color, so the color is only visible when an underline style is also applied. (Not widely supported)
Unlike text and background colors, underline colors have no basic 16-color form. Named underline colors and underlineColor.ansi() use the first 16 entries of the 256-color palette. underlineColor.ansi256() emits a 256-color escape, and underlineColor.ansi16m() emits a truecolor escape.
underlineBlackunderlineRedunderlineGreenunderlineYellowunderlineBlueunderlineMagentaunderlineCyanunderlineWhiteunderlineBlackBright (alias: underlineGray, underlineGrey)underlineRedBrightunderlineGreenBrightunderlineYellowBrightunderlineBlueBrightunderlineMagentaBrightunderlineCyanBrightunderlineWhiteBrightBy default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
styles.modifierstyles.colorstyles.bgColorstyles.underlineColorimport styles from 'ansi-styles';
console.log(styles.color.green.open);
The leading SGR parameters of the styles are available under styles.codes, which returns a Map with the open codes as keys and close codes as values. Parameterized styles such as 4:2 and 58;5;0 are keyed by their leading parameter, 4 and 58 respectively.
import styles from 'ansi-styles';
console.log(styles.codes.get(36));
//=> 39
ansi-styles allows converting between various color formats and ANSI escapes, with support for 16, 256 and 16 million colors.
The following color spaces are supported:
rgbhexansi256ansiTo use these, call the associated conversion function with the intended output, for example:
import styles from 'ansi-styles';
styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code
styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code
styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code
styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code
styles.underlineColor.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to underline code using the first 16 palette entries
styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code
styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code
styles.underlineColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color underline code
styles.underlineColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color underline code
JavaScript
68.7%
TypeScript
31.3%
ANSI escape codes for styling strings in the terminal
462
stars
113
commits
JavaScript
primary language
Jul 26, 2026
updated
ANSI escape codes for styling strings in the terminal
You probably want the higher-level chalk module for styling your strings.

npm install ansi-styles
import styles from 'ansi-styles';
console.log(`${styles.green.open}Hello world!${styles.green.close}`);
// Color conversion between 256/truecolor
// NOTE: When converting from truecolor to 256 colors, the original color
// may be degraded to fit the new color palette. This means terminals
// that do not support 16 million colors will best-match the
// original color.
console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`)
console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`)
console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`)
open and closeEach style has an open and close property.
modifierNames, foregroundColorNames, backgroundColorNames, underlineColorNames, and colorNamesAll supported style strings are exposed as an array of strings for convenience. colorNames is the combination of foregroundColorNames and backgroundColorNames. Underline color names are kept separate in underlineColorNames.
This can be useful if you need to validate input:
import {modifierNames, foregroundColorNames} from 'ansi-styles';
console.log(modifierNames.includes('bold'));
//=> true
console.log(foregroundColorNames.includes('pink'));
//=> false
resetbolddimitalic (Not widely supported)underline - Put a horizontal line below the text. (Not widely supported)underlineDouble - Put a double horizontal line below the text. (Not widely supported)underlineCurly - Put a curly horizontal line below the text. (Not widely supported)underlineDotted - Put a dotted horizontal line below the text. (Not widely supported)underlineDashed - Put a dashed horizontal line below the text. (Not widely supported)overline Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.inversehiddenstrikethrough (Not widely supported)blackredgreenyellowbluemagentacyanwhiteblackBright (alias: gray, grey)redBrightgreenBrightyellowBrightblueBrightmagentaBrightcyanBrightwhiteBrightbgBlackbgRedbgGreenbgYellowbgBluebgMagentabgCyanbgWhitebgBlackBright (alias: bgGray, bgGrey)bgRedBrightbgGreenBrightbgYellowBrightbgBlueBrightbgMagentaBrightbgCyanBrightbgWhiteBrightThe underline color is set independently of the text color, so the color is only visible when an underline style is also applied. (Not widely supported)
Unlike text and background colors, underline colors have no basic 16-color form. Named underline colors and underlineColor.ansi() use the first 16 entries of the 256-color palette. underlineColor.ansi256() emits a 256-color escape, and underlineColor.ansi16m() emits a truecolor escape.
underlineBlackunderlineRedunderlineGreenunderlineYellowunderlineBlueunderlineMagentaunderlineCyanunderlineWhiteunderlineBlackBright (alias: underlineGray, underlineGrey)underlineRedBrightunderlineGreenBrightunderlineYellowBrightunderlineBlueBrightunderlineMagentaBrightunderlineCyanBrightunderlineWhiteBrightBy default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
styles.modifierstyles.colorstyles.bgColorstyles.underlineColorimport styles from 'ansi-styles';
console.log(styles.color.green.open);
The leading SGR parameters of the styles are available under styles.codes, which returns a Map with the open codes as keys and close codes as values. Parameterized styles such as 4:2 and 58;5;0 are keyed by their leading parameter, 4 and 58 respectively.
import styles from 'ansi-styles';
console.log(styles.codes.get(36));
//=> 39
ansi-styles allows converting between various color formats and ANSI escapes, with support for 16, 256 and 16 million colors.
The following color spaces are supported:
rgbhexansi256ansiTo use these, call the associated conversion function with the intended output, for example:
import styles from 'ansi-styles';
styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code
styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code
styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code
styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code
styles.underlineColor.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to underline code using the first 16 palette entries
styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code
styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code
styles.underlineColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color underline code
styles.underlineColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color underline code
JavaScript
68.7%
TypeScript
31.3%