Skip to content

Release notes for FontLab 8.2.0.8458

12 April 2023

Info

FontLab 8.2.0.8458 is a beta release. Some functionality may not be fully polished. To download it, open FontLab 8, in Preferences > General turn on Get beta versions and click Check now. Please use the FontLab 8 forum or FontLab Support to provide feedback. We appreciate it!

We have great news! After months of hard work, we’re introducing FontLab 8.2: a massive improvement over the original FontLab 8 release, which brings more than 100 new or expanded features, and numerous fixes. And better still, if you have a FontLab 8 license — it’s free!

In FontLab 8.2, we have vastly improved the kerning workflow, added right-to-left kerning support, polished the user interface, and streamlined Undo & contour editing. We have improved our modulated Stroke, added new creative actions, and improved the variable design process. Plus you can import and export variable color fonts, and seamlessly convert right-to-left kerning between OpenType fonts, .glyphs files and UFO! More highlights:

  • Kerning for right-to-left scripts like Arabic or Hebrew
  • Easier creation of kerning exceptions
  • Easier adding of glyphs to kerning classes
  • Import & export of RTL kerning from/to OpenType, .vfb, .glyphs, .ufo
  • Export of glyphs as PDF, SVG or PNG file collection
  • Smoother Stroke modulation
  • Snapping of Stroke and Brush thickness to distances, stems or guides
  • Variable color fonts with gradients
  • More uniform and streamlined user interface in dark and light mode
  • Easier-to-use Preview panel
  • Fast aligning of points to Mask or guides
  • Undo retains selection & you can undo (de)selection separately
  • Knife slicing of contours on nodes
  • FontAudit detection and fixing of short segments
  • New Warp and Scribble & Strokes actions for playful creativity
  • Easier stem adding, easier autohinting range control
  • One-click copying of auto layer recipes to all masters
  • Saving, importing, and exporting of Sketchboard content as SVG or PDF
  • Segment and handle lengths and angles on Sketchboard
  • Better feature decompilation and editing
  • Optical bounds for better text line edge alignment
  • Conditional glyph substitution with features other than rvrn
  • Python API for actions
  • Faster operations with large fonts

FontLab 8.2 has more than 600 improvements over FontLab 7, and more than 1,100 improvements over FontLab VI. It’s available as a discounted upgrade for all users of FontLab 7, FontLab VI, FontLab Studio 5, Fontographer 5, TypeTool 3, RoboFont and Glyphs. If you need an extended trial, or a tool for a single project: the FontLab 8 3-months starter license is just US$97!

Explore & prepare

User interface

FontLab 8.2 refines the user interface in both dark and light mode:

  • New The colors of the panels and UI areas is more uniform, to reduce visual noise.
  • New The on/off toggle buttons now follow the same logic across the UI. For example, toggles on panels in dark mode where darker if they were turned on, and toggles in the Preferences dialog were lighter if they were turned on. Now they are always darker if turned on.
  • New We have updated many UI icons to provide better uniformity and clarity.
  • New We slightly rearranged the content of some panels like Node or Guide so the content fits better even if the panel is small.

Text and numeric fields

Many text and numeric fields in the UI (for example on panels or in the property bar) had an icon label next to them, which explained their function. But sometimes that icon was a button, and it was not easy to tell if the icon is a button or just a visual label.

New Now, label icons are inside the text field, and clickable buttons are outside the text field.

New If a text field is not active and you click its integrated label icon, FontLab now selects all text in the text field, so you can easily type a new value to replace it.

RAM memory usage

New FontLab 8.2 includes optimizations in speed and in memory consumption, so you can work with large fonts without issues.

Silent installation on Windows

When you run the FontLab installer on Windows from a script or the commandline, you can use command-line parameters to customize the installation process. For example, you can perform a “silent” installation that does not show any dialogs:

FontLab-8-Win64-Install-8457.exe /NOCANCEL /SP- /VERYSILENT /SUPPRESSMSGBOXES

New If you use the /VERYSILENT command line option and the installation finishes, FontLab no longer launches automatically.

Draft & draw

Draft with Stroke and Brush

Thickness tool

  • The Thickness tool in the Toolbar has a redesigned icon.
  • The thickness fields in the Glyph window property bar of the Thickness tool and in the Stroke panel are no longer limited to a maximum thickness of 300 font units. This is especially useful if you work on a font with a large UPM size. #7341

Thickness lever: change thickness precisely or with snapping

New With the Thickness tool, you can now use the Lever technique to make precise adjustments without zooming in, or you can make quicker adjustments and utilize snapping.

Power Brush: If you have an element active that has a Power Brush filter, click the Thickness tool on the toolbar or tap the 8 key to adjust the global (per element) or local (per node) thickness, and the global angle, of the Power Brush.

Drag a thickness control point to change the local brush thickness on both sides of the node. New The thickness control follows the mouse pointer directly, and the pointer snaps to all snapping items that are turned on in View > Snap and View > Suggest. To modify the behavior as you drag a thickness control point, hold:

  • Shift: changes brush thickness of the entire element
  • Alt: changes rotation of the brush on the entire element
  • ShiftAlt: changes rotation of the brush in 15° increments
  • New Ctrl or Cmd in addition to the above modifiers: no snapping, the thickness control point moves precisely according to the Preferences > Distances > Contour lever moves point by setting. Default value of contour lever is 6, constant dragging speed is 1, the highest precision at short drags is 10.

Stroke or Power Stroke: If you have an element active that does not have a Power Brush filter, click the Thickness tool on the toolbar or tap the 8 key to adjust the global (per element) or local (per node) thickness, and the global angle of the stroke. If the element has the Power Stroke filter, the change will affect the Power Stroke.

Drag a thickness control point to change the local stroke thickness on one sides of the node. New The thickness control follows the mouse pointer directly, and the pointer snaps to all snapping items that are turned on in View > Snap and View > Suggest. To modify the behavior as you drag a thickness control point, hold:

  • Alt: changes the thickness on both sides of the node
  • ShiftAlt: moves the stroke location on the node, keeping thickness the same: increases thickness on one side, decreases by the same amount on the other side
  • Shift: changes stroke thickness of the entire element on one side
  • New Ctrl or Cmd in addition to the above modifiers: no snapping, the thickness control point moves precisely according to the Contour lever moves point by preference.

New Stroke modulation

With FontLab’s stroke engine, you can add “outline strokes” for existing contours in a flexible way, and you can quickly create skeleton-based drawings. If you apply a global stroke or Power Stroke to an element, FontLab dynamically produces a new contour that is offset from the original contour by the specified thickness. You can control additional aspects of the stroke in the Stroke panel.

If you change the local stroke thickness with the Thickness tool, FontLab modulates the thickness of the stroke along the contour. New The stroke modulation is now smoother, works correctly over line segments and tangent nodes, and does not create unexpected changes in neighboring segments.

Note

If you’ve used stroke modulation in FontLab 8.0.1 and open the file in 8.2, the resulting contours will look different. Generally, they’ll be better, but you should check the results. If you want to keep the previous results, open the file in FontLab 8.0.1 and expand stroke.

Merge stroke into the body contour

If you add a stroke to closed contour (like a traditional monochrome glyph), the stroke dynamically expands the original (“body”) contour in two directions: outside and inside the filled (“black”/opaque) area. But FontLab keeps the body contour filled. Therefore, the inside part of the stroke is invisible, and the outside part of the stroke visually adds weight to the body contour.

Here’s a great way to experiment with adding weight without changing the underlying drawing:

  1. Use the Thickness tool on some nodes to visually add weight in some parts of the body contour in a non-destructive way.
  2. New If you’re happy with the results, use Element > Merge Stroke. FontLab will add the outside stroke part to the original filled contour, and will disregard the inside part of the stroke.

Note

If you’ve applied a different stroke color and use Merge Stroke, the resulting contour will use that color as the fill. Don’t use a white stroke color to “remove weight” from the body contour, it will not work. Don’t use Merge Stroke if your contours have filters like Smart Corners, Power Stroke, or Delta. Merging the stroke will only work on the body contour, and will disregard the filter results.

Stroke thickness and distance suggestions

New If you’re making a sanserif with some stroke modulation, Stroke and Power Stroke play very well with View > Suggest > Distance.

If you’ve drawn a skeleton, use the Stroke panel to assign a global stroke to your elements with the thickness that define the thickest vertical strokes (let’s say, 100 units). You should probably reduce the stroke contrast in the panel to e.g. 90%. This will produce optical compensation, so the horizontal strokes will have the same optical thickness.

