Pronunciation at your fingertips. Intuitive tones. Expand your vocabulary.
Traditional Chinese characters accompanied by Jyutping romanization. Indispensible aid for learning Cantonese, a few taps away on your keyboard / track-pads. Use offline in your choice of compatible apps, including Microsoft Office, Apple iWork, LibreOffice, Sketch, and Chrome.
Available for MacOS / Ubuntu (Kinetic Kudu+)
What & How
Visual Fonts are fonts with colors and image, easy to use as your everyday emojis 🥳: no prior knowledge is required.
We use this to help you learn & teach Cantonese. Type, write, speak, or copy-paste the Chinese. Change the font to “Visual Fonts – Cantonese”, and the text is now displayed with the pronunciation — in your choice of application, even when offline.
Features & Benefits
About 3,000 characters are used in daily life. The Cantonese Font includes pronunciation for over 8,000 characters, including special characters used only in vernacular Cantonese.
In practical terms, this means you can read the entire 唐詩三百首 (300 Tang dynasty poems) and 四書 (the Four Classics) with full coverage. The font grows with you from your first step to an advanced reader.
Keep your pronunciation True
Pronunciation is difficult for learners when one character can be read several ways.
Pronunciation in the Cantonese Font adapts to the context. Based on what comes before or after, the Jyutping romanization changes to the right one. The magic behind this is a careful curation from 100,000 contexts where the pronunciation differs from the standalone character.
Testing against day-to-day prose and conversation transcripts showed an accuracy averaging > 99%. This exceeds what a native speaker can do.
Thoughtful, Visual Romanization
We start with Jyutping, the modern Cantonese romanization system. Then we make it even easier to learn with good design: space and colors, topped with a tone-hint system that frees you from desperately trying to recall whether “4” is high or low. Now you just intuit the sound.
Meets you Where you Are
The Cantonese Font enhances the apps you already use. Write in Word, take notes in Good Notes, make presentations in Keynote, design in Sketch.app, browse the web with Chrome, write your music score in MuseScore, or do 3D art in Blender.
Learn at your own pace
Don’t know how to write, type, speak or copy “friend”? Just type friend in English and watch it turn into 朋友. The font becomes a mini-dictionary too, with a vocabulary size of over 1,500.
For our friends in Hong Kong, the font understand every MTR station and other places in Hong Kong. Impress the locals by saying gam1 zung1 instead of Admiralty.
Want to tell native speakers where you are from? With 250+ countries and 250+ world cities, we got you covered.
Want to teach or learn related terms? Use a syntax like
emotion(2)… to access vocabulary thematic way.
* Learner’s Edition in Spanish and other Latin-Greek-Cyrillic characters may be available in the future.
Available in .ttf format. On Macs, it’s a simple two-click install.
Sample Keynote presentation, Pages document, Numbers spreadsheet, and LibreOffice documents showing its use.
Font + Phrasebook (English)
8,000+ characters with context-sensitive jyutping. Toggling a separate font variant enables mini-dictionary feature (in English) with 2000+ words, including all MTR stations, 200+ countries, and 250+ world cities.
The Cantonese Font is a one-of-a-kind project, completed with one year of full time research and development. The font is released under the SIL Open Font License, and can be freely used in any projects including commercial products. Your donation is appreciated and goes towards funding future enhancements, but you can also set the price to zero and obtain a free download.
How to support this work
Continued development of the project relies on user support. You can:
- As an individual,
- pay for the font,
- buy some of our other Visual Fonts when they are available,
- write a review, and
- help spread the word;
- As an organization,
- fund particular extensions, or
- providing recurring funding in the form of schemes and grants
- For designers & publishers, we can provide bespoke, custom design for your brand or project
The Cantonese Font is a piece of culture funded from our savings, and from revenue from our dance studio in Causeway Bay. If you are in Hong Kong, come join our fun, friendly, best Argentine Tango classes for all levels at www.eli.dance 🙂
What they say
In this episode, we talked about the complexities of creating the font.
Can you use this in Windows?
Yes-and-no. The Cantonese Font runs on a standard called OpenType-SVG, which seems to not be implemented (?) on Windows. That part is out of our control.
I recognize that Windows is an important user base, and have crafted a monochrome (black-and-white) “fallback” for each character. On Windows, then, all the functionalities are there (context-sensitive jyutping, mini-dictionary) but it would only show with no colors.
Can you use this in [insert your Linux distro]?
This is a rapidly changing situation. Linux distros renders font using FreeType, and OpenType-SVG support had been added since 2.12. Versions before 2022-April is definitely not supported (all is not lost; you will just see monochrome instead), and over time I expect this to trickle across.
The appearance looks squished in [insert Adobe app].
I have filed a bug report with Adobe. This seems to be a bug newly introduced late-2022.
The jyutping is too small! Can you make it bigger?
Chinese text is expected to be packed uniformly, which means that the widest jyutping can only be as wide as the character. (For those curious, the reference is 硬 with a jyutping of
ngaang6.) Chinese characters that are variable width would disrupt the reading, and this becomes acute with text types like poems.
I am investigating a web-app, that starts with a similar aesthetic but allow you to customize the appearance and download them as SVGs. No ETA.
Can I use this in commercial work?
Yes! You are welcome to use this for commercial work. However, your product will probably have a specific audience, and the readability would benefit from bespoke styling (we offer this as a service).
The romanization is wrong for […]
Deviations from your expectation occur in four ways:
(1) mistake. There is a mind-numbing amount of work going into this, and hey, I make mistakes. These are fixable; please file a report.
(2) difference in opinion. Cantonese characters’ reading is not standardized, and in the decade of 2000-2010 there was significant push to “correctly pronounce” 正讀 the language. Examples include reading 洱 as
ji2 (instead of
nei2), or 構 as
gau3 (instead of
kau3). My general stance is to reflect modern usage of normal people. (I also think that much of this 正讀 is misguided, but that is a different story.)
(3) fixable contextual error. For example, an early tester discovered that 三思而行 was assigned saam1 instead of saam3 for 三; this is an example of a fixable contextual error. Please file a report.
(4) unfixable contextual error. There are two sub-classes here. The first is that the font is unable to know (esp in isolation) whether a word should be read in literary style 文讀 or vernacular 白讀, and defaults to the vernacular. The second sub-class is due to incorrect segmenting. An example may be 香港地方潮濕. 地 is assigned (incorrectly) dei2 when it should be dei6; the reason is that there is a context for “香港地”, and the font parses this sentence as 香港地.方.潮濕 instead of 香港.地方.潮濕. Unfortunately, without being able to do proper word segmentation, this will remain a limitation.
It’s probably hard to know which case it falls under: you can report them all with this form. I tend to fix fixable things in the next minor patch, but do be forewarn that some are not technically possible with an offline, no-computation package.
Versioning, Changelog, and Roadmap
The font software adopts semantic versioning. The version number has three parts: x.y.z, standing for:
x: major version. This is reserved for a complete font re-build, where unknowable number of pronunciation changes may happen. If this happens, the last major version will still be available so users that prefer the previous version can always download the previous version.
y: minor version. This increments when significant new features are added or changed. Examples include entire new class of categories in the Phrasebook, or new language availability for the Phrasebook.
z: patches. This increments with bug-fixes, added chars, added words, or added categories and terms in the Phrasebook.
I personally dislike getting subscription emails, so patches are definitely not announced anywhere except in the changelog.
Fix: monochrome render of 碟 showed character twice in overlapping ways.
Add: +104 (8471 total).
* Colored layers for words now share the same side-bearings as monochrome layers (i.e., colored layered are center-aligned horizontally). This improves the spacing in a way that is particularly notably on words containing narrow chars such as 革命
* Chars 字: +283 (8,367 total). New selections are mostly from 詩經.大雅+小雅, with minor additions from recent political / science articles on Wikipedia
* Words 詞: +4
* Sound corrections: 咸碟, 鹹碟, 對話, 聿 (now with 歪讀
leot6 instead of 正讀
* non-phrasebook mode no longer erroneously replace
Known problems: 好學生, 曾孫女, despite addition of new word ligatures, are incorrectly segmented as 好學.生, 曾.孫女. This is reflective of a larger problem: longer features must be placed in a higher precedence
lookup, instead of randomly as now. This impacts the whole feature set (!)
First public release.
Cantonese Font is feature-complete and stable. The following is my wishlist / todo-list (not in any order) around this project:
- PDF manual. This would be bi-lingual, including screenshot/instructions for using the font. Instructions would include (0) authoritative compatibilities, (1) install/uninstall on different platforms, (2) StyleBot/Chrome setup for web-browsing on different OS, (3) mixing with Latin / Zh fonts, (4) enabling ligatures in apps that does not turn on by default (Office, I think), and (5) listing of chars and Phrasebook terms/categories.
- Cantonese linguistic categories. Using a syntax of
Canto.___(n), exhaustively tally linguistic aspects of Cantonese. An example is
Canto.measure(n)which shows all the measure words (個, 隻, 支, …); another example is
Canto.particles(n)for 啦, 喎, 啩. These should be helpful for systematic study or teachers preparing teaching material.
- 100% traditional characters coverage. CJK (Chinese-Japanese-Korean) characters are complicated in their encoding and usage in different variant. At the first steps of this project, I started with commonly used characters (to ensure they are pronunciable Zh-T entries) and expanded by patching upwards. A complementary approach is to run through the full list of Unicode CJK codepoints, filter out for what is Zh-T and have one or more Cantonese pronunciations. This requires fast access to UniHan and Rime, and will have to wait for the completion of the Elixir libraries
UniHan(Kip Cole) and
- Re-compute pronunciations. v1 of the font was constructed when I knew far less about the idiosyncracies of Cantonese NLP. Knowing what I know, I think there are better approaches once we can have user feedback.
- Website revamp. The WordPress landing page would be replaced by an Elixir-Phoenix-Ash setup. This opens up possibilities for much more interesting real-time interactive experiences, that are exposed by UniHan / ExCantonese. (A little teaser: with these libraries, we are able to answer questions like, “which jyutping have the most characters mapping to it?”, “how many characters are there for each radical?”, or “what characters have an onset of f and a tone of 2?”) The text-editor workflow would also means less barrier to writing about Canto / font blog posts. (Not to leave you hanging: the sound that maps to the most character is “jyu4”, with over 30 characters. There is a great deal of low-usage characters that contains 俞 with different radicals.) It may also be possible to enable dynamic processing / SVG generation, using user-supplied styles.
- Chinese / Spanish / Italian website internationalization. Awaits new website architecture.