Releases: githubnext/monaspace
v1.200
✨ Monaspace v1.2 has so many new features. It's time to get 🤓 nerdy. Nerdier than science thought possible. Buckle up. ✨
Key Updates
- ✅ 1.2 will close out over 70 issues.
- 🧑💻
Frozen
fonts: don't worry, this won't be like the road trip where you had to listen to Elsa sing "Let It Go" on repeat or face the wrath of the kids in the backseat. We've done more to make Monaspace behave well across editors and platforms, and we've also added the 🧊frozen
variants which ship with stylistic sets "baked in". Use the frozen formats to enjoy Monaspace to the fullest in environments which might not let you configure OpenType features, like XCode or JetBrains IDEs. - 🤓 Nerd Fonts support! While there has been a community-built version of Monaspace with Nerd Fonts, you know what would be better? Not needing to go get that other font. Now you don't. The static fonts (otf and woff/woff2) now include Nerd Fonts symbols by default! Note that they are not included in the variable or frozen formats. If you're building for the web, you probably want to use the variable woff/woff2 files because they're well supported, and also, they don't include a megabyte of Nerd Font data.
Improvements
🧊 Frozen Fonts
Monaspace uses OpenType features to enable and configure coding ligatures, character variants, and other typographical settings.
Unfortunately, not every application exposes these settings to the user. This was a particular pain point for users of XCode and JetBrains IDEs — even if you choose Monaspace, you can't turn on ligatures, texture healing, or control the active stylistic sets/variants.
We'd prefer that applications do the right thing and expose those controls, but in the meanwhile, we'd like you to enjoy everything Monaspace has to offer. The frozen formats are just like the static builds of Monaspace, but with the various OpenType features turned on by default. When using the frozen builds of Monaspace, you get texture healing and all the ligatures on by default, but you give up the fine-grained control of enabling specific stylistic sets and character variants. Computers are hard.
🤓 Nerd Fonts
It took you all roughly 80 milliseconds after the initial launch of Monaspace to ask for Nerd Fonts (#24). We get it, pretty symbols in terminals is awesome!
After Cascadia Code added support for Nerd Fonts, we reached out to our colleagues at Microsoft to learn how to do it for ourselves. The key blocker was always legal, not technical. Nerd Fonts contain logos for a variety of companies — there are 11 glyphs which contain an Octocat or the GitHub wordmark across the various Nerd Fonts icon sets!
We're shipping Nerd Fonts with the same understanding as everyone else in the industry: if someone makes a legal fuss about Nerd Fonts, we would be forced to remove them. Given the broad usage of Nerd Fonts, any shenanigans would be a problem for many typefaces, not just ours.
Nerd Fonts is composed of several overlapping icon sets (hence, eleven Octocat glyphs). Those icons were all designed at slightly different sizes, and vary greatly in quality. Some glyphs are great, but others are an unoptimized mess of control points. And there are about ten thousand total glyphs which Nerd Fonts contribute to each font, dwarfing the total number of glyphs in the actual typeface. 😳
The font patcher which ships with the Nerd Fonts project can't optimize the placement of each Nerd Font glyph within the monospaced "box". The folks at Lettermatic care so much about their craft that they figured out heuristics for the best placement and scaling of icons in the Monaspace fonts. Nerd Font glyphs are not texture healed, but they also do not break texture healing for other glyphs. With such a broad variety of icons, placement and scale are never going to be perfect for every icon and every situation.
edit: in the original release notes, we wrote that the Nerdfonts patcher did not do "anything particularly clever" about placement of the glyphs within the boxes. It wasn't our intent to imply anything about hard work of the Nerdfonts team, but that there's no optimal strategy for fitting ten thousand different icons from different sets into the boxes. We apologize for the unintentional meaning, full stop.
However, adding a few thousand glyphs has one big downside: it's adding a ton of data to each font file!
And of course, a big shoutout to the Cascadia Code team, whose implementation we used as the starting point for our own effort.
We'd also like to thank the folks behind Monaspice, the community-made Nerd Font for Monaspace. Not all heroes wear capes.
📦 Box Drawing Glyphs
Monaspace v1.2 includes a full suite of box-drawing glyphs now:
They also obey the the width axis, so if you use the wide variants, box drawing characters will still work:
✨ New Characters
1.2 adds a lot of special characters across many categories, not just box drawing:
🍎🍏🍍 Character Variants
Many of you asked for stylistic variations on certain glyphs, like slashed zeroes. We now have a range of character variants that you can set to fine-tune the appearance of glyphs in Monaspace.
Check the README section on character variants for the full listing of variants you can enable.
✅ New Options
cv01
: alternate0
(zero) designscv02
: alternate1
designcv10
: alternatel
and i` (all designs except Krypton)cv11
: alternatej
,f
,r
,t
(in Neon), alternatef
,r
(in Argon)cv31
: alternate*
with six points instead of five (replaces both regular asterisk andcv30
raised version)cv32
: alternate≥
≤
with angled lower line
🖇️ New Ligatures
ss01
:~-
-~
&=
ss05
:<|>
{|
|}
ss10
:#[
#(
liga
:;;;
cv62
:@_
case
::
¡
(shift vertically when next to a capital letter or number)
No improvements to installer scripts... yet
There are a bunch of issues for this, but we just didn't get to it in 1.2. We'll try to take a stab at it before 1.3!
✌️❤️ GitHub Next
v1.101
✨ v1.100 was so exciting, that we were itching to do another release. v1.100 was perfect, but v1.101 is perfecter. Please don't rat us out to our middle school English teachers.
👉 Everything fixed in v1.101 👈
Regressions
Mostly, this release was about fixing regressions that you uncovered in the v1.100 release. In particular, we want to thank @adiabatic, @ian-h-chamberlain, and @kenmcd for the issues they found and filed. 🤘 Y'all are heroes.
Stylistic set changes, again
Based on feedback, we decided to move a bunch of ligatures out from ss02
to a new stylistic set, ss09
. We're thinking more deeply about how to do stylistic sets in the long term; there's a limit of 20 stylistic sets and 99 character variants. It would be pretty cool if we could have per-language sets, but there are way more than 20 languages. It's not obvious how to do things in a way that strikes a good balance between usability and fine-grained control, because everyone's tastes differ about certain ligatures.
As before, you will need to update your settings strings to enable ss09
if you want the ligatures in there. You can see a visual atlas of all the ligatures in each stylistic set on the monaspace website
Installation improvements
In addition, there were eleventy billion issues about our Super Quality™ install scripts (and equally awesome installation instructions). We've merged some fixes and tightened up the readme; hopefully install scripts will work in more scenarios and operating systems now. If not — file an issue! And if you're feeling generous and want to open a PR, please check for existing ones first! 😁 Thank you to everyone who both complained and spun up PRs to help us fix this stuff.
There's more improvements to make on the installation front, but we didn't want to hold up this point release for those. Adding an installer script for Windows, more serious improvements to the Mac/Linux install script, and adding Monaspace to winget/chocolatey are on our roadmap for the 1.2 timeframe.
Why v1.101? Do you hate semver?
Well, you see, the OpenType spec is several decades old. Versions in fonts are unfortunately not freeform strings. They are stored as two integer fields: one for major, and one for minor. We literally can't do a major.minor.patch
string like we're used to doing on the internet. And that's why this release is 1.101
. Now you know! And knowing is half the battle.
See you in the 1.2 milestone. Not before. Hopefully.
✌️❤️ GitHub Next
v1.100
✨ v1.1 is here, with a ton of fixes and improvements, and a public roadmap! ✨
I know we've been pretty quiet — GitHub Next has had a lot going on in the past few months, and we're spread pretty thin. You may have heard about Copilot Workspace, but only the eagle-eyed among you might have noticed that we're using Monaspace Neon there. 💅
Key updates:
- 💪 We've addressed over 30 issues, some of them pretty gnarly! Monaspace should look better and work better across operating systems, editors, and programming languages.
- 🚨 We've significantly revamped the way ligatures work. This is a breaking change, and if you used Monaspace v1.0, you will almost certainly need to change your editor settings.
- 👀 We've got a brand new public roadmap! You can see what we're up to and what we have planned going forward.
Let's dive in.
Issues closed
👉 Every issue closed in v1.1 👈
You amazing people found a ton of places where things didn't look great, ligatures that weren't quite right, and situations in different operating systems and editors where Monaspace was decidedly not awesome.
While we haven't reached inbox zero, the wizards at Lettermatic have been busy breaking down the tickets into categories and figuring out fixes. Addressing some of these issues required us to rethink some of the OpenType features.
Altogether, here's a snapshot of what we've addressed in this release:
- #125 has been incorporated, setting Panose flags to allow for use of the fonts in more applications. Thanks @Finii!
dlig
andcalt
have been rewritten to avoid overlaps and redundancies.liga
has been added to cover the spacing-related replacements previously included incalt
, which now only includes texture healing replacements.dlig
can be safely disabled, as all previous contents are fully covered byss01-08
.- All ligatures have been rebuilt to incorporate the addition of an advance width character, allowing for arbitrary selection or typing within a ligature after it is created. This also allows every character in the fonts to use the same fixed width, avoiding issues with some applications not recognizing the fonts as being monospaced.
- Many ligatures and features have been added or revised, including:
liga
- Spacing ligatures such as
//
and||
will no longer appear to be ‘clumping’ when appearing in a long string of repeated characters.
- Spacing ligatures such as
ss01
==
and===
have been redrawn to help distinguish between them.- These ligatures will no longer appear in a string of
====
or longer. !==
has also been redrawn to match===
, and to differentiate from=/=
.=~
ligature will not appear when preceding or followed by a slash, to avoid unwanted ligatures appearing in file paths.
- Added C++ operators, including
<<=
,>>=
,<=>
, all found inss02
.<=
can be swapped from appearing as≤
(default) to instead match the=>
arrow if preferred, usingcv60
.
- Some arrow ligatures have been added to
ss03
. <>
was added, to match existing</>
ligature inss04
.ss05
- Added F# shapes, including
/\
and[|
- optional
[]
(closed square) found incv61
- Added F# shapes, including
- Connecting
##
and++
ligatures were improved to be infinitely repeatable, found inss06
. :
will vertically align with symbols such as- = < >
when they appear side-by-side, withss07
enabled...=
,..-
and..<
will vertically align by raising the periods to the middle, withss08
enabled.- Ligature-related bugs in the variable fonts have been squashed.
- The default asterisk design is now lowered to align with the hyphen and other center-aligned glyphs, eliminating the need for asterisk-related ligatures and fixing any misalignment bugs.
cv30
has been added to revert to the original asterisk if preferred. - The hyphen, en dash and em dash have been redrawn to help distinguish between them. The underscore has also been redrawn to be narrower, so that it does not overlap when appearing in a string.
- The version number glyph has been moved to a private-use Unicode slot, avoiding conflicts with other typefaces.
.notdef
's width has been fixed to match the fixed width of other characters.- Texture healing has been removed from
zero
following user feedback. - Visual bugs related to hinting issues, such as
X
in Argon and0
in Neon, have been fixed. - .woff2 font files are now included in the font download packages.
Update your settings
In Monaspace v1.1, the various OpenType feature settings have changed, and you should update your editor settings accordingly. The README has been updated to reflect the new features, but if you're coming from v1.0, you're probably going to want to update your editor settings.
dlig
is no longer used. You should remove it from anywhere that you may have set it.calt
is now exclusively a toggle for texture healing. You can now enable stylistic sets independendently of texture healing.liga
is now a utility that affects customized spacing of repeating characters, like///
or||
. It is designed to avoid activating inside longer sequences, like////
.- The contents of stylistic sets has changed. You should visit https://monaspace.githubnext.com to consult the table of stylistic sets and choose which ones you would like to enable.
- There are now three character variant settings,
cv30
,cv60
, andcv61
. These will alter the behavior of specific characters.
If you just want a settings line to copy for VS Code, the following will enable texture healing and every stylistic set, but none of the character variants:
"editor.fontLigatures": "'calt', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'ss07', 'ss08', 'liga'",
Roadmap
v1.1 was largely about squashing the core presentational and behavioral bugs. You might not feel all of the changes, as many of them were made to address the edge cases and unusual situations you brought to our attention.
Going forward, our focus is on expanding Monaspace to incorporate more symbols, more glyphs, extended math support, box drawing, and Powerline. We also were excited to see Nerd Font support ship in Cascadia Code — we hope to follow in their footsteps! Stay tuned as we figure things out with lawyers.
Further out, we'd really love to tackle expansions of the character sets to include Greek and Cyrillic. Keep in mind that adding support for entire character sets is a huge undertaking; we probably won't be doing every script ever invented. But keep the requests coming, as it helps us to prioritize where we spend our time.
Check out the public planning board to know what we're thinking about tackling and when: https://gh.io/monaspace-planning.
Thanks / Next steps
None of this would be possible without the hard work of all the contributors at Lettermatic.
Check out the 1.2 milestone and see what we're planning for the next release.
✌️❤️ GitHub Next