Rainbow
Rainbow adds text color, background color and style for console and command line output in Swift. It is born for cross-platform software logging in terminals, working in both Apple's platforms and Linux.
Basic Usage
Nifty way, using the String
extension, and print the colorized string.
Named Color & Style
It gives you something like this:
Installation
Swift Package Manager
If you are developing a cross platform software in Swift,
Swift Package Manager might
be your choice for package management. Just add the url of this repo to your
Package.swift
file as a dependency:
Then run swift build
whenever you get prepared.
You could know more information on how to use Swift Package Manager in Apple's official page.
Other Usage
String Interpolation & Nested
Swift string interpolation is supported. Define the color for part of the string. Or even create nested colorful strings. The inner color style will be kept:
ANSI 256-Color Mode
8-bit color is fully supported, for both text color and background color:
Hex Colors (approximated)
It also accepts a Hex color. Rainbow tries to convert it to a most approximate .bit8
color:
Valid format:
"FFF"
,"#FFF"
,"FFFFFF"
,"#FFFFFF"
,0xFFFFFF
True color
A few terminal emulators supports 24-bit true color. If you are sure the 24-bit colors can be displayed in your user's
terminal, Rainbow has no reason to refuse them!
Output Target
By default, Rainbow should be smart enough to detect the output target, to determine if it is a tty. For example, it
automatically output plain text if written to a file:
This is useful for sharing the same code for logging to console and to a log file.
You can manually change this behavior by either:
- Set the
Rainbow.outputTarget
yourself. - Pass a
"NO_COLOR"
environment value when executing your app. - Or set the
Rainbow.enabled
tofalse
.
Verbose Way
You can also use the more verbose way if you want:
Or even construct everything from scratch:
Please remember, the string extensions (such as "Hello".red
) is O(n)
. So if you are handling a huge string or very
complex nesting, there might be a performance issue or hard to make things in stream. The manual way is a rescue for these
cases.
Motivation and Compatibility
Thanks to the open source of Swift, developers now could write cross platform
programs with the same language. And I believe the command line software would be
the next great platform for Swift. Colorful and well-organized output always
helps us to understand what happens. It is really a necessary utility to create
wonderful software.
Rainbow
should work well in both OS X and Linux terminals. It is smart enough
to check whether the output is connected to a valid text terminal or not, to
decide the log should be modified or not. This could be useful when you want to
send your log to a file instead to console.