Getting your glyph names right

Tutorial
by Rainer Erich Scheichelbauer
en fr zh

18 December 2021 Published on 14 August 2012

Correct glyph names are the key to a lot of nifty features in Glyphs. Here’s how to get them right.

If you have bad glyph names (geeks even call them ‘illegal’), then your font may not compile correctly or cause all kinds of incompatibility trouble otherwise. So, it is a good idea to make sure your glyph names are correct.

Actually, Glyphs will check what you enter into a glyph’s name field and try to prevent you from causing trouble in the first place. E.g., if you type in ä, it should automatically convert to adieresis. If you still manage to get past that, Glyphs will complain:

Still, if you open a font that was created in another software that does not check glyph names, you may still end up with illegal names in your Glyphs file. If that happens, then this blog post is for you.

Nice names

Glyphs follows its own naming convention. We refer to it as nice names. That’s because we do believe that beh-ar and Zhe-cy are more descriptive than afii57416 and uni0416. Take a look at Window > Glyph Info for a list of descriptive glyph names:

As you can see, there is an Add to Font button. Of course you can select more at once, simply by pressing Shift while clicking to select successively, or by pressing Cmd while clicking to select individual glyphs.

Production names

The nice names we discussed above are only handled inside of Glyphs. In the exported OpenType font file, different glyph names are expected by the apps that are supposed to process and display your font eventually: we call them production names. Production names follow the Adobe Glyph List Specification, or ‘AGL’ in short. In fact, the nice names that Glyphs uses are based on the AGL to some extent.

The AGL is historically grown, and defines a number of (mainly Latin and Greek) glyph names. Everything beyond the AGL is supposed to be labeled uni, followed by the four-digit hexadecimal code of the Unicode value it maps to. E.g., uni2AC0 for ⫀ (nice name in Glyphs: supersetWithPlusSignBelow). Glyphs that map to the supplementary planes, i.e., to 5- and 6-digit Unicode values, only get a u as prefix, e.g., u1F381 for 🎁 (nice name: wrappedPresent).

Glyphs does that name conversion automatically at export time unless you specifically enable File > Font Info > Other Settings > Use custom naming. If that option is on, no name conversion will occur and you’re on your own. Unless you have a very good reason for doing so, we recommend to keep that checkbox off, and let Glyphs do its magic.

If you want to know the production name of a specific glyph, take a look at its information. Select a glyph, and choose Edit > Info for Selection (Cmd-Opt-I):

In this case, the production name is uni1E9E, which matches the glyph’s assigned Unicode value. Some glyphs will show a blank field for the production name. In these cases, nice name and production name are the same. Otherwise it will be converted.

Updating glyph info

A good first step to fix glyph name problems is Font > Update Glyph Info. This will try and synchronize Unicode values and glyph names. Glyph names are reset to their defaults as described in the built-in glyph database (see below). However, if you are employing custom glyph data, it will be respected in the name conversion.

There are two settings you may want to check if you are importing an existing font: firstly, the global preference Glyphs > Preferences > User Settings > Keep glyph names from imported files. If this is on, newly imported files will automatically activate the font-specific File > Font Info > Other > Use custom naming. When these settings are on, conversion to nice naming is prevented. This can be useful if you need to integrate with a different, prescribed workflow.

Unicode specialties

Sometimes, you want your glyph to correspond to a certain Unicode character for which there is no entry in the Glyph Info. A typical example will be a character in the Private Use Areas (PUA). In this case, you start your glyph name with uni, followed by the hex code (with uppercase letters), e.g. uniE000. By the way, once the Unicode value is set, you can rename it to whatever you like and makes sense to you, e.g., twitterIcon. The PUA Unicode value will be kept with the new name.

For glyphs that correspond to Unicodes outside the Basic Multilingual Plane (BMP), the name starts with a u, followed by the 5-digit code. For instance, the glyph for U+10102 AEGEAN CHECK MARK would be called u10102.

Roll your own

If, however, you have to make up your own glyph names, it is a very good idea to stick to the following naming scheme. The first character in any name for an exporting glyph should always be one of these:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