Optionally, you can add Element > Make Power Stroke. If Power Stroke is assigned as a filter, FontLab starts treating the stroke as two virtual contours on their own, unfills the inside of closed contours, and considers the Power Stroke-generated virtual contours when calculating the sidebearings even if Preferences > Spacing > Ignore Stroke thickness is turned on.

Now, Turn on View > Suggest > Distance, and in Font Info > Other Values > Suggest distance, set the desired distance at which the snapping suggestions should appear:

  • If you use simple strokes (no Power Stroke filter), enter absolute values for your thinnest horizontal and vertical strokes, because distance suggestions will appear from the skeleton. For example, if your global stroke is 100 and the stroke contrast is 90%, you can set Suggest distance X to 90, and Y to 81 (which is 90% of 90).
  • If you have Power Stroke assigned, enter relative values, because distance suggestions will appear from the virtual contours produced by the stroke. For example set Suggest distance X to -10 (because 100-10=90), and set Y to -9 (because 90-9=81).

Now comes the magic! Use the Thickness tool to reduce the thickness of the strokes on some nodes. As you move the thickness control points (without Cmd or Ctrl), the suggested distances will appear as a snappable outline, so you can consistently make your strokes thinner in the right places! Hold Cmd or Ctrl to suppress the snapping.

This technique also works great if you’re using the Thickness tool to “add weight” to a traditional monochrome glyph, as described above.

Stroke thickness and stem suggestions

If one set of distance suggestion values is not enough for you, you can instead turn on View > Suggest > Stems, and set up multiple horizontal and vertical stems in Font Info > Stems. New If you drag a thickness control point without Cmd or Ctrl, FontLab will suggest the stem thicknesses as snapping positions. This works well for changing thickness on extrema nodes, because stem suggestions are always horizontal or vertical, while distance suggestions work along segments.

If you assign tags to the stems in Font Info > Stems, stem thicknesses will be suggested only in glyphs that have the same tags. You can assign a tag like uc to a stem in Font Info, and this stem will only be suggested in uppercase letters, because FontLab automatically assigns the uc virtual tag to all uppercase letters. Same works lc (for lowercase letters), sc (for small caps), fig (for figures / numerals), latn or cyrl (for scripts) etc. But you can also assign your own tags to any glyph, and the same tags to stems.

Sketchboard

Sketchboard is FontLab’s unlimited canvas (like a Glyph window without a parent font), where you can:

  • import images, separate them into single glyph images, autotrace them and place them into a font
  • sketch or draw artwork
  • create text frames that show different texts in different fonts and sizes

Choose Window > Open Sketchboard to open the Sketchboard. If you turn on Preferences > General > Sketchboard > Open on startup, FontLab will open it automatically when it starts.

New Sketchboard now shows lengths and non-H/V angles of handles and line segments if you turn on Show lengths and non-H/V angles in the View panel, or you turn on Preferences > Glyph window > Measure > Lengths & angles.

FontLab automatically saves the content of the Sketchboard (customize the autosave frequency in Preferences > General > Sketchboard). FontLab restores the content of the Sketchboard if you close and reopen FontLab.

New Choose File > Export > Sketchboard… to save the content of the Sketchboard as a .vfj or .vfc file in a custom location, or to export it as a .svg or .pdf file. FontLab uses .vfj and .vfc to store the Sketchboard contents, but it’s not identical to a font .vfj/.vfc.

New Choose File > Import > Sketchboard and choose a saved .vfj or .vfc Sketchboard file.

Edit & refine

Select contours

Separate Undo step for (de)selections

New If you select or deselect points and contours in the Glyph window, FontLab now records this as a separate Undo step.

For example, if you select nodes and move them, and then chose Edit > Undo, FontLab now moves the nodes back but keeps them selected. Previously, Undo caused FontLab to go back to the state before the selection.

Also, if you select some nodes and then click away to deselect, you can now choose Edit > Undo to get the selection back.

Select all Tunni lines

New If View > Tunni Lines is turned on, you click a Tunni line and choose Edit > Select All, FontLab now selects all Tunni lines in the current element. Previously, Select All selected the contours even if the Tunni line was active.

Edit contours

Slide node with arrow keys

New If you turn on the Slide sub-tool in the Contour toolbox and activate a single node, you can use the arrow keys to slide the node along the curve.

Number of nodes and points in a contour

New Each contour in the Elements panel now shows the total number of points in the contour followed by the number of nodes (on-curve points). For example, a typical circle shows 12/4: the contour has 12 points in total, out of which 4 are nodes (and 8 are handles).

Align to Guides

New The Contour > Align Points menu has a the command To Guides. It aligns the selected points to the nearest guide. Previously, this command was available as Contour > Snap to Guides.

Align to Mask

New The Contour > Align Points menu has a new command To Mask. It aligns the selected points to the nearest points in the Mask layer.

Knife tool (J key)

New With the Knife tool, if you hold Ctrl or turn on the Slice sub-tool in the toolbox, and you drag between two existing nodes, FontLab now slices the contour (splits it into two closed contours), and selects the shorter resulting contour.

Previously, this worked if you sliced through a segment, but not on existing nodes.

Cancel drag with Esc

New If you’re dragging a node or element in the Glyph window, and you press Esc during the dragging, FontLab now cancels the dragging operation, so the items revert to their original positions.

Warning

This does not work for all types of items in the Glyph window.

Consistency & precision

Measure and snap

View > Suggest > Distance

If you turn on View > Suggest > Distance, FontLab will show snapping suggestions at a specified distance from existing contours. In Font Info > Other Values > Suggest distance, you can specify the snapping suggestion distance for X and Y per master.

Distance suggestions are great for placing guides or anchors, for drawing parallel contours, and for positioning elements or contours at fixed distances from each other in a kind of grid.

New The distance suggestions now also appear around open contours.

Hints, zones, guides

Add stems

New Font Info > Stems now has two new buttons: Add horizontal stem and Add vertical stem. Use them to quickly add multiple stems.

Autohinting settings

If you autohint a font master, FontLab will only build hints that have a value larger than the minimum and smaller than the maximum stem width specified for each master in Font Info > Other Values > PostScript hinting > Autohint (H for horizontal stems, so the Y direction, and V for vertical stems, so the X direction).

New These settings now use UPM font units. Previously, they used in ‰ of the font size.

Build & assemble

Components, Auto layers, mark attachment

Copy auto layer recipes

New If you show the Layer properties in the Layers & Masters panel, the Auto layer section at the bottom now has a Copy recipe to masters button.

Click it to convert all other masters to auto layers and to copy the current layer’s auto layer recipe to all other masters.

Skin filter

Filter glyphs by Skin type when you add a Skin filter

If your font contains a Skin-compatible glyph with the name prefix _segment, _dash, _corner or _cap, and you select some nodes in an existing glyph, and you choose Element > Add Skin Filter, FontLab opens the Choose Skin Filter Source dialog, where you can pick one of those Skin-compatible glyphs. New In this dialog, you can now use the Skin type buttons to only see glyphs with a particular name prefix.

Cap skin

Apply cap skin to a body segment, and FontLab will join the first open contour of the skin source so that its origin is the body segment’s 1st node.

If the skin source has a node1 anchor and a node2 anchor, FontLab joins the first open contour of the skin source so that:

  • The node1 anchor is on the 1st node.
  • New If the Fit cap toggle in the Skin filter property bar is turned on, the node2 anchor is on the 2nd node.

The cap skin source glyph must have a name that starts with _cap. It should contain one open contour. Both the source and body glyphs must contain a layer with the same name.

Cap skins work similarly to corner skins. The difference is that in corner skins, the skin source’s origin gets attached to a single body node, and in cap skins, the skin source’s two special anchors get attached to two body nodes. Other than that, alignment, scaling and flipping of the skin, and the left / right anchors in the skin source work similarly.

Note

Cap skins are compatible with cap components used in the .glyphs format.

New If you add a Cap skin to an element, the Glyph window property bar now has a Fit cap toggle. If you turn the toggle on, FontLab will scale the cap to match the size of the segment to which the cap is attached.

Elements

Switch the active element

If you have multiple elements in the layer, and you want to switch to between elements, you can click the filled area of another element to make active.

New If you turn on Preferences > Editing > Activate element on double-click, simple click will keep the current element active, and to switch to another element, you need to double-click its filled area.

