# FontForge: a font editor kept alive by releases nobody announces

> The free font editor for OpenType, TrueType and UFO, written in C, shipping monthly releases and a Python module on PyPI, with a README that points you elsewhere for everything.

**fontforge/fontforge** — Free (libre) font editor for Windows, Mac OS X and GNU+Linux

- Repository: https://github.com/fontforge/fontforge
- Website: http://fontforge.github.io/
- Stars: 8,044 · Forks: 816
- Language: C
- License: NOASSERTION
- Published: 2026-10-06 · Updated: 2026-10-06 · Language: en
- Canonical page: https://hysenlabs.com/projects/fontforge-fontforge

## A README that is deliberately only a signpost

The FontForge README is unusually short, and that turns out to be the first real fact about the project. It states the license status in the title line, a free (libre) font editor for Windows, Mac OS X and GNU+Linux, and one sentence about what it does: create, edit and convert fonts in OpenType, TrueType, UFO, CID-keyed, Multiple Master and many other formats. Then two links. fontforge.org is the homepage, and designwithfontforge.com is the font creation manual.

Everything else is delegated. `INSTALL.md` has developer instructions for building from source. `.github/workflows/scripts/setup_linux_deps.sh` is described as a list of installation dependencies. `CONTRIBUTING.md` covers how to contribute. The bug tracker is explicitly for reporting bugs and not for asking questions, and support is redirected to a SourceForge mailing list and a Libera chat channel.

That is an unusual amount of trust placed in off-repository documentation, and it has a practical consequence. You cannot learn FontForge from the repository alone. The design decisions you need to evaluate, like which formats it opens well and how the spline model behaves, live in the manual and in the code.

## What the tree says about the shape of the program

The directory listing explains the architecture better than any README paragraph could. `fontforge/` is the application proper. `fontforgeexe/` is the platform executable layer, which is where the X11, Cocoa and Windows differences live. `gdraw/` and `gutils/` are the graphics and utility libraries the editor draws through. `inc/` holds headers.

Then there is `pycontrib/` and `pyhook/`, which are the Python integration, `pyproject.toml` for the module packaging, and `extern/` for vendored dependencies. `Unicode/` at the repository root is where the nameslist and Unicode data support lives, which matters more than it sounds because a font editor is largely a Unicode implementation with a drawing surface attached.

The rest is build and support material: `CMakeLists.txt`, `cmake/`, `vcpkg.json` for Windows dependency management, a `.clang-format` and `.clang-files` for formatting, `.crowdin.yml` with `po/` for translations, `tests/`, `doc/`, `desktop/` for the Linux desktop entry, `osx/` for the Mac bundle, `Packaging/` and a `contrib/` directory.

## A Python module published to PyPI, not just a scripting hook

The `pyproject.toml` at the repository root packages FontForge as a Python distribution, which is a bigger commitment than simply embedding an interpreter. The build backend is `scikit_build_core` rather than setuptools, which is the modern approach for packages that need a compiled extension.

```toml
[build-system]
requires = ["scikit-build-core>=0.5"]
build-backend = "scikit_build_core.build"
```

The metadata is careful about scope. The package is named `fontforge`, described as a font editor and format converter library, licensed GPL-3.0-or-later, and requires Python 3.8 or newer with CPython as the only implementation. Classifiers list both C, C++ and Python 3, and cover MacOS, Windows and POSIX Linux, with topic classifiers for text processing fonts and vector-based graphics editors. That is a library intended to be imported by other tools, not only run by hand.

The keywords list is worth reading as a capability statement: opentype, truetype, type1, otf, ttf, woff, woff2, ufo, editor, converter. The project also carries a `README_PYPI.md` for the package page and a `WHEEL_BUILD_STATUS.md`, which suggests binary wheels are tracked as a deliverable. For a program whose UI is a decades-old GTK application, having a scriptable library entry point is the most interesting thing in the tree.

## Monthly releases, quiet but real

The release history is the strongest evidence that this is a maintained project. Three tags are visible: 20220308, 20230101 and 20251009, the last one named the FontForge October 2025 Release and published on 2025-10-09. The gaps are long, but the releases themselves are substantial.

The 2022 release reads like a proper annual summary: Python plugin support, an overhauled resource and appearance management system, merge and simplify improvements, Unicode support updated to 14.0.0 with nameslist functionality integrated directly, and new points of inflection, balance and harmonize operations. It also lists changes to default behaviour, including reserved font names no longer being written by default when adding the SIL Open Font License, and an altered UFO include path.

