Terminal Styling
Tint provides a fluent API for styling terminal text with colors and modifiers.
Basic Usage
scala
import wvlet.uni.cli.Tint
// Single color
println(Tint.red("Error message"))
println(Tint.green("Success!"))
println(Tint.blue("Information"))
// With modifiers
println(Tint.red.bold("Bold red"))
println(Tint.yellow.underline("Underlined"))
println(Tint.cyan.italic("Italic text"))Colors
Foreground Colors
scala
Tint.black("text")
Tint.red("text")
Tint.green("text")
Tint.yellow("text")
Tint.blue("text")
Tint.magenta("text")
Tint.cyan("text")
Tint.white("text")
Tint.gray("text")Bright Colors
scala
Tint.brightRed("text")
Tint.brightGreen("text")
Tint.brightYellow("text")
Tint.brightBlue("text")
Tint.brightMagenta("text")
Tint.brightCyan("text")
Tint.brightWhite("text")Background Colors
scala
Tint.bgRed("text")
Tint.bgGreen("text")
Tint.bgYellow("text")
Tint.bgBlue("text")
Tint.bgMagenta("text")
Tint.bgCyan("text")
Tint.bgWhite("text")Text Modifiers
scala
Tint.bold("Bold text")
Tint.dim("Dimmed text")
Tint.italic("Italic text")
Tint.underline("Underlined text")
Tint.strikethrough("Strikethrough")
Tint.inverse("Inverted colors")
Tint.hidden("Hidden text")Chaining Styles
Combine multiple styles:
scala
Tint.red.bold("Red and bold")
Tint.green.underline("Green underlined")
Tint.yellow.bgBlue.bold("Yellow on blue, bold")
Tint.cyan.italic.underline("Cyan italic underlined")Extended Colors
RGB Colors
scala
Tint.rgb(255, 87, 51)("Custom RGB")
Tint.bgRgb(100, 149, 237)("Custom background")Hex Colors
scala
Tint.hex("#FF5733")("Orange-red")
Tint.hex("#00FF00")("Lime green")
Tint.bgHex("#663399")("Purple background")256-Color Palette
scala
Tint.ansi256(208)("Color 208")
Tint.bgAnsi256(57)("Background 57")Reusable Styles
Create style presets:
scala
val errorStyle = Tint.red.bold
val successStyle = Tint.green
val warningStyle = Tint.yellow.bold
val infoStyle = Tint.cyan
println(errorStyle("Failed to connect"))
println(successStyle("Operation completed"))
println(warningStyle("Disk space low"))
println(infoStyle("Processing..."))Disabling Colors
For non-TTY output or CI environments:
scala
val style = Tint.red.bold
// Disable for this style
val plain = style.noColor
println(plain("No colors"))
// Or conditionally
val isInteractive = System.console() != null
val tint = if isInteractive then Tint.red else Tint().noColorExample: CLI Output
scala
import wvlet.uni.cli.Tint
object MyCLI:
val error = Tint.red.bold
val success = Tint.green
val highlight = Tint.cyan.bold
val dim = Tint.gray
def printStatus(name: String, status: String, ok: Boolean): Unit =
val statusStyle = if ok then success else error
val symbol = if ok then "✓" else "✗"
println(s"${dim("[")}${statusStyle(symbol)}${dim("]")} ${name}: ${statusStyle(status)}")
def main(args: Array[String]): Unit =
printStatus("Database", "Connected", true)
printStatus("Cache", "Timeout", false)
printStatus("API", "Ready", true)Output:
[✓] Database: Connected
[✗] Cache: Timeout
[✓] API: ReadyBest Practices
- Define styles once and reuse them
- Detect terminal support before using colors
- Provide plain fallback for non-TTY environments
- Use semantic names (errorStyle, not redBold)
- Keep it readable - don't overuse colors
