Crate ansi_colours

source ·
Expand description

ansi_colours converts between 24-bit sRGB colours and 8-bit colour palette used by ANSI terminals such as xterm on rxvt-unicode in 256-colour mode. The most common use case is when using 24-bit colours in a terminal emulator which only support 8-bit colour palette. It allows true-colours to be approximated by values supported by the terminal.

When mapping true-colour into available 256-colour palette, it tries to balance accuracy and performance. It doesn’t implement the fastest algorithm nor is it the most accurate, instead it uses a formula which should be fast enough and accurate enough for most use-cases.

§Cargo features

To facilitate better interoperability the crate defines rgb crate feature (enabled by default). It adds support for the RGB type from rgb crate. Specifically, RGB8 (a.k.a. RGB<u8>) as well as RGB16 (a.k.a. RGB<u16>) types are supported.

Furthermore, ansi_term and termcolor features are available. They add support for Colour type from ansi_term crate and Color type from termcolor crate respectively. This includes support for calling ansi256_from_rgb with arguments of those types and implementation of ColourExt trait which extends the types with additional conversion methods.


Using this library with Cargo projects is as simple as adding a single dependency:

ansi_colours = "1.1"

and then using one of the two functions that the library provides:

use ansi_colours::*;

fn main() {
    // Colour at given index:
    println!("{:-3}: {:?}", 50, rgb_from_ansi256(50));

    // Approximate true-colour by colour in the palette:
    let rgb = rgb::RGB8 { r: 100, g: 200, b: 150 };
    let index = ansi256_from_rgb(rgb);
    println!("{:?} ~ {:-3} {:?}", rgb, index, rgb_from_ansi256(index));


  • Type which represents a colour convertible to sRGB. Used to provide overloaded versions of ansi256_from_rgb function.
  • Extension to types representing ANSI colours adding methods converting between RGB and indexed (a.k.a. fixed) representations.


  • Returns index of a colour in 256-colour ANSI palette approximating given shade of grey.
  • Returns index of a colour in 256-colour ANSI palette approximating given sRGB colour.
  • Returns sRGB colour corresponding to the index in the 256-colour ANSI palette.