Security News
Introducing the Socket Python SDK
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
The tiniest and the fastest library for terminal output formatting with ANSI colors
The picocolors npm package is a minimalistic library for coloring terminal text. It provides a simple and efficient way to add color to console output in Node.js applications. The package is designed to be lightweight and fast, making it an excellent choice for projects that require colored output without the overhead of more feature-rich libraries.
Text coloring
This feature allows you to color text output in the terminal. The example demonstrates how to make text appear red.
"const pico = require('picocolors');\nconsole.log(pico.red('This text is red'));"
Text styling
This feature enables you to apply styles such as bolding to your text output. The example shows how to make text bold.
"const pico = require('picocolors');\nconsole.log(pico.bold('This text is bold'));"
Background coloring
With this feature, you can set the background color of your text output. The example illustrates setting a green background for the text.
"const pico = require('picocolors');\nconsole.log(pico.bgGreen('This text has a green background'));"
Chalk is a popular npm package for coloring and styling terminal output. It offers a more extensive API compared to picocolors, including chainable and composable styles. However, picocolors focuses on being lightweight and fast, making it a better choice for minimalistic needs or performance-critical applications.
ansi-colors is another library for styling terminal text. It is similar to picocolors in its focus on performance and a minimalistic API. However, ansi-colors provides a slightly different API design and additional features for styling text, which might make it a preferable choice depending on the developer's needs.
Kleur is a lightweight terminal color library with a focus on performance, similar to picocolors. It offers a simple API for coloring text but does not include some of the more advanced styling capabilities found in chalk. Kleur and picocolors are both excellent choices for projects that prioritize speed and simplicity.
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_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:
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.167 ms
cli-color 31.431 ms
ansi-colors 1.585 ms
kleur 2.008 ms
kleur/colors 0.773 ms
colorette 2.476 ms
nanocolors 0.833 ms
+ picocolors 0.466 ms
Benchmark for simple use case:
$ node ./benchmarks/simple.js
chalk 24,066,342 ops/sec
cli-color 938,700 ops/sec
ansi-colors 4,532,542 ops/sec
kleur 20,343,122 ops/sec
kleur/colors 35,415,770 ops/sec
colorette 34,244,834 ops/sec
nanocolors 33,443,265 ops/sec
+ picocolors 33,271,645 ops/sec
Benchmark for complex use cases:
$ node ./benchmarks/complex.js
chalk 969,915 ops/sec
cli-color 131,639 ops/sec
ansi-colors 342,250 ops/sec
kleur 611,880 ops/sec
kleur/colors 1,129,526 ops/sec
colorette 1,747,277 ops/sec
nanocolors 1,251,312 ops/sec
+ picocolors 2,024,086 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
and bright variants bgBlackBright
, bgRedBright
, bgGreenBright
, bgYellowBright
, bgBlueBright
, bgMagentaBright
, bgCyanBright
, bgWhiteBright
.
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
and bright variants blackBright
, redBright
, greenBright
, yellowBright
, blueBright
, magentaBright
, cyanBright
, whiteBright
.
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 screen
import 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 configuration
import pc from "picocolors"
let { red, bgWhite } = pc.createColors(options.enableColors)
chalk
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"}}}`
FAQs
The tiniest and the fastest library for terminal output formatting with ANSI colors
We found that picocolors demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
Security News
Floating dependency ranges in npm can introduce instability and security risks into your project by allowing unverified or incompatible versions to be installed automatically, leading to unpredictable behavior and potential conflicts.
Security News
A new Rust RFC proposes "Trusted Publishing" for Crates.io, introducing short-lived access tokens via OIDC to improve security and reduce risks associated with long-lived API tokens.