#color #rgb #hsv #rogue-like #terminal-colors #color-palette #gamedev


RGB and HSV color handling and utilities, including lerp and W3C named colors. Part of the bracket-lib family.

6 releases

0.8.7 Oct 4, 2022
0.8.2 Feb 10, 2021
0.8.1 Apr 29, 2020
0.7.0 Feb 22, 2020
0.1.0 Feb 21, 2020

#612 in Images

Download history 889/week @ 2024-03-13 1322/week @ 2024-03-20 1242/week @ 2024-03-27 1503/week @ 2024-04-03 1288/week @ 2024-04-10 1297/week @ 2024-04-17 1272/week @ 2024-04-24 1166/week @ 2024-05-01 1199/week @ 2024-05-08 1165/week @ 2024-05-15 1351/week @ 2024-05-22 1371/week @ 2024-05-29 1293/week @ 2024-06-05 937/week @ 2024-06-12 1123/week @ 2024-06-19 1097/week @ 2024-06-26

4,657 downloads per month
Used in 12 crates (5 directly)

MIT license

3.5K SLoC


This crate provides a color system for use in the bracket-terminal system. It is part of the overall bracket-lib system.

Using bracket-color

To obtain bracket-color, include the following in your Cargo.toml file:

bracket-color = "~0.8"


The basic structure is RGB, which represents a color as red/green/blue components. You can construct a color in a number of ways:

  • new() provides a black (all zeroes) entry.
  • from_f32 takes three floats, from 0.0 to 1.0 as a starting point.
  • from_u8 takes there bytes, from 0 to 255.
  • named takes a tuple of floats, with a LOT of predefined colors available. (e.g. RGB::named(RED)).
  • from_hex takes an HTML/CSS style hex number and converts it (e.g. RGB::from_hex("#aabbcc"))).

You can also convert RGB structures:

  • Add, subtract, multiply and divide operations are supported both on a single float and against another RGB structure.
  • to_hsv makes a Hue-Saturation-Value color.
  • to_greyscale uses a standard grayscale operation to make a greyscale approximation of a color.
  • desaturate makes a better greyscale conversion by converting to HSV and lowering the saturation.
  • lerp lets you smoothly transition between two colors, in RGB space.


The HSV system provides color support in the HSV space. You can construct an HSV color as follows:

  • new() makes an all-zero HSV color.
  • from_f32 lets you specify HSV as floats.
  • RGB::to_hsv converts an RGB color into an HSV color.

You can also go back to RGB with to_rgb.


A ColorPair is simply a helper structure holding both a foreground and a background.


Everything is exported via the bracket_color::prelude namespace.

Feature Flags

  • If you enable the serde feature flag, the RGB, HSV and ColorPair structures are derived as Serde serializable/de-serializable.
  • The rex feature flag enables RexPaint support.
  • The palette feature flag enables a static (thread-safe) palette map, linking named colors to colors. It's empty by default (the add_named_colors_to_palette adds all of the constant named colors for you, in lower case).
  • If you enable the bevy feature, conversions between Bevy's Color type and the bracket-color types are enabled.


There are a few examples to help get you going. They use crossterm for terminal output. You may run the examples with cargo run --example <name>.

  • lerp is a simple color lerp.
  • lerpit is an iterator-based lerp.
  • lerpit_hsv is an HSV lerp.
  • named_colors demonstrates how to access named colors.
  • shades_of_grey demonstrates greyscale and desaturate functions.
  • colors demonstrates various ways to acquire colors.


~217K SLoC