That’s it. If your first character does not appear up there, your glyph name is most likely illegal and the font police will come, lock you up and, even worse, prevent your font from compiling correctly.

There are two exceptions, though. Firstly, invisible (non-exporting) glyphs may employ an underscore at the beginning of the name. See below for more details. Secondly, there’s .notdef, a replacement glyph for undefined characters in text. Often it’s a square shape with an X in it, or a questionmark, or, if you didn’t design a .notdef, this will be picked by default:

So, read my lips: no umlauts, no accents, no funky Hangul sign, just plain ASCII letters. That’s letters, so no figures either. And especially no space, no comma, no dash or any other punctuation. Just plain old A to Z or a to z.

For the rest of the glyph name, you can also use one of these:

1234567890 (figures)
_ (underscore)
. (period)
- (dash)

That’s it. Again, no space, no accents, no fancy-schmancy anything. But behold, some of these have a special meaning.

The Underscore

The underscore _ is used for ligatures. The underscore connects the names of the glyphs that are connected by the ligature. So, the parts between the underscores should, again, be valid glyph names as they appear in the Glyph Info palette.

Sounds complicated, I know, but it’s easy. Imagine you have a ligature of f and h, then your ligature is called f_h. Want a ligature of f and adieresis (ä)? Then your ligature is called, you guessed it, f_adieresis. Wanna put your name in as a ligature? Make that M_a_r_y or P_e_t_e_r or whatever your name is. If you stick to this convention, Glyphs can even build the respective ligature features for you.

Since the automatic feature generation places most ligatures into dlig (discretionary ligatures), you can use the .liga extension to force your ligature into liga (standard ligatures) instead, e.g. f_adieresis.liga. Read more about it in the ligatures tutorial.

Glyphs with an underscore at the beginning of their names are non-exporting by default, when generated via Glyph > Add Glyphs (Shift-Cmd-G). So, an underscore as the first character in a glyph name is used for some special glyphs, such as smart glyphs, corner components, special component tricks, and the like.

The Period

The period . is used to add a descriptive extension to the glyph name. In many cases, this will be the name of the OpenType feature in which the glyph is supposed to appear, e.g., e.ss01 for the first stylistic set variation of a lowercase e.

If the part before the period is a valid glyph name from Window > Glyph Info, then Glyphs can make the connection to a character. This means that your font will work better in certain situations such as copying text from a PDF in which your font is used.

Also, you can make a localized version of a glyph with a .loclXXX extension where XXX is the Language System Tag, e.g. adieresis.loclSVE for a lowercase Swedish ä or oacute.loclPLK for a lowercase Polish ó. Glyphs can then take care of the locl feature automatically.

Occasionally, the relationship between glyph name suffixes and OpenType feature tags is more complex than a straightforward one-to-one. For instance, .sc will trigger both small-cap features, smcp and c2sc. And a constellation of three out of the four suffixed .osf, .tosf, .lf, and .tf will trigger the appropriate numeral features. For a complete list of OpenType features that can be automated through clever glyph naming, see the appendix of the Glyphs Handbook, which you can download for free from the Get Started page.

The Dash

Glyphs uses the dash - for appending a script system, e.g. -cy for Cyrillic, -ar for Arabic, -deva for Devanagari and so on. My favourite, of course, is -phaistosDisc, just because. Open your Glyph Info palette and type a dash in the search field to see which scripts there are. You will get the idea.


Update 2012-09-21: added the paragraph about non-BMP Unicodes.
Update 2015-09-21: updated for Glyphs 2.
Update 2016-12-06: updated screenshots, fixed typos, partial rewrite.
Update 2019-07-06: updated AGL link, thx Norbert Lindenberg.
Update 2019-08-07: fixed typo, thx Nathalie Dumont.
Update 2020-03-21: added section about Production Names and AGL, rephrased the beginning, minor formatting changes.
Update 2020-09-06: added the words ‘the AGL’ after ‘Everything beyond’ in the Production Names section.
Update 2021-04-08: updated internal links, and heading levels.
Update 2021-12-18: fixed typos, sentence case for title, added related articles