1. Glyph Download
  2. Phone Glyph
  3. Font Glyphs App
  4. Glyphs Mac App Store Settings

Third-party plugins such as Yanone’s amazing SpeedPunk, Python script libraries, and XML for alternate glyph data: extending and modifying the app’s functionality is a snap. With the freely available SDK, you can even roll your own. The mmhmm app is now officially available in the Mac App Store. The software allows folks to spice up their video calls with the ability to add different backgrounds, play videos, add images,. Typeface (font) editor program developed by George Williams. Fontforge is free. Up to three axes, any number of font masters, independent layers, glyph-based alternate and intermediate masters: You can do it all in Glyphs. Easily switch between masters, control outline compatibility and style linking, and generate a whole family in one go.

    • 'glyf'

The 'glyf' table contains the data that defines the appearance of the glyphs in the font. This includes specification of the points that describe the contours that make up a glyph outline and the instructions that grid-fit that glyph. The 'glyf' table supports the definition of simple glyphs and compound glyphs, that is, glyphs that are made up of other glyphs.

The number of glyphs in the font is restricted only by the value stated in the 'head' table. The order in which glyphs are placed in a font is arbitrary.

Note that a font must have at least two glyphs, and that glyph index 0 musthave an outline. See Glyph Mappings for details.

Glyphs Mac App Store

Glyph data

Table 14 documents the format for glyph definitions. A zero or positive number of contours signals a simple glyph. If the number of contours is less than zero, the glyph is made up of components. If a glyph has zero contours, it need not have any glyph data. If the glyph is made up of components, it is recommended that the value -1 be used in this field.

The minimum and maximum x and y values for the coordinate data in the glyph follow and together define the glyph's bounding box. This is the bounding box for the original glyph outline before any grid-fitting has taken place.

Table 14: Glyph description




int16numberOfContoursIf the number of contours is positive or zero, it is a single glyph;
If the number of contours less than zero, the glyph is compound
FWordxMinMinimum x for coordinate data
FWordyMinMinimum y for coordinate data
FWordxMaxMaximum x for coordinate data
FWordyMaxMaximum y for coordinate data
(here follow the data for the simple or compound glyph)

Simple glyphs

Table 15 specifies the format of a simple glyph. A more detailed description of glyph outline requirements is given in Digitizing Letterform Designs.

Table 15: Simple glyph definition

uint16endPtsOfContours[n]Array of last points of each contour; n is the number of contours; array entries are point indices
uint16instructionLengthTotal number of bytes needed for instructions
uint8instructions[instructionLength]Array of instructions for this glyph
uint8flags[variable]Array of flags
uint8 or int16xCoordinates[]Array of x-coordinates; the first is relative to (0,0), others are relative to previous point
uint8 or int16yCoordinates[]Array of y-coordinates; the first is relative to (0,0), others are relative to previous point

Each entry in the flags array is a byte in size.The meanings associated with each bit in that byte are given in Table 16 below.

Table 16: Outline flags

FlagsBit (0 is lsb)Description
On Curve0If set, the point is on the curve;
Otherwise, it is off the curve.
x-Short Vector1If set, the corresponding x-coordinate is 1 byte long;
Otherwise, the corresponding x-coordinate is 2 bytes long
y-Short Vector2If set, the corresponding y-coordinate is 1 byte long;
Otherwise, the corresponding y-coordinate is 2 bytes long
Repeat3If set, the next byte specifies the number of additional times this set of flags is to be repeated. In this way, the number of flags listed can be smaller than the number of points in a character.
This x is same (Positive x-Short vector)4This flag has one of two meanings, depending on how the x-Short Vector flag is set.
If the x-Short Vector bit is set, this bit describes the sign of the value, with a value of 1 equalling positive and a zero value negative.
If the x-short Vector bit is not set, and this bit is set, then the current x-coordinate is the same as the previous x-coordinate.
If the x-short Vector bit is not set, and this bit is not set, the current x-coordinate is a signed 16-bit delta vector. In this case, the delta vector is the change in x
This y is same (Positive y-Short vector)5This flag has one of two meanings, depending on how the y-Short Vector flag is set.
If the y-Short Vector bit is set, this bit describes the sign of the value, with a value of 1 equalling positive and a zero value negative.
If the y-short Vector bit is not set, and this bit is set, then the current y-coordinate is the same as the previous y-coordinate.
If the y-short Vector bit is not set, and this bit is not set, the current y-coordinate is a signed 16-bit delta vector. In this case, the delta vector is the change in y
Reserved6 - 7Set to zero

Compound glyphs

Compound glyphs are glyphs made up of two or more component glyphs. A compound glyph description begins like a simple glyph description with four words describing the bounding box. It is followed by n component glyph parts. Each component glyph parts consists of a flag entry, two offset entries and from one to four transformation entries.

