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

Comprehensive scope

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, 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(1), emotion(2)… to access vocabulary thematic way.

* Learner’s Edition in Spanish and other Latin-Greek-Cyrillic characters may be available in the future.

What’s included

The Font

Available in .ttf format. On Macs, it’s a simple two-click install.

Starter Samples

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 freely available. You can name any price, and it can be used in any projects including commercial products. For details, consult the SIL Open Font License included in the 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

Members of our team are available for consulting. Our expertise from in the font projects include constructing automation pipelines (Elixir, Python, and Javascript), typesetting (LaTeX), and vector graphic design (Illustrator). We also know a thing or two about font engineering and Cantonese linguistics.

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 🙂

What our users say

Cantonese Visual Fonts is a game-changer for anyone learning Cantonese and exploring traditional characters. The added Jyutping pronunciations on top of the characters make it incredibly convenient to use on a daily basis to read. ⭐⭐⭐⭐⭐

PTK (beginner)


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.

Deep Dives

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.



First public release.


Cantonese Font is feature-complete and stable. The following is my wishlist / todo-list (not in any order) around this project:

  1. 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.
  2. 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.
  3. 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 ExCantonese.
  4. 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.
  5. 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.
  6. Chinese / Spanish / Italian website internationalization. Awaits new website architecture.

Read More