Cursive font Rendering Problem

So… First, a bit of context in case it helps:

I did my first script (roman cursive) font. Although I did not know about the "four positional OT features (init, media, fina, iso), I intuitively created my own positional classes with alternate glyphs and paired them using a bunch of contextual alternate substitutions. So every letter has three basic forms. For example: e (which goes in the @MID class); e.end (goes in @END class); and e.start (goes in @STRT class).

So, my core substitutions go like this:
sub @MID by @END;
sub @END '@MID by @MID;
sub @END@END by @MID;
sub @END@STRT by @MID;

I should mention I do have a lot more subs to handle specific pairs and contexts; and everything runs smoothly and as expected.

The issue I’m encountering is when it comes to rendering the font in certain places
For example, this is how It looks on Glyphs. Everything’s fine, and it also looks fine in Illustrator as well.

This is a close up look on the connection ‘i’ - ‘n’

However, when uploading the font to Fontspring, I noticed this:
(On a side note: their preview rendering has contextual alternates OFF by default, so that’s why the “h” looks different from the screenshot above)

Screenshot 2024-05-05 at 10.51.18 PM

I had a hard time trying to understand why this happens, until I saw that this issue is also showing in the Hinting preview:

Screenshot 2024-05-05 at 10.40.53 PM

For some reason, the connection issue is not so dramatic on some pairs, but it is extreme in others.

You can see several issues here. But they don’t show on my normal preview.

Here’s the same word on my website’s type tester (Fontdue)

As you can see, it looks pretty good, but I’m afraid there must be an issue I am not fully aware of. I tried to submit this font to Monotype and they rejected it twice. Maybe their automated system is also noticing something I’m not? Is it an issue that my strokes are live strokes and not expanded outlines? The issue persists even when expanded whatsoever.

I wonder what could be causing this render issue.

My Glyphs version is cutting edge: 3.3 (3303)

EDIT: So after proofreading this post, I noticed that the hinting windows does not display kerning data (as in T - h). Maybe that’s what causing the issue in the hinting preview? But what about Fontspring’s preview?

Do not hint a font like this. Hinting is the intentional distortion of shapes to better fit the pixel grid. That will likely go at the expense of at least some of the connections.

Ok cool I’m not actually doing any manual hinting, just was curious on why some pairs render disconnected in some settings. Thanks.

Did you export as ttf or otf?
Can you send me the file for testing?

The export is .otf. Should I be exporting as TrueType? I doubt it since this font relies heavily in contextual alternates. Should I send the Glyphs file? To support at glyphs ?

The flavour (CFF vs TT) doesn’t matter for OT features, they work in .otf and .ttf fonts. The flavour does have influence on rendering though.

Ignore the TT hinting preview in Glyphs for this. It has an entirely different purpose. Better testing environment: Window > Text Preview. Best: in the actual apps that you want to support.

Yes.

Ok then. I just sent the file. For some reason I was under the wrong impression that I needed to export this font in .OTF only. Haven’t done tests with .TFF. That’s my bad.

Please remove all hints (e.g. there is one in the “n”) and export without auto-hinting.

Ok. I don’t normally manually hint my fonts, and usually export them with “auto-hinting” on. Is this a mistake? How do I know when I should check auto-hint on export? In this case, it does seem to make a difference.

Also, thanks for the help! <3

Hing applied to the connecting strokes will move them around and that will cause those rendering issues. You can try to manually add hints on the main features of the glyphs, but not in the connections to see if it makes a difference. But that might still introduce shifts. So you probably need to go without any hints.

To avoid horizontal shift, add only Horizontal hints (that control baseline, x-height, etc), manually (because autohinting adds both horizontal and vertical ones). Vertical PS hints not really useful for script fonts because such design usually doesn’t use a straight vertical strokes, and connection’s accuracy is more important than the rhythm in this case.