#roguelike #gamedev #rgb #hsv #color


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

#78 in Images

Download history 390/week @ 2023-02-09 984/week @ 2023-02-16 442/week @ 2023-02-23 568/week @ 2023-03-02 882/week @ 2023-03-09 470/week @ 2023-03-16 490/week @ 2023-03-23 556/week @ 2023-03-30 551/week @ 2023-04-06 465/week @ 2023-04-13 322/week @ 2023-04-20 865/week @ 2023-04-27 506/week @ 2023-05-04 574/week @ 2023-05-11 293/week @ 2023-05-18 529/week @ 2023-05-25

2,038 downloads per month
Used in 10 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.


~211K SLoC