#cli #color #no-std #terminal #ansi-term

no-std owo-colors

Zero-allocation terminal colors that’ll make people go owo

23 releases (stable)

3.4.0 Apr 23, 2022
3.3.0 Mar 19, 2022
3.2.0 Dec 24, 2021
3.1.0 Nov 2, 2021
0.0.0 Aug 25, 2020

#3 in Command-line interface

Download history 74266/week @ 2022-03-11 72345/week @ 2022-03-18 77479/week @ 2022-03-25 78317/week @ 2022-04-01 69407/week @ 2022-04-08 77655/week @ 2022-04-15 79875/week @ 2022-04-22 77530/week @ 2022-04-29 100152/week @ 2022-05-06 75945/week @ 2022-05-13 87126/week @ 2022-05-20 62678/week @ 2022-05-27 69649/week @ 2022-06-03 90904/week @ 2022-06-10 97126/week @ 2022-06-17 86074/week @ 2022-06-24

352,438 downloads per month
Used in 327 crates (75 directly)

MIT license

125KB
2.5K SLoC

Colors

Current Crates.io Version docs-rs MSRV 1.51+ Downloads

A zero-allocation no_std-compatible zero-cost way to add color to your Rust terminal to make people go owo.

Supports:

  • All std/core formatters
  • Optional checking for if a terminal supports colors
    • Enabled for CI
    • Disabled by default for non-terminal outputs
    • Overridable by NO_COLOR/FORCE_COLOR environment variables
    • Overridable programatically via set_override
  • Dependency-less by default
  • Hand picked names for all ANSI (4-bit) and Xterm (8-bit) colors
  • Support for RGB colors
  • Set colors at compile time by generics or at runtime by value
  • All ANSI colors
    • Basic support (normal and bright variants)
    • Xterm support (high compatibility and 256 colors)
    • Truecolor support (modern, 48-bit color)
  • Styling (underline, strikethrough, etc)

owo-colors is also more-or-less a drop-in replacement for colored, allowing colored to work in a no_std environment. No allocations, unsafe, or dependencies required because embedded systems deserve to be pretty too uwu.

To add to your Cargo.toml:

owo-colors = "3"

Example

use owo_colors::OwoColorize;
 
fn main() {
    // Foreground colors
    println!("My number is {:#x}!", 10.green());
    // Background colors
    println!("My number is not {}!", 4.on_red());
}

Generic colors

use owo_colors::OwoColorize;
use owo_colors::colors::*;

fn main() {
    // Generically color
    println!("My number might be {}!", 4.fg::<Black>().bg::<Yellow>());
}

Stylize

use owo_colors::OwoColorize;

println!("{}", "strikethrough".strikethrough());

Only Style on Supported Terminals

use owo_colors::{OwoColorize, Stream::Stdout};

println!(
    "{}",
    "colored blue if a supported terminal"
        .if_supports_color(Stdout, |text| text.bright_blue())
);

Supports NO_COLOR/FORCE_COLOR environment variables, checks if it's a tty, checks if it's running in CI (and thus likely supports color), and checks which terminal is being used. (Note: requires supports-colors feature)

Dependencies

~32KB