#roguelike #gamedev #rgb #hsv #color


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

5 unstable releases

0.8.2 Feb 10, 2021
0.8.1 Apr 29, 2020
0.8.0 Apr 8, 2020
0.7.0 Feb 22, 2020
0.1.0 Feb 21, 2020

#16 in Images

Download history 366/week @ 2021-01-11 275/week @ 2021-01-18 224/week @ 2021-01-25 224/week @ 2021-02-01 375/week @ 2021-02-08 312/week @ 2021-02-15 393/week @ 2021-02-22 377/week @ 2021-03-01 212/week @ 2021-03-08 304/week @ 2021-03-15 314/week @ 2021-03-22 229/week @ 2021-03-29 249/week @ 2021-04-05 335/week @ 2021-04-12 413/week @ 2021-04-19 284/week @ 2021-04-26

1,142 downloads per month
Used in 7 crates (4 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.2"


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


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.


~13K SLoC