File Format
Runebender edits UFO in place. It writes standard data where a standard exists, and namespaced keys where none does.
| Status | Reference |
|---|---|
| Stability | Standard 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.
It can also import Glyphs, Glyphs Package, compiled fonts, and basic single-master Babelfont packages into UFO. See Opening and Saving for the supported data and limitations.
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
| Outlines | GLIF contours, points, and components. |
|---|---|
| Anchors | Standard GLIF anchors. |
| Kerning | kerning.plist and groups.plist, per master. |
public.kern | Group names follow the standard prefixes. |
public.background | The background layer, saved with the font. |
public.postscriptNames | Production names, used on export. |
| Features | features.fea, one file per master, holding prefixes, classes, and features. |
| Layers | Backup and intermediate layers are ordinary UFO layers. Intermediate layers also add a sparse designspace source. |
| Designspace | Axes, sources, instances, avar mappings, and substitution rules for shape switches. |
com.github.googlei18n.ufo2ft.colorPalettes | The 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.
com.schriftgestaltung.Glyphs.smartComponentAxes | The axes a smart component carries. |
|---|---|
com.schriftgestaltung.Glyphs.componentsSmartComponentValues | Where a placed component sits in those axes. |
com.schriftgestaltung.Glyphs.glyph.leftMetricsKey | Metric 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.
savedFilters | Filters saved in the left panel. |
|---|---|
annotations | Notes left on a glyph. |
masks | Intermediate mask layers. |
hoiIntermediate | Higher-order interpolation intermediates. |
partSelection | Which 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:
- Hyperbezier contours read as ordinary curves elsewhere. Convert them if the receiving tool will re-save the file.
- Masks are a Runebender idea. Run Glyph → Bake Masks so the subtraction is real in the outlines.