SIL Font Development Notes

How to build, modify, and contribute to SIL International font projects.

View project onGitHub

6 Building Font Projects

Once the VM is configured, provisioned, and working, you’re ready to start building fonts! This assumes that you have completed all four steps in Setting Up Tools.

Here is a walkthrough of how to download one of SIL’s font projects and build it locally. The main tool used to run the process is Smith, a Python3-based tool for building, testing, and maintaining fonts and other writing system implementation components. It orchestrates and integrates various tools and utilities (many written in Python3) to make a standards-based open font production workflow easier to manage.

Note that this build process is not only for SIL font projects. It will work with any projects that use similar source formats, repository structure, and have a wscript file.

Check out a font project repository

On your local machine (not in the VM) navigate to your font projects folder (typically Documents/work/fonts) and check out the font repository, as in this example using Andika Mtihani:

git clone

This will checkout a local working copy of the git repository into a font-andika-mtihani folder within your font projects folder. You can also use a GUI client for git to do this if you prefer that method.

Start the VM and navigate to the project folder

Start up the VM and connect to it via ssh

vagrant up

vagrant ssh

Navigate to the newly checked out repository:

cd /smith

cd font-andika-mtihani

Build using Smith

Configure Smith if this is the first build for this project in your VM. This checks to see if all needed tools are installed:

smith configure

Build the fonts:

smith build

Run the whole test suite:

smith alltests

There are times, especially if you’ve changed the project wscript, when you need to wipe the results clean of any temporary artifacts. If at any time you want to start with a fresh build, run:

smith distclean

smith configure

smith build

Review build results

By default the build results will be in a results/ folder inside the project folder (font-andika-mtihani/results/). You can simply browse through these files on your host computer.

Build release packages

Smith also supports building release archives in .zip and .tar.xz formats, and in both development and release versions. These contain the fonts and key user documentation.

The following commands will produce development versions of the current work. “zip” is the Windows-targeted artifact with Windows line-endings and “tarball” is the macOS/Linux-targeted artifact with Unix line-endings and a .tar.xz extension. The current git hash and a -dev suffix will be added to the name of the artifacts to help distinguish development vs. released versions:

smith zip

smith tarball

To produce release versions of the current work without the git hash and -dev suffix, both in zip and tar.xz formats, type:

smith release

Video walkthrough

Watch this full screen for more legibility.

Understanding Smith

For those of you wanting to know more about Smith:

Building a font involves numerous steps and various programs, which, if done by hand, would be prohibitively slow. Even working out what those steps are can take a lot of work. Smith uses a dedicated file, based on Python syntax, at the root of the project - the wscript file - to allow the user to describe how to build the font. By chaining the different build steps intelligently, Smith reduces build times to seconds rather than minutes or hours, and makes build, test, fix, repeat cycles very manageable.

By making these processes repeatable, including for a number of fonts at the same time, projects can be shared with others simply, or - better yet - they can be included in a CI (Continuous Integration) system. This enables fonts to be developed using libre/open source software tools and open, collaborative methodologies.

The toolchain components (Smith itself and all the various components) are all open and do not place any undue restricted licensing requirements on the user or developer. You can run them on any system via a VM, and you can run them on a Continuous Integration (CI) server as well. You are welcome to copy the whole VM to other computers or share it with colleagues and friends without restrictions.