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 .sfd file 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 .sfd format 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 .sfd or .sfdir project 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.