• Stars
    star
    1,278
  • Rank 36,838 (Top 0.8 %)
  • Language
    JavaScript
  • License
    ISC License
  • Created about 3 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The tiniest and the fastest library for terminal output formatting with ANSI colors

picocolors

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.
  • 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 for both CJS and ESM projects.
  • TypeScript type declarations included.
  • NO_COLOR friendly.

Motivation

With picocolors we are trying to draw attention to the node_modules size problem and promote performance-first culture.

Prior Art

Credits go to the following projects:

Benchmarks

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

Usage

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 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)

Replacing chalk

  1. Replace package name in import:

    - import chalk from 'chalk'
    + import pico from 'picocolors'
  2. Replace variable:

    - chalk.red(text)
    + pico.red(text)
  3. Replace chains to nested calls:

    - chalk.red.bold(text)
    + pico.red(pico.bold(text))
  4. 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"}}}`

More Repositories

1

react-coroutine

Make your async components compact and descriptive by leveraging the power of the language features
JavaScript
263
star
2

jest-webdriver

Connect Jest tests to Selenium WebDriver
JavaScript
223
star
3

dataclass

Data classes for TypeScript & JavaScript
JavaScript
174
star
4

react-warehouse

React resource loader implementation
JavaScript
34
star
5

gulp-complexity

A JavaScript complexity analysis gulp task.
JavaScript
30
star
6

flux-stateful

Straightforward implementation for Flux stores. Maintain state easily.
JavaScript
30
star
7

gulp-jsinspect

A JavaScript copy-paste analysis gulp task.
JavaScript
20
star
8

newsletter

Observer done right
JavaScript
13
star
9

dgelong

A JavaScript Implementation of Useful First-class Citizens.
JavaScript
13
star
10

retransmitter

Async-friendly stateful React containers
JavaScript
12
star
11

selectre

Time & Space Efficient State Selectors
TypeScript
11
star
12

reflux-stateful

React-like state management in your Reflux stores.
JavaScript
10
star
13

redux-suspense

Enforcing better code patterns in existing Redux-based applications
JavaScript
9
star
14

babel-plugin-style-literal

Compile tagged string literal with CSS to a plain object with JSX inline styles
JavaScript
8
star
15

actor-system

Build robust and resilient message-driven systems
JavaScript
8
star
16

layout-elements

Layout primitive that abstracts flexbox.
JavaScript
6
star
17

string-interpolate

Simple string interpolation
JavaScript
5
star
18

distribution-chart

React + D3 + React Motion
JavaScript
5
star
19

use-bounding-rect

A tiny React hook to access DOM Rect of an element dynamically.
JavaScript
4
star
20

access-object

Data Access Object for your resources.
JavaScript
3
star
21

flux-guidelines

Comprehensive guide for idiomatic Flux
3
star
22

message-script

A set of tools for creating message-driven systems in JavaScript
JavaScript
3
star
23

node-bump

Update project version and create tag easily
JavaScript
2
star
24

dataflow-comparison

JavaScript
2
star
25

modular

Run your CJS Modules in browser without any build scripts. Simple CommonJS Module/1.1 proposal implementation
JavaScript
2
star
26

react-datablocks

Seamless arbitrary data visualization
JavaScript
2
star
27

gulp-wrap-exports

Wrap CommonJS module in IIFE and create global variable for browser
JavaScript
2
star
28

react-handle-event

JavaScript
2
star
29

md-reader

Parse and read Markdown files in browser
CSS
1
star
30

react-ux

JavaScript
1
star
31

OctoRobot

Web application for making predictions.
JavaScript
1
star
32

npm-shrink

Make sure you don't use unreliable packages. Help people with contributing in their projects.
JavaScript
1
star
33

touchy-things

https://alexeyraspopov.github.io/touchy-things
HTML
1
star
34

engineer-vs-developer

HTML
1
star
35

react-suspense-sandbox

Experimenting with React Suspense
JavaScript
1
star
36

parcel-transformer-inline-css-modules

1
star
37

react-viz

React, D3, and stuff
HTML
1
star
38

monorepo

Simple monorepo setup with NPM Workspaces
JavaScript
1
star
39

dotfiles

A collection of frontend-related config files
1
star
40

learn-script

A JavaScript implementation of machine learning algorithms.
JavaScript
1
star
41

dom-walker

DOM Walker based on TreeWalker API
JavaScript
1
star
42

testing-example

JavaScript
1
star
43

alexeyraspopov.github.io

Personal site
1
star
44

async-structure

Set of advanced pattern implementations for dealing with async data and flows
JavaScript
1
star
45

heapsort

A JavaScript Heapsort Algorithm Implementation
JavaScript
1
star
46

modalify

๐Ÿšง WCAG compliant, mobile ready, framework agnostic modal dialogs implementation
JavaScript
1
star
47

parcel-plugin-flow

๐Ÿ“ฆSeamlessly integrate Flow type checking to your Parcel-based project
JavaScript
1
star
48

halstead

A JavaScript implementation of Halstead complexity measures.
JavaScript
1
star