Elements panel

New The icons for open and closed contours in the Elements panel are updated, some icons are slightly larger.

New Some filters in the Elements panel are indicated by an icon, not by a text label.

New Click the downward arrow on the right side of the Live rotation or Live slant field to open a visual control. Drag the arrow in the control to adjust the transformation.

Metrics & kerning

Metrics

Spacing Controls visibility

To show or hide the kerning line in Kerning mode of the Glyph window, or the sidebearing lines in other modes except Text, you can use:

  • View > Show > Spacing Controls
  • the Spacing Controls toggle New which is now in the toolbar, and not in the property bar

Drag glyph sidebearings

To change the spacing of the current glyph with your pointer:

  • drag the sidebearing lines with the Metrics tool
  • alternatively, if View > Show > Spacing Controls is turned on and View > Lock > Glyph Metrics is turned off, drag the sidebearings with the Contour and Element tools

New You cannot drag the sidebearings with other tools. #7185

Sidebearing fields in Glyph window property bar

New If the Contour tool is active in a Glyph window, the sidebearing text fields in the property bar are now larger, so you can see long metrics expressions better.

Metrics line in the Set sidebearings action

In FontLab, you can set numerical sidebearing values in two ways: using the bounding box or using the Metrics line.

  • Bounding box: If View > Metrics Line is turned off, the sidebearing text boxes in the Glyph panel, in the Metrics table and in the Glyph window property bar show sidebearings at the bounding box, calculated using all elements except the elements that are set to Nonspacing.

  • Metrics line: If you turn on View > Metrics Line, the background of the text boxes becomes violet, and the sidebearing values are calculated at the intersection of the Metrics line and the glyph content (excluding Nonspacing elements). Drag the dotted violet guide in the Glyph window to set the Metrics line position for the current master.

With Tools > Actions > Metrics > Set sidebearings, you can modify the sidebearings of multiple glyphs and layers: you can set a fixed value, adjust an existing value, or auto-space.

New If you choose Set equal to and turn on Use the metrics line, FontLab will apply the new sidebearing value at the intersection of the glyph content and the metrics line, regardless of whether the Metrics line is visible in the Glyph window or not.

Note

The Glyph panel and the Metrics mode property bar of the Glyph window show both kinds of sidebearing values in small text. In metrics expressions, FontLab always uses sidebearing values at the bounding box, but ignores Nonspacing elements.

Optical bounds

Sidebearings of a glyph are margins that are optimized so that as many glyph combinations as possible can be set without kerning. For example, the letter ”H” typically has relatively large (and often equal) sidebearings, so if you set two ”H”s next to each other, there is a clear gap between them. But if you set a large heading that starts with an ”H”, followed by a paragraph of small text that also starts with an ”H”, the left sidebearing of the heading will effectively be much smaller than the left sidebearing of the paragraph, so the heading appears indented.

To set the line edges in a more visually pleasing way, glyphs in a font can optionally have two additional margins, called optical bounds. These margins are intended to be used if a glyph is the first or last in a line. The optical bounds are usually much tighter than sidebearings. In OpenType, optical bounds are realized through the lfbd (left bounds) and rtbd (right bounds) features, which subtract a define distance from the sidebearing.

New In FontLab, you can now use Font Info > Other Values > Optical offset to define the left and right offset globally, for all glyphs in a master. The offset is the amoung of font units that are subtracted from each glyph’s left and right sidebearing. In many cases, the sidebearings of the letter ”H” measured without the serifs are a decent global value for sidebearings.

To override the left global optical offset in a glyph, place a vertical glyph guide named ol in the glyph at the position where the left optical bound should be. To override the right global offset, place an or glyph guide.

If the font includes these guides or the Optical offset values in Font Info are non-0, FontLab will generate the OpenType features lfbd and rtbd on export. If you open an OpenType font that includes these features, FontLab will import the values. If you open an AAT font that includes the opbd table, FontLab will also import these values, but FontLab won’t export an opbd table.

To preview the optical bounds in FontLab, open the Preview panel, choose Text waterfall in the sidebar, and align the preview text to the left or right.

Note

Most text layout apps don’t use the lfbd and rtbd features even if they’re defined in a font. But at the same time, very few fonts actually have these features, so it’s a bit of a chicken-and-egg problem. If more fonts have these features, app developers may be inclinded to add support for optical bounds.

Kerning

New terminology and icons for kerning classes

New For kerning classes, FontLab now uses the terms Left class and Right class instead of 1st class and 2nd class.

A left class is used on the left side of the kerning pair, so it groups glyphs that share a similar design structure on their right side.

A right class is used on the right side of the kerning pair, so it groups glyphs that have their left side similar design-wise.

This change is necessary to properly support kerning in right-to-left (RTL) scripts like Arabic and Hebrew.

New The icons for left and right kerning classes are updated. They visualize two glyphs with a kerning pair between them:

  • The icon for left kerning class has a small glyph drawing on the left side, and the right edge of that drawing has an irregular form.
  • The icon for right kerning class has a drawing on the right, and its left edge has an irregular form.

Kerning classes in Glyph panel

New In the Glyph panel, right and left kerning class are shown in one row.

  • The right kerning class (previously called 2nd class) is shown first. It is the class that unifies glyphs that are used on the right side of the kerning pair and have a similar left side.
  • The left kerning class (previously 1st class) is shown second.

Kerning classes in the Font window

If View > Control Bars > Status Bar is turned on in the Font window, the bottom of the window shows info about the current glyph. New This status bar has a new layout: the editing fields for the right kerning class are to the left of the right sidebearing, and the fields for the left kerning class are to the right of the right sidebearing field. Previously, the kerning class settings were separated from the metrics fields.

The new layout is more decidedly glyph-centric. The class kerning fields are located at the side that corresponds to the side of the glyph which is similar to other glyphs in the same kerning class.

Editing kerning classes

New You can now easily edit the assignment of glyphs to kerning classes in the Glyph panel and in the Font window status bar.

  • New If the glyph is part of a kerning class, click the left or right kerning class icon in the panel or in the status bar to show the kerning class in the Classes panel.
  • New To specify a kerning class for the current glyph in the current master, type a class name into the kerning class text field in the panel or in the status bar, and press Enter or click away the field. If the kerning class does not exist, FontLab will create a new left or right kerning class. If the glyph was assigned to another class, FontLab will remove it from that class and will assign it to the class you specified.
  • New Click the button in the panel, or click the class field in the status bar and then click the button that appears, to open the Set Kerning Class dialog. In this dialog, you can add the glyph to a new or existing left or right kerning class.

If you create a new left kerning class, you cannot create a new right kerning class that has the same name, and vice-versa. Therefore, we recommend that you use a consistent naming scheme for your left and right kerning classes, for example L_A for the left class that groups A and glyphs that are similar on the right side, and R_A for the right class.

The kerning class fields in the Font window status bar only show kerning class assignments for the current glyph. The fields in the Glyph panel can show kerning class assignments for multiple glyphs that are selected in the Font window, and you can assign all selected glyphs to the same class in one go.

You can still use the Classes panel to edit kerning classes. There, you can also create left-and-right classes, which is not possible in the Glyph panel or in the Font window status bar.

Create class kerning exceptions

Note

This text follows the FEA feature syntax convention to use the @ prefix to denote a class. However, in the FontLab user interface, the @ prefix is only shown in the Features panel.

If you have a kerning pair that has a class on either side (or both), you can create a class kerning exception for that pair.

Let’s say you have an @A kerning class that contains the glyph A and all accented derivatives of A, and you have an @Y kerning class that contains the glyph Y and all its derivatives. Type AY in the Glyph window, switch to Kerning tool and click the Y glyph.

Since both glyphs belong to a kerning class, the AY pair that you see in the window represents the potential class-to-class kerning pair: @A @Y. In other words, the A glyph in the text represents the @A class, and the Y glyph represents the @Y class.

  • Hold Ctrl and use the / arrow keys to switch the representative glyph for the left class.
  • Hold Alt and use the / arrow keys to switch the representative glyph for the right class.
  • Without Ctrl and Alt pressed, use the / arrow keys or drag the kerning control to change the class-to-class pair (@A @Y). It doesn’t matter which representative glyph is in the text.