The format for describing each component glyph in a compound glyph is documented in Table 17. The meanings associated with the flags in the first entry are given in Table 18.

Table 17: Component glyph part description




uint16flagsComponent flag
uint16glyphIndexGlyph index of component
int16, uint16, int8 or uint8argument1X-offset for component or point number; type depends on bits 0 and 1 in component flags
int16, uint16, int8 or uint8argument2Y-offset for component or point number type depends on bits 0 and 1 in component flags
transformation optionOne of the transformation options from Table 19

Table 18: Component flags




ARG_1_AND_2_ARE_WORDS0If set, the arguments are words;
If not set, they are bytes.
ARGS_ARE_XY_VALUES1If set, the arguments are xy values;
If not set, they are points.
ROUND_XY_TO_GRID2If set, round the xy values to grid;
if not set do not round xy values to grid (relevant only to bit 1 is set)
WE_HAVE_A_SCALE3If set, there is a simple scale for the component.
If not set, scale is 1.0.
(this bit is obsolete)4(obsolete; set to zero)
MORE_COMPONENTS5If set, at least one additional glyph follows this one.
WE_HAVE_AN_X_AND_Y_SCALE6If set the x direction will use a different scale than the y direction.
WE_HAVE_A_TWO_BY_TWO7If set there is a 2-by-2 transformation that will be used to scale the component.
WE_HAVE_INSTRUCTIONS8If set, instructions for the component character follow the last component.
USE_MY_METRICS9Use metrics from this component for the compound glyph.
OVERLAP_COMPOUND10If set, the components of this compound glyph overlap.

Table 19: Transformation Options

Transformation Option


transformation entry #1scale (same for x and y)
transformation entry #2x-scale
transformation entry #3xscale

The glyph data in a compound glyph differs from that of a simple glyph, consisting of descriptions of each of the components followed by any instructions for the compound glyph as a whole.

The glyph index describes the location of the jth component glyph.

The transformation entries determine the values of an affine transformation applied to the component prior to its being incorporated into the parent glyph. Given the component matrix [a b c d e f], the transformation applied to the component is:

Glyph Download

The values of a, b, c, and d are obtained as shown in Table 19a. The values of e and f are obtained as shown in the following pseudo-code below:

Finally, m and n are calculated as follows:

First, let m₀ = max( a , b ) and n₀ = max( c , d ).

If ( a - c ) ≤ 33/65536, then m = 2m₀; otherwise, m = m₀.

Similarly, if ( b - d ) ≤ 33/65536, then n = 2n₀; otherwise, n = n₀

The linear transformation data is derived as shown in Table 19a.


If e and f are specified directly as offsets rather than as point indices to be matched, then the correct values of the offsets depend on the transformation components. For example, if a general scale factor of one-half is applied to the component, this scale factor is also applied to the values of e and f before they are used to offset the component. Note also, that when the component is rotated by a multiple of 45 degrees, the scale factors are doubled. For these reasons, it is much easier to specify offsets through the use of anchor point and matching points than directly through offset values.

Table 19a: Linear transformation

Phone Glyph








1001st short0.00.01st short
0101st short0.00.02nd short
0011st short2nd short3rd short4th short

The numbers stored as shorts are treated as signed fixed binary point numbers with one bit to the left of the binary point and 14 to the right.

The application of the transformations and instructions can be thought of as occurring in the following order:

For each component

  • Apply the local transformation, if any
  • Apply the global transformation (e.g. point size, resolution)
  • Gridfit the outline
  • Apply the translation from offsets or anchor points

Gridfit the compound glyph if there are instructions

Nova is Here.

By Cabel

A quick belated announcement: after years in development, Nova, our next-generation, fully native, future-focused code editor — only available for macOS — is here.

The Future

Rewritten from the ground up, Nova is lighter, faster, more flexible, and deeply feature-packed. It has a modern, hyper-speed editor with all the features you’d expect. It has a customizable user interface. It has a robust extensions ecosystem. It can work on local projects, or work directly off your server. It has tools like a Terminal and Transmit-based File Browser. It’s designed from the ground up to enable complex web workflows that might have build, run, and deployment phases… but it’s still great for a good old static site.

I could go on all day, but you should just check out the website, and try the free 30-day demo.

Own It Forever

Nova is $99. And when you buy it, you own it — it will never expire. It also includes one free year of updates — including new features and fixes — which we’ll release the moment they’re ready. Also, if you want, you can get additional years of updates for only $49 a year. But that’s totally optional, and there’s also no penalty to signing up for updates later, either when you’re ready, or when we’ve added a new feature you want.

Font Glyphs App

Just The Beginning

Glyphs Mac App Store Settings

We have big plans for Nova. We are, as they say, just getting started.

If you have any questions, first check the Panic Library, which is an invaluable resource. Then, feel free to drop us a line.

We hope you enjoy it. And welcome to the future!