FONTMAKE(1)
π FONTMAKE(1) π
πΈ NAME πΈ
fontmake - Metapackage for fontmake: repacker extras
β¨ DESCRIPTION β¨
okay so bestie, you already know fontmake is the metapackage for fontmake with repacker extras, periodt. This page is the manual for the command, and it starts with the big usage vibe check. It's long, but it's iconic:
usage: fontmake [-h] [--version] [-g GLYPHS | -u UFO [UFO ...] |
-m DESIGNSPACE] [--glyph-data GLYPHDATA] [-o FORMAT [FORMAT ...]]
[--output-path OUTPUT_PATH | --output-dir OUTPUT_DIR] [-i
[INSTANCE_NAME]] [--variable-fonts [VARIABLE_FONT_FILENAME]] [-M]
[--family-name FAMILY_NAME] [--round-instances]
[--designspace-path DESIGNSPACE_PATH] [--master-dir MASTER_DIR]
[--instance-dir INSTANCE_DIR] [--no-write-skipexportglyphs]
[--validate-ufo] [--check-compatibility |
--no-check-compatibility] [--expand-features-to-instances]
[--fea-include-dir FEA_INCLUDE_DIR] [--no-generate-GDEF]
[--save-ufo-as-zip | --ufo-structure {package,zip,json}]
[--indent-json] [--keep-overlaps] [--overlaps-backend BACKEND]
[--keep-direction] [--ttf-curves
{cu2qu,mixed,keep-quad,keep-cubic}] [-e ERROR] [-f] [-a
[AUTOHINT]] [-A] [--cff-round-tolerance FLOAT] [--optimize-cff
OPTIMIZE_CFF] [--subroutinizer {compreffor,cffsubr}]
[--no-optimize-gvar] [--filter CLASS] [--no-auto-use-my-metrics]
[--auto-use-my-metrics] [--drop-implied-oncurves]
[--interpolate-binary-layout [MASTER_DIR]] [--feature-writer
CLASS] [--debug-feature-file FILE] [--no-variable-features]
[--mti-source MTI_SOURCE] [--production-names |
--no-production-names] [--subset | --no-subset] [-s | -S]
[--timing] [--verbose LEVEL] [INPUTS ...]
lowkey that's the whole vibe. now let's break down the options, because there are a lot and they're all invited to the party. π
π options: π
-h,--helpβ show this help message and exit. literally the "help me bestie" button.--versionβ show program's version number and exit. slay, know your version.--production-namesβ Rename glyphs with production names if available otherwise use uninames.--no-production-namesβ (the manpage gives no extra description here, bestie β it's just the counterpart to--production-names) π--subsetβ Subset font using export flags set by glyphsLib.--no-subsetβ (the source leaves this one blank β it's just the counterpart, bestie)-s,--subroutinizeβ Optimize CFF table using compreffor (default) [DEPRECATED: use--optimize-cffoption instead] π¨-S,--no-subroutinizeβ (the source leaves this one blank β it's just the counterpart, periodt)
πΈ Input arguments (flags): πΈ
The following arguments are mutually exclusive (pick only one): π
-g,--glyphs-path GLYPHSβ Path to.glyphssource file-u,--ufo-paths UFO [UFO ...]β One or more paths to UFO files-m,--mm-designspace DESIGNSPACEβ Path to.designspacefile
π¦ Input arguments (positonal): π¦
Alternatively, guess source format from filename extension.
INPUTSβ Either one*.designspaceor*.glyphsfile, or one or more*.ufo
π Other input arguments: π
--glyph-data GLYPHDATAβ Custom GlyphData XML file with glyph info (production name, script, category, subCategory, etc.). Can be used more than once (for Glyphs sources only).
π Output arguments: π
-o,--output FORMAT [FORMAT ...]β Output font formats. Choose 1 or more from:ufo,otf,otf-cff2,ttf,ttf-interpolatable,otf-interpolatable,variable,variable-cff2. Default:otf,ttf. (No file paths).--output-path OUTPUT_PATHβ Output font file path. Only valid when the output is a single file (e.g. input is a single UFO or output is a single variable font)--output-dir OUTPUT_DIRβ Output folder. By default, output folders are created in the current working directory, grouping output fonts by format.-i,--interpolate [INSTANCE_NAME]β Interpolate masters and generate all the instances defined. To only interpolate a specific instance (or instances) that match a given"name"attribute, you can pass as argument the full instance name or a regular expression. E.g.:-i "Noto Sans Bold"; or-i ".* UI Condensed". (for Glyphs or DesignSpace sources only).--variable-fonts [VARIABLE_FONT_FILENAME]β Filter the list of variable fonts produced from the input Designspace file. By default all listed variable fonts are generated. To generate a specific variable font (or variable fonts) that match a given"filename"attribute, you can pass as argument the full filename or a regular expression. E.g.:--variable-fonts "MyFontVF_WeightOnly.ttf"; or--variable-fonts "MyFontVFItalic_.*.ttf".-M,--masters-as-instancesβ Output masters as instances--family-name FAMILY_NAMEβ Family name to use for masters, and to filter output instances--round-instancesβ Apply integer rounding to all geometry when interpolating--designspace-path DESIGNSPACE_PATHβ Path to output designspace file (for Glyphs sources only).--master-dir MASTER_DIRβ Directory where to write master UFO. Default:"./master_ufo". If value is"{tmp}", a temporary directory is created and removed at the end (for Glyphs sources only).--instance-dir INSTANCE_DIRβ Directory where to write instance UFOs. Default:"./instance_ufo". If value is"{tmp}", a temporary directory is created and removed at the end (for Glyphs sources only).--no-write-skipexportglyphsβ Do not store the glyph export flags in the'public.skipExportGlyphs'key of designspace/UFO lib, but use the old private glyph lib key'com.schriftgestaltung.Glyphs.Export'(for Glyphs sources only).--validate-ufoβ Enable ufoLib validation on reading/writing UFO files. It is disabled by default--check-compatibilityβ Check if the source files are interpolatable. It is disabled by default, but enabled when building variable fonts or what the'Enforce Compatibility Check'custom parameter is set on a Glyphs file--no-check-compatibilityβ Turns off the compatibility checker even when building variable fonts--expand-features-to-instancesβ Resolves allinclude()s in the master feature file and writes the full feature file to all instance UFOs. Only valid when interpolating. Use if you share feature files of masters in external files, as instances can end up elsewhere.--fea-include-dir FEA_INCLUDE_DIRβ Overrides the default directory where to search for included feature files with relative paths. This only works when the input is a Designspace or UFOs, not from Glyphs at the moment.--no-generate-GDEFβ Do not auto-generate a GDEF table, but keep an existing one intact.--save-ufo-as-zipβ Deprecated. Use--ufo-structure=zipinstead.--ufo-structure {package,zip,json}β Select UFO format structure. Choose between:package,zip,json(default:package). NOTE: json export is unofficial/experimental.--indent-jsonβ Whether to format the JSON files created with--ufostructure=jsonas multiple lines with 2-space indentation. Default: single line, no indent.
πΈ Handling of contours: πΈ
--keep-overlapsβ Do not remove any overlap.--overlaps-backend BACKENDβ Select library to remove overlaps. Choose between:booleanOperations,pathops(default:booleanOperations)--keep-directionβ Do not reverse contour direction when output is ttf or ttf-interpolatable--ttf-curves {cu2qu,mixed,keep-quad,keep-cubic}β Controls conversion of cubic BΓ©zier curves to TrueType quadratic splines. By default ('cu2qu'), all cubics are converted to quadratic (glyf v0). With'mixed', cubics are converted to quadratic only when more economical. If'keep-quad'or'keep-cubic', cu2qu is skipped altogether and curves are compiled unchanged. NOTE: cubics in TTF use glyf v1 which is still draft!-e,--conversion-error ERRORβ Maximum approximation error for cubic to quadratic conversion measured in EM-f,--flatten-componentsβ Flatten nested components to single level.-a,--autohint [AUTOHINT]β Run ttfautohint. Can provide arguments, quoted. By default, ttfautohint is run if the (.glyphs) source contains a'TTFAutohint options'instance custom parameter. This option overrides that. See--noautohintto disable.-A,--no-autohintβ Do not run ttfautohint, even if source contains a'TTFAutohint options'custom parameter--cff-round-tolerance FLOATβ Restrict rounding of point coordinates in CFF table to only those floats whose absolute difference from their integral part is less than or equal to the tolerance. By default, all floats are rounded to integer (tolerance 0.5); 0 disables rounding.--optimize-cff OPTIMIZE_CFFβ 0 disables all optimizations; 1 specializes the CFF charstring operators; 2 (default) also enables subroutinization--subroutinizer {compreffor,cffsubr}β name of the library to use for compressing CFF charstrings. Choose between:compreffor,cffsubr. By default compreffor is used for CFF 1, and cffsubr for CFF2. NOTE: compreffor doesn't support CFF2.--no-optimize-gvarβ Do not perform IUP optimization on variable font's'gvar'table. (only works with'variable'TrueTypeflavored output)--filter CLASSβ string specifying a filter class to load, either built-in or from an external module, optionally initialized with the given keyword arguments. The class and module names are separated by'::'. The option can be repeated multiple times for each filter class. The option overrides the filters specified in the UFO lib. You can use an ellipsis--filter='...'to keep the latter and insert additional--filter(s), either before or after it.--no-auto-use-my-metricsβ (the source leaves this one blank, bestie β it's the counterpart to--auto-use-my-metrics) π--auto-use-my-metricsβ Automatically set (or not) USE_MY_METRICS glyf component flags (0x0200). By default, fontmake only enables this for static fonts, though it can also be enabled for variable fonts. This is not needed unless the font is going to have hinted horizontal glyph metrics.--drop-implied-oncurvesβ drop on-curve points that can be implied when exactly in the middle of two off-curve points (TrueType only; default: False).
π Handling of OpenType Layout: π
--interpolate-binary-layout [MASTER_DIR]β Interpolate layout tables from compiled master binaries. Requires Glyphs or DesignSpace source.--feature-writer CLASSβ bestie, this one tells fontmake which feature writer class to load up π . It can be a built-in one or one chilling in an external module, and it can optionally get initialised with the keyword args you hand it. Split the class name and the module name with::. You can stack this option over and over for each writer class you want. There's a lil β¨special valueβ¨ move here: passNoneand it nukes all automatic feature generation. Heads up tho β this option overrides both the default ufo2ft writers and whatever was specified in the UFO lib. And plot twist: if you use the ellipsis--featurewriter='...'you can keep those UFO-lib writers and just slot your extra--feature-writer(s) in either before or after them. Obsessed π«Ά--debug-feature-file FILEβ the path where you dump the OpenType features text so you can debug the auto-generated features (kern,mark,mkmk, etc.). It's giving detective energy πβ¨--no-variable-featuresβ turns off generation of variable FEA in ufo2ft when you're compiling VFs. Instead it builds separate OT layout tables for each master and then merges them withvarLib. Different route, same destination, no cap π£οΈ--mti-source MTI_SOURCEβ the path to your mtiLib feature definition.plistfile (use this instead of FEA). It's giving main character energy, ngl π
β¨ Logging arguments: β¨
--timingβ prints the elapsed time for each steps β±οΈ (yes bestie, "each steps", we don't gatekeep the original wording around here)--verbose LEVELβ sets up how chatty the logger is. Pick your fighter:DEBUG,INFO,WARNING,ERROR,CRITICAL. Default:INFOπ’
and that's a wrap on the fontmake page, bestie ππ this was fontmake 3.12.2, dated October 2026, filed under FONTMAKE(1) β slay, periodt, go compile something gorgeous πΈβ¨
π¦ where this page comes from
- fedora 44: fontmake 3.12.2-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms