Myna: Monospace typeface designed for symbol-heavy programming languages

github.com

395 points by birdculture 3 days ago


gorgoiler - 3 days ago

Very nice and condensed. The same reason I switched to Iosevka (Joseph), recently:

https://github.com/be5invis/Iosevka

The fun thing with Iosevka is that one stands a reasonable chance of reading the source code (as opposed to just random numbers in SplineSets etc.)

MarsIronPI - 3 days ago

Not trying to be negative, just confused: I don't really see how this font is "designed for symbol-heavy languages". The symbols look normal to me. Maybe the letters are a little more spaced? I'd love to be enlightened.

thetwentyone - 3 days ago

Also see the JuliaMono typeface: https://juliamono.netlify.app

It was designed to be a comprehensive monocode typeface to support Julia's full Unicode support.

kstrauser - 3 days ago

This is very pretty, but...

The kerning in the "Lorem" at the top drives me batty. It nearly looks like 2 words to my eye. I know that's super subjective and it probably doesn't bother anyone else at all. It's kind of a deal breaker for me, though.

o11c - 3 days ago

This, like many fonts, fails to handle vertical arrows:

  |    ^
  v    |
Note that the raised appearance of `^` exists for compatibility with typewriters that use the backspace key to use it as a circumflex accent over lowercase letters. This is doubly obsolete today (we have real combined characters and can use them on uppercase). This is one of those cases where the name originally used for the character in various standards is in conflict with the way people actually have come to use it.

The bottom of the independent caret should be lower, roughly symmetrical to the letter `v` (this is not traditionally a goal). The top should still reach the height of a capital letter, but the bottom should descend into the lowercase letter area - for many fonts, perhaps to the level of the horizontal part of a lowercase `e` (is there a typographical term for this?)? For fonts where the x-height is half of the cap-height, there might be no overlap with the lowercase letter, though it still doesn't need to worry about leaving space.

The bottom of the caret is, however, higher than the mathematical "and" sign ∧, which rests on the baseline (and usually does not reach full height) or the Greek capital lambda `Λ` which is full height.

eviks - 3 days ago

> Are you frustrated that -> looks nothing like an arrow

The proper solution is, of course, to allow ←arrows→ (and, naturally, not trying to fit a variable peg into a monowidth whole)... maybe in the next generation of languages when the bottom level of typesetting quality is raised a bit

floppyd - 3 days ago

I appreciate the effort, but the result kind of shows why usually symbols are aligned as they are. Dashes, colons, angle brackets — all look way too high next to lowercase letter. I assume this stems from trying to align everything with brackets, and those are aligned with uppercase letters kind of naturally. But I don't think the tradeoff is worth it.

bityard - 3 days ago

I think one thing you are running into here in the HN comments is that ligatures as they relate to source code editing can be somewhat controversial among developers who are especially vocal about their preferences.

Some people believe that ligatures make source code more readable. Even, perhaps, beautiful or "comfy."

Others feel that past a certain point, programming font choice doesn't really matter much and that too much time spent sharpening the saw means you never get around to cutting the wood. Or that hiding two physical symbols behind a single logical one for the sake of aesthetics is somewhere between pointless and dishonest.

Still others are of the opinion that we wouldn't need ligatures at all if programming languages understood Unicode. The other problem of course being that most of us don't have Unicode keyboards.

Your project seems to have somehow managed to upset all three camps and for that, I salute you and have starred your project on GitHub.

wvbdmp - 3 days ago

There is already a relatively well-known icon font called Myna UI: https://mynaui.com/icons

Just a heads-up.

Pet_Ant - 3 days ago

I don't know why "->" should render as an arrow when we could just use an actual Unicode arrow. If need be, have macros for your editors that allow you to convert the "->" into an actual arrow.

jablanyu - 3 days ago

Genuine question: is everyone coding on such high resolution displays and/or with font sizes so big nowadays? For me, the example screenshots are useless to see how the font would actually look like in my editor.

codazoda - 2 days ago

Looks pretty nice. I could download and try it but one character I find missing, from the sample, is emdash. I wrote a lot of markdown and many programming typefaces get emdash wrong (it’s hard to tell from a regular dash).

Looks like I’ll have to install this to see if it’s the case here.

BTW, I find the screenshots for this font quite a bit more useful in evaluating it than any of the other fonts referenced in the HN comments here. These help you decide at a glance.

fph - 3 days ago

The Latex example should include at least a math formula.

imiric - 3 days ago

I like it, it's very clean. Nice work!

I like that it's relatively compact horizontally. If I had to nitpick, the curly braces look a bit too "wavy" for my taste, which doesn't quite match the hard angles on some other glyphs.

My favorite monospace font for the past 10+ years has been Iosevka Term ss08. I've tried many others over the years, and Iosevka is just perfect IMO.

Out of curiosity: what are the tools and the process to create a font today? It would be interesting to read a bit about that.

NooneAtAll3 - 3 days ago

My gripe with lots of fonts have been insistence on making 1-l-I confusable

the problem there isn't only in making characters distinct - but it's about not confusing one for another "in a vacuum", by itself

