material-color-utils 0.1.2

Color libraries for Google's Material You
Documentation
# Material Color Utilities - Rust

A Rust port of [Material Color Utilities](https://github.com/material-foundation/material-color-utilities).

## Rust Port Highlights

- **Perfect Parity**: Tested against millions of combinations of color, contrast, scheme, and dark/light modes. Every
  output matches the reference Kotlin implementation exactly.
- **2026 spec**: Includes the 2026 color spec, and CMF scheme which were added recently.
- **No panics**: Safe Rust code. No `unwrap`, `expect`, or `panic` used in the library.
- **Performance**: Faster than Kotlin reference, while being thread safe.
- **Concurrency**: Built to be thread-safe for use in multithreaded apps.
- **Efficiency**: Cached where possible to allow for nearly free recalculation of colors. _~30 ns to resolve
  already-calculated roles_
- **Minimal dependencies**: Optional feature flags let you pull in extra functionality only when
  you need it for helper functions.

---

Color is a powerful design tool and part of the Material system along with
styles like typography and shape. In products, colors and the way they are used
can be vast and varied. An app’s color scheme can express brand and style.
Semantic colors can communicate meaning. And color contrast control supports
visual accessibility.

In many design systems of the past, designers manually picked app colors to
support the necessary range of color applications and use cases. Material 3
introduces a dynamic color system, which does not rely on hand-picked colors.
Instead, it uses color algorithms to generate beautiful, accessible color
schemes based on dynamic inputs like a user’s wallpaper. This enables greater
flexibility, personalization, and expression, all while streamlining work for
designers and teams.

Material Color Utilities (MCU) powers dynamic color with a set of color
libraries containing algorithms and utilities that make it easier for you to
develop color themes and schemes in your app.

<video autoplay muted loop src="https://user-images.githubusercontent.com/6655696/146014425-8e8e04bc-e646-4cc2-a3e7-97497a3e1b09.mp4" data-canonical-src="https://user-images.githubusercontent.com/6655696/146014425-8e8e04bc-e646-4cc2-a3e7-97497a3e1b09.mp4" class="d-block rounded-bottom-2 width-fit" style="max-width:640px;"></video>

## Capabilities Overview

<a href="https://github.com/material-foundation/material-color-utilities/raw/main/cheat_sheet.png">
    <img alt="library cheat sheet" src="https://github.com/material-foundation/material-color-utilities/raw/main/cheat_sheet.png" style="max-width:640px;" />
</a>

The library consists of various components, each having its own folder and
tests, designed to be as self-contained as possible. This enables seamless
integration of subsets into other libraries, like Material Design Components
and Android System UI. Some consumers do not require all components, for
example, MDC doesn’t need quantization, scoring, image extraction.

| Components      | Purpose                                                                                                                                                                                             |
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **helpers**     | High-level helpers for theme generation, image color extraction, and contrast calculations                                                                                                          |
| **blend**       | Interpolate, harmonize, animate, and gradate colors in HCT                                                                                                                                          |
| **contrast**    | Measure contrast, obtain contrastful colors                                                                                                                                                         |
| **dislike**     | Check and fix universally disliked colors                                                                                                                                                           |
| **dynamic**     | Obtain colors that adjust based on UI state (dark theme, style, preferences, contrast requirements, etc.)                                                                                           |
| **hct**         | A new color space (hue, chrome, tone) based on CAM16 x L*, that accounts for viewing conditions                                                                                                     |
| **palettes**    | Tonal palette — range of colors that varies only in tone <br>Core palette — set of tonal palettes needed to create Material color schemes                                                           |
| **quantize**    | Turn an image into N colors; composed of Celebi, which runs Wu, then WSMeans                                                                                                                        |
| **scheme**      | Create static and dynamic color schemes from a single color or a core palette                                                                                                                       |
| **score**       | Rank colors for suitability for theming                                                                                                                                                             |
| **temperature** | Obtain analogous and complementary colors                                                                                                                                                           |
| **utilities**   | Color — convert between color spaces needed to implement HCT/CAM16 <br>Math — functions for ex. ensuring hue is between 0 and 360, clamping, etc. <br>String - convert between strings and integers |

## Cargo Features

The library uses Cargo features to control dependencies and functionality. All features are enabled by default.

| Feature | Description                                                        | Default |
|:--------|:-------------------------------------------------------------------|:--------|
| `image` | Enables image color extraction helpers using the `image` crate.    | Yes     |
| `serde` | Enables serialization/deserialization for color types and schemes. | Yes     |
| `rayon` | Enables parallel processing for image and scheme helpers.          | Yes     |

## Dynamic Colors vs. Materialized Themes

This library provides two primary ways to work with Material color schemes:

1. **Dynamic Colors (`DynamicScheme`)**: Performs color calculations on the fly. This is the most efficient approach for
   production UI as it only calculates the specific color roles you actually use.
2. **Materialized Themes (`MaterializedTheme`)**: Generates a full set of both Light and Dark schemes beforehand. This
   is useful when you need to serialize the entire theme (e.g., to JSON) or when you want a simple, pre-computed object
   containing all color values.

Both approaches are powered by the same underlying Material Design algorithms.

## Usage Example

The easiest way to generate a theme is using the `theme_from_color` helper:

```rust
use material_color_utils::theme_from_color;
use material_color_utils::utils::color_utils::Argb;

let source_color = Argb::from_hex("#4285F4").unwrap();

// Generate a full materialized theme (Light + Dark schemes)
let theme = theme_from_color(source_color)
.variant(Variant::Vibrant)
.call();

println!("Light Primary: {:?}", theme.schemes.light.primary);
println!("Dark Primary: {:?}", theme.schemes.dark.primary);
```

## Learn about color science

[The Science of Color & Design - Material Design](https://material.io/blog/science-of-color-design)

## Try it out

### Material Theme Builder

We recommend incorporating the Material Theme Builder
[Figma plugin](https://www.figma.com/community/plugin/1034969338659738588/Material-Theme-Builder)
and [web tool](https://material-foundation.github.io/material-theme-builder/)
into the design workflow. With them, designers can easily experiment with
different dynamic color themes and see how they transform their designs with
just a few clicks.