Hi, I’m working on my first variable font (monospace) and trying to understand how to handle optical adjustments across weights.
I understand that bolder weights typically benefit from optically taller x-heights to maintain readability and counter space. However, I also understand that variable fonts require identical vertical metric values (x-height, cap-height, ascender, descender) across all masters in Font Info.
I’ve done some research by examining variable font source files from Google Fonts (Open Sans, Roboto, IBM Plex Sans, Source Sans 3, etc.) and noticed two different approaches:
Keep optical x-height identical across all weights (like Roboto) — only adjust horizontal proportions
Design optically taller x-heights in bolder weights while keeping the x-height metric value locked in Font Info (like Open Sans, IBM Plex Sans, Source Sans 3)
The second approach seems more common, and makes sense for my monospace design where bold weights would otherwise have very tight counters.
My questions:
Is approach #2 (optically taller bold, locked metrics) the recommended practice in Glyphs?
Are there any practical guidelines on how much optical adjustment is typical (e.g., 10-15 units taller in bold)?
Is there any documentation or tutorials specifically covering this workflow in Glyphs?
No. You can safely vary this inside your design. Bear in mind that there is a difference between the metrics you design with in Glyphs and the vertial metrics written to the font – usually, you are talking about typo/hhea metrics, which indeed need to be consistent. These are not the values you set in Glyphs in the master metrics, though, but separate custom parameters.
Read this:
Bottom line: Set the metrics as you would like your design. This usually means a larger x-height in your bold weights.
Set the vertical metrics (typo/hhead ascender/descender, winAscent/Descent) as custom parameters in your masters, these are what will be exported in the font binary.
Or, before you dive into the details of those parameters, just keep the ascender/descender the same in all masters.
Or even easier: In this case, a small shortcoming in the variable font export is helping you out here. Glyphs doesn’t support MVAR, yet. So it exports only the metrics of the origin master. So the others masters metrics can be set to fit your design.
Custom parameters: hheaAscender 850, typoAscender 850, winAscent 730, etc. (generated by mekkablue’s script)
Font Info → Font:
Custom parameter: Use Typo Metrics = true
When I add a Bold master (non-origin), I understand that:
The Bold master’s custom parameters will be ignored on export (because Glyphs doesn’t support MVAR yet)
I can set different design metrics in the Bold master (e.g., x-Height 495 instead of 481) and design my glyphs to those heights
The exported variable font will only use the Regular master’s custom parameters for vertical metrics
My remaining question: When Georg says “keep the ascender/descender the same in all masters”—should I also keep Cap Height the same across all masters? Or can I vary X-Height, Cap Height, Ascender, and Descender freely in the non-origin master?
In other words, which design metrics should stay identical across masters, and which can I safely vary?
This is very untypical, having a smaller winAscent (which should cover the absolute highest glyph in your font, including mark attachment) than typo/hhea, but if that’s what you want, it’s technically not illegal.
Not necessary, if you’re using a recent version of Glyphs 3, because Glyphs sets Use Typo Metrics to True by default.
Again, the metrics you set in your master are completely free. You can use whatever you want and optionally control the hhea/typo (actual line height in the exported font binary) by custom parameters if necessary.
For static fonts, it’s important you set the hhea/typo custom parameters (the same in all masters), since those will be interpolated and you want to keep the same line height in your all static styles.
Set the default vertical metrics as it fits your design. All metrics can change between masters if the design needs it. Don’t worry about the custom parameters. Only if you find the line spacing is not as you like, you can add them.