2015-02-23 14:38:38 +07:00
< h1 align = "center" >
2015-06-30 19:57:59 +02:00
< br >
2015-02-23 14:38:38 +07:00
< br >
2015-06-30 19:55:37 +02:00
< img width = "360" src = "https://cdn.rawgit.com/chalk/chalk/19935d6484811c5e468817f846b7b3d417d7bf4a/logo.svg" alt = "chalk" >
2015-02-23 14:38:38 +07:00
< br >
< br >
2015-06-30 19:57:59 +02:00
< br >
2015-02-23 14:38:38 +07:00
< / h1 >
2013-08-03 02:16:26 +02:00
2013-12-13 20:21:51 +01:00
> Terminal string styling done right
2013-08-03 02:16:26 +02:00
2016-10-26 20:13:45 +07:00
[](https://travis-ci.org/chalk/chalk) [](https://coveralls.io/github/chalk/chalk?branch=master) [](https://www.youtube.com/watch?v=9auOCbH5Ns4) [](https://github.com/sindresorhus/xo)
2013-11-10 13:25:35 +01:00
2014-08-31 00:51:39 +02:00
[colors.js ](https://github.com/Marak/colors.js ) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems ](https://github.com/yeoman/yo/issues/68 ). Although there are other ones, they either do too much or not enough.
2013-08-03 02:16:26 +02:00
**Chalk is a clean and focused alternative.**
2015-06-30 19:55:37 +02:00

2013-08-03 02:16:26 +02:00
## Why
2014-07-04 21:29:01 +02:00
- Highly performant
2014-08-30 23:08:28 +02:00
- Doesn't extend `String.prototype`
2013-08-03 02:16:26 +02:00
- Expressive API
2014-06-24 17:23:43 +02:00
- Ability to nest styles
2013-08-03 18:47:47 +02:00
- Clean and focused
2013-08-03 02:16:26 +02:00
- Auto-detects color support
- Actively maintained
2016-08-03 21:35:16 +01:00
- [Used by ~10,000 modules ](https://www.npmjs.com/browse/depended/chalk ) as of August 2nd, 2016
2013-08-03 02:16:26 +02:00
## Install
2016-07-27 11:43:15 +05:30
```console
2015-02-17 15:57:40 +07:00
$ npm install --save chalk
2014-02-11 20:33:11 +01:00
```
2013-08-03 02:16:26 +02:00
2014-04-03 22:57:06 +02:00
## Usage
2013-08-03 02:16:26 +02:00
2015-11-05 13:12:34 +07:00
```js
const chalk = require('chalk');
console.log(chalk.blue('Hello world!'));
```
2014-08-31 00:51:39 +02:00
Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
2013-08-03 02:16:26 +02:00
```js
2015-10-05 22:36:26 +07:00
const chalk = require('chalk');
2016-09-08 03:12:05 -07:00
const log = console.log;
2013-08-03 02:16:26 +02:00
// combine styled and normal strings
2016-09-08 03:12:05 -07:00
log(chalk.blue('Hello') + 'World' + chalk.red('!'));
2013-08-03 02:16:26 +02:00
// compose multiple styles using the chainable API
2016-09-08 03:12:05 -07:00
log(chalk.blue.bgRed.bold('Hello world!'));
2013-08-03 18:47:47 +02:00
2014-06-24 17:23:43 +02:00
// pass in multiple arguments
2016-09-08 03:12:05 -07:00
log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
2014-06-24 17:23:43 +02:00
2013-08-03 18:47:47 +02:00
// nest styles
2016-09-08 03:12:05 -07:00
log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));
2013-10-07 00:34:32 -04:00
2014-06-24 17:23:43 +02:00
// nest styles of the same type even (color, underline, background)
2016-09-08 03:12:05 -07:00
log(chalk.green(
2014-08-30 23:13:42 +02:00
'I am a green line ' +
chalk.blue.underline.bold('with a blue substring') +
' that becomes green again!'
2016-09-08 03:12:05 -07:00
));
2015-10-09 01:09:08 +07:00
// ES2015 template literal
2016-09-08 03:12:05 -07:00
log(`
2015-10-09 01:09:08 +07:00
CPU: ${chalk.red('90%')}
RAM: ${chalk.green('40%')}
DISK: ${chalk.yellow('70%')}
2016-09-08 03:12:05 -07:00
`);
2017-01-17 03:29:25 -08:00
// Use RGB colors in terminal emulators that support it.
log(chalk.keyword('orange')('Yay for orange colored text!'));
log(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
log(chalk.hex('#DEADED ').bold('Bold gray!'));
2013-08-03 02:16:26 +02:00
```
2013-12-16 21:44:25 +01:00
Easily define your own themes.
2013-08-03 02:16:26 +02:00
```js
2015-10-05 22:36:26 +07:00
const chalk = require('chalk');
2017-01-17 03:29:25 -08:00
2015-10-05 22:36:26 +07:00
const error = chalk.bold.red;
2017-01-17 03:29:25 -08:00
const warning = chalk.keyword('orange');
2013-08-03 02:16:26 +02:00
console.log(error('Error!'));
2017-01-17 03:29:25 -08:00
console.log(warning('Warning!'));
2013-08-03 02:16:26 +02:00
```
2014-08-31 00:51:39 +02:00
Take advantage of console.log [string substitution ](http://nodejs.org/docs/latest/api/console.html#console_console_log_data ).
2013-12-16 21:44:25 +01:00
```js
2015-10-05 22:36:26 +07:00
const name = 'Sindre';
2013-12-16 21:44:25 +01:00
console.log(chalk.green('Hello %s'), name);
2015-10-05 22:36:26 +07:00
//=> 'Hello Sindre'
2013-12-16 21:44:25 +01:00
```
2013-08-03 02:16:26 +02:00
## API
2013-10-19 18:04:30 +02:00
### chalk.`<style>[.<style>...](string, [string...])`
2013-08-03 02:16:26 +02:00
2013-12-13 20:21:51 +01:00
Example: `chalk.red.bold.underline('Hello', 'world');`
2013-08-03 02:16:26 +02:00
2014-08-31 00:51:39 +02:00
Chain [styles ](#styles ) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `Chalk.red.yellow.green` is equivalent to `Chalk.green` .
2013-12-13 20:21:51 +01:00
Multiple arguments will be separated by space.
2013-08-03 02:16:26 +02:00
2017-01-17 03:29:25 -08:00
### chalk.level
2013-08-03 02:16:26 +02:00
2017-01-17 03:29:25 -08:00
Color support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all chalk consumers.
2015-02-17 15:57:40 +07:00
If you need to change this in a reusable module create a new instance:
```js
2017-01-17 03:29:25 -08:00
const ctx = new chalk.constructor({level: 0});
2015-02-17 15:57:40 +07:00
```
2013-08-03 02:16:26 +02:00
2017-01-17 03:29:25 -08:00
Levels are as follows:
2017-01-17 03:56:54 -08:00
0. All colors disabled
2017-01-17 03:29:25 -08:00
1. Basic color support (16 colors)
2. 256 color support
3. RGB/Truecolor support (16 million colors)
2013-08-03 02:16:26 +02:00
### chalk.supportsColor
2015-06-30 19:55:37 +02:00
Detect whether the terminal [supports color ](https://github.com/chalk/supports-color ). Used internally and handled for you, but exposed for convenience.
2013-08-03 02:16:26 +02:00
2015-02-23 14:03:03 +07:00
Can be overridden by the user with the flags `--color` and `--no-color` . For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color` .
2013-08-03 02:16:26 +02:00
### chalk.styles
2015-06-30 19:55:37 +02:00
Exposes the styles as [ANSI escape codes ](https://github.com/chalk/ansi-styles ).
2013-08-03 02:16:26 +02:00
2014-08-31 00:51:39 +02:00
Generally not useful, but you might need just the `.open` or `.close` escape code if you're mixing externally styled strings with your own.
2013-12-13 20:21:51 +01:00
2013-08-03 02:16:26 +02:00
```js
2015-10-05 22:36:26 +07:00
const chalk = require('chalk');
2013-08-03 18:47:47 +02:00
2013-08-03 02:16:26 +02:00
console.log(chalk.styles.red);
2014-06-04 01:43:07 +02:00
//=> {open: '\u001b[31m', close: '\u001b[39m'}
2013-08-03 18:47:47 +02:00
2013-12-08 01:02:35 +01:00
console.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close);
2013-08-03 02:16:26 +02:00
```
## Styles
2014-11-23 18:56:00 +07:00
### Modifiers
2013-08-03 02:16:26 +02:00
2014-06-04 01:38:03 +02:00
- `reset`
- `bold`
- `dim`
- `italic` *(not widely supported)*
- `underline`
- `inverse`
- `hidden`
- `strikethrough` *(not widely supported)*
2013-08-03 02:16:26 +02:00
2014-11-23 18:56:00 +07:00
### Colors
2013-08-03 02:16:26 +02:00
2014-06-04 01:38:03 +02:00
- `black`
- `red`
- `green`
- `yellow`
2016-07-27 11:43:15 +05:30
- `blue` *(on Windows the bright version is used since normal blue is illegible)*
2014-06-04 01:38:03 +02:00
- `magenta`
- `cyan`
- `white`
- `gray`
2013-08-03 02:16:26 +02:00
### Background colors
2014-06-04 01:38:03 +02:00
- `bgBlack`
- `bgRed`
- `bgGreen`
- `bgYellow`
- `bgBlue`
- `bgMagenta`
- `bgCyan`
- `bgWhite`
2013-08-03 02:16:26 +02:00
2014-11-23 18:56:00 +07:00
2017-01-17 03:29:25 -08:00
## 256/16 million (Truecolor) color support
Chalk supports 256 colors and, when manually specified, [Truecolor (16 million colors) ](https://gist.github.com/XVilka/8346728 ) on all supported terminal emulators.
For the methods that support it (listed below), the color will be 'fit' to the color level supported (i.e. RGB colors will be downsampled to 16 colors if only basic support is enabled).
2017-01-17 03:59:05 -08:00
Some examples:
2017-01-17 03:29:25 -08:00
For a complete list of color models, see [`color-convert`'s list of conversions ](https://github.com/Qix-/color-convert/blob/master/conversions.js ). Background versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `keyword` for foreground colors and `bgKeyword` for background colors).
2014-08-30 23:25:53 +02:00
2017-01-17 03:59:05 -08:00
- `chalk.hex('#DEADED').underline('Hello, world!')`
- `chalk.keyword('orange')('Some orange text')`
- `chalk.rgb(15, 100, 204).inverse('Hello!')`
- `chalk.bgHex('#DEADED').underline('Hello, world!')`
- `chalk.bgKeyword('orange')('Some orange text')`
- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`
2017-01-17 03:29:25 -08:00
As of this writing, these are the supported color models that are exposed in Chalk:
2013-08-03 02:16:26 +02:00
2017-01-17 03:29:25 -08:00
- `rgb`
- `hsl`
- `hsv`
- `hwb`
- `cmyk`
- `xyz`
- `lab`
- `lch`
- `hex`
- `keyword`
- `ansi16`
- `ansi256`
- `hcg`
- `apple`
2014-11-23 18:56:00 +07:00
2014-12-05 17:31:57 +07:00
## Windows
2015-09-13 22:19:40 +02:00
If you're on Windows, do yourself a favor and use [`cmder` ](http://cmder.net/ ) instead of `cmd.exe` .
2014-12-05 17:31:57 +07:00
2015-06-30 21:22:46 +02:00
## Related
2015-07-01 03:01:07 +02:00
- [chalk-cli ](https://github.com/chalk/chalk-cli ) - CLI for this module
2016-04-06 23:05:21 +07:00
- [ansi-styles ](https://github.com/chalk/ansi-styles ) - ANSI escape codes for styling strings in the terminal
- [supports-color ](https://github.com/chalk/supports-color ) - Detect whether a terminal supports color
2015-06-30 21:22:46 +02:00
- [strip-ansi ](https://github.com/chalk/strip-ansi ) - Strip ANSI escape codes
- [has-ansi ](https://github.com/chalk/has-ansi ) - Check if a string has ANSI escape codes
- [ansi-regex ](https://github.com/chalk/ansi-regex ) - Regular expression for matching ANSI escape codes
2015-08-20 03:02:09 +07:00
- [wrap-ansi ](https://github.com/chalk/wrap-ansi ) - Wordwrap a string with ANSI escape codes
2015-09-26 15:15:59 +07:00
- [slice-ansi ](https://github.com/chalk/slice-ansi ) - Slice a string with ANSI escape codes
2017-01-17 03:29:25 -08:00
- [color-convert ](https://github.com/qix-/color-convert ) - Converts colors between different models
2015-06-30 21:22:46 +02:00
2013-08-03 02:16:26 +02:00
## License
2016-04-06 23:05:21 +07:00
MIT © [Sindre Sorhus ](https://sindresorhus.com )