Skip to content
Simon's Improved Layout Engine
Lua C++ C Makefile CMake Objective-C Other
Branch: master
Clone or download

Latest commit


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github ci(tooling): Setup Github Action to run commitlint (#752) Jan 4, 2020
.travis fix(travis): Don't die if links exist as happens when caches restored Jun 27, 2019
build-aux refactor(docker): Build docker using prebuilt dependencies Feb 25, 2020
cmake Add patches for dependencies and update CMake script. Apr 3, 2019
documentation docs(manual): Remove reference to removed auto-guessing feature May 23, 2020
examples refactor(core): Don't set unused variables, fixes lint warnings Oct 17, 2019
languages fix(languages): Localize TOC title functions (#849) Apr 17, 2020
libtexpdf @ 244cf6d chore(build): Pin newer version of libtexpdf with build fixes Feb 4, 2020
lua-libraries chore(tooling): Drop one-time-use file reader in favor of Lua's built… Jan 13, 2020
m4 fix(build): Look for Lua 5.3 executables with the version in their name Jan 30, 2020
packages fix(languages): Localize TOC title functions (#849) Apr 17, 2020
spec fix(core): Return correct length from icu.bidi_runs with surrogate pairs Mar 27, 2020
src fix(core): Return correct length from icu.bidi_runs with surrogate pairs Mar 27, 2020
tests test(typesetter): Add expectations for bidi test Feb 6, 2020
.busted chore(tests): Configure linting on Busted tests Oct 17, 2019
.cirrus.yml ci(cirrus): Install cosmo package on build Feb 6, 2020
.commitlintrc.yml chore(tooling): Add cirrus category to CI Jan 25, 2020
.editorconfig chore(tooling) Improve editorconfig file Oct 18, 2019
.gitattributes chore(tooling): Add Linguist related repository attributes (#764) Jan 13, 2020
.gitignore fix(tooling): Unblock standard-version release number bumping Feb 4, 2020
.gitmodules chore(tooling): Update libtexpdf submodule URL Sep 17, 2019
.luacheckrc chore(tooling): Ignore lua_modules_dist directory when linting Lua May 2, 2020
.travis.yml ci(travis): Use primary keys, not aliases; add missing key May 24, 2020 chore(release): 0.10.4 Apr 21, 2020
CMakeLists.txt ci(azure): Explain to Cmake that we need Penlight from LuaRocks Jun 18, 2019
Dockerfile fix(docker): Work around fresh GNU coreutils bombing Docker Hub (#851) Apr 20, 2020
LICENSE Prep for release. Aug 29, 2014
Makefile-fonts chore(build): Use new UFAS source for Symbola with Unicode 13 (#841) Apr 17, 2020 chore(tooling): Allow make targets to use arbitrary git refs (#867) May 8, 2020 docs(installation): Overhaul source install instructions Apr 22, 2020
azure-pipelines.yml Update azure-pipelines.yml for Azure Pipelines [skip ci] Apr 3, 2019 chore(build): Make autohell's `rm -f core` die a thousand deaths Jan 24, 2020 fix(tooling): Add missing lua-cosmo dependency for Markdown class (#822) Feb 5, 2020
fontconfig.conf chore(tests): Add project-local font config file Jun 13, 2019
package-lock.json chore(tooling): Bump commitizen from 4.0.4 to 4.0.5 (#862) May 1, 2020
sile-dev-1.rockspec fix(tooling): Add missing lua-cosmo dependency for Markdown class (#822) Feb 5, 2020 chore(manpage): Set date in man header at build time Jan 13, 2020 chore(build): Bludgeon autoconf into updating on commit Jan 10, 2020

Travis Build Status Azure Build Status Docker Build Status Luacheck Lint Status Coveralls Coverage Status
Chat on Gitter Conventional Commits Commitizen Friendly

What is SILE?

SILE is a typesetting system; its job is to produce beautiful printed documents. Conceptually, SILE is similar to TeX—from which it borrows some concepts and even syntax and algorithms—but the similarities end there. Rather than being a derivative of the TeX family SILE is a new typesetting and layout engine written from the ground up using modern technologies and borrowing some ideas from graphical systems such as InDesign.

What can I do with SILE (that I can’t do with TeX)?

First, have a look at the usage examples gallery. SILE allows you to:

  • Produce complex document layouts using frames.

  • Easily extend the typesetting system in a high-level programming language (Lua).

  • Directly process XML to PDF without the use of XSL stylesheets.

  • Typeset text on a grid.

Download and Installation

For macOS

A formula is available for Homebrew that can install either stable or head versions. Just run brew install sile for the latest stable release or brew install sile --HEAD to build from the latest git commit.

Note the Homebrew package does not automatically install the default font. The easiest way to install Gentium Plus is through the Homebrew Fonts caskroom:

$ brew tap caskroom/fonts
$ brew cask install font-gentium-plus

For Linux

Arch Linux

Arch Linux packages are available in the AUR that can be built manually or with an AUR helper (e.g. yay -S sile). Use sile for the latest stable release or sile-git to build from the latest git commit. Pre-built packages that may be directly installed with pacman -S sile are available in @alerque’s package repository.


An official PPA is available with precompiled packages for Ubuntu.

sudo add-apt-repository ppa:sile-typesetter/sile
sudo apt-get update
sudo apt-get install sile

Void Linux

Void Linux packages are available in the default package manager.


Other Linux distros may install via source, via Linux Brew, or via Nix.


Install from OpenBSD ports, via source, or optionally via Nix.

For Windows

There is no installer yet (track the status in issue #410), but prebuilt Windows binaries generated by the Azure build pipeline may be downloaded by selecting a build, opening the Windows job, selecting the artifact link from the final stage, and using the download button next to the sile folder. For tips on to how to build it yourself from source using CMake and Visual Studio, see issue #567.

Users of WSL (Windows Subsytem for Linux) may use the package manager of their choice depending on the system installed, including the respective Arch Linux or Ubuntu packages, Linux Brew, source, or Nix.

Multi-Platform & Containers


Docker images are available as siletypesetter/sile. Released versions are tagged to match (e.g. v.0.10.0), the latest release will be tagged latest, and a master tag is also available with the freshest development build. In order to be useful you need to tell the Docker run command how to connect your source documents (and hence give it place to write the output) as well as tell it who you are on the host machine so the output is generated inside the container with the expected ownership. You may find it easiest to run with an alias like this:

$ alias sile-docker='docker run --volume "$(pwd):/data" --user "$(id -u):$(id -g)" siletypesetter/sile:latest sile'
$ sile-docker input.sil

If you wish to connect to the SILE interactive readline interface using Docker:

$ docker run -it siletypesetter/sile:latest

One notable issue with using SILE from a Docker contaner is that it will not have access to your system's fonts by default. You can map a folder of fonts (any tree usable by fontconfig) into the container. This could be your system's default font directory, your user one, a project specific folder, or anything of your choosing. You can see where fonts are found on your system using fc-list. The path of your choosing from the host system should be passed as a volume mounted on /fonts inside the container like this:

$ docker run --volume "/usr/share/fonts:/fonts" --volume "$(pwd):/data" --user "$(id -u):$(id -g)" siletypesetter/sile:master

(Note this feature is not currently in the latest released version, hence the use of master in this example.)


Nix packages are available and can ben installed on several platforms.

From Source

SILE source code can be downloaded from its website or directly from the Github releases page.

SILE is written in the Lua programming language, so you will need a working Lua installation on your system (Lua 5.1, 5.2, and 5.3 are fully supported. Lua 5.4, LuaJIT, and Lua Resty should work, but are not currently tested). It also relies on external libraries to access fonts and write PDF files. Its preferred combination of libraries is Harfbuzz and libtexpdf, a PDF creation library extracted from TeX. Harfbuzz (minimum version 1.1.3) should be available from your operating system's package manager. For Harfbuzz to work you will also need fontconfig installed. SILE also requires the ICU libraries for Unicode handling.

On macOS, ICU can be installed via Homebrew:

$ brew install icu4c

After that, you might need to set environment variables. If you try to brew link and you get a series of messages including something like these two lines, you will need to run that export line to correctly set your path:

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

Optionally you may install the Lua libraries listed in the rockspec to your system (using either your system's package manager or luarocks (luarocks install sile-dev-1.rockspec). By default all the required Lua libraries will be downloaded and bundled alongside the SILE the instalation. If you downloaded a source tarball these dependencies are included, if you are using a git clone of the source repository the build system will require luarocks to fetch them during build. Note that OpenSSL development headers will be required for one of the Lua modules to compile¹. If your system has all the required packages already you may add --with-system-luarocks to the ./configure command to avoid bundling them.

¹ OpenSSL development headers are required to build luasec, please make sure they are setup BEFORE trying to build SILE! If you use your system's Luarocks packages this will be done for you, otherwise make sure you can compile luasec. You can try just this step in isolation before building SILE using luarocks --tree=/tmp install luasec.

If you are building from a a git clone, start by running the script to setup your environment (if you are using the source tarball this is unnecessary):

$ ./

Once your dependencies are installed, run:

$ ./configure
$ make install

This will place the SILE libraries and executable in a sensible location.

On some systems you may also need to run:

$ sudo ldconfig

… before trying to execute sile to make the system aware of the newly installed libraries.

Default Font

Since SILE v0.9.5, the default font has been Gentium Plus which is freely available from SIL’s site. It is not required that you install it, but if this font is not installed on your system, you won't be able to use the examples without modification. (Previously we used Gentium Basic, but that's getting harder to get hold of.)


If all goes well you should be able to compile one of the sample documents like this:

$ sile examples/test.sil
This is SILE 0.9.2
<examples/test.sil><examples/macros.sil>[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28]

You should now have examples/test.pdf ready for review.

Finding Out More

Please read the full SILE manual for more information about what SILE is and how it can help you. There are example documents (source and PDF) in the examples/ directory. There's also an FAQ available.


Please report bugs and send patches and pull requests at the github repository. For questions and discussion, please join the mailing list.


License Terms

SILE is distributed under the MIT licence.

You can’t perform that action at this time.