File Format

Runebender edits UFO in place. It writes standard data where a standard exists, and namespaced keys where none does.

StatusReference
StabilityStandard data is stable; the namespaced keys can still change

Sources

Runebender opens .designspace files, .ufo directories, and folders that hold them. It saves in the same format, in place.

UFO is a directory of files, so a font source works with version control. Commit your sources and you can see, review, and undo a day’s drawing the way you would any other change.

Runebender writes to your files. Keep them in version control and work on copies while the editor is alpha.

Standard Data

Standard UFO data
OutlinesGLIF contours, points, and components.
AnchorsStandard GLIF anchors.
Kerningkerning.plist and groups.plist, per master.
public.kernGroup names follow the standard prefixes.
public.backgroundThe background layer, saved with the font.
public.postscriptNamesProduction names, used on export.
Featuresfeatures.fea, one file per master, holding prefixes, classes, and features.
LayersBackup and intermediate layers are ordinary UFO layers. Intermediate layers also add a sparse designspace source.
DesignspaceAxes, sources, instances, avar mappings, and substitution rules for shape switches.
com.github.googlei18n.ufo2ft.colorPalettesThe CPAL palette for colour fonts.

Glyphs Compatibility

Sources that came out of Glyphs keep their smart component data. Runebender reads and writes the glyphsLib keys rather than inventing its own.

glyphsLib keys
com.schriftgestaltung.Glyphs.smartComponentAxesThe axes a smart component carries.
com.schriftgestaltung.Glyphs.componentsSmartComponentValuesWhere a placed component sits in those axes.
com.schriftgestaltung.Glyphs.glyph.leftMetricsKeyMetric keys, left and right. See Spacing and Kerning.

Runebender Keys

Anything Runebender needs that UFO does not define lives under its own namespace. Another editor ignores these keys, and the rest of the source still reads correctly.

com.runebender keys
savedFiltersFilters saved in the left panel.
annotationsNotes left on a glyph.
masksIntermediate mask layers.
hoiIntermediateHigher-order interpolation intermediates.
partSelectionWhich part of a smart component is in use.

Hyperbeziers

A hyperbezier contour is defined by its on-curve points, with the control points solved rather than placed. Runebender marks these contours in GLIF with identifier="hyperbezier".

An editor that does not know the identifier reads the points as ordinary curve points, so the file stays valid. Use Path → Hyperbezier to Cubic before handing a source to a tool that needs plain cubics.

What Survives a Round Trip

Runebender aims to write files another tool can read. Standard data stays standard. Glyphs-compatible data uses the glyphsLib keys rather than a private spelling. Anything genuinely new sits under com.runebender, which another editor ignores while leaving the rest of the source intact.

Two things to know before handing a source on:

  1. Hyperbezier contours read as ordinary curves elsewhere. Convert them if the receiving tool will re-save the file.
  2. Masks are a Runebender idea. Run Glyph → Bake Masks so the subtraction is real in the outlines.