Stems are the thicknesses of the main strokes of a design: the vertical stem of l, n and H, and the horizontal bar of E, H and e. A font has one or a few of each, per master; a Light master has thinner stems than a Bold one, and a condensed design may have its own. FontCreator keeps them as font data so that they survive a trip through Glyphs, UFO and PostScript fonts, writes them as stem hints when you export CFF, CFF2 or UFO, and uses them when the Glyph Transformer scales glyphs with the stroke thickness preserved.
The stems are edited on the Masters page of Font Properties, in the Stems group. This topic explains what they are; that topic explains the controls.
Name, orientation and scope
Each stem has a name (Detect names them vStem0, vStem1, hStem0, ... as Glyphs does, and a stem that comes in without a name gets one the same way), an orientation and, optionally, a scope. A vertical stem is a vertical stroke, so its width is measured horizontally; a horizontal stem is a horizontal stroke, measured vertically.
A stem can be limited to a part of the font with the same scope as an alignment metric: a script, a case, a category, a glyph-name suffix or a list of glyph names, in any combination (see Alignment Metrics). A scoped stem describes the strokes of those glyphs only: the lowercase of a design whose lowercase stems are lighter than the capitals, or a script drawn with a different pen. A stem without a scope describes the whole font.
The standard stem
One vertical and one horizontal stem can be marked as the standard stem, shown with a check mark in the Standard column. The standard stem is the dominant stroke of the design, the one a PostScript rasterizer uses first when it snaps and darkens stems at small sizes. On export it is written as StdVW (vertical) and StdHW (horizontal) in a CFF or CFF2 font, and as the first entry of postscriptStemSnapV and postscriptStemSnapH in a UFO; the other unscoped stems follow as the StemSnap arrays. When no stem is marked, the stem Detect found to be the main one is used, else the first in the list.
Per master
Widths are stored per master. An intermediate master and every instance get interpolated values, so a variable font keeps each stem's identity across its masters: Regular 76 and Bold 132 are the same stem with two values, which is what a variable CFF2 font needs. With several masters selected, a width that differs between them shows as Multiple, and a width you enter is applied to all of them.
A master can be without a value for a stem: the list shows an empty width. FontCreator never invents a value; a stem comes in with the values its source had, and a master that had none stays empty until you enter or detect one. A width of 0 in a source is read as no value, since that is how a Glyphs file pads its stem lists, and a missing value goes back to .glyphs as 0. A stem without a value for the master or instance being exported is left out of that export.
Detect
Detect measures the stems from the outlines. It looks at the letters and figures of the font, corrects for the italic angle of a slanted design, collects the stroke widths that occur most, and writes them as stems: the main vertical and horizontal stroke, further widths that occur often enough to be stems of their own, and a scoped stem for a script or a case whose main stroke differs from the font's, such as a lighter lowercase. Marks, punctuation and symbols are not measured. Detected widths are whole font units; imported and typed values are never rounded. A width you edited by hand is kept. The whole detection is one undo step.
Detect works on the selected masters in the list above, or on every primary master when none is selected. Which stems exist is always decided on the default master, so a detection on one master finds the same stems as a detection on all of them; the selection decides whose widths are written. This is what makes it safe to detect one master at a time: after redrawing the Bold master you detect Bold again and the widths of the other masters, typed, imported or detected earlier, stay as they are; a master that is not finished yet is left without numbers; and on a font with many masters you do not wait for all of them. When the default master is not selected, its own widths are kept too, apart from a stem it has no value for yet, which needs one as the reference the other masters are matched against.
Detect Missing Values looks at every primary master, ignores the selection, and only fills in the widths that are missing; nothing that has a value is touched and no stem is added. Use it after opening a Glyphs or UFO source that had stems for some masters only.
Note: A detected width is a measurement, not a verdict. Check it against the design, and mark the stem you consider the main one as the standard. Detection has been verified on Latin, Greek, Cyrillic, Arabic and CJK designs; a font without letters, or a script whose strokes are not stems in this sense, gets the widths that occur most in its outlines.
Where the stems are used
Export. An OpenType CFF font, a variable CFF2 font and a UFO get PostScript stem hints from the unscoped stems: StdVW, StdHW, StemSnapV and StemSnapH, for the master or instance being exported, and per master in a variable CFF2 font. The formats allow at most twelve StemSnap entries per orientation; near-duplicates are merged and further stems are left out. Scoped stems are not written as stem hints. TrueType exports do not use stems. See Export Font.
Preserve stroke thickness. When the Glyph Transformer scales glyphs with this option, it must know which parts of a glyph are strokes; the stems of the master tell it what a stroke of this design looks like, which makes the result more reliable on heavy masters. The option also works on a font without stems. See Glyph Transformer.
Other formats
Stems travel with the font. A Glyphs 3 file's stems (with their names and filters) and each master's stem values, and a Glyphs 2 file's vertical and horizontal stems, are read on import and written on export. UFO reads and writes postscriptStemSnapH and postscriptStemSnapV in fontinfo.plist, keeping fractions exactly. The stem hints of an OpenType CFF font, and the per-master stem values of a variable CFF2 font, are read from the font's Private DICT when you open it. They are stored in the FontCreator project; a project saved by this version cannot be opened by earlier versions.