To create exceptions, use the Ctrl modifier for the left side of the kerning pair, and Alt for the right side, like so:

  • Hold Ctrl and use the arrow keys or drag the kerning control create a glyph-to-class exception (A @Y). New If you hold Ctrl and click, FontLab no longer shows the context menu if the Kerning tool is active. Right-click to open the context menu.
  • Hold Alt and use the / arrow keys or drag the kerning control create a class-to-glyph exception (@A Y).
  • Hold CtrlAlt and use the / arrow keys, or drag the kerning control create a glyph-to-glyph exception (A Y).

FontLab adds a new exception pair the moment you change the pair value while you’re holding Ctrl or Alt. If you do this, the new pair gets ”decoupled” from the class-based pair. Once you’ve added the exception pair, you can release Ctrl and Alt: drag or use / to change the value of the now-created exception pair.

Copy kerning classes with Paste Special…

If you copy one or more glyphs in Font window, select other glyphs, then choose Paste Special…, turn on New Kerning classes and click OK, then for any source glyph that is part of any left and right kerning classes, the target glyph will also be placed in the same kerning classes.

If the source glyph is not in any kerning class, the duplicated glyph will not be placed in any kerning class.

Match kerning

If you have multiple masters, each master has its own set of kerning classes. If you use Font > Kerning > Match Kerning, FontLab makes the kerning multiple-master-compatible:

  • Converts all class kerning into flat kerning.
  • Synchronizes kerning classes: copies kerning classes from the main master (blue dot in Font Info > Masters).
  • Equalizes the number of kerning pairs: adds 0-value kerning pairs in masters which don’t have a pair but another master has a given pair.
  • Converts the flat kerning into class kerning using the synchronized classes.

New If you use Font > Kerning > Match Kerning for the first time, FontLab shows an explanatory dialog. If you use it again, FontLab no longer shows the dialog.

Right-to-left and bidirectional kerning in OpenType

OpenType fonts store kerning in GPOS table lookups. Each lookup for horizontal kerning has a flag that specifies the writing direction of the kerning pairs: left-to-right (LTR) or right-to-left (RTL).

Scripts that use the same writing direction may store kerning in the same lookup or in separate lookups. For example kerning for LTR scripts like Latin, Cyrillic and Greek may be stored in just one lookup. But kerning for RTL scripts like Arabic and Hebrew may not be stored in that same lookup, and needs a separate lookup that has the lookupflag RightToLeft enabled.

Kerning for scripts that use the same writing direction may be split into multiple lookups, each having the appropriate flag, but kerning for scripts that use different directions must not be mixed within one lookup.

So an OpenType font that has kerning for Latin, Cyrillic and Hebrew glyphs will need at least two kerning lookups: one for Latin and Cyrillic, and one for Hebrew.

Bidirectionality in Unicode

In Unicode, only some characters are associated with just one writing direction: Latin letters are always LTR, and Hebrew letters are always RTL, but digits or punctuation signs may be used in either direction.

The Unicode Standard categorizes characters used in horizontal writing into four directionality types:

Type Example
Strong LTR or RTL: letters, characters that are used in one script only
Weak LTR or RTL: numbers, some math signs, currency signs, nonspacing marks, some punctuation
Neutral spaces, some separators, most symbols and punctuation
Formatting small set of explicit directionality control codes

Read more about Unicode directionality:

Visual vs. logical order of kerning pairs

Type design apps and font development tools have two competing paradigms for storing kerning pairs:

  • Logical order is derived from the order in which the Unicode characters are written in the text.
  • Visual order is the order in which the glyphs appear on the screen.

In early days of digital type design, not much thought was given to bidirectional kerning, and the “logical order” was implicitly the same as visual order.

Today:

  • Logical order is still the same as visual order for the left-to-right scripts.
  • For strong right-to-left characters, the visual order is the opposite of the logical order.
  • For weak and neutral character types, the visual order is ambiguous.

Some source font formats store kerning in logical order, some store it in visual order. Apps and tools that convert between OpenType fonts and source formats need to take this into account, but some don’t.

This is a non-extensive summary of how formats store kerning:

Format Storage
OpenType Separate storages by direction
.vfj, .vfc Single visual storage
.ufo 4 (Planned) single visual storage
.ufo 3 Single logical storage, which is ambiguous for neutrals
.ufo 2 Single visual storage
.glyphs 3 Separate storages by direction
.glyphs 2 Single logical storage, which is ambiguous for neutrals
.vfb Single logical storage, which is ambiguous for neutrals

The OpenType format has separate kerning storages by direction. In theory, it’s possible to define the AV pair with one value for LTR, and another value for RTL. In practice, the RTL AV pair would never be used, because both A and V are glyphs that represent strong LTR script, so only the LTR storage (lookup) would be used by a typesetting app.

The .vfb, .glyphs 2 and .ufo 3 formats use one storage in logical order. It’s easy to convert the kerning into OpenType kerning for strong glyphs. Pairs with weak and neutral glyphs are ambiguous: it’s not completely clear which order should be assumed in the single storage.

New If you open files in .vfb, .glyphs 2 or .ufo 3 format, FontLab applies certain heuristics (guesswork) to detect pairs that should be RTL, and converts them from logical to visual order.

New If you export files into .vfb, .glyphs 2 or .ufo 3 format, FontLab converts the RTL pairs from visual to logical order.

The .glyphs 3 format uses separate storages by direction. This makes it easy to convert the kerning into OpenType kerning for all glyphs, but requires designers to pay attention to the directionality of the glyphs when they define the kerning pairs, and makes it necessary to define the weak and neutral glyph pairs twice: once for LTR and once for RTL. It’s easy to make a mistake and define the visually same pair twice, but with different values.

New If you open files in .glyphs 3 format, FontLab converts the RTL pairs (stored in the kerningRTL key) from logical to visual order. If the same visual pair is defined in both LTR and RTL .glyphs storage, FontLab favors the LTR pairs.

New If you export files into .glyphs 3 format, FontLab converts applies heuristics to determine which pairs are RTL, converts them from visual to logical order and stores them in the RTL .glyphs 3 storage.

In late 2022, the topic was widely discussed among font technology professionals. The majority agreed that visual order is more predictable and easier to handle, especially for glyphs representing characters with weak and neutral directionality type.

FontLab follows this agreement, and stores all kerning in one storage, in visual order. The planned .ufo 4 format will also store kerning in visual order, like the .ufo 2 format did.

Right-to-left text in Glyph window

If you enter Arabic or Hebrew text into the Glyph window siebar or Text Bar, then by default, Glyph window will show the text in left-to-right order.

New If you turn on Text > Right to Left, FontLab will perform a live on-the-fly reversal of the Glyph window text, so the input text will be shown in the right-to-left order. This is independent of the script of the text: if you enter the text TYPO and turn on Right to Left, the Glyph window will show OPYT, and if you turn Right to Left off, the window will show TYPO.

If you turn on feature processing and enter text in a script like Arabic, the text will be shown right-to-left regardless of the Text > Right to Left setting.

Right-to-left kerning

New FontLab 8.2 adds support for kerning in RTL scripts like Arabic and Hebrew.

The Glyph window and the Kerning panel display the pairs in visual order. The left side of a pair always shows the glyph or class that will be visually on the left side in typeset text, and the right side of the pair shows the visually right glyph or class.

If you enter Arabic or Hebrew text into the Glyph window, the glyphs will be rendered in the left-to-right direction by default. To display the text in right-to-left order:

  • Turn on Text > Right to Left. This will reverse the sequence of the glyphs in the Glyph window, for any writing system.
  • Alternatively, turn on Apply OpenType features and Unicode script processing in the Glyph window sidebar or in the Text mode property bar. This activates full Unicode and OpenType text processing for the Glyph window text. When this setting is turned on, FontLab renders scripts like Latin in left-to-right direction, and scripts like Hebrew in the right-to-left direction.

If you have a font that has kerning for scripts that run in different horizontal directions, and you export it into OpenType, FontLab will produce two kerning lookups: one for left-to-right and one for right-to-left. If you export the font into other formats like .glyphs or UFO, FontLab will export the right-to-left kerning in the most suitable form for the format.

Families & variation

Variation

Add variation quickly

With Font > Add Variation, you can quickly add another master as the duplicate of the current master, and add a variation axis.

New If you first create and save some action sets in Tools > Actions, and then choose Font > Add Variation, you now turn on Run action set and choose any of the saved action sets. If you click OK, FontLab will run the action set on the new master.

Conditional glyph substitution

