Skip to content
/ lux Public

A Swift library with a dedicated command-line tool to highlight plain code (e.g. for terminal output), HTML files code blocks or attributed strings (e.g. for macOS or iOS apps)


Notifications You must be signed in to change notification settings


Repository files navigation

Swift package
Swift Package Manager

Mac + Linux


A Swift library with a dedicated command-line tool to colorise plain code (e.g. for terminal output), HTML files code blocks or attributed strings (e.g. for macOS or iOS apps).

Currently supported languages:

  • Zsh/Bash
  • Swift (with Splash)
  • Xml
  • Xml enhanced (better visualisation of the tags)
  • Plist
  • Json
  • Yaml

Currently offered themes:

  • Dracula
  • Xcode light (default)
  • Xcode dark

Themes to be added:

  • [] Obsidian
  • [] Tomorrow

You can ask for a language support or a theme by opening an issue. You can also implement a language support if you prefer. The following screenshots show the different usages of Lux.

Plist in macOS app

iOS app with an enhanced XML format

Octory (new) wiki sample

Swift in the terminal

Zsh on iPad. A script from Scripting OSX to notarise a command-line tool.

Zsh in the terminal

Quick example

With the following Plist file


Here is how the library could inject terminal colors:


Or Css classes:

<span class="plist-tag">&lt;key&gt;</span><span class="plist-key-name">properties</span><span class="plist-tag">&lt;/key&gt;</span>
<span class="plist-tag">&lt;dict&gt;</span>
    <span class="plist-tag">&lt;key&gt;</span><span class="plist-key-name">Type</span><span class="plist-tag">&lt;/key&gt;</span>
    <span class="plist-tag">&lt;string&gt;</span><span class="plist-key-value">Input</span><span class="plist-tag">&lt;/string&gt;</span>
    <span class="plist-tag">&lt;key&gt;</span><span class="plist-key-name">InputType</span><span class="plist-tag">&lt;/key&gt;</span>
    <span class="plist-tag">&lt;string&gt;</span><span class="plist-key-value">List</span><span class="plist-tag">&lt;/string&gt;</span>
    <span class="plist-tag">&lt;key&gt;</span><span class="plist-key-name">IsAllowed</span><span class="plist-tag">&lt;/key&gt;</span>
    <span class="plist-tag">&lt;true/&gt;</span>
<span class="plist-tag">&lt;/dict&gt;</span>

You can then customise those classes in your CSS file. This wiki page describes each format CSS classes.

Note: For HTML text, the library will take a HTML string as input. In HTML, & is specified with &amp;, chevrons are written with &lt; for < and &gt; for >. Thus, when using a HTML injector, you can call its function escapingHTML() if you give it plain text as input. Otherwise, nothing has to be done when the input is already HTML encoded.

For the command line tool inject command, the default behavior is to replace those special characters before injecting colors. You can change this behavior with the --no-escape-html flag if you already have a HTML-encoded string as input. To escape those characters, Lux uses the following extension.

How to install it


Use the following command.

brew install ABridoux/formulae/lux

It will download the notarized executable from the latest release.


You can download the latest version of the executable from the releases. Note that the executable is notarized. Also, a notarized lux package is provided.

After having unzipped the file, you can install it if you want to:

install lux /usr/local/bin/ 

Here is a command which downloads the latest version of the program and install it in /usr/local/bin. Run it to download and install the latest version of the program. It erases the current version you may have.

curl -LO && \
unzip && \
rm && \
install lux /usr/local/bin && \
rm lux

Lux 0.4.3 and later are compatible with Linux. You can download the tar archive "lux-linux" in the releases. In case you got an error regarding "" when executing the binary, you can checkout this solution.

  • To find all lux versions, please browse the releases page.
  • When deploying a package (with a MDM for example), it might be useful to add the version to the name. To get lux latest version: simply run lux version to get your installed lux version. Also, if you are using scout, you can run curl --silent "" | scout tag_name to get the latest version available on the Github repository.

Swift package

Start by importing the package in your file Packages.swift.

let package = Package (
    dependencies: [
        .package(url: "", from: "0.1.0")

You can then import Lux in a file.

How to use it


Swift package

Special thanks

Thanks to all the contributors of Lux, especially to Damien Rivet who makes code reviews when he has the time. Also, many thanks to the team behind swift-argument-parser who keeps doing an incredible work. Also, many thanks to John Sundell for his several articles regarding an API development, and for the Splash library as well as all its contributors.


Font used for the logo: Flashlight by Bexxtype]


Report a bug

Lux aims to be community project, and anyone is welcome to contribute. As it is still a young project, some bugs may appear, or some text not colorised correctly. If you encounter such problem, please open a issue to describe it and try to add a use case to reproduce the bug. Hopefully, it should be resolved in the following release.

Add a new language or theme

You can read here how to add a new language to Lux. A wiki page explaining theming will be available soon.



A Swift library with a dedicated command-line tool to highlight plain code (e.g. for terminal output), HTML files code blocks or attributed strings (e.g. for macOS or iOS apps)