Top Related Projects
🖍 Terminal string styling done right
get colors in your node.js console
🌈Easily set your terminal text color & styles
🎨 Terminal color rendering library, support 8/16 colors, 256 colors, RGB color rendering output, support Print/Sprintf methods, compatible with Windows. GO CLI 控制台颜色渲染工具库,支持16色,256色,RGB色彩渲染输出,使用类似于 Print/Sprintf,兼容并支持 Windows 环境的色彩渲染
Quick Overview
Kleur is a minimalist and fast Node.js library for styling terminal text with ANSI colors. It provides a simple API for adding color and style to console output, making it easier to create visually appealing command-line interfaces and improve the readability of terminal messages.
Pros
- Lightweight and fast, with zero dependencies
- Supports both nested and chained color methods
- Automatically detects color support in the terminal
- Includes TypeScript definitions
Cons
- Limited to basic ANSI color and style options
- Not suitable for complex terminal UI applications
- Lacks advanced features like cursor manipulation or input handling
Code Examples
Basic color usage:
import kleur from 'kleur';
console.log(kleur.red('This text is red'));
console.log(kleur.blue().bold('This text is blue and bold'));
Nested color usage:
import { red, blue, green } from 'kleur';
console.log(red(`This is red ${blue('with blue')} and ${green('green')} nested`));
Conditional color application:
import kleur from 'kleur';
// Disable colors
kleur.enabled = false;
console.log(kleur.red('This will not be red'));
// Enable colors
kleur.enabled = true;
console.log(kleur.red('This will be red'));
Getting Started
To use Kleur in your project, first install it using npm:
npm install kleur
Then, import and use it in your JavaScript or TypeScript file:
import kleur from 'kleur';
console.log(kleur.cyan('Hello, colorful world!'));
console.log(kleur.yellow().bold().underline('Styled text'));
That's it! You can now start adding colors and styles to your terminal output using Kleur's simple and intuitive API.
Competitor Comparisons
🖍 Terminal string styling done right
Pros of Chalk
- More extensive color and style options, including background colors and advanced formatting
- Wider community adoption and ecosystem support
- Automatic color support detection for different environments
Cons of Chalk
- Larger package size and potentially slower performance
- More complex API with additional features that may not be necessary for simpler use cases
Code Comparison
Chalk:
import chalk from 'chalk';
console.log(chalk.blue.bold('Hello world!'));
console.log(chalk.green.bgRed.bold('Colorful text'));
Kleur:
import kleur from 'kleur';
console.log(kleur.blue().bold('Hello world!'));
console.log(kleur.green().bold('Colorful text'));
Key Differences
- Chalk offers more styling options, including background colors
- Kleur focuses on simplicity and performance
- Chalk uses a chaining API, while Kleur uses a function-based approach
- Kleur is more lightweight and has a smaller package size
- Chalk provides automatic color support detection, while Kleur requires manual configuration
Use Cases
- Choose Chalk for projects requiring extensive styling options and broad environment support
- Opt for Kleur in performance-critical applications or when a minimal, lightweight solution is preferred
get colors in your node.js console
Pros of colors.js
- More extensive color palette with support for 256 colors and custom color definitions
- Includes additional features like rainbow text and background colors
- Has a longer history and larger user base, potentially leading to better community support
Cons of colors.js
- Larger package size due to more features, which may impact load times
- More complex API with additional methods and options
- Higher maintenance overhead due to more extensive codebase
Code Comparison
colors.js:
const colors = require('colors');
console.log('Hello'.green); // outputs green text
console.log('World'.blue.bgRed); // blue text with red background
console.log(colors.rainbow('Multicolor!')); // rainbow text
kleur:
const { red, blue, green } = require('kleur');
console.log(green('Hello')); // outputs green text
console.log(blue().bgRed('World')); // blue text with red background
// No built-in rainbow function
Both libraries provide similar core functionality for coloring console output, but colors.js offers more advanced features at the cost of a larger package size. kleur focuses on simplicity and performance, making it a lighter alternative for basic color needs. The choice between the two depends on the specific requirements of your project and the importance of package size versus feature set.
🌈Easily set your terminal text color & styles
Pros of Colorette
- Smaller bundle size (1.1kB vs 1.4kB for Kleur)
- Supports both CommonJS and ES modules out of the box
- Slightly more intuitive API for chaining multiple styles
Cons of Colorette
- Fewer color options compared to Kleur
- Less actively maintained (fewer recent updates)
- No specific browser support (Kleur has a browser-compatible version)
Code Comparison
Colorette:
import { red, bold } from 'colorette'
console.log(red(bold('Hello, World!')))
Kleur:
import kleur from 'kleur'
console.log(kleur.red().bold('Hello, World!'))
Both libraries provide similar functionality for adding color to console output. Colorette uses individual imports for each color/style, while Kleur uses a chaining approach. The syntax difference is minimal, but some developers may prefer one style over the other.
Overall, both libraries are lightweight and efficient for adding color to terminal output. Colorette might be preferred for its smaller size and dual module support, while Kleur offers more color options and better browser compatibility.
🎨 Terminal color rendering library, support 8/16 colors, 256 colors, RGB color rendering output, support Print/Sprintf methods, compatible with Windows. GO CLI 控制台 颜色渲染工具库,支持16色,256色,RGB色彩渲染输出,使用类似于 Print/Sprintf,兼容并支持 Windows 环境的色彩渲染
Pros of Color
- More comprehensive feature set, including support for 256 colors and RGB/HSL
- Provides additional utilities like color mixing and conversion
- Offers both CLI and library usage
Cons of Color
- Larger package size due to more features
- Potentially more complex API for simple use cases
- Written in Go, which may not be ideal for all projects
Code Comparison
Kleur:
import kleur from 'kleur';
console.log(kleur.red('This text is red'));
Color:
import "github.com/gookit/color"
color.Red.Println("This text is red")
Summary
Kleur is a lightweight JavaScript library focused on simple ANSI color output, while Color is a more feature-rich Go library offering advanced color manipulation and CLI tools. Kleur is ideal for projects needing basic color output with minimal overhead, whereas Color is better suited for applications requiring extensive color handling capabilities.
The choice between the two depends on the specific project requirements, programming language preference, and the level of color manipulation needed. Kleur's simplicity makes it a good choice for JavaScript projects with basic color needs, while Color's comprehensive features make it suitable for more complex Go applications.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Features
- No dependencies
- Super lightweight & performant
- Supports nested & chained colors
- No
String.prototype
modifications - Conditional color support
- Fully treeshakable
- Familiar API
As of v3.0
the Chalk-style syntax (magical getter) is no longer used.
Please visit History for migration paths supporting that syntax.
Install
$ npm install --save kleur
Usage
import kleur from 'kleur';
// basic usage
kleur.red('red text');
// chained methods
kleur.blue().bold().underline('howdy partner');
// nested methods
kleur.bold(`${ white().bgRed('[ERROR]') } ${ kleur.red().italic('Something happened')}`);
Chained Methods
const { bold, green } = require('kleur');
console.log(bold().red('this is a bold red message'));
console.log(bold().italic('this is a bold italicized message'));
console.log(bold().yellow().bgRed().italic('this is a bold yellow italicized message'));
console.log(green().bold().underline('this is a bold green underlined message'));
Nested Methods
const { yellow, red, cyan } = require('kleur');
console.log(yellow(`foo ${red().bold('red')} bar ${cyan('cyan')} baz`));
console.log(yellow('foo ' + red().bold('red') + ' bar ' + cyan('cyan') + ' baz'));
Conditional Support
Toggle color support as needed; kleur
includes simple auto-detection which may not cover all cases.
Note: Both
kleur
andkleur/colors
share the same detection logic.
import kleur from 'kleur';
// manually disable
kleur.enabled = false;
// or use another library to detect support
kleur.enabled = require('color-support').level > 0;
console.log(kleur.red('I will only be colored red if the terminal supports colors'));
Important:
Colors will be disabled automatically in non TTY contexts. For example, spawning another process or piping output into another process will disable colorization automatically. To force colors in your piped output, you may do so with theFORCE_COLOR=1
environment variable:
$ node app.js #=> COLORS
$ node app.js > log.txt #=> NO COLORS
$ FORCE_COLOR=1 node app.js > log.txt #=> COLORS
$ FORCE_COLOR=0 node app.js > log.txt #=> NO COLORS
API
Any kleur
method returns a String
when invoked with input; otherwise chaining is expected.
It's up to the developer to pass the output to destinations like
console.log
,process.stdout.write
, etc.
The methods below are grouped by type for legibility purposes only. They each can be chained or nested with one another.
Colors:
black — red — green — yellow — blue — magenta — cyan — white — gray — grey
Backgrounds:
bgBlack — bgRed — bgGreen — bgYellow — bgBlue — bgMagenta — bgCyan — bgWhite
Modifiers:
reset — bold — dim — italic* — underline — inverse — hidden — strikethrough*
* Not widely supported
Individual Colors
When you only need a few colors, it doesn't make sense to import all of kleur
because, as small as it is, kleur
is not treeshakeable, and so most of its code will be doing nothing. In order to fix this, you can import from the kleur/colors
submodule which fully supports tree-shaking.
The caveat with this approach is that color functions are not chainable~!
Each function receives and colorizes its input. You may combine colors, backgrounds, and modifiers by nesting function calls within other functions.
// or: import * as kleur from 'kleur/colors';
import { red, underline, bgWhite } from 'kleur/colors';
red('red text');
//~> kleur.red('red text');
underline(red('red underlined text'));
//~> kleur.underline().red('red underlined text');
bgWhite(underline(red('red underlined text w/ white background')));
//~> kleur.bgWhite().underline().red('red underlined text w/ white background');
Note: All the same colors, backgrounds, and modifiers are available.
Conditional Support
The kleur/colors
submodule also allows you to toggle color support, as needed.
It includes the same initial assumptions as kleur
, in an attempt to have colors enabled by default.
Unlike kleur
, this setting exists as kleur.$.enabled
instead of kleur.enabled
:
import * as kleur from 'kleur/colors';
// or: import { $, red } from 'kleur/colors';
// manually disabled
kleur.$.enabled = false;
// or use another library to detect support
kleur.$.enabled = require('color-support').level > 0;
console.log(red('I will only be colored red if the terminal supports colors'));
Benchmarks
Using Node v10.13.0
Load time
chalk :: 5.303ms
kleur :: 0.488ms
kleur/colors :: 0.369ms
ansi-colors :: 1.504ms
Performance
# All Colors
ansi-colors x 177,625 ops/sec ±1.47% (92 runs sampled)
chalk x 611,907 ops/sec ±0.20% (92 runs sampled)
kleur x 742,509 ops/sec ±1.47% (93 runs sampled)
kleur/colors x 881,742 ops/sec ±0.19% (98 runs sampled)
# Stacked colors
ansi-colors x 23,331 ops/sec ±1.81% (94 runs sampled)
chalk x 337,178 ops/sec ±0.20% (98 runs sampled)
kleur x 78,299 ops/sec ±1.01% (97 runs sampled)
kleur/colors x 104,431 ops/sec ±0.22% (97 runs sampled)
# Nested colors
ansi-colors x 67,181 ops/sec ±1.15% (92 runs sampled)
chalk x 116,361 ops/sec ±0.63% (94 runs sampled)
kleur x 139,514 ops/sec ±0.76% (95 runs sampled)
kleur/colors x 145,716 ops/sec ±0.97% (97 runs sampled)
History
This project originally forked ansi-colors
.
Beginning with kleur@3.0
, the Chalk-style syntax (magical getter) has been replaced with function calls per key:
// Old:
c.red.bold.underline('old');
// New:
c.red().bold().underline('new');
As I work more with Rust, the newer syntax feels so much better & more natural!
If you prefer the old syntax, you may migrate to ansi-colors
or newer chalk
releases.
Versions below kleur@3.0
have been officially deprecated.
License
MIT © Luke Edwards
Top Related Projects
🖍 Terminal string styling done right
get colors in your node.js console
🌈Easily set your terminal text color & styles
🎨 Terminal color rendering library, support 8/16 colors, 256 colors, RGB color rendering output, support Print/Sprintf methods, compatible with Windows. GO CLI 控制台颜色渲染工具库,支持16色,256色,RGB色彩渲染输出,使用类似于 Print/Sprintf,兼容并支持 Windows 环境的色彩渲染
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot