The tiniest and the fastest library for terminal output formatting with ANSI colors.
import pc from "picocolors"
console.log(
pc.green(`How are ${pc.italic(`you`)} doing?`)
)
- No dependencies.
- It 14 times smaller and 2 times faster than chalk.
- Used by popular tools like PostCSS, SVGO, Stylelint, and Browserslist.
- Node.js v6+ & browsers support. Support both CJS and ESM projects.
- TypeScript type declarations included.
NO_COLOR
friendly.
With picocolors
we are trying to draw attention to the node_modules
size
problem and promote performance-first culture.
Credits go to the following projects:
- Nanocolors by @ai
- Colorette by @jorgebucaran
- Kleur by @lukeed
- Colors.js by @Marak
- Chalk by @sindresorhus
The space in node_modules including sub-dependencies:
$ node ./benchmarks/size.js
Data from packagephobia.com
chalk 101 kB
cli-color 1249 kB
ansi-colors 25 kB
kleur 21 kB
colorette 17 kB
nanocolors 16 kB
+ picocolors 7 kB
Library loading time:
$ node ./benchmarks/loading.js
chalk 6.760 ms
cli-color 37.949 ms
ansi-colors 1.790 ms
kleur 2.278 ms
kleur/colors 0.858 ms
colorette 2.724 ms
nanocolors 0.885 ms
+ picocolors 0.470 ms
Benchmark for simple use case:
$ node ./benchmarks/simple.js
chalk 17,544,513 ops/sec
cli-color 808,186 ops/sec
ansi-colors 3,798,290 ops/sec
kleur 17,209,612 ops/sec
kleur/colors 29,425,416 ops/sec
colorette 30,236,826 ops/sec
nanocolors 29,618,223 ops/sec
+ picocolors 29,514,102 ops/sec
Benchmark for complex use cases:
$ node ./benchmarks/complex.js
chalk 856,888 ops/sec
cli-color 109,678 ops/sec
ansi-colors 306,752 ops/sec
kleur 568,643 ops/sec
kleur/colors 984,151 ops/sec
colorette 1,337,991 ops/sec
nanocolors 1,088,193 ops/sec
+ picocolors 1,772,265 ops/sec
Picocolors provides an object which includes a variety of text coloring and formatting functions
import pc from "picocolors";
The object includes following coloring functions: black
, red
, green
, yellow
, blue
, magenta
, cyan
, white
, gray
.
console.log(`I see a ${pc.red("red door")} and I want it painted ${pc.black("black")}`);
The object also includes following background color modifier functions: bgBlack
, bgRed
, bgGreen
, bgYellow
, bgBlue
, bgMagenta
, bgCyan
, bgWhite
.
console.log(
pc.bgBlack(
pc.white(`Tom appeared on the sidewalk with a bucket of whitewash and a long-handled brush.`)
)
);
Besides colors, the object includes following formatting functions: dim
, bold
, hidden
, italic
, underline
, strikethrough
, reset
, inverse
.
for (let task of tasks) {
console.log(`${pc.bold(task.name)} ${pc.dim(task.durationMs + "ms")}`);
}
The library provides additional utilities to ensure the best results for the task:
-
isColorSupported
— boolean, explicitly tells whether or not the colors or formatting appear on the screenimport pc from "picocolors"; if (pc.isColorSupported) { console.log("Yay! This script can use colors and formatters"); }
-
createColors(enabled)
— a function that returns a new API object with manually defined color support configurationimport pc from "picocolors"; let { red, bgWhite } = pc.createColors(options.enableColors);
-
Replace package name in import:
- import chalk from 'chalk' + import pico from 'picocolors'
-
Replace variable:
- chalk.red(text) + pico.red(text)
-
Replace chains to nested calls:
- chalk.red.bold(text) + pico.red(pico.bold(text))
-
You can use
colorize-template
to replace chalk’s tagged template literal.+ import { createColorize } from 'colorize-template' + let colorize = createColorize(pico) - chalk.red.bold`full {yellow ${"text"}}` + colorize`{red.bold full {yellow ${"text"}}}`