FontForge Native Project File Format Explained
This article provides a concise overview of the native project file format used by FontForge, the open-source font editor. While FontForge can export to standard delivery formats like TrueType (TTF) and OpenType (OTF), it relies on its own proprietary format to store work-in-progress font designs. Below, you will learn about the Spline Font Database (.sfd) format, its key characteristics, its benefits for font designers, and its modern directory-based alternative.
The Spline Font Database (.sfd)
The primary native file format used by FontForge is the
Spline Font Database, which uses the .sfd
file extension. When you create or edit a font in FontForge and choose
"Save" or "Save As," FontForge stores the project in this format rather
than generating an installable font file.
Key Characteristics of SFD
- Plain-Text Structure: An
.sfdfile is a human-readable ASCII text file. It organizes font information using simple key-value pairs and structured data blocks, making it possible to inspect and edit font data using a standard text editor. - Lossless Editing State: Standard compiled formats
such as TTF, OTF, and WOFF discard specific design data to optimize file
size for end users. The
.sfdformat preserves all editor-specific information, including non-integral coordinate points, undo histories, custom guides, background tracing layers, hinting instructions, and unfinished glyph components. - Vector Path Representation: Spline Font Database files store outlines using Bézier curves (both quadratic and cubic splines), allowing you to convert between different curve types without prematurely flattening or distorting your glyph paths.
Version Control and the SFDIR Format
Because .sfd is a monolithic text file, large font
projects can result in massive files that are difficult to merge when
multiple designers collaborate. To solve this, FontForge also supports a
directory-based variant called SFDIR
(.sfdir).
An .sfdir project replaces the single .sfd
file with a structured folder. In this format, global font metrics and
settings are stored in a main configuration file, while each individual
glyph is saved as its own separate .glyph text file. This
modular structure makes SFDIR ideal for version control systems like
Git, as edits to one glyph do not cause merge conflicts across the rest
of the typeface.
Saving vs. Generating Fonts
In FontForge, there is a clear distinction between saving a project and exporting a finished font:
- Save / Save As: Saves the work as an
.sfdor.sfdirproject to preserve all construction data for future editing. - Generate Fonts: Converts the native vector data into compiled, production-ready formats such as OpenType (CFF), TrueType, SVG, or web fonts (WOFF/WOFF2). Once generated, these files should not be used as the primary editing source, as reverse-engineering them back into FontForge can result in lost metadata and altered curve approximations.