Skip to content
Simon's Improved Layout Engine
Lua C++ C M4 CMake Makefile Other
Branch: master
Clone or download
Latest commit 69cfffb Oct 18, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows chore(tooling): Add GitHub Actions based CI job that runs luacheck Oct 16, 2019
.travis fix(travis): Don't die if links exist as happens when caches restored Jun 27, 2019
classes style(core): Use less messy Lua iterators Oct 17, 2019
cmake Add patches for dependencies and update CMake script. Apr 3, 2019
core docs(usage): Fix typos in usage display Oct 18, 2019
documentation style(core): Cleanup debug function coding using booleans Aug 28, 2019
examples refactor(core): Don't set unused variables, fixes lint warnings Oct 17, 2019
languages refactor(core): Don't leak local variables into global namespace Oct 17, 2019
libtexpdf @ e464bde chore(build): Pin latest libtexpdf library submodule Oct 14, 2019
lua-libraries refactor(core): Drop all Lua libraries available in LuaRocks Jun 18, 2019
m4 fix(tooling): Help autoconf tools find luajit Jun 18, 2019
packages refactor(core): Fix bogus Lua code (unreachable conditional? Oct 17, 2019
spec chore(tests): Configure linting on Busted tests Oct 17, 2019
src improvement(shaper): Try harder to use OT functions Jun 14, 2019
tests Merge pull request #697 from alerque/keep-perl-shiny Oct 18, 2019
.busted chore(tests): Configure linting on Busted tests Oct 17, 2019
.commitlintrc.yml chore(tooling): Add github as allowable module name in commit messages Oct 16, 2019
.editorconfig chore(tooling) Improve editorconfig file Oct 18, 2019
.gitmodules chore(tooling): Update libtexpdf submodule URL Sep 17, 2019
.luacheckrc chore(tests): Configure linting on Busted tests Oct 17, 2019
.travis.yml ci(travis): Test with latest Harfbuzz release Oct 14, 2019 chore(tooling): Update all links to Github repository with new home Sep 17, 2019
CMakeLists.txt ci(azure): Explain to Cmake that we need Penlight from LuaRocks Jun 18, 2019
LICENSE Prep for release. Aug 29, 2014
Makefile-fonts chore(tests): Teach make to download Noto Sans Ethiopic Jun 14, 2019 docs(core): Add a man page. Oct 18, 2019 docs(readme): Add badge for Lua lint CI job Oct 17, 2019
azure-pipelines.yml Update azure-pipelines.yml for Azure Pipelines [skip ci] Apr 3, 2019 chore(tooling): Update all links to Github repository with new home Sep 17, 2019 docs(core): Add a man page. Oct 18, 2019
fontconfig.conf chore(tests): Add project-local font config file Jun 13, 2019
package-lock.json chore(tooling): Bump versions on automated release tools Oct 14, 2019
package.json chore(tooling): Bump versions on automated release tools Oct 14, 2019
sile-dev-1.rockspec chore(tooling): Update to latest Penlight release Oct 14, 2019 docs(core): Add a man page. Oct 18, 2019 style(tooling): Setup generataed script as Lua Oct 17, 2019

Linux Build Status Windows Build Status Luacheck Coverage Status Join the chat 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 OS X

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

For Linux (prepackaged distros)

  • Arch Linux packages are available in the AUR that can be installed using your prefered package manager (e.g. yaourt -S sile). Use sile for the latest stable release or sile-git to build from the latest git commit.

  • Track the status of Ubuntu packages in issue #638.

  • Other Linux distros may be compiled from source or, optionally installed 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 may be downloaded from Azure's artifacts menu after selecting the latest build. For tips to how to build it yourself from source using CMake and Visual Studio, see issue #567.

From source

SILE 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. 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.4.2) 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.

Optionally you may install the Lua libraries listed in the rockspec to your system (using either your system's package manage or luarocks (luarocks install sile-dev-1.rockspec). By default all the required Lua libraries will bundled alongside the SILE the instalation. If you downloaded a source tarball these depenedncies 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-devel 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 skip this step.

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

As of SILE 0.9.5, the default font is Gentium Plus, available from here. 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 you are using OS X with Homebrew, the easiest way to install Gentium Plus is through the Homebrew Fonts caskroom:

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


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.