- Description: mac
OSmenu-bar application framework in Common Lisp (SBCL/CFFI) - Depends on: 40ants-logging, alexandria, bordeaux-threads, cffi, cl-colors, cxml, defmain, dexador, fmt, local-time, local-time-duration, log4cl, log4cl-extras, slynk, swank, trivial-main-thread, ubiquitous, uiop, zpng
Barista is a macOS menu-bar application framework written in Common Lisp.
It lets you display live information — text, emojis, icons, or dynamically
rendered images — in the macOS status bar.
Plugins run as threads inside a single Lisp process and communicate with
AppKit via Grand Central Dispatch (GCD). Each plugin gets its own
NSStatusItem with an icon and a dropdown menu.
This is similar to XBar and TextBar, but with key advantages:
| Feature | XBar | Barista |
|---|---|---|
| Plugin execution | Subprocess per refresh | Threads in one Lisp process |
| State persistence | External storage | All in memory |
| Plugin language | Any (mostly Bash) | Common Lisp |
| Menu API | Text-based | Programmatic DSL + ObjC interop |
| Debugging | None | Live REPL via SLYNK/SWANK |
Because plugins are Lisp code running in the same process, you can connect
your IDE (SLIME/SLY) to the running Barista instance and debug plugins
interactively.
Barista turns the macOS menu bar into a live Lisp-powered dashboard.
A plugin is a Common Lisp class defined with the defplugin macro.
Each plugin can:
- Display a text label (plain string, emoji, or attributed string with colors and fonts) as its status-bar icon.
- Display an image icon (
PNGorICNSfile, or a dynamically renderedNSImage). - Run background worker threads on a schedule (every N seconds, minutes, or hours).
- Show a dropdown menu when the user clicks the icon — built either
declaratively at compile time (
defmenu) or dynamically at runtime (build-menu).
Barista loads user plugins from ~/.config/barista/plugins/ at startup,
then initializes AppKit on the macOS main thread and enters the
[NSApp run] event loop. Worker threads update NSStatusItem objects via
GCD (dispatch_async on the main queue), ensuring all UI mutations happen
on the main thread.
- In-memory state — no external files or databases; plugin state lives
in
CLOSslots for the lifetime of the process. - Programmatic menus — build menus with Lisp closures, not text formats.
Items support callbacks, submenus, checkmarks, and opening
URLs. - Dynamic icons — render images at runtime (e.g. bar-chart graphs) and update them from worker threads.
- Live debugging — connect
SLIME/SLYto the running process and inspect or modify plugins on the fly. - Configuration persistence — plugin enable/disable state is saved to
~/.config/barista/settings.lispand restored on launch.
Download the latest Barista-x.y.z.dmg from the
GitHub Releases page,
open it and drag Barista.app to your Applications folder.
Because the app is not signed with an Apple Developer certificate, macOS
will attach a quarantine flag to it when downloaded from the internet and
refuse to open it with a "Barista is damaged and can't be opened" message.
To remove the quarantine flag, run the following command in Terminal after
copying the app to /Applications:
xattr -dr com.apple.quarantine /Applications/Barista.app
Then open the app normally.
Barista uses Qlot for dependency management and Roswell for building.
git clone https://github.com/40ants/barista.git
cd barista
qlot install
./build.sh
This produces dist/Barista.app. To also copy it to /Applications:
INSTALL=1 ./build.sh
You can connect your IDE to a running Barista instance for live debugging:
# From the built executable:
./dist/Barista.app/Contents/MacOS/barista --slynk
./dist/Barista.app/Contents/MacOS/barista --slynk --port 4005
# From source via Roswell:
qlot exec ros app.ros --slynk
Connect from SLY:
M-x sly-connect RET 127.0.0.1 RET 5007 RET
SLIME is also supported via the --swank flag. Default port is 5007.
Logs are written to /tmp/barista.log.
Barista ships with several bundled plugins. Enable or disable them from the menu-bar icon → Plugins submenu (visible when no other plugin is active, or via Alt-click on any plugin icon).
A Pomodoro Technique
timer. Shows a tomato emoji (🍅) when idle and a countdown when running.
Choose 5, 15, or 25 minute intervals from the dropdown menu. The countdown
turns red in the last 3 minutes. A macOS notification fires when the timer
starts and stops.
A clipboard history manager. Polls the system pasteboard every second and keeps the last 10 copied items. Click the icon (📋) to see the history; click any item to copy it back to the clipboard. Includes a "Clear history" option.
Displays USD and EUR exchange rates from the
Central Bank of Russia daily XML feed. The status-bar
label flips between $ and € rates every 5 seconds. Rates are fetched on
startup and refreshed every 30 minutes. The dropdown menu shows both rates
side by side.
Shows real-time CPU, GPU, and memory usage as a colored bar-chart icon in
the status bar (rendered dynamically as a PNG). The dropdown menu displays
numeric percentages for each metric. Colors change from green to orange to
red as usage increases. Metrics are read directly from Mach/IOKit APIs via
CFFI — no external commands.
- barista-zai-quota — Shows Z.AI Coding Plan token quota (5-hour and weekly) as a colored bar-chart icon.
Plugins live as .lisp files in ~/.config/barista/plugins/. Each file is
loaded at startup before AppKit initialises.
The simplest plugin shows a text label and updates it on a schedule:
(defpackage #:my-plugins/clock
(:use #:cl)
(:import-from #:barista/plugin
#:defplugin
#:get-title)
(:import-from #:barista/vars
#:*plugin*))
(in-package #:my-plugins/clock)
(defplugin clock ()
(:title "🕐")
(:every :minute
(setf (get-title *plugin*)
(local-time:format-timestring nil (local-time:now)
:format '(:hour ":" (:min 2))))))The defplugin macro accepts the following options:
(:title EXPR)— initial menu-bar label. May be a plain string, an emoji, or anNSAttributedStringbuilt withmake-attributed-string/join-attributed-string.(:image PATH &key size template)— display aPNGorICNSfile as the status-bar icon.:sizescales the image (default 18).:template tmarks it as a template image so macOSadapts it to dark/light mode. Takes precedence over:title.(:menu SYMBOL)— name of adefmenuform to display on click.(:every PERIOD FORMS…)— starts a background worker thread.PERIODis a keyword (:second,:minute,:hour) or a list like(15 :seconds).
You can define custom slots on the plugin class by listing them after the
plugin name, just like defclass:
(defplugin my-plugin
((counter :initform 0 :accessor get-counter))
(:title "0")
(:every :second
(incf (get-counter *plugin*))
(setf (get-title *plugin*)
(format nil "~D" (get-counter *plugin*)))))(defpackage #:my-plugins/status
(:use #:cl)
(:import-from #:barista/plugin
#:defplugin
#:get-image)
(:import-from #:barista/vars
#:*plugin*))
(in-package #:my-plugins/status)
;; Colour icon — pixels render as-is (default).
(defplugin status-colour ()
(:image #p"~/.config/barista/icons/my-icon.png" :size 18))
;; Monochrome/symbolic icon — macOS recolours it for dark/light mode.
(defplugin status-mono ()
(:image #p"~/.config/barista/icons/mono-icon.png" :size 18 :template t))You can also update the icon at runtime from a worker thread:
(:every (30 :seconds)
(let ((icon-path (render-current-state-to-png)))
(setf (get-image *plugin*) icon-path)))setf get-image accepts a pathname, a namestring, or an NSImage pointer.
There are two ways to define a dropdown menu.
Declarative — defmenu (compile-time, static structure):
(defmenu start
(("Start 5 min" :callback (lambda () (start 5)))
("Start 15 min" :callback (lambda () (start 15)))
("---")
("Help" :url "https://example.com")))Item spec: (title &key callback submenu url state disabled).
"---"adds a separator.:callbackis a zero-argument function called on click.:submenuis a symbol naming anotherdefmenu.:urlopens aURLin the default browser.:state tshows a native checkmark.:disabled tgreys out the item.
Imperative — build-menu / add-item (runtime, dynamic structure):
(defun build-my-menu (plugin)
(build-menu
(dolist (item (get-items plugin))
(add-item item :callback (make-item-callback item)))
(add-separator)
(add-item "Clear" :callback (lambda () (clear plugin)))))Use build-menu when the menu structure depends on runtime data.
When a plugin needs a dynamic menu (built at runtime), wire up the
menu-thunk on the first worker tick instead of using the :menu option:
(defplugin my-plugin
((menu-ready :initform nil :accessor get-menu-ready))
(:title "Data")
(:every (5 :seconds)
(unless (get-menu-ready *plugin*)
(setf (barista/classes:get-menu-thunk
(barista/plugin:get-status-item *plugin*))
(let ((p *plugin*))
(lambda () (build-dynamic-menu p))))
(setf (get-menu-ready *plugin*) t))
(update-data *plugin*)))This pattern is used by the clipboard, currency, and system-monitor plugins.
barista/vars:*plugin* is the central context variable. It is bound inside
worker threads, menu thunks, and menu callbacks automatically. Always use it
to access the current plugin instance:
(setf (get-title *plugin*) "Updated!")
(setf (get-image *plugin*) #p"/path/to/icon.png")Use replace-menu to swap the dropdown menu of a running plugin:
(barista/plugin:replace-menu start-menu-symbol stop-menu-symbol)This replaces the menu-thunk on the status item.
On first launch Barista shows a system icon in the menu bar. Click it and
choose Plugins to enable the plugins you want. The selection is saved
to ~/.config/barista/settings.lisp and restored on every subsequent launch.
You can also Alt-click any plugin icon to access a maintenance menu with options to restart all plugins or quit Barista.
package barista/classes
class barista/classes:status-item ()
Wraps an NSStatusItem for one Barista plugin.
Readers
reader barista/classes:get-button-address (status-item) (= nil)
Integer pointer address of the NSStatusBarButton,
captured at initialisation time and used for click-table keying and cleanup.
Storing it avoids calling (send ns-item "button") on a potentially-released
object during hide.
reader barista/classes:get-menu-thunk (status-item) (:menu-thunk = nil)
Nullary function that builds and returns an NSMenu pointer.
reader barista/classes:get-ns-status-item (status-item) (= nil)
Raw CFFI pointer to the AppKit NSStatusItem.
reader barista/classes:system-item-p (status-item) (:system-item-p = nil)
When T, this is the system plugin item. The click handler skips appending the Settings/Quit section to its menu because it already is the Settings menu.
Accessors
accessor barista/classes:get-button-address (status-item) (= nil)
Integer pointer address of the NSStatusBarButton,
captured at initialisation time and used for click-table keying and cleanup.
Storing it avoids calling (send ns-item "button") on a potentially-released
object during hide.
accessor barista/classes:get-menu-thunk (status-item) (:menu-thunk = nil)
Nullary function that builds and returns an NSMenu pointer.
accessor barista/classes:get-ns-status-item (status-item) (= nil)
Raw CFFI pointer to the AppKit NSStatusItem.
accessor barista/classes:system-item-p (status-item) (:system-item-p = nil)
When T, this is the system plugin item. The click handler skips appending the Settings/Quit section to its menu because it already is the Settings menu.
generic-function barista/classes:get-image plugin
Return the current status-bar icon of PLUGIN.
generic-function barista/classes:get-title item
function barista/classes:get-string-form-for-macro string
Return a compile-time form that evaluates to an NSString or NSAttributedString.
Called by defmenu/build-menu macros to process user-supplied title values.
function barista/classes:join-attributed-string &rest parts
Concatenate PARTS into a single NSMutableAttributedString.
Each part may be a plain string, a (text :color ... :font ... :size ...) list,
or an existing NSAttributedString pointer.
function barista/classes:make-attributed-string text &key font color (size +default-font-size+)
Create an NSAttributedString from TEXT with optional FONT, COLOR, and SIZE.
function barista/classes:make-default-font size
Return the standard menu font at SIZE points.
function barista/classes:make-font name &key (size +default-font-size+)
Return an NSFont for NAME at SIZE points, or NIL if the font is unknown.
function barista/classes:make-ns-image path &key (size nil) (template nil)
Load an NSImage from PATH (pathname or string).
PATH may be a CL pathname or a namestring.
Keyword arguments:
SIZE -- when non-NIL, a number; calls setSize: with SIZE x SIZE points.
TEMPLATE -- when T, marks the image as a template image so macOS adapts
it to the current appearance (dark/light mode). Use T only
for monochrome/symbolic icons. For colour images leave NIL
(the default) so pixels render as-is.
Returns the NSImage pointer, or NIL if the file could not be loaded.
package barista/config
function barista/config:enabled-plugin-names
Return a list of plugin name keywords that are enabled in the config. Only keys explicitly set to T are included.
function barista/config:plugin-enabled-p plugin-name
Return T if PLUGIN-NAME is enabled in the configuration.
Defaults to NIL (disabled) when no value is stored -- this ensures a
clean first-run experience where the system plugin is shown instead.
function barista/config:restore-config
Load Barista configuration from disk. If the file does not exist (first launch), bootstraps an empty storage and points storage-pathname at the target path so that subsequent (setf (value ...)) calls persist to the correct file.
Note: when handler-case catches no-storage-file, ubiquitous leaves
storage-pathname pointing at its default global path and does NOT set
it to the requested path. We must set both storage-pathname and
storage explicitly to make offload work correctly later.
function barista/config:set-plugin-enabled plugin-name enabled-p
Persist the enabled/disabled state for PLUGIN-NAME.
ubiquitous automatically writes to disk after each (setf value).
package barista/main
function barista/main:load-plugins
Load all user plugin files from ~/.config/barista/plugins/.
function barista/main:main &rest argv
Start the Barista menu-bar application.
Loads user plugins, initialises AppKit on macOS thread 0 via
trivial-main-thread, and enters the AppKit event loop (never returns
normally).
function barista/main:start-plugins
Instantiate and start all registered plugins regardless of config.
Must be called on the AppKit main thread.
NOTE: Prefer start-enabled-plugins for normal startup.
function barista/main:stop-plugins
Stop all currently running plugins.
package barista/menu
generic-function barista/menu:hide item
Remove ITEM from the status bar and release the NSStatusItem.
function barista/menu:add-item title &key callback submenu url state disabled
Add an item to the menu currently being built by build-menu.
Must be called inside a build-menu body.
STATE: when T sets the native macOS checkmark (NSControlStateValueOn).
DISABLED: when T greys out the item and makes it non-interactive.
function barista/menu:add-separator
Add a native NSMenuItem separator to the menu currently being built.
Must be called inside a build-menu body.
function barista/menu:initialize-status-item item
Create the AppKit NSStatusItem for the barista/classes:status-item ITEM.
Must be called on the AppKit main thread.
function barista/menu:initialize-status-item-with-image ITEM IMAGE-PATH &KEY (SIZE 18.0d0) TEMPLATE
Like initialize-status-item but uses an image file instead of a text title.
IMAGE-PATH is a CL pathname or namestring to a PNG/ICNS file.
SIZE -- desired icon size in points (default 18); passed to make-ns-image.
TEMPLATE -- when T, marks the image as a template (monochrome/symbolic icons
that should adapt to dark/light mode). Leave NIL (default) for
colour images so pixels are rendered as-is.
function barista/menu:make-menu name-or-menu
Return an NSMenu pointer for NAME-OR-MENU.
NAME-OR-MENU may be a symbol (looked up in menu-constructors or as a
function), or an already-built NSMenu CFFI pointer.
macro barista/menu:build-menu &body body
Evaluate BODY with current-menu bound to a fresh NSMenu, then return it.
macro barista/menu:defmenu name (&rest items)
Define a named menu constructor and register it in menu-constructors.
Example: (defmenu my-menu (("Item one" :callback #'handler) ("Item two" :url "https://example.com")))
package barista/plugin
generic-function barista/classes:get-image plugin
Return the current status-bar icon of PLUGIN.
generic-function barista/plugin:get-menu plugin
Return the menu-thunk of PLUGIN's status item.
generic-function barista/plugin:get-status-item plugin
Return the barista/classes:status-item wrapper of PLUGIN.
generic-function barista/plugin:get-title plugin
Return the current status-bar label of PLUGIN.
generic-function barista/plugin:initialize-plugin plugin
generic-function barista/plugin:stop-plugin plugin
Stop PLUGIN, dispatching to the AppKit main thread via GCD.
function barista/plugin:get-available-plugins
function barista/plugin:get-plugin-instance class-name
function barista/plugin:is-plugin-running class-name
function barista/plugin:restart-plugin class-name
function barista/plugin:restart-plugins
function barista/plugin:running-plugins
function barista/plugin:start-enabled-plugins
Start only the plugins that are enabled in the configuration.
Must be called directly on the AppKit main thread (not via GCD) so that
all plugins are registered in running-plugins before the caller checks
visibility (e.g. ensure-system-plugin).
function barista/plugin:start-plugin class-name
Start CLASS-NAME, dispatching to the AppKit main thread via GCD.
Safe to call from any thread. Returns immediately.
macro barista/plugin:defplugin name (&rest slots) &body options
Define a Barista plugin class with background workers and a menu-bar item.
Options:
(:title EXPR) -- initial status-bar title (text or attributed)
(:image PATH &key size template) -- status-bar icon from an image file.
PATH is a pathname or string evaluated
at plugin start time.
SIZE (default 18) scales the icon.
TEMPLATE T for monochrome/symbolic icons
that should adapt to dark/light mode;
leave NIL (default) for colour images.
(:menu SYMBOL) -- name of a defmenu to show on click
(:every PERIOD FORMS) -- background worker: evaluate FORMS every PERIOD
:title and :image are mutually exclusive; :image takes precedence when both are supplied.
macro barista/plugin:replace-menu from to
macro barista/plugin:with-plugin name &body body
Run BODY with barista/vars:plugin bound to the named running plugin.
Useful for interactive debugging.
package barista/system-plugin
function barista/system-plugin:ensure-system-plugin
Call after start-enabled-plugins to show the system plugin when needed. Must be called on the AppKit main thread.
function barista/system-plugin:hide-system-plugin
Hide the system plugin status item from the menu bar. No-op if not visible.
function barista/system-plugin:make-plugins-submenu
Build the Settings > Plugins submenu dynamically. Each item shows the plugin name with a native checkmark if currently enabled.
function barista/system-plugin:show-system-plugin
Show the system plugin status item in the menu bar. Creates it on first call; no-op if already visible.
function barista/system-plugin:update-system-plugin-visibility
Show the system plugin if no user plugins are running; hide it otherwise. Must be called from the AppKit main thread (via on-main-thread when in doubt).
package barista/utils
function barista/utils:format-duration duration &optional stream
function barista/utils:open-url url
Open URL in the default browser via a background thread.
macro barista/utils:on-main-thread &rest actions
Schedule ACTIONS to run on the AppKit main thread via GCD.
Returns immediately (fire-and-forget). Safe to call from any thread.
package barista/vars
variable barista/vars:*debug* nil
If True, then debugger will be invoked on any error in the periodic threads.
variable barista/vars:*plugin* nil
Current plugin.
variable barista/vars:+default-font-size+ 14
Default font size in points for status-bar text.
variable barista/vars:+supported-colors+ (:aliceblue :antiquewhite :antiquewhite1 :antiquewhite2 :antiquewhite3
:antiquewhite4 :aquamarine :aquamarine1 :aquamarine2 :aquamarine3 :aquamarine4 :azure :azure1 :azure2 :azure3 :azure4 :beige :bisque :bisque1 :bisque2 :bisque3 :bisque4 :black :blanchedalmond :blue :blue1 :blue2 :blue3 :blue4 :blueviolet :brown :brown1 :brown2 :brown3 :brown4 :burlywood :burlywood1 :burlywood2 :burlywood3 :burlywood4 :cadetblue :cadetblue1 :cadetblue2 :cadetblue3 :cadetblue4 :chartreuse :chartreuse1 :chartreuse2 :chartreuse3 :chartreuse4 :chocolate :chocolate1 :chocolate2 :chocolate3 :chocolate4 :coral :coral1 :coral2 :coral3 :coral4 :cornflowerblue :cornsilk :cornsilk1 :cornsilk2 :cornsilk3 :cornsilk4 :cyan :cyan1 :cyan2 :cyan3 :cyan4 :darkblue :darkcyan :darkgoldenrod :darkgoldenrod1 :darkgoldenrod2 :darkgoldenrod3 :darkgoldenrod4 :darkgray :darkgreen :darkgrey :darkkhaki :darkmagenta :darkolivegreen :darkolivegreen1 :darkolivegreen2 :darkolivegreen3 :darkolivegreen4 :darkorange :darkorange1 :darkorange2 :darkorange3 :darkorange4 :darkorchid :darkorchid1 :darkorchid2 :darkorchid3 :darkorchid4 :darkred :darksalmon :darkseagreen :darkseagreen1 :darkseagreen2 :darkseagreen3 :darkseagreen4 :darkslateblue :darkslategray :darkslategray1 :darkslategray2 :darkslategray3 :darkslategray4 :darkslategrey :darkturquoise :darkviolet :debianred :deeppink :deeppink1 :deeppink2 :deeppink3 :deeppink4 :deepskyblue :deepskyblue1 :deepskyblue2 :deepskyblue3 :deepskyblue4 :dimgray :dimgrey :dodgerblue :dodgerblue1 :dodgerblue2 :dodgerblue3 :dodgerblue4 :firebrick :firebrick1 :firebrick2 :firebrick3 :firebrick4 :floralwhite :forestgreen :gainsboro :ghostwhite :gold :gold1 :gold2 :gold3 :gold4 :goldenrod :goldenrod1 :goldenrod2 :goldenrod3 :goldenrod4 :gray :gray0 :gray1 :gray10 :gray100 :gray11 :gray12 :gray13 :gray14 :gray15 :gray16 :gray17 :gray18 :gray19 :gray2 :gray20 :gray21 :gray22 :gray23 :gray24 :gray25 :gray26 :gray27 :gray28 :gray29 :gray3 :gray30 :gray31 :gray32 :gray33 :gray34 :gray35 :gray36 :gray37 :gray38 :gray39 :gray4 :gray40 :gray41 :gray42 :gray43 :gray44 :gray45 :gray46 :gray47 :gray48 :gray49 :gray5 :gray50 :gray51 :gray52 :gray53 :gray54 :gray55 :gray56 :gray57 :gray58 :gray59 :gray6 :gray60 :gray61 :gray62 :gray63 :gray64 :gray65 :gray66 :gray67 :gray68 :gray69 :gray7 :gray70 :gray71 :gray72 :gray73 :gray74 :gray75 :gray76 :gray77 :gray78 :gray79 :gray8 :gray80 :gray81 :gray82 :gray83 :gray84 :gray85 :gray86 :gray87 :gray88 :gray89 :gray9 :gray90 :gray91 :gray92 :gray93 :gray94 :gray95 :gray96 :gray97 :gray98 :gray99 :green :green1 :green2 :green3 :green4 :greenyellow :grey :grey0 :grey1 :grey10 :grey100 :grey11 :grey12 :grey13 :grey14 :grey15 :grey16 :grey17 :grey18 :grey19 :grey2 :grey20 :grey21 :grey22 :grey23 :grey24 :grey25 :grey26 :grey27 :grey28 :grey29 :grey3 :grey30 :grey31 :grey32 :grey33 :grey34 :grey35 :grey36 :grey37 :grey38 :grey39 :grey4 :grey40 :grey41 :grey42 :grey43 :grey44 :grey45 :grey46 :grey47 :grey48 :grey49 :grey5 :grey50 :grey51 :grey52 :grey53 :grey54 :grey55 :grey56 :grey57 :grey58 :grey59 :grey6 :grey60 :grey61 :grey62 :grey63 :grey64 :grey65 :grey66 :grey67 :grey68 :grey69 :grey7 :grey70 :grey71 :grey72 :grey73 :grey74 :grey75 :grey76 :grey77 :grey78 :grey79 :grey8 :grey80 :grey81 :grey82 :grey83 :grey84 :grey85 :grey86 :grey87 :grey88 :grey89 :grey9 :grey90 :grey91 :grey92 :grey93 :grey94 :grey95 :grey96 :grey97 :grey98 :grey99 :honeydew :honeydew1 :honeydew2 :honeydew3 :honeydew4 :hotpink :hotpink1 :hotpink2 :hotpink3 :hotpink4 :indianred :indianred1 :indianred2 :indianred3 :indianred4 :ivory :ivory1 :ivory2 :ivory3 :ivory4 :khaki :khaki1 :khaki2 :khaki3 :khaki4 :lavender :lavenderblush :lavenderblush1 :lavenderblush2 :lavenderblush3 :lavenderblush4 :lawngreen :lemonchiffon :lemonchiffon1 :lemonchiffon2 :lemonchiffon3 :lemonchiffon4 :lightblue :lightblue1 :lightblue2 :lightblue3 :lightblue4 :lightcoral :lightcyan :lightcyan1 :lightcyan2 :lightcyan3 :lightcyan4 :lightgoldenrod :lightgoldenrod1 :lightgoldenrod2 :lightgoldenrod3 :lightgoldenrod4 :lightgoldenrodyellow :lightgray :lightgreen :lightgrey :lightpink :lightpink1 :lightpink2 :lightpink3 :lightpink4 :lightsalmon :lightsalmon1 :lightsalmon2 :lightsalmon3 :lightsalmon4 :lightseagreen :lightskyblue :lightskyblue1 :lightskyblue2 :lightskyblue3 :lightskyblue4 :lightslateblue :lightslategray :lightslategrey :lightsteelblue :lightsteelblue1 :lightsteelblue2 :lightsteelblue3 :lightsteelblue4 :lightyellow :lightyellow1 :lightyellow2 :lightyellow3 :lightyellow4 :limegreen :linen :magenta :magenta1 :magenta2 :magenta3 :magenta4 :maroon :maroon1 :maroon2 :maroon3 :maroon4 :mediumaquamarine :mediumblue :mediumorchid :mediumorchid1 :mediumorchid2 :mediumorchid3 :mediumorchid4 :mediumpurple :mediumpurple1 :mediumpurple2 :mediumpurple3 :mediumpurple4 :mediumseagreen :mediumslateblue :mediumspringgreen :mediumturquoise :mediumvioletred :midnightblue :mintcream :mistyrose :mistyrose1 :mistyrose2 :mistyrose3 :mistyrose4 :moccasin :navajowhite :navajowhite1 :navajowhite2 :navajowhite3 :navajowhite4 :navy :navyblue :oldlace :olivedrab :olivedrab1 :olivedrab2 :olivedrab3 :olivedrab4 :orange :orange1 :orange2 :orange3 :orange4 :orangered :orangered1 :orangered2 :orangered3 :orangered4 :orchid :orchid1 :orchid2 :orchid3 :orchid4 :palegoldenrod :palegreen :palegreen1 :palegreen2 :palegreen3 :palegreen4 :paleturquoise :paleturquoise1 :paleturquoise2 :paleturquoise3 :paleturquoise4 :palevioletred :palevioletred1 :palevioletred2 :palevioletred3 :palevioletred4 :papayawhip :peachpuff :peachpuff1 :peachpuff2 :peachpuff3 :peachpuff4 :peru :pink :pink1 :pink2 :pink3 :pink4 :plum :plum1 :plum2 :plum3 :plum4 :powderblue :purple :purple1 :purple2 :purple3 :purple4 :red :red1 :red2 :red3 :red4 :rosybrown :rosybrown1 :rosybrown2 :rosybrown3 :rosybrown4 :royalblue :royalblue1 :royalblue2 :royalblue3 :royalblue4 :saddlebrown :salmon :salmon1 :salmon2 :salmon3 :salmon4 :sandybrown :seagreen :seagreen1 :seagreen2 :seagreen3 :seagreen4 :seashell :seashell1 :seashell2 :seashell3 :seashell4 :sienna :sienna1 :sienna2 :sienna3 :sienna4 :skyblue :skyblue1 :skyblue2 :skyblue3 :skyblue4 :slateblue :slateblue1 :slateblue2 :slateblue3 :slateblue4 :slategray :slategray1 :slategray2 :slategray3 :slategray4 :slategrey :snow :snow1 :snow2 :snow3 :snow4 :springgreen :springgreen1 :springgreen2 :springgreen3 :springgreen4 :steelblue :steelblue1 :steelblue2 :steelblue3 :steelblue4 :tan :tan1 :tan2 :tan3 :tan4 :thistle :thistle1 :thistle2 :thistle3 :thistle4 :tomato :tomato1 :tomato2 :tomato3 :tomato4 :turquoise :turquoise1 :turquoise2 :turquoise3 :turquoise4 :violet :violetred :violetred1 :violetred2 :violetred3 :violetred4 :wheat :wheat1 :wheat2 :wheat3 :wheat4 :white :whitesmoke :yellow :yellow1 :yellow2 :yellow3 :yellow4 :yellowgreen)
A list of supported color names.
