Chinese characters can be annotated with LSHK Jyutping, with fanqie, even with hiragana. By extension: Wei Tau, Teochew, Taiwanese, Hokkien, Shanghainese — all of them deserve the same treatment. Wing Font ships these as WOFF fonts the browser can load directly. The general reader doesn't need to install anything: they open a page built by a developer who used the font, and the annotations are just there. Singing along to lyrics, reading classical poetry out loud, teaching Cangjie input to a child returning to Hong Kong — all become a little less effortful.
If I were to speak in all the tongues of men, time would still be finite — but together we can push language and writing forward. Open source also lets designers compose annotated variants of their own typefaces. Many fonts are under restrictive licences and we can't redistribute the derived output ourselves; but a designer with their own font and the source code can build their version and ship it themselves. To that end, the same generation pipeline also ships as a Python command-line tool — handy for batch jobs, integrating into your own workflow, or running fully offline.
Wing Font began with Cantonese, but it was always meant to carry more Sinitic topolects. The newest addition is Taiwanese / Southern Min (Hō-ló): Noto Sans TC as the base character font, with Huninn (jf-openhuninn) setting the Tâi-lô and Pe̍h-ōe-jī (POJ) tone marks. The reading data comes from the MOE 臺灣台語常用詞辭典 (sutian, via ChhoeTaigi). You can see the Tâi-lô sample 「家己的歌,家己唱;家己的字,家己選。」 on the home page, and pick a Taiwanese romanization scheme in the generator to build your own. More dialects are welcome.
Wing Font is never finished. These are the gaps where new hands help the most.
Pull requests welcome. If you write code, you'll find the GitHub link.
The current annotation placement isn't always optimal. Join the Telegram group to discuss which typefaces and proportions work best.
Romanization data is the most error-prone part of the project — it's sourced from heterogeneous upstream projects and processed with AI-assisted tooling, so wrong readings, missing dialect variants, and bad multi-character segmentation are all plausible. If you spot one in a dialect you know, the easiest path is filing a GitHub issue or joining the Telegram group.
Thank you in advance. I also built a Hong Kong bus app — try hkbus.app if you're local. Sponsoring on GitHub Sponsors is also genuinely appreciated.