rime-cantonese: a Jyutping input schema for Rime
Rime Cantonese input schema | 中州韻粵語拼音輸入方案
At a glance
- What is it?
- rime-cantonese is a Rime input schema that types Cantonese in Jyutping, the romanization of the Hong Kong Linguistic Society, with a tone display version and an IPA display version. It is well suited to people who already know Jyutping and want to write Cantonese on a desktop, and it deliberately refuses fuzzy sound merging by default.
- Who is it for?
- Adopt rime-cantonese if you write Cantonese daily, already read Jyutping, and want a self contained schema that you can edit as plain YAML, including its speller algebra and its dictionary tables. Do not adopt it as a general Chinese input method, since the project states it supports only the Hong Kong Linguistic Society Cantonese romanization, and other romanizations live in separate patch repositories.
- Can I use it commercially?
- Yes, with credit. CC-BY-4.0 allows commercial use as long as you credit the authors and indicate what you changed. It is written for creative content, so check how it applies to any code.
- Is it still maintained?
- Yes. The repository last received commits 71 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One romanization, chosen on purpose
rime-cantonese is an input schema for the Rime input method, and its scope is narrow in a way that is deliberate. The README states that the scheme supports only the Cantonese romanization of the Hong Kong Linguistic Society, commonly called Jyutping. There is no Wade-Giles style variant, no Yale, and no Mandarin-based fallback inside this repository.
Two schema files sit at the top level: jyut6ping3.schema.yaml is the tone display version, and jyut6ping3_ipa.schema.yaml is the IPA display version. The IPA variant is not an ad hoc transliteration. The README ties it to a published reference, Bauer and Benedict's Modern Cantonese Phonology from 1997, and points to a specific section on Cantonese rimes for the details.
For people who want a different romanization, the answer is a patch rather than a fork. The README directs them to a separate repository, CanCLID/rime-cantonese-schemes, and there is a companion editing tool for those schemes. Keeping the main repository to a single standard is what makes the dictionaries and the tone tables internally consistent, and it is the reason a contributor can assume Jyutping when adding an entry.
Dictionaries and schema files, all editable YAML
The mechanism is the standard Rime one, and everything on disk is plain text. The repository root holds the schema files plus a set of dictionary tables: jyut6ping3.chars.dict.yaml, jyut6ping3.phrase.dict.yaml, jyut6ping3.words.dict.yaml, jyut6ping3.lettered.dict.yaml and jyut6ping3.maps.dict.yaml. There is also an opencc/ directory for character conversion and a symbols_cantonese.yaml file for punctuation.
The split into characters, words and phrases is what lets the engine rank candidates sensibly: a single character match, a multi character word and a multi word phrase are different entries, and the schema decides how they compete.
Character conversion is handled through OpenCC, and the README says the default standard is shown in the schema menu as traditional characters, with Hong Kong traditional, Taiwan traditional and mainland simplified also supported. Switching happens from a menu opened with Ctrl and the backquote key, so the user can move between writing standards without editing files.
Emoji are handled as an optional suggestion source rather than a separate input mode. A menu option enables them, and when a Chinese word is typed the corresponding emoji symbols appear in the candidate list. The emoji table itself lives in a separate repository, rime-emoji-cantonese, so it can be updated without touching this schema.
Typing tones with doubled letters on the same keys
Tones are optional while typing. The README explains that you can ignore tone during input, and gives the key mapping for when you want it.
The scheme is compact. The letter v carries the high level tone, so siv produces one character and sikv another, since the final k marks a checked syllable. The letter x carries the high rising tone, giving six. The letter q carries the high falling tone, so siq produces one character and sekq another, again with k marking the checked form. The rising, the departing and the checked variants are written by doubling the same letters: vv for the rising tone, xx for the departing tone, and qq for the checked tone, so siqq and sikqq sit alongside their single letter counterparts.
The practical consequence is that a user who already types Jyutping without tones keeps working exactly as before, and only adds a letter when the tone matters. Nothing about the tone layout is dynamic, which means the same rules apply on every platform the schema is deployed to.
Fuzzy sounds are off until you edit the speller algebra
This is the setting most users will want to change, and the README is explicit about the default: the scheme supports no fuzzy or lazy sounds at all, so n- and l- are kept apart and a final ng- is kept distinct from a final -.
Support is available, but it is edited in rather than toggled in a menu. The README tells you to open jyut6ping3.schema.yaml, scroll to the speller/algebra: section, and uncomment the relevant commented out lines by deleting the leading #. The rule for merging n- into l- is a single derive expression:
- derive/^n(?!g)/l/The negative lookahead is the part worth reading carefully. It excludes the syllable final ng, so the rule does not accidentally pull an n before g into the l set, which would be wrong for a different reason than the one the user is solving. The README then explains the verification step: redeploy the schema and type a phrase that uses the merged sound, and the expected characters should now appear.
That is a source edit, not a configuration toggle, so the change has to be repeated on each machine where the schema is installed, and it has to survive schema updates.
Reverse lookup and symbol entry reuse other dictionaries
Beyond typing, the schema can be used to search. The README lists reverse lookup support for Mandarin, Cantonese loengfan, strokes and Cangjie, each bound to a key: backquote for Mandarin, r for loengfan, x for strokes, and v for Cangjie generation.
Cantonese loengfan is not part of this repository, it comes from a separate project, CanCLID/rime-loengfan, which the README links. That dependency is worth noting when you evaluate the project, because reverse lookup quality depends on a dictionary that lives somewhere else and moves on its own schedule.
Punctuation has its own path. Rather than a dedicated input mode, the schema accepts a slash followed by a symbol code, and the README points to two code lists: symbols.yaml in the rime-prelude repository and symbols_cantonese.yaml inside this one.
Taken together, these make the schema usable as a lookup tool for people who read Cantonese but type in other scripts, which is a common situation for students and for people who read traditional characters but write simplified ones.
Installing means choosing the right package and redeploying
The schema is distributed through GitHub releases rather than a package manager. The README's installation guidance is essentially about picking the correct build for your platform and then applying it in Rime, and it carries one warning that deserves repeating.
On macOS, the README says that if you update through Squirrel, the update can replace the Cantonese schema with an ordinary Mandarin input and the Cantonese option disappears. The remedy is to download the correct version from the releases page and install it again. Before reinstalling you do not need to remove the old version, and after installing you need to log out and back in before the scheme is usable.
The release list shows a latest package dated 2024-12-15, alongside Windows specific updates from 2023.05.19 and 2023.06.15, so the release channel is not a single uniform stream across platforms, and picking the wrong artifact is a realistic mistake rather than a theoretical one.
After any schema file edit, including the fuzzy sound change, the configuration has to be redeployed for Rime to pick it up. That redeploy step is where a source edit becomes a working change, and it is the point at which a typo in the YAML surfaces.
Licences split across the files, and the source of the data
The licensing here is not uniform across the repository, and the README says so. The main body of the project is released under Creative Commons Attribution 4.0 International, and the jyut6ping3.maps file follows the Open Database License 1.0. The repository root reflects this with separate LICENSE-CC-BY and LICENSE-ODbL files.
The split is not arbitrary. Dictionary and mapping data in a database oriented format carries database rights, which is why the maps table is under an open data licence rather than a creative commons one. If you redistribute the tables in bulk, you are dealing with the ODbL obligations for that file, and this is not legal advice.
The data itself has published sources. The README says the character and word data sources are described in the project wiki, and the IPA display version cites the Bauer and Benedict reference. The project is developed and maintained by the Cantonese computational linguistics group, with a Telegram group for support and a pair of feedback forms for dictionary problems.
On maintenance, the repository is not archived and the last push was on 2026-08-13, while the newest tagged release is the 2024-12-15 package. That gap between a recent push and an older release tag is the normal shape of a schema project, but it means the most current schema state may sit in the default branch rather than in a release you have installed.
Editorial conclusion
Adopt rime-cantonese if you write Cantonese daily, already read Jyutping, and want a self contained schema that you can edit as plain YAML, including its speller algebra and its dictionary tables. Do not adopt it as a general Chinese input method, since the project states it supports only the Hong Kong Linguistic Society Cantonese romanization, and other romanizations live in separate patch repositories. Verify first that the IPA display variant matches the reference it cites, since it follows a specific academic source rather than the tone display tables, and remember that a macOS Squirrel update can replace the schema with a Mandarin one until you reinstall the correct package.
Frequently asked questions
What does rime-cantonese support as input method?
It is a Rime input schema for Cantonese using the Jyutping romanization of the Hong Kong Linguistic Society, and the README states that this is the only romanization it supports. A tone display version and an IPA display version are provided as jyut6ping3.schema.yaml and jyut6ping3_ipa.schema.yaml.
How do I enable fuzzy sounds in rime-cantonese?
Open jyut6ping3.schema.yaml, find the speller/algebra: section, and uncomment the line for the fuzzy sound you want by removing the leading #, for example the derive rule that merges n- into l-. Redeploy the schema and confirm that the affected phrase now resolves.
Why did my Cantonese input disappear after a macOS update?
The README says that updating through Squirrel can replace the Cantonese schema with an ordinary Mandarin input. Download the correct version from the releases page and install it again, without removing the old version first, then log out and log back in.
How do I type tones in rime-cantonese?
Tones can be ignored while typing. When you want them, the letter v carries the high level tone, x the high rising tone and q the high falling tone, while the rising, departing and checked variants are written by doubling the same letters, giving vv, xx and qq.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/rime-rime-cantonese)Was this useful?