This thread describes the long march to 2.9 — same feature architecture, but better (and breaking) in the details. I am hopeful that this can be completed by April, but there is a likelihood that this will spill into Summer.
(I figure I should make use of the Forums more, since the Discord is far too transient and is not indexed.)
What is the Current Deficiency
There are two architectural future progressions for the Cantonese Fonts:
- using chained contextual (Type 6/7) GSUB (that is, a sequence of 1-to-n and n-to-1 and n-to-1) instead of phantom glyphs;
- using GPOS to place the Jyutping symbols dynamically, instead of pre-assembled SVGs
These would (hopefully) broaden the systems that the Font can be used on, and in the case of 2, remove the reliance of OT-SVG, which has the most uneven support.
Glyphs.app is unable to compile Type 6/7 with Extension tables. I can write the rules, they are legit, but only the first 65,535 bytes is accepted. I flagged this in Dec (6 weeks ago), but there did not seem to be appetite from Georg / Rainer to look into this very niche case. Investigating a different build tooling is a long exodus that I am not prepared to do yet.
Within the “same architecture” constraint, there are several issues with 2.8:
- incorrect defaults. These are breaking changes that needs to happen in order for the Font to align with what Jyutping.org proposes (e.g., laak3)
- not optimal ordering. Some frequently used glyphons can only be accessed with long strings of
~because they were low ranked. - missing vocab themes. Idioms, geographical names, proper nouns associated with Christianity, HK street names should be handled.
- Fira Sans is used as the universal base. The Latin glyphs do not fit with the rest of the text, and esp problematic when we move away from Hei / Regular (e.g., Sung, Bold). Vertical punctuation lacking.
These issues make me perceive 2.8 as an unstable base, and (at least prychologically) deters me from building other tools on top. Resolving the above give us something that can be leaned on for 2-3 years while experimenting with workflows that make the architectural changes possible.
Proposed Roadmap
- a complete “from 2.8 rules” G2P + test suite
(2025-02-02) - use this to assign / correct a stack of 10k 成語
(2025-03)、偶句、香港街名、宗教專名 - assign 30k chars of lyrics
(2025-03) - new ligature feature rules (character ordering / default was already done)
- develop new SOP that starts from Chiron Sung/Hei (instead of Fira Sans)

(2025-03-29) - The outcome would be a set of seven 2.9 宋體
- Sung Regular (1.5 inter-character spacing)
(2025-03-27) - Sung Bold (1.5)
- Sung No Jyutping
- Sung Regular (1.2 inter-character spacing)
- Sung Bold (1.2)
- Sung No Jyutping
- Sung Large Jyutping
- Sung Regular (1.5 inter-character spacing)
- a “from font” G2P based on 2.9 ruleset
- a new segmentation dataset based on the 2.9 ruleset
- Build local-SVG-stitching-based, 2.9 ruleset renderer for Sung/Sung Large
Of these, (1), (3) and (4) requires more focus and skill; the rest should just be patience and elbow grease.
(8) is the necessary replacement for what is currently at app.visual-fonts.com. The web app currently runs on Typst, and each typeset run involves loading the entire 250 Mb font in memory. On a 2048 Mb server, this means a concurrency of 8 or so. Perfectly useful for day-to-day, but doesn’t work on large in-person events. Stitching SVG on the fly would make this a regular Elixir-Phoenix app with concurrency of millions.