this font succeeded in making `I` unique - but `l` still looks like "one"

I wish people copied discord's font in this instance - remove bottom serifs altogether and replace with a slanted end

rbanffy - 3 days ago

I love when people make their own fonts (I make one myself), but I wish they had more unique personalities. These days it’s hard to tell one programming font from another.

jug - 3 days ago

I personally love Jetbrains Mono; it's been one of a kind for me and my tastes. I like it over Consolas (although this is one is pretty good on Windows), Fira Mono, Inconsolata, Plex Mono. But I can see the effort here and I'm definitely going to give this one a try! I've found that typefaces can change a lot depending on pixel alignment and rendering engines (i.e. ClearType, GDI, FreeType, Quartz... let pixel grid decide or not, or by how much...). So it's hard to tell if this is going to win me over without actually trying!

teo_zero - 3 days ago

Beautiful.

The site should be more explicit about which characters are covered. I understand it's only ASCII, right? Although the example shows some currency signs that are definitely out of the 0-127 plane.

It would also be appreciated if you could suggest a fallback font for those glyphs not present in Myna, so that if I ever need to include the word "naïve" in a string, for example, the "ï" won't look as an alien character.

mouse_ - 3 days ago

It's perfect. Please don't change anything about it.

fsckboy - 2 days ago

>Myna tries to emulate the smooth look of ligatures but also retains the simplicity of ASCII

this sentence makes no sense, ASCII is something like a code page and ligatures are something like glyphs

iambvk - 3 days ago

My favorite monospace font is "Ubuntu Mono" for ages.

As an engineer, I like to see -- for the lack of better word -- some taste instead of characters being too formal and too symmetric. Ubuntu and Ubuntu-Mono satisfy this to a good extent without being too much, like in comic sans.

The closest font with similar taste, which I found recently is Mononoki

nielsbot - 3 days ago

Meta, but I've personally switched to a proportional font for my coding. Heresy, I know, but it feels wrong to have to look at code as if I'm coding on an 80 column terminal in 1960.

Input Sans is great:

https://input.djr.com

dannyfritz07 - 3 days ago

Very similar to Intel One Mono which is a font I love to use.

- https://www.intel.com/content/www/us/en/company-overview/one...

binary132 - 3 days ago

I really appreciate that the symbols are clear and well-aligned but I do not find the font very attractive or legible unfortunately. I like the Go Mono font though so maybe it’s a “me” problem. :)

kazinator - 3 days ago

> Do you ever feel like your font treats symbols as second-class glyphs?

No because this problem has been solved by other font designers working with pretty much exactly the same requirements.

layer8 - 3 days ago

I despise this style of curly braces where the arms look more like “S” than like “ʃ”. Don’t go backwards! :)

olivia-banks - 3 days ago

It would be nice to see some comparison with other fonts on the GitHub page; the symbols look normal to me, at least. It looks very pretty regardless!

tmtvl - 3 days ago

Looks pretty good, but I often need to read Japanese characters so I'm gonna stick to IBM Plex, which has both Monospace and CJK variants.

superfamicom - 3 days ago

Reminds me of the beautiful M+ fonts.

https://mplusfonts.github.io/

PaulHoule - 3 days ago

It’s got some of the feel of a 3270 font while still being really different.

- 3 days ago
[deleted]
daneel_w - 3 days ago

After testing it for an hour I concluded that for me, Cascadia Code is a lot more legible.

kalterdev - 3 days ago

I don’t get why should programming fonts be necessarily monospaced.

lynguist - 3 days ago

I wouldn’t program with it but I find it extremely aesthetic.

jijojv - 3 days ago

Looks great except for l looking like 1

peter_d_sherman - a day ago

Observation:

Most programming languages evolved from the limited selection of ASCII printable characters from the keys of early ASCII keyboards (which evolved from earlier typewriters and teletype machines)...

But these days we have Unicode -- a huge amount of potential symbols (and combinations of symbols!) that could be used in new programming languages (i.e., asterisk: '*', long used for multiplication could (finally!) be replaced with a true multiplication symbol: 'x' -- if an extended symbol space were used by the language...

Symbols could visually represent such things as loops, conditionals, variable declarations, etc., etc.

Pointers and pointer dereferencing (if the language supported it) -- could have their own symbols...

Would that be a good idea?

Well, if backwards ASCII compatibility is desired to run on old computers for whatever reason (in a future time when we need to revert back to older/simpler/more predictable systems because the AI's are out of control?) then maybe not...

But if we wanted graphical or quasi-graphical symbols to represent programming constructs more visually -- then maybe the idea has some merit...

Maybe a conversion program could be written that would convert between the new symbol set and ASCII, and maybe the programming language would be created to recognize both constructs...

And yes, I know that there is the Scratch programming language -- but I'm not talking about quite that visual! :-) The language I envision would still be physically typed on a keyboard, as most are today...

Anyway, great looking typeface!

silversides - 3 days ago

It's gorgeous. Thank you.

edem - a day ago

does this support ligatures? or is it designed in a way that you dont need them?

adastra22 - 3 days ago

A rust example is conspicuously missing from the README.