UNPKG

13.1 kBMarkdownView Raw
1<h1 align="center">
2 <br>
3 <br>
4 <img width="320" src="media/logo.svg" alt="Chalk">
5 <br>
6 <br>
7 <br>
8</h1>
9
10> Terminal string styling done right
11
12[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents) [![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) ![TypeScript-ready](https://img.shields.io/npm/types/chalk.svg) [![run on repl.it](https://repl.it/badge/github/chalk/chalk)](https://repl.it/github/chalk/chalk)
13
14<img src="https://cdn.jsdelivr.net/gh/chalk/ansi-styles@8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
15
16<br>
17
18---
19
20<div align="center">
21 <p>
22 <p>
23 <sup>
24 Sindre Sorhus' open source work is supported by the community on <a href="https://github.com/sponsors/sindresorhus">GitHub Sponsors</a> and <a href="https://stakes.social/0x44d871aebF0126Bf646753E2C976Aa7e68A66c15">Dev</a>
25 </sup>
26 </p>
27 <sup>Special thanks to:</sup>
28 <br>
29 <br>
30 <a href="https://standardresume.co/tech">
31 <img src="https://sindresorhus.com/assets/thanks/standard-resume-logo.svg" width="160"/>
32 </a>
33 <br>
34 <br>
35 <a href="https://retool.com/?utm_campaign=sindresorhus">
36 <img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210"/>
37 </a>
38 <br>
39 <br>
40 <a href="https://doppler.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=chalk&utm_source=github">
41 <div>
42 <img src="https://dashboard.doppler.com/imgs/logo-long.svg" width="240" alt="Doppler">
43 </div>
44 <b>All your environment variables, in one place</b>
45 <div>
46 <span>Stop struggling with scattered API keys, hacking together home-brewed tools,</span>
47 <br>
48 <span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>
49 </div>
50 </a>
51 </p>
52</div>
53
54---
55
56<br>
57
58## Highlights
59
60- Expressive API
61- Highly performant
62- Ability to nest styles
63- [256/Truecolor color support](#256-and-truecolor-color-support)
64- Auto-detects color support
65- Doesn't extend `String.prototype`
66- Clean and focused
67- Actively maintained
68- [Used by ~50,000 packages](https://www.npmjs.com/browse/depended/chalk) as of January 1, 2020
69
70## Install
71
72```console
73$ npm install chalk
74```
75
76## Usage
77
78```js
79const chalk = require('chalk');
80
81console.log(chalk.blue('Hello world!'));
82```
83
84Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
85
86```js
87const chalk = require('chalk');
88const log = console.log;
89
90// Combine styled and normal strings
91log(chalk.blue('Hello') + ' World' + chalk.red('!'));
92
93// Compose multiple styles using the chainable API
94log(chalk.blue.bgRed.bold('Hello world!'));
95
96// Pass in multiple arguments
97log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
98
99// Nest styles
100log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));
101
102// Nest styles of the same type even (color, underline, background)
103log(chalk.green(
104 'I am a green line ' +
105 chalk.blue.underline.bold('with a blue substring') +
106 ' that becomes green again!'
107));
108
109// ES2015 template literal
110log(`
111CPU: ${chalk.red('90%')}
112RAM: ${chalk.green('40%')}
113DISK: ${chalk.yellow('70%')}
114`);
115
116// ES2015 tagged template literal
117log(chalk`
118CPU: {red ${cpu.totalPercent}%}
119RAM: {green ${ram.used / ram.total * 100}%}
120DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}
121`);
122
123// Use RGB colors in terminal emulators that support it.
124log(chalk.keyword('orange')('Yay for orange colored text!'));
125log(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
126log(chalk.hex('#DEADED').bold('Bold gray!'));
127```
128
129Easily define your own themes:
130
131```js
132const chalk = require('chalk');
133
134const error = chalk.bold.red;
135const warning = chalk.keyword('orange');
136
137console.log(error('Error!'));
138console.log(warning('Warning!'));
139```
140
141Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):
142
143```js
144const name = 'Sindre';
145console.log(chalk.green('Hello %s'), name);
146//=> 'Hello Sindre'
147```
148
149## API
150
151### chalk.`<style>[.<style>...](string, [string...])`
152
153Example: `chalk.red.bold.underline('Hello', 'world');`
154
155Chain [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`.
156
157Multiple arguments will be separated by space.
158
159### chalk.level
160
161Specifies the level of color support.
162
163Color 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.
164
165If you need to change this in a reusable module, create a new instance:
166
167```js
168const ctx = new chalk.Instance({level: 0});
169```
170
171| Level | Description |
172| :---: | :--- |
173| `0` | All colors disabled |
174| `1` | Basic color support (16 colors) |
175| `2` | 256 color support |
176| `3` | Truecolor support (16 million colors) |
177
178### chalk.supportsColor
179
180Detect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.
181
182Can be overridden by the user with the flags `--color` and `--no-color`. 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. The use of `FORCE_COLOR` overrides all other color support checks.
183
184Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.
185
186### chalk.stderr and chalk.stderr.supportsColor
187
188`chalk.stderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `chalk.supportsColor` apply to this too. `chalk.stderr.supportsColor` is exposed for convenience.
189
190## Styles
191
192### Modifiers
193
194- `reset` - Resets the current color chain.
195- `bold` - Make text bold.
196- `dim` - Emitting only a small amount of light.
197- `italic` - Make text italic. *(Not widely supported)*
198- `underline` - Make text underline. *(Not widely supported)*
199- `inverse`- Inverse background and foreground colors.
200- `hidden` - Prints the text, but makes it invisible.
201- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*
202- `visible`- Prints the text only when Chalk has a color level > 0. Can be useful for things that are purely cosmetic.
203
204### Colors
205
206- `black`
207- `red`
208- `green`
209- `yellow`
210- `blue`
211- `magenta`
212- `cyan`
213- `white`
214- `blackBright` (alias: `gray`, `grey`)
215- `redBright`
216- `greenBright`
217- `yellowBright`
218- `blueBright`
219- `magentaBright`
220- `cyanBright`
221- `whiteBright`
222
223### Background colors
224
225- `bgBlack`
226- `bgRed`
227- `bgGreen`
228- `bgYellow`
229- `bgBlue`
230- `bgMagenta`
231- `bgCyan`
232- `bgWhite`
233- `bgBlackBright` (alias: `bgGray`, `bgGrey`)
234- `bgRedBright`
235- `bgGreenBright`
236- `bgYellowBright`
237- `bgBlueBright`
238- `bgMagentaBright`
239- `bgCyanBright`
240- `bgWhiteBright`
241
242## Tagged template literal
243
244Chalk can be used as a [tagged template literal](https://exploringjs.com/es6/ch_template-literals.html#_tagged-template-literals).
245
246```js
247const chalk = require('chalk');
248
249const miles = 18;
250const calculateFeet = miles => miles * 5280;
251
252console.log(chalk`
253 There are {bold 5280 feet} in a mile.
254 In {bold ${miles} miles}, there are {green.bold ${calculateFeet(miles)} feet}.
255`);
256```
257
258Blocks are delimited by an opening curly brace (`{`), a style, some content, and a closing curly brace (`}`).
259
260Template styles are chained exactly like normal Chalk styles. The following three statements are equivalent:
261
262```js
263console.log(chalk.bold.rgb(10, 100, 200)('Hello!'));
264console.log(chalk.bold.rgb(10, 100, 200)`Hello!`);
265console.log(chalk`{bold.rgb(10,100,200) Hello!}`);
266```
267
268Note that function styles (`rgb()`, `hsl()`, `keyword()`, etc.) may not contain spaces between parameters.
269
270All interpolated values (`` chalk`${foo}` ``) are converted to strings via the `.toString()` method. All curly braces (`{` and `}`) in interpolated value strings are escaped.
271
272## 256 and Truecolor color support
273
274Chalk supports 256 colors and [Truecolor](https://gist.github.com/XVilka/8346728) (16 million colors) on supported terminal apps.
275
276Colors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).
277
278Examples:
279
280- `chalk.hex('#DEADED').underline('Hello, world!')`
281- `chalk.keyword('orange')('Some orange text')`
282- `chalk.rgb(15, 100, 204).inverse('Hello!')`
283
284Background 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).
285
286- `chalk.bgHex('#DEADED').underline('Hello, world!')`
287- `chalk.bgKeyword('orange')('Some orange text')`
288- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`
289
290The following color models can be used:
291
292- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`
293- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`
294- [`keyword`](https://www.w3.org/wiki/CSS/Properties/color/keywords) (CSS keywords) - Example: `chalk.keyword('orange').bold('Orange!')`
295- [`hsl`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsl(32, 100, 50).bold('Orange!')`
296- [`hsv`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsv(32, 100, 100).bold('Orange!')`
297- [`hwb`](https://en.wikipedia.org/wiki/HWB_color_model) - Example: `chalk.hwb(32, 0, 50).bold('Orange!')`
298- [`ansi`](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) - Example: `chalk.ansi(31).bgAnsi(93)('red on yellowBright')`
299- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`
300
301## Windows
302
303If you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.
304
305## Origin story
306
307[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) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.
308
309## chalk for enterprise
310
311Available as part of the Tidelift Subscription.
312
313The maintainers of chalk and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-chalk?utm_source=npm-chalk&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
314
315## Related
316
317- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module
318- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal
319- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color
320- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes
321- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream
322- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
323- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
324- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes
325- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
326- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models
327- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal
328- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings
329- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings
330- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal
331
332## Maintainers
333
334- [Sindre Sorhus](https://github.com/sindresorhus)
335- [Josh Junon](https://github.com/qix-)