The 2025 release reads like a maintenance month, which is equally valuable to see. Documentation updates for the Python scripts, CI runner updates, translation files pulled from Crowdin, a consistent Python on the MacOS runner, a fix for lookup flags parsing, and a fix for glyph file names in the `uXXXXX` form. The repository was pushed to on 2026-09-20 and is not archived, with 7,964 stars and 811 forks. Open issues sit at 1,039, which is high in absolute terms and normal for a project of this age and user base.

## CI across three platforms, and a lot of tooling

The badges at the top of the README tell you the build story: a GitHub Actions CI workflow, an AppVeyor build status, a Coverity Scan build status, and a ReadTheDocs configuration in `.readthedocs.yaml`. Four separate signals, for a project that has to produce a working build on Linux, Windows and macOS from a C codebase that started long before any of those services existed.

The macOS entry in the tree is `osx/`, and there is a `desktop/` directory plus a `.dir-locals.el`, which is a small detail that dates the project to a specific Emacs-centred workflow. `.lgtm.yml` and `.appveyor.yml` are both still present, so the migration from LGTM to Coverity left its old configuration in the tree.

For a contributor, the entry points are all at the top level: `INSTALL.md` for dependencies and build steps, `CONTRIBUTING.md` for guidelines, and `tests/` for the test suite. `AUTHORS` is there as well. None of this is modern tooling, but it is complete tooling, and the release notes suggest the CI is genuinely exercised rather than decorative.

## Where FontForge is a defensible choice

It helps to be honest about the comparison. Glyphs and FontLab are what most professional type designers use, and both have a polished modern interface and vendor support. FontForge is free in the strict sense, it runs natively on all three desktop platforms, and its format list includes the legacy and semi-legacy formats that a professional tool increasingly deprioritizes, such as CID-keyed and Multiple Master.

It is also the right tool for a different job: batch work. Anything scripted through the Python module, where you open a font, change it, and write it out without touching a GUI, is a case where a library with a C core and a stable scripting surface beats a desktop application. The same applies to format conversion pipelines and to fixing up UFO sources, where the project explicitly notes that UFO support has its own include path semantics.

The licensing line is worth pausing on. The repository reports the license as NOASSERTION while the Python module metadata declares GPL-3.0-or-later, and the tree carries `COPYING.gplv3` alongside a separate `LICENSE` file. For a GPL tool that many distributions package, that split between the editor and the Python bindings is the detail to check before you build a commercial workflow on top of it.

## Conclusion

FontForge is the rare case where an unfashionable tool has kept its actual promises. It still opens the formats type designers need, it still ships for Windows, Mac and Linux, it still cuts monthly releases with real bug fixes in the notes, and it now has a Python module on PyPI that lets other programs drive it. What has not kept up is the README, which is six lines long and hands you to fontforge.org for everything that matters. Start with the site for the manual, then look at `pyproject.toml` and `gdraw/` in the repository if you want to understand what you are automating.

## FAQ

### What is FontForge used for?

FontForge is a free font editor for Windows, macOS and GNU+Linux. It is used to create, edit and convert font files across formats including OpenType, TrueType, UFO, CID-keyed and Multiple Master. It also ships a Python module so the same operations can be scripted outside the graphical interface.

### Does FontForge cost money?

No. The project describes itself as a free (libre) font editor, and the repository carries a GPL 3 license file. It does have paid counterparts in the commercial type design world, such as Glyphs and FontLab, which some studios choose for interface and vendor support reasons rather than price.

### Is FontForge safe to download?

It is a long-established open source project hosted on GitHub under the fontforge organization, with continuous integration across GitHub Actions and AppVeyor and a Coverity scan, and it is packaged by the major Linux distributions. The project itself points people to its official site fontforge.org for downloads, to a SourceForge mailing list and to the Libera chat channel for support rather than to unofficial mirrors.

## Sources

- [fontforge/fontforge on GitHub](https://github.com/fontforge/fontforge)
- [Issues](https://github.com/fontforge/fontforge/issues)
- [Project website](http://fontforge.github.io/)
- [README](https://github.com/fontforge/fontforge/blob/master/README.md)
- [Releases](https://github.com/fontforge/fontforge/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/fontforge-fontforge
