#cli #terminal #colors #console #ansi

bin+lib richterm

rich terminal, follow's python's famous rich library

5 releases (3 breaking)

0.5.0 Aug 1, 2023
0.4.0 Jul 30, 2023
0.3.0 Jul 29, 2023
0.1.1 Jul 27, 2023
0.1.0 Jul 27, 2023

#120 in Command-line interface

MIT license

3.5K SLoC


use richterm::print;
use richterm::text;
use richterm::track;
use richterm::progress;

use std::{thread, time};

fn main() {
    let vec = vec![text(
        "fg:dark_blue bg:indian_red1 eff:b,i,u,blink,s",

    let arr = [text(" supports ", "")];

        text(" many ", "bg:sea_green2 fg:black eff:i"),
        text(" features ", ""),
        text(" out of the box", "bg:yellow fg:black"),
        text("\n", ""),

        text("Even", ""),
        text(" some ", "eff:b"),
            "emojis like :+1: :apple: :bar_chart: :airplane_departure: :baguette_bread: :minibus:",
        text("\n", ""),

    for _item in track(5, "Downloading ...") {
        let ten_millis = time::Duration::from_millis(5);
    let mut tasks = progress();
    let task1 = tasks.add_task("Descr1", 50);
    let task2 = tasks.add_task("Descr2", 50); 
    let task3 = tasks.add_task("Descr3", 50);
    while !tasks.finished{
        tasks.update(task1.clone(), 10.0);
        tasks.update(task2.clone(), 5.0);
        tasks.update(task3.clone(), 6.0);


fg and bg colors

  • rgb(111,111,111)
  • black, red, green, yellow, blue, magenta, cyan, white, bright_black, bright_red, bright_green, bright_yellow, bright_blue, bright_magenta, bright_cyan, bright_white, grey0, gray0, navy_blue, dark_blue, blue3, blue1, dark_green, deep_sky_blue4, dodger_blue3, dodger_blue2, green4, spring_green4, turquoise4, deep_sky_blue3, dodger_blue1, green3, spring_green3, dark_cyan, light_sea_green, deep_sky_blue2, deep_sky_blue1, spring_green2, cyan3, dark_turquoise, turquoise2, green1, spring_green1, medium_spring_green, cyan2, cyan1, dark_red, deep_pink4, purple4, purple3, blue_violet, orange4, grey37, gray37, medium_purple4, slate_blue3, royal_blue1, chartreuse4, dark_sea_green4, pale_turquoise4, steel_blue, steel_blue3, cornflower_blue, chartreuse3, cadet_blue, sky_blue3, steel_blue1, pale_green3, sea_green3, aquamarine3, medium_turquoise, chartreuse2, sea_green2, sea_green1, aquamarine1, dark_slate_gray2, dark_magenta, dark_violet, purple, light_pink4, plum4, medium_purple3, slate_blue1, yellow4, wheat4, grey53, gray53, light_slate_grey, light_slate_gray, medium_purple, light_slate_blue, dark_olive_green3, dark_sea_green, light_sky_blue3, sky_blue2, dark_sea_green3, dark_slate_gray3, sky_blue1, chartreuse1, light_green, pale_green1, dark_slate_gray1, red3, medium_violet_red, magenta3, dark_orange3, indian_red, hot_pink3, medium_orchid3, medium_orchid, medium_purple2, dark_goldenrod, light_salmon3, rosy_brown, grey63, gray63, medium_purple1, gold3, dark_khaki, navajo_white3, grey69, gray69, light_steel_blue3, light_steel_blue, yellow3, dark_sea_green2, light_cyan3, light_sky_blue1, green_yellow, dark_olive_green2, dark_sea_green1, pale_turquoise1, deep_pink3, magenta2, hot_pink2, orchid, medium_orchid1, orange3, light_pink3, pink3, plum3, violet, light_goldenrod3, tan, misty_rose3, thistle3, plum2, khaki3, light_goldenrod2, light_yellow3, grey84, gray84, light_steel_blue1, yellow2, dark_olive_green1, honeydew2, light_cyan1, red1, deep_pink2, deep_pink1, magenta1, orange_red1, indian_red1, hot_pink, dark_orange, salmon1, light_coral, pale_violet_red1, orchid2, orchid1, orange1, sandy_brown, light_salmon1, light_pink1, pink1, plum1, gold1, navajo_white1, misty_rose1, thistle1, yellow1, light_goldenrod1, khaki1, wheat1, cornsilk1, grey100, gray100, grey3, gray3, grey7, gray7, grey11, gray11, grey15, gray15, grey19, gray19, grey23, gray23, grey27, gray27, grey30, gray30, grey35, gray35, grey39, gray39, grey42, gray42, grey46, gray46, grey50, gray50, grey54, gray54, grey58, gray58, grey62, gray62, grey66, gray66, grey70, gray70, grey74, gray74, grey78, gray78, grey82, gray82, grey85, gray85, grey89, gray89, grey93, gray93,


  • b - bold
  • i - italic
  • u - underline
  • blink - blink
  • d - dim
  • r - reverse


Try github-flavoured shortcodes

track(5, "description")



    let mut tasks = progress();
    let task1 = tasks.add_task("Descr1", 50); // 50 is an arbitrary amount
    let task2 = tasks.add_task("Descr2", 50); 
    let task3 = tasks.add_task("Descr3", 50);
    while !tasks.finished{
        tasks.update(task1.clone(), 10.0);  // 10.0 is an arbitrary amount to move the progress bar
        tasks.update(task2.clone(), 5.0);   // 10.0 means 10.0/50.0
        tasks.update(task3.clone(), 6.0);


~53K SLoC