Terminal output styling with intuitive, clean and easy API written by Crystal.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.circleci chore: disable generate API documents Oct 22, 2017
spec refactor: Rename project to Terminal Nov 8, 2018
src release: dump v0.2.1 Nov 13, 2018
.gitignore 💃 May 3, 2017
LICENSE 💃 May 3, 2017
README.md refactor: Rename project to Terminal Nov 8, 2018
shard.yml release: dump v0.2.1 Nov 13, 2018



Language Tag Build Status

Terminal output styling with intuitive, clean and easy API written by Crystal.


Add this to your application's shard.yml:

    github: icyleaf/terminal



require "terminal"

# Usage for Shell UI
Terminal.message "hello world" # => "hello world"
Terminal.success "well done" # => "\e[32mwell done\e[0m"
Terminal.important "Your password is too easy" # => "\e[33mYour password is too easy\e[0m"
Terminal.error "Invaild username or password" # => "\e[31mInvaild username or password\e[0m"
Terminal.command "crystal version" # => "\e[36m$ crystal version\e[0m"


Full methods below:

method level description
header INFO normal default color with table border (Not compatible with emoji)
message INFO normal default color
success INFO green color
important WARN yellow color
error ERROR red color
verbose DEBUG normal default color
deprecated WARN blue with bold color
command INFO cyan color
command_output INFO magenta color
crash! Terminal::Crash an exception by program itself
user_error! Terminal::UserError an exception by user opertions
shell_error! Terminal::ShellError an exception by run shell command

Shell command

require "terminal"

# Check command result
Terminal.test "crystal" # => true

# Run shell command
Terminal.sh "pwd"
$ pwd
▸ /Users/icyleaf

Enable/Disable color


Verbose mode

Set Enviroment TERMINAL_UI_SHOW_TIMESTAMP to 1/true

Terminal.success "Installed successful"
# => "INFO 2017-10-22 12:45:33 \e[32mInstalled successful\e[0m"


All the output based on Logger, Here support one way to custom the given io and logger formatter.

io = IO::Memory.new
Terminal.ui_logger(io, Logger::Formatter.new { |severity, datetime, progname, message, io|
  io << "VERBOSE" << datetime.to_s("%F") << message

Terminal.message "Welcome to use terminal-ui"
# => "VERBOSE 2017-10-22 Welcome to use terminal-ui"

How to Contribute

Your contributions are always welcome! Please submit a pull request or create an issue to add a new question, bug or feature to the list.

All Contributors are on the wall.

You may also like

  • halite - HTTP Requests Client with a chainable REST API, built-in sessions and middlewares.
  • totem - Load and parse a configuration file or string in JSON, YAML, dotenv formats.
  • markd - Yet another markdown parser built for speed, Compliant to CommonMark specification.
  • poncho - A .env parser/loader improved for performance.
  • popcorn - Easy and Safe casting from one type to another.
  • fast-crystal - 💨 Writing Fast Crystal 😍 -- Collect Common Crystal idioms.


MIT License © icyleaf