Font Design & Development
Font development involves both creative graphic design and careful technical engineering. This guide and the accompanying articles have been written to document what we think are the best technical practices to use in font development. They are generally the practices we use — or intend on using as soon as practically possible.
This is not intended to be a comprehensive encyclopedia of font development information, nor to cover the full range of techniques and options. It will generally offer a single recommended procedure, setting, or tool. However, we encourage adding links to alternatives when appropriate. It is very much a work in progress.
The purpose of these articles is to give helpful guidance to those who want to create fonts that work well in the intended environments. The recommendations may seem at times dogmatic, but that’s the nature of recommendations based on experience and a well-informed perspective. With each recommendation we’ve tried to provide some indication of whether it’s subjective opinion or objective fact. Recommendations are generally in bold, and they fall into four loose types:
- “Developers may choose to” - there is no single good option, and developers should consider various alternatives.
- “We recommend that” - there seems to be one option that is best for most developers, that we ourselves have chosen and that we suggest that others follow.
- “Ascender and descender values should” - there is clearly a best option and to do otherwise would be asking for problems.
- “Production glyph names must” - if you don’t do this then your font is unlikely to work properly.
Other resources
There are also other reliable sources for information on good font development practice. Their guidance may differ slightly from what is here but is generally sound.
- Fonts and Layout for Global Scripts has some excellent foundational material on font concepts and a detailed introduction to the complexities of OpenType, even if some sections are still being written.
- The Google Fonts Guide contains information for font developers wishing to submit their fonts to the Google Fonts service. Although some of the guidance is unique to Google Fonts, much of it is generally good practice.
- The Glyphs site has many useful tutorials and technical articles. Most of them focus on using Glyphs, but also document good design techniques.
- Google Font Knowledge is a knowledge base with various articles around font design and typography.
- Design With FontForge can be helpful, however, the site does not support secure connections.
Background knowledge
These articles assume a certain amount of background knowledge. Some of this depends on the specific subject. For example, a font designer who is drawing glyphs needs to know different things than a script engineer who is constructing OpenType tables.
The most important background knowledge that all those involved in font development need to have is an understanding of the differences and interrelationships between characters, keystrokes, codepoints and glyphs. It is also important to understand the basic contents and structure of an OpenType/TrueType font. An Introduction to TrueType Fonts provides a brief orientation for designers and engineers.
Design, engineering, and production tools
There are five primary visual font design tools, each with their particular strengths:
- Glyphs - The de facto current standard for font design. macOS only.
- FontLab - Excellent cross-platform (macOS, Windows) tool with particularly good support for variable font development.
- Robofont - Powerful, flexible, and highly extensible design tool, especially for working with UFO sources. macOS only.
- Fontra - Free and open source cross-platform tool based on web technologies (browser-based, not limited by OS). Designed for collaborative workflows and variable fonts. Provides support for formats used by other editors.
- FontForge - Free and open source cross-platform tool (Linux, macOS, Windows). No longer under active maintenance and can be difficult to use, but continues to be used successfully.
Font development and engineering tools are primarily Python-based, although some are beginning to be written in Rust:
- Python Tools describes some very useful Python libraries and scripts for font development and production.
- Font Engineering notes is a series of technical notes by Google font engineers and includes some information on using Rust-based tools.
Font design tools can export fonts in common formats (.ttf, .otf, .woff) but the process can be complex and time consuming for a large font family or portfolio of font families. Foundries often develop their own automated internal font build systems and workflows to produce fonts from Glyphs or UFO sources. These connect a variety of tools to compile and test fonts from the source formats to the final binaries. Two of the openly licensed and publicly-available systems are:
- fontmake - This is the most widely used build system, developed by Google. It provides easy access to fonttools, glyphsLib, and related libraries, although it’s only one part of their overall workflow.
- Smith - SIL-developed python framework for building, testing, maintaining, and releasing fonts. It integrates and orchestrates various libraries, scripts, and utilities to make font development easier.
We recommend that individual font developers use a consistent and predictable workflow and set of tools for design and production, preferably based on free and open source formats and tools. This enables greater collaborative efforts and makes it easier to use CI (Continuous Integration) and QA (Quality Assurance) systems.
Technical topics
The articles linked below touch on some of the key topics in font development and engineering.
Font formats describes the main production font formats and the separate development source formats used to produce them, including the text-based open Unified Font Objects (UFO) format.
Important font metadata and font family structures are addressed in Font & Style Naming and Versioning.
Design Metrics gives important guidance on how to set the relative size of your font in relation to others. Line Metrics describes the many different internal values that affect default line spacing and gives three techniques for making them consistent across platforms and devices.
Character Support discusses how to choose which characters your font should support, including a basic minimal list, and how to set Unicode range settings. Glyph naming describes how to set both working and production glyph names, including detailed information on the Adobe Glyph List (AGL) standard.
Shaping & Rendering gives links to the main technologies used to implement complex script behaviors. The most important of these is discussed in OpenType, with a special focus on custom stylistic set and character variant features and the User Interface Strings used to describe them to font users.
Copyright & Licensing focuses on how to properly declare copyright for fonts you create and indicate the license used to distribute them. It also gives more information on how to use the SIL Open Font License and how to modify and distribute open fonts.
Font testing is not currently covered in this guide, but will be in the future.
Building and modifying SIL fonts
See the SIL Font Development Guide for detailed guidance on how to build, modify, and contribute to SIL font projects.