In variable font projects, you may want to use different glyphs in different regions of the design space. For example, you may want to use a fundamentally different glyph design for the dollar sign in the lighter weights, and a different glyph for bolder weights.

You can achieve this with conditional glyph substitution. For this, you need at least a default glyph and a conditional glyph. The default glyph (for example dollar) will be used the part of the design space which includes the default instance. The conditional glyph (for example dollar.bold) will be used in some other part of the design space.

Both glyphs that participate in conditional glyph substitution must be present in your font, and you can use them in other OpenType features. If you want kerning, you need to assign them to kerning classes, and kern them as you wish. You can only specify conditional glyph substitutions where one glyph is replaced by another glyph. To use ligature substitutions, you need to manually write the conditions into the GSUB table using the TTX notation in the Tables panel.

You need to assign conditional tags to each conditional glyph. Select the conditional glyphs in Font window, then:

  • Open the Classes panel, switch to Tags, add a tilde tag that describes the condition (see below) and drag-drop the selected glyphs from the Font window.
  • Alternatively, open the Glyph panel, and in the Glyph tags field, type the title tag prefixed by + to assign the tag to the selected conditional glyphs.

A conditional tag is a concatenation of three parts: defaultglyphname, prioritymarker and conditionset. For example, the tag for the conditional glyph dollar.bold could be dollar~wt>820&wd<110 or ~wt>820.

defaultglyphname is the name of the default glyph (for example dollar). If it’s absent, the conditional glyph’s name without the suffix will be used. So if you assign the tag ~wt>820&wd<110 to the glyph dollar.bold, FontLab will replace the glyph dollar with the glyph dollar.bold if the Weight axis value is 820 or more and the Width axis value is 110 or less.

prioritymarker can be:

  • ~ if the substitution should be done before all other substitutions (we sometimes call such conditional tags “tilde tags”)
  • New ^ if the substitution should be done after other substitutions (see below).

conditionset is one or more condition expression, concatenated with &, so: condition&condition..., for example wt>820&wd<110.

Each condition can have the form either ax>min or ax<max or min<ax<max or max>ax>min, where:

  • ax is the axis code (like wt for Weight),
  • min and max are axis locations expressed in design coordinates, same as master and instance locations.
  • > and < actually inclusive, so they are equivalent to the mathematical ≥ and ≤ operators.

To specify a conditionset for multiple axes, so that the conditional substitution happens only in a region enclosed by multiple axes (logical “and”), concatenate (glue) multiple condition expressions (one per axis) with &. One axis code can only appear once in a tilde tag, so use the 200<wt<700 form rather than wt>200&wt<700.

To specify a conditional substitution that happens if one conditionset is met or if another other conditionset is met, add multiple space-separated conditional tags, one per conditionset.

For example, to replace e with e.ss04 if the weight axis is 820 or more and the width axis is 110 or less, or if the weight axis is 750 and the width axis has any value, enter +~wt>820&wd<110 +~wt>750 in the Glyph tags field of the Glyph panel for the e.ss04 glyph.

If the prioritymarker is ~ (“tilde tag”):

  • If you export static fonts (instances), FontLab performs the conditional substitution by remapping Unicode codepoints in the affected instances, but does not rename the glyphs.
  • If you export DesignSpace + UFO, FontLab converts the conditional tag into the rules element.
  • If you export a Variable TT or Variable PS font, FontLab converts the conditional tag into the rvrn feature. OpenType engines apply this feature before all other substitutions, so the default glyph of a ~ conditional tag must have a Unicode codepoint.

New If the prioritymarker is ^ (“caret tag”):

  • If you export instances, FontLab does not perform any conditional substitution TO TEST.
  • If you export DesignSpace + UFO, FontLab converts the conditional tag into the rules element with the processing="last" attribute.
  • If you export a Variable font, FontLab converts the conditional tag into the rclt feature.

You can specify a different feature to be used for ^ conditional tags. For example, if you’d prefer the ^ conditional substitutions to work in the calt, add "com.github.fonttools.varLib.featureVarsFeatureTag": "calt" to Font Info > Font Lib.

Some OpenType engines apply the rclt feature after other substitutions, so default glyph for a ^ conditional tag could be any glyph, for example a glyph that is the result of another substitution.

However, some OpenType engines only apply conditional substitutions associated with the rvrn feature. The ~ conditional substitutions work in more environments, and work with static instance fonts.

Layers

Set variation location when you add a new layer

FontLab has several ways to create a new layer in one or more glyphs, and to optionally also add a font master, which will hold separate Font Info data and kerning.

With the following techniques, you can add a new font master, and optionally fill its glyph layers with the content of another font master:

  • Font > Add Variation is the fastest way to duplicate the current font master (including all its font master data, and its glyph layers). Here, you can also quickly run a predefined action set.

  • The + button in the bottom-left of the Font Info dialog gives you a few more choices. Here, you can add a new font master, and you can specify how to create the layers in the new glyphs. You can create a new font master with default font master data, and copy the glyph layers from the current master, or create glyph layers with no content, or not create any glyph layers. Or you can copy an existing font master (even from another font), including all its font master data, and its glyph layers.

