farben 0.2.0

A zero-dependency terminal coloring library using markup-like syntax.
Documentation

banner logo

Crates.io Version docs.rs License Crates.io Downloads GitHub Stars GitHub Issues GitHub Last Commit Rust Edition Deps.rs Repo Size Maintenance

A minimal terminal coloring library using markup-like syntax.

[!WARNING] Farben, in this current state, is extremely unstable. It only has one or two public interface, unfinished features, and is experimetal. I do not recommend using it in production, at least not yet.

What Is Farben

Look at the tagline up there ^

Documentation

[!NOTE] The user guide right now is literally unreadable.

Usage

// Using no features
use farben::color;

println!("{}", color("[red]I'm red!")); // Runtime
let color = "red";
println!("{}", color_fmt!("[bold red]I'm bold and {color}!")); // Arguments supported
println!("{}", color("[rgb(255,128,0)]I'm orange![/] Back to normal."));
// Using the "compile" feature
use farben::color;

println!("{}", color!("[red]I'm red!")); // Compile-time
let color = "red";
println!("{}", color_fmt!("[bold red]I'm bold and {color}!")); // Compile time validation, not processing
println!("{}", color!("[rgb(255,128,0)]I'm orange![/] Back to normal."));

Features

  • Markup-like Syntax: Easy to parse, understand, and powerful when used.
  • Only 1 required runtime dependencies: Having only 1 dependency, and that being the logic itself, farben doesn't introduce a complicated dependency tree.
  • Opt-in Compile-time Processing: Colorize at compile time with no runtime overhead, completely opt-in with one additional dependency: farben-macros.
  • Complete Toolkit: Supports basic named ANSI, ANSI256, and even RGB.

Installation

To add farben as a dependency, run the following command on your Cargo project:

cargo add farben

Or alternatively, put directly on your Cargo.toml:

[dependencies]
farben = "0.2"

To enable compile-time processing, use the compile feature, like so:

cargo add farben --features compile

Or in the Cargo.toml:

[dependencies]
farben = { version: "0.2", features: ["compile"] }

[!NOTE] If you're using the compile feature, color is a macro, not a function. Use as color! going forward.

Syntax

Tags are written as [tag] and apply from that point forward. Multiple tags can be combined in a single bracket: [bold red].

[!WARNING] Spaces inside ansi() and rgb() are not supported at the moment, and it will error.

Tag Description
[red], [blue], ... Named colors (black, red, green, yellow, blue, magenta, cyan, white)
[rgb(r,g,b)] 24-bit RGB color
[ansi(n)] 256-color palette index
[bold], [italic], [dim], [underline], [blink], [strikethrough] Emphasis styles
[/] Reset all styles
\\[ Escaped bracket, treated as literal [ (notice the double escape \\)

Error Handling

color() panics on invalid markup. For graceful error handling, use try_color():

use farben::try_color;

match try_color("[invalid]oops") {
    Ok(s) => println!("{s}"),
    Err(e) => eprintln!("Error: {e}"),
}

Contributing

Contributions are welcome! Feel free to submit a Pull Request.

License

This project is protected under the RazkarStudio Permissive License (RSPL). See LICENSE.md for more details.

Cheers, RazkarStudio.

© 2026 RazkarStudio. All rights reserved.