With these techniques, you can create new glyph layers, and optionally a font master, which will contain interpolated content that will reflect the current dynamic instance (the #instance layer):

  • With the Add glyph master (+) button in the Variations panel, you can add glyph layers (but no font master) to the selected glyphs. The layers will contain the current dynamic instance selected in the panel. This is useful to create intermediate glyph masters in only a few glyphs.

  • With Font > Generate Instance or with the Add current instance as font master button in the Variations panel, you can add a font master that will reflect the current dynamic instance selected in the panel, including interpolated kerning, interpolated Font Info data, and the interpolated variation location.

Finally, the most advanced way to create new glyph layers and font masters is to use Glyph > Layer > Add…, or the Add layer button in the Layers & Masters panel. This offers all choices available in the methods described above. It opens the Add Layer dialog, where you can:

  • specify the name of the new layer (and optionally font master)
  • set the lock, service and wireframe properties of the new layer
  • New can specify the location of the new layer in the variation space
  • choose to add the new layer in the current glyph, selected glyphs, or all glyphs and optionally to also add a font master
  • decide what should happen if the same-named layer already exists in a glyph
  • optionally fill the new layer with the content of another master from the same or different font, or with the currently selected dynamic instance
  • if you use element references, and you’re adding the new layer to some glyphs but that layer already exists in other glyphs, you can change the references to point to elements that already exist in the layer
  • create a bitmap layer that will contain rasterized content at a specified PPM

Layers & Masters panel

New If a layer is not set to visible, the visibility column in the Layers & Masters panel shows a blank space instead of a closed eye, to minimize visual noise.

New The icons in the panel are slightly larger.

Test & adjust

Adjust and correct

Transform panel

In the Transform panel:

  • New Click the downward arrow on the right side of the Rotate, Horizontal slant or (if you make the panel wide enough) Vertical slant fields to open a visual control. Drag the arrow in the control to adjust the transformation.
  • Click the % dropdown to change how the Horizontal scale and Vertical scale works. Choose % to use relative scaling in percent, or u to use absolute scale in font units. New The panel now has a single %/u dropdown that applies to both horizontal and vertical scale.

Actions: batch operations

Multiple-master actions

New If you open Tools > Actions, and as layers you choose All Masters, some actions in the list will have a green dot.

Each of these actions is “multiple-master-compatible”: if the current masters are matching, the results of running the action will also match.

New effect actions: Scribble & Strokes

New With the Scribble & Strokes action, you can replace the existing glyph contours with open contours that have an editable Stroke applied.

The action has two modes: Scribble and Strokes.

  • Scribble draws an open contour in the shape of a “slalom curve” inside each closed contour.
  • Strokes draws a set of “halftone lines” inside each closed contour.

You can set the Angle, stroke Thickness, Gap and Indent of the new contours.

The action removes the original contours. The new contours are open, and they have a Stroke applied. You can edit the Stroke, and you can edit the contours.

New effect action: Warp

New With the Warp action, you can apply a geometric bending effect to the contours. Warp is similar to Perspective but the warp box uses curved edges.

FontAudit

New FontAudit now has a new Short segment test, which detects segments that are shorter than the per-master Font Info > Font Dimensions > Ink trap width value.

If you turn on Short segment in Preferences > FontAudit or in the gear menu of the FontAudit panel, FontLab shows the results of the test for the current glyph window in the FontAudit panel, and if you also turn on View > Show > FontAudit, also in the Glyph window.

If you Fix the Short segment problem, FontLab collapses the short segment nodes (moves them into the same location).

Use Tools > Actions > Contour > FontAudit to fix the problems in many or all glyphs and masters.

Preview and print

Wrap text in Glyph window

New In Preferences > Glyph Window > Text layout, you can now set the defaults for Glyph window text wrapping.

Note

See the “Exporting artwork” section of this document for more info about previewing and printing.

Glyph window sidebar

Click the Content sidebar icon in the Glyph window property bar (the leftmost icon) to open the sidebar. In the Glyph window sidebar, you can edit the Glyph window text (using the “glyphtext” notation), perform case conversion, choose from predefined texts, change the text point size.

New Click the Layout toggle, to show or hide fields that you can use to change the visual tracking and linespacing of the text, which only applies to the text shown in the window, so it simulates tracking and linespacing changes made in end-user apps.

Click the Features toggle to activate OpenType features and Unicode script processing. This activates full Unicode and OpenType text processing for the Glyph window text. When this setting is turned on, FontLab renders scripts like Latin in left-to-right direction, and scripts like Hebrew in the right-to-left direction. If you click Compile features, you can apply OpenType features to the text. New If the toggle is turned off, the features selector is hidden.

Text tool

If you enter Arabic or Hebrew text into the Glyph window siebar or Text Bar, then by default, Glyph window will show the text in left-to-right order.

New If you turn on Text > Right to Left, FontLab will perform a live on-the-fly reversal of the Glyph window text, so the input text will be shown in the right-to-left order. This is independent of the script of the text: if you enter the text TYPO and turn on Right to Left, the Glyph window will show OPYT, and if you turn Right to Left off, the window will show TYPO.

New If the Text tool is active, the current glyph is now the glyph to the right of the text cursor. Previously, it was the glyph to the left of the cursor, but this was causing some issues.

Preview panel

The Preview panel lets you see a real-time, accurate representation of your design as you make changes. Simulate various scenarios and design contexts by viewing different text arrangements at different sizes and colors, with dynamic transformations and graphic filters like blur. Enter custom text and apply OpenType features to evaluate how your font performs in specific words, phrases, or sentences.

If the Preview panel is open, click the Show / hide Sidebar button in the top-right corner to open or close the sidebar.

If the sidebar is closed, use the buttons on the the right edge to quickly change what the panel shows:

  • Click Content mode multiple times to switch between text, glyph waterfall and text waterfall.
  • Click Align multiple times to switch between left-aligned, centered and right-aligned text.
  • Click Size multiple times to switch between fit size, 1, 2 or 3 lines, and custom size.
  • Click Invert preview to switch between a light and dark view of the content.
  • Click Echo / Custom text in the bottom-right corner to toggle between custom text or Echo text. If Echo text is on, the panel shows the text of the Glyph window or the glyphs selected in the Font window. If you type your own text, the panel switches to Custom text.

If the sidebar is open, you have a much more detailed control of what the panel shows. New We have fully redesigned the Preview panel sidebar. We introduced text labels for sections of the settings, and integrated the feature selection widget right into the sidebar (it was a separate dialog).

Color

You can can now open and export variable color OpenType TT+COLR v1 fonts that include gradients. See Formats section below for details.

Glyphs & fonts

Glyphs

Rename glyphs

When you rename glyphs in FontLab:

  • You can also choose to update other structures: classes, feature definitions, kerning pairs, auto layer recipes and metrics expressions to reflect the glyph name change.
  • You can also rename alternates (glyphs with suffixes) if you’re renaming a glyph without a suffix.
  • If you’re changing the name of a glyph to a name that is already used by another glyph, you can choose to replace the existing glyph, and to change the name of the existing glyph to a unique name.

To rename a single glyph:

  • Open the Glyph panel, which will show info about the current glyph in Glyph window or in Font window. New Click the Rename glyph icon in the panel to set the renaming options. Then enter the new name into the name field and press Enter. Note: in older versions, changing the name in the Glyph panel did not update classes etc.
  • Choose Glyph > Rename Glyph, or click the name Unicode icon in the Glyph panel, or New click the Rename glyph icon in the panel and choose Rename… to open the Rename Glyph dialog. Set the options as needed.

To rename all glyphs in the font, use any of the Font > Rename Glyphs commands. These commands always update classes, feature definitions, kerning pairs, auto layer recipes and metrics expressions.

Note

If you turn on Preferences > Font Window > Caption > Editable, and change name in the Font window cell, FontLab only renames the glyph, but does not update classes etc.

Duplicate glyphs

With Glyph > Duplicate Glyph…, you can copy one or more existing glyphs and add duplicate versions of these glyphs as independent glyphs, as components or as element references. You can specify a glyph name suffix for the new glyphs.

  • New If you turn on Copy kerning classes in the dialog, then for any source glyph that is part of any left and right kerning classes, the duplicated glyph will also be placed in the same kerning classes. If the source glyph is not in any kerning class, the duplicated glyph will not be placed in any kerning class.
  • New If you’re duplicating only one glyph, you can use the New glyph name field to specify the complete glyph name of the new glyph (not just the original name + suffix). For example, you can duplicate the A glyph and name the new glyph Alpha.

Classes

  • Kerning classes are now called “left” and “right” instead of “1st” and “2nd”. See Kerning section for details about improved support for class kerning.

  • If you select glyphs in Font Window and choose Edit > Delete, the Delete Glyphs dialog box has a Classes: Clean Up checkbox even if the selected glyphs contain component sources. New If this is turned on, FontLab will now clean up the classes in all masters, not just in the current master.

OpenType features and Unicode

Features panel

If you’re in the Features panel:

  • New Press Cmd[ Ctrl[ to go to the previous feature definition, or the Prefix section.
  • New Press Cmd[ Ctrl[ to go to the next feature definition.
  • New Press CmdF CtrlF to jump to the panel search box.
  • New Type a string (part of a glyph name, class or keyword) and press Enter to find the first occurrence of the string.
  • New Press CmdG CtrlG to find the next occurrence.

Font window

Font Info and fonts

Formats

Open files

Variable COLR1 fonts

New You can can now open some variable color OpenType TT+COLR fonts with the COLR v1 table, so you can have variable glyphs with gradients and other more advanced color fills. For example, try opening Nabla by Arthur Reinders Folmer and Just van Rossum.

Warning

This functionality is in beta. If you open some variable OT+COLR v1 fonts in FontLab, the glyphs will not look as intended.

Decompile OpenType features

If Preferences > Open Fonts > OT features > All lookups to Prefix is turned on and you open an OpenType font that contains contextual GSUB substitutions, FontLab decompiles the substitutions into the FEA syntax in the Features panel as follows:

  1. In the Prefix section of the Features panel, FontLab writes the lookup definition for the simple substitution:
lookup calt_2 {
  sub D by D.ss01;
} calt_2;
  1. In the feature section of the panel (e.g. calt), FontLab writes the contextual substitution that references the simple substitution:
sub D' lookup calt_2 C;

Note

Previous versions of FontLab always used this notation. It closely follows the internal structure of the OpenType font, many users don’t find it readable.

New If turn off Preferences > Open Fonts > OT features > All lookups to Prefix and open the font, FontLab now produces a simpler, more intuitive FEA notation for contextual lookups, like:

sub D' C by D.ss01;

Decompile Apple AAT features

New If you open an OpenType font that contains Apple AAT layout features in the morx or mort table, FontLab now converts these features into OpenType Layout people, and decompiles them into the FEA notation in the Features panel.

Note

This functionality is somewhat limited. Not all morx features can be expressed in OpenType Layout. Also, FontLab does not export AAT features.

Open OpenType fonts with cubic glyf table

New You can now open static and variable fonts that have the experimental glyf table version 1, which can describe the glyph geometry using PostScript (cubic Bézier) and TrueType (quadratic) curves. This works even for fonts in which both types of curves are mixed within one glyph.

Warning

Currently, this format is experimental. It hasn’t been accepted into the official OpenType format yet. See the Export static OpenType fonts with a cubic glyf table section below for details.

Import Sketchboard

If you open the Sketchboard with Window > Open Sketchboard, you can now choose File > Import > Sketchboard and choose a saved .vfj or .vfc Sketchboard file.

FontLab uses .vfj and .vfc to store the Sketchboard contents, but it’s not identical to a font .vfj/.vfc.

Save and export fonts

Autosave

If you have Preferences > Save Fonts > Autosave turned on, FontLab automatically saves the open fonts that have some modification in its special Autosave folder:

  • ~/Library/Application Support/FontLab/FontLab 8/Autosave on macOS
  • %userprofile%\AppData\Local\Fontlab\FontLab 8\Autosave on Windows

New If FontLab experiences a crash and you re-open it, FontLab now shows a redesigned Restore Autosaved Fonts that offers you three choices:

  • Remove: FontLab moves the autosaved files to the trash bin
  • Open: FontLab opens the autosaved files but moves their autosaved versions to the Trash Bin. You should save the opened files in a folder of your choice.
  • Keep & Open: FontLab moves the autosaved files into the Keep subfolder inside the Autosave folder, and opens the files. If FontLab crashes again, you will find the files in the Keep folder

Export variable COLRv1 fonts

New You can now export many color variable fonts in the COLRv1 flavor, so they can include gradients. You need to turn on this ability:

  • Open Nabla by Arthur Reinders Folmer and Just van Rossum.
  • Choose File > Export Font As….
  • Choose the Variable TT profile, click Customize….
  • Change the Profile name to Variable TT color and turn on OT+COLOR: Chrome, Windows in the Export color font files section, click OK.
  • Choose the Destination and click Export.

Export static OpenType fonts with a cubic glyf table

The OpenType font format can describe the glyph geometry using two kinds of curves:

PostScript (cubic Bézier) curves: PostScript curves, or cubic Bézier curves, are the curves that most typeface designers use to draw their glyphs. These are also the curves that are natively supported in vector graphics apps. In 1985, Adobe introduced the Type 1 font format that used PostScript curves. The OpenType format introduced around 2000 added the CFF table, which is used to express glyph geometry with cubic curves, and the Type 1 format was declared obsolete. In 2016, OpenType added the CFF2 table, which is used to describe variable cubic glyphs.

TrueType (quadratic) curves: TrueType curves, or quadratic curves, were introduced in 1991 by Apple and Microsoft as part of the TrueType font format. Quadratic glyph descriptions reside in the glyf table, which was later incorporated into the OpenType format. Since 2016, the overwhelming majority of variable OpenType fonts has been using quadratic curves. Most typeface designers use cubic curves for drawing, and then use automated tools to convert them to quadratic curves when they export the final fonts.

Geometrically speaking, quadratic and cubic curves are related, but inside the OpenType font format, they’re stored in fundamentally different ways. Very few applications support the new variable CFF2 table, while support for TrueType-based variable fonts is widespread. The glyf table that is used for quadratic glyphs has abilities that the CFF tables lack, such as the ability to use components. The technical structures of the glyf table are simpler than those of the CFF tables, and support for TrueType-based fonts is easier to implement correctly in apps and systems.

The problem has been that TrueType-based OpenType fonts can only use quadratic curves, which are not the types of curves the designs are created with. In a sense, TrueType-based OpenType fonts are like lightly compressed JPEG images — the quadratic curves produced by the conversion are usually close, but not identical, to the original designs.

In 2022, Behdad Esfahbod has proposed several extensions to the OpenType font format. One of them includes a new backwards-compatible version of the glyf table, which has the ability to describe glyphs using PostScript (cubic Bézier) curves, in addition to TrueType (quadratic) curves. The new table even allows mixing cubic and quadratic curved in one glyph.

FontLab has allowed mixing cubic and quadratic curves in the font sources for years. As of February 2023, the HarfBuzz library has experimental-api support for the new glyf table, and the fontTools library also has support for the new table. The new table is not yet supported in FreeType or other font renderers.

New FontLab can now export static OpenType fonts with the new glyf table. You need to turn on this ability:

  • Choose File > Export Font As….
  • Choose the OpenType TT profile, click Customize….
  • Change the Profile name to OpenType TT cubic and set Curve conversion > Keep existing curve type, click OK. This will export the curve types as they are in the font, so you may have mixed flavors of curves.
  • Choose the Destination and click Export.

Warning

Currently, this format is experimental. It hasn’t been accepted into the official OpenType format yet.

Export artwork

New You can now easily export glyphs as PDF, SVG or PNG files.

Export multiple glyphs as single PDF, SVG or PNG images

New Set the pixel-per-em (PPM) size in Preferences > Save > Export artwork. In the exported images, FontLab will scale the UPM size to the specified pixel size. For example, if your UPM size is 1000, you set the export size to 100, and export the A glyph that is 700 units tall to PNG, the resulting image will be 70 pixels tall.

New To export the current layer of one or more multiple glyphs, one PDF, SVG or PNG image per glyph:

  • Select the glyph(s) in Font window.
  • Choose File > Export > Artwork Collection….
  • Choose the format.
  • Choose the output folder.
  • In the filename field, enter the subfolder name. FontLab will create the subfolder in the output folder, and will name the glyph images automatically.

New To export the current layer of the current glyph, you can also choose File > Export > Artwork… in the Glyph window. Here, you can specify the actual filename of the exported image.

Export Glyph window text as PDF or SVG

Set the text size in the Glyph window sidebar or Text mode property bar. This affects glyph size in the exported PDF or SVG files.

To export the full content of the current Glyph window or Font window (the entire text), choose File > Export > Window Contents…. Here, you can choose one of two formats:

  • Choose PDF (*.pdf) to export the contents of the window preview mode into a PDF file. For a Glyph window, the PDF will show all glyphs filled, as if you were using Text mode.
  • Choose SVG (*.svg) to export the contents of the window editing mode into an SVG file. For a Glyph window, the SVG will show all currently visible view details like nodes, handles, guides, so you get a “vector screenshot” of the window.

Export Preview as PDF

To export the Preview panel contents as PDF:

  • Open the panel sidebar to specify the content (masters, waterfalls etc.) and size.
  • Right-click or Ctrl-click the panel canvas, and choose Export as PDF….

Export Font window (glyph table) as PDF

FontLab doesn’t currently offer a native way to export the Font window as PDF, but you can export a PDF using the printing functionality.

On macOS:

  • Switch to the Font window.
  • Choose File > Print Font….
  • Choose Save as PDF… from the dialog dropdown and save the PDF.

On Windows:

Note

This method also works from the Glyph window.

Export Sketchboard

If you open the Sketchboard with Window > Open Sketchboard, you can now choose File > Export > Sketchboard… to save the content of the Sketchboard as a .vfj or .vfc file, or to export it as a .svg or .pdf file.

FontLab uses .vfj and .vfc to store the Sketchboard contents, but it’s not identical to a font .vfj/.vfc.

Scripts & extensions

Integrated libraries

New FontLab now uses the Qt Framework version 5.15.12. It contains dozens of minor fixes compared to the previously used 5.15.9 version of the Qt Framework.

Python API

Run Actions and Action sets

The code below shows a way of running action sets (same as in Tools > Actions) from Python, using the native FontLab Python API.

This Python code defines a function run_actions() that runs FontLab actions on specified glyphs and layers of a specified or current font, or on all glyphs and masters of a specified or current font. The function takes in a list of action names or dict of action names and parameters, and optionally: a specified fgFont font, a list of glyph names or objects, a list of layer names (or False if current layer, or True if all masters), plus a boolean value for whether the actions will be undoable.

The function calls flPackage.runActions() to run the actions, using the get_fl_action_syntax() function to create a list of JSON strings that contain dictionaries in the format compatible with the JSON action set notation, and the get_fl_glyphs() function to build a list of flGlyph objects from a list of glyph names or objects.

Finally, the function performs actions on current layer, specified layers or all masters of the specified or current font. In this example, the function is called with a list of actions, which flatten and decompose all masters in all glyphs, and remove overlaps in them.

A more pythonic method will be incorporated into the TypeRig package in the future.

from collections.abc import Iterable, Mapping
from json import dumps
from typing import List

from fontgate import fgFont, fgGlyph
from fontlab import CurrentFont, flGlyph, flPackage

def get_fl_action_syntax(actions: Mapping | Iterable) -> list():
    """
    Creates a list of JSON strings that contain dictionaries in the format used by `flPackage.runActions`.

    `actions_list` will contain dictionaries where the `id` key is the action name and additional keys specify
    parameters. For syntax specifics, export an Action set from Tools > Actions and check the saved JSON file.

    Args:
        actions (Mapping | Iterable): List or dict of action names to be performed.

    Returns:
        list: A list of JSON strings that contain dictionaries in the format used by `flPackage.runActions`.
    """

    # Create list of actions to run
    actions_list = []

    # If `actions` is a dictionary, creates `actions_list` with parameters
    if isinstance(actions, Mapping):
        for action, params in actions.items():
            action_rec = {"id": action}
            if isinstance(params, Mapping):
                action_rec |= params
            actions_list.append(dumps(action_rec))

    # If `actions` is a list of simple actions without parameters, creates simple `actions_list`
    elif isinstance(actions, Iterable):
        actions_list.extend(dumps({"id": action}) for action in actions)

    return actions_list

def get_fl_glyphs(font: fgFont, glyphs: List[str | fgGlyph | flGlyph] = None) -> list():
    """
    Builds a list of `flGlyph` objects from a list of glyph names, `flGlyph` objects or `fgGlyph` objects.

    Args:
        font (fgFont): FontGate object to be acted upon.
        glyphs (List[str | fgGlyph | flGlyph], optional): List of names, fgGlyph or flGlyph objects to be acted upon. All glyphs if absent. Defaults to None.

    Returns:
        list: List of `flGlyph` objects.
    """

    # If `glyphs` are specified, builds a list of `flGlyph` objects
    if glyphs:
        glyphs_fl = []
        for glyph in glyphs:
            if isinstance(glyph, flGlyph):
                glyphs_fl.append(glyph)
            elif isinstance(glyph, fgGlyph):
                glyphs_fl.append(flGlyph(glyph, font))
            elif isinstance(glyph, str):
                glyphs_fl.append(flPackage(font).findName(glyph))
    else:
        glyphs_fl = [flGlyph(glyph, font) for glyph in font.glyphs]
    return glyphs_fl

def run_actions(
    actions: Mapping | Iterable, # List of action names or dict of action names and params to be performed
    font: fgFont = None, # `fgFont` font or `CurrentFont()` if absent
    glyphs: List[str | fgGlyph | flGlyph] = None, # List of glyph names, fgGlyph or flGlyph objects, all glyphs if absent
    layers: bool | List[str] = False, # List of layer names, or True if all masters, or False (default) if current masters
    undo: bool = True, # Will actions be undoable? True by default
) -> None:

    """
    Runs a list of FontLab actions on specified glyphs and layers, or on all glyphs and masters 
    of a specified or current font. Action specs use the same syntax as action sets exported from Tools > Actions.

    Args:
        actions (Mapping | Iterable): List of action names or dict of action names and params to be performed
        font (fgFont, optional): `fgFont` font or `CurrentFont()` if absent
        glyphs (List[str | fgGlyph | flGlyph], optional): List of glyph names, fgGlyph or flGlyph objects, all glyphs if absent
        layers (List[str] | bool, optional): List of layer names or False if current master or True (default) if all masters
        undo (bool, optional): Will actions be undoable? True by default
    """

    # `font` is current font or specified fgFont object
    font = font or CurrentFont()

    actions_list = get_fl_action_syntax(actions)
    glyphs_fl = get_fl_glyphs(font, glyphs)

    # If `layers` were specified, makes them visible and stores their previous visibility
    if isinstance(layers, Iterable):
        # Stores the previous layer visibility of each layer
        layer_visibility = {key: -1 for key in flPackage(font).fontLayerOrder}
        # Sets layer_scope for `flFont.runActions` to 1 (visible layers)
        layer_scope = 1
        for glyph in glyphs_fl:
            for layer in glyph.fgGlyph.layers:
                if layer_visibility[layer.name] == -1:
                    layer_visibility[layer.name] = int(layer.visible)
                if layer_visibility[layer.name] > -1:
                    layer.visible = layer.name in layers
    elif layers:
        # Sets layer_scope for `flFont.runActions` to 2 (all masters)
        layer_scope = 2
    else:
        # Sets layer_scope for `flFont.runActions` to 0 (current master)
        layer_scope = 0

    # Calls `fontlab.flPackage.runActions()` to run the actions
    flPackage(font).runActions(glyphs_fl, actions_list, layer_scope, undo)

    # If a `layers` list was specified, restores previous layer visibility
    if layer_scope == 1:
        for glyph in glyphs_fl:
            for layer in glyph.fgGlyph.layers:
                layer.visible = bool(layer_visibility[layer.name])

# Expands filters and transformations, decomposes components and removes overlaps in all masters
run_actions([
    "flatten_glyph", # Expands filters and transformations.
    "decompose", # Decomposes components.
    "remove_overlap" # Removes overlapping portions of contours
], layers=True)

Bug fixes

  • Fix If you have an active temporary license (like 3-month or 1-day), you switch your hardware configuation, then temporary license expires and then you activate FontLab with another temporary or lifetime license, FontLab no longer shows an error message on startup. #7340

  • Fix If you run FontLab by drag-dropping a font file on the FontLab app icon, FontLab now always correctly shows the feature definition code in the Features panel. #7288

  • Fix The Apply kerning toggle in the Glyph window property bar now is consistently hidden in the Kerning mode and shown in all other modes. #7330

  • Fix If you flag a glyph cell in Font window, you can now undo this operation. #7206

  • Fix If you export an OpenType+CBDT font, FontLab now exports the CBLC table correctly. #7170

  • Fix If you run FontLab by drag-dropping the vfc file onto FontLab icon, FontLab no longer opens two Font windows for one font. #7342

  • Fix FontLab no longer crashes if you input expressions for linked metrics in the Metrics panel right after performing the Tools > Actions > Contour > Contour Direction > Set TT direction action. #7327

  • Fix If you save a .vfj, FontLab now correctly saves the per-node changes to the Stroke thickness. Previously this only worked for the .vfc format.

  • Fix Fractional values in the Font Lib or Master Lib are now stored correctly in both .vfc and .vfj. #7315

  • Fix Tools > Actions > Autohint now works correctly on all masters. #7312

  • Fix If you have Power Brush applied to an element and apply a live transformation to the element, FontLab transforms the Power Brush accordingly. If you choose Element > Expand Transformation, FontLab retains the transformed Power Brush. Previously, Power Brush reverted to an untransformed appearance.

  • Fix If you apply a stroke to an open contour and export to OpenType TT, FontLab now exports a single-stroke OpenType+SVG font in addition to the traditional OpenType TT font. #7316

  • Fix The Erasing Rectangle tool now works correctly in elements that have live transformation applied. #7049

  • Fix If you create auto layers that have circular references (e.g. acute is an auto layer of acutecomb while acutecomb is an auto layer of acute), FontLab no longer crashes, but outputs a warning as intended. #7286

  • Fix If you change the font’s UPM size with scaling, FontLab now automatically updates linked metrics. Previously, you had to choose Font > Update Glyphs. #7235

  • Fix FontLab no longer crashes if you align Preview panel content to to the right. #7290

  • Fix FontLab no longer crashes if you paste a layer, then move a node, and then Undo. #7248

  • Fix FontLab no longer crashes if you open a FontForge SFD file. #7224

  • Fix If you paste a transformation, you can now Undo it.

  • Fix You can no longer close the font during the saving or exporting operation. Previously, If you closed a font during save or export, FontLab could crash. #7199

  • Fix If you choose Edit > Select All with the Element tool, FontLab now selects all elements/components correctly. #7174

  • Fix In the Duplicate Glyph dialog box, the option Replace existing suffix works correctly now. FontLab no longer replaces custom glyph name suffixes if the option is turned off. #7194

  • Fix If you slice a part of a glyph using the Knife tool with Ctrl, FontLab now selects the sliced contour so you can copy-paste it. Previously FontLab pasted the whole element, not the selection. #7195

  • Fix In the Font Info dialog, if you use the Copy Page button to copy Font Info > Creator page, and then paste the info to other open fonts, FontLab now correctly pastes the font creation date and time stamp. #7196

  • Fix The captions in Font Info > Overview > Autohint are now corrected. Previously, they were swapped.

  • Fix FontLab now keeps the order of elements if you ungroup them. #7151

  • Fix On Windows, if you digitally sign your font, FontLab no longer incorrectly shows the “invalid password” message with certain .spc-.pvk pairs. You can sign the fonts now. #7287

  • Fix On Windows, Element > Optically separate works again. #7197

  • Fix On Windows, ShiftCtrlF now toggles FontAudit as intended.

  • Fix On Windows, FontLab now correctly pastes drawings copied in Adobe Illustrator into the Font window cells. #7184