# fcitx5-android: the Fcitx5 input method framework ported to Android

> A Kotlin port of Fcitx5 that brings Pinyin, Rime, Hangul, Anthy and other engines to Android as a plugin-based IME. It is for users who want desktop-grade input methods on a phone, and the build path is aimed at developers rather than end users.

**fcitx5-android/fcitx5-android** — Fcitx5 input method framework and engines ported to Android

- Repository: https://github.com/fcitx5-android/fcitx5-android
- Website: https://fcitx5-android.github.io/
- Stars: 5,709 · Forks: 453
- Language: Kotlin
- License: LGPL-2.1
- Published: 2026-09-22 · Updated: 2026-09-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/fcitx5-android-fcitx5-android

## What fcitx5-android solves, and who it is actually for

Android ships one keyboard and lets you replace it, but the replacement ecosystem is thin on non-Latin input. Gboard covers many languages, yet it does not expose the engine model that desktop Linux users rely on: table-based input, user dictionaries, schema swapping, or the ability to add a language by installing a separate component. fcitx5-android ports the Fcitx5 framework itself, so the same engine concepts that run on a Linux desktop run inside an Android IME.

The audience follows from that. The README lists English with spell check, Chinese via Pinyin, Shuangpin, Wubi, Cangjie and custom tables, Zhuyin through the Chewing plugin, Jyutping through the Jyutping plugin, Vietnamese through UniKey with Telex, VNI and VIQR, Japanese through Anthy, Korean through Hangul, Sinhala through Sayura, Thai, and a generic RIME plugin for custom schemas. Someone who types Chinese daily on a desktop and wants the same tables and dictionaries on a phone is the target user. Someone who wants a keyboard that works out of the box and never asks a question is not.

## How the Fcitx5 engine model maps onto an Android IME

The repository is split into app/, lib/, plugin/ and codegen/, with build-logic/ holding convention plugins and a Versions.kt file that records the recommended SDK, NDK and CMake versions. The plugin/ directory is the interesting part: each language engine lives in its own module, and the README describes a plugin system for loading addons from other installed APKs. That is the architectural decision that separates this project from a monolithic keyboard. The core app provides the input method service, the virtual keyboard, the candidate view and the theming layer; language support arrives as separate packages that the core discovers at runtime.

The practical consequence is that installing the base app does not give you Japanese or Korean. You install the plugin APK for the engine you want, and the core picks it up. This is why the README lists engines as "via" a plugin rather than as built-in features, and why the generic RIME plugin is described as supporting imported custom schemas. The trade-off is real: more moving parts to install, and a plugin that is not installed simply does not appear. The benefit is that the core stays small and an engine can be updated without shipping a new keyboard.

## Installing fcitx5-android and enabling the keyboard

The README points at three distribution channels: GitHub Releases, F-Droid and Google Play. The package name is org.fcitx.fcitx5.android. There is a signature caveat that matters before you pick one, and the README states it directly: APKs from GitHub Release, F-Droid and Jenkins share the same signing certificate and are compatible when upgrading, while Google Play builds do not. The README gives the SHA-256 fingerprints for both groups, so you can verify which build you have.

After installing, the keyboard has to be enabled in Android settings and selected as the active input method. The README does not walk through those Android-level steps, so treat the system settings path as the place to look rather than expecting in-app instructions.

For developers, the README's build section is explicit about prerequisites: Android SDK Platform and Build-Tools 35, Android NDK (side by side) 25 with CMake 3.22.1, KDE extra-cmake-modules, and GNU Gettext 0.20 or newer for the msgfmt binary. The clone step includes submodules, which is not optional here:

```bash
git clone git@github.com:fcitx5-android/fcitx5-android.git
git submodule update --init --recursive
```

System packages come from the platform package manager. The README lists the commands per distribution, including Debian and Ubuntu:

```bash
sudo apt install extra-cmake-modules gettext
```

The README notes that the recommended SDK, NDK and CMake versions are recorded in Versions.kt under build-logic, and that the screenshots in the build instructions may be out of date. Check that file rather than trusting the images.

## The keyboard layout is the limitation to weigh first

The README's implemented-features list includes the virtual keyboard with a parenthetical: layout not customizable yet. Customizable keyboard layout appears under planned features. For anyone coming from a keyboard that lets you rearrange rows, change key sizes or build a custom layout, this is the gap that decides the question. You get theming, which covers custom color schemes, background images and dynamic color on Android 12 and later, plus popup preview on key press and a long press popup keyboard for symbols. You do not get to move the keys.

A second constraint is clipboard management, which the README limits to plain text only. A third is that the engine coverage is uneven by design: Japanese requires the Anthy plugin, Korean the Hangul plugin, and so on. If your language is not in the supported list and no plugin exists for it, the generic RIME plugin with an imported schema is the remaining path, and that assumes you have a schema to import.

The README's troubleshooting section is truncated in the repository listing, so build-time problems such as slow Android Studio indexing are acknowledged but not fully documented in what is visible. That is a fair signal about where the project's documentation effort has gone: user-facing features are described, developer friction is only partly covered.

## How fcitx5-android differs from RIME front ends and OpenBoard

The closest comparison is a standalone RIME front end on Android. RIME is a schema-driven input engine, and its Android front ends bundle the engine and the schemas together. fcitx5-android takes the opposite approach: RIME is one plugin among several, sitting alongside Pinyin, Hangul and Anthy under a shared framework. If your entire input life is one RIME schema, a dedicated RIME front end is a smaller dependency. If you switch between a table-based Chinese input and a Korean engine, the plugin model is the reason to pick this project.

OpenBoard is the other comparison people search for, and the difference is categorical. OpenBoard is a keyboard, not an input method framework. It does not ship a Pinyin engine with user dictionaries or a Jyutping plugin. Choosing between them is choosing between a keyboard and an engine platform. fcitx5-android is the wrong tool if what you want is a clean, minimal Latin keyboard with gesture typing; it is the right tool if the engine is the point.

## Maintenance, licensing and what an upgrade costs

The repository is not archived, and the last push was on 2026-09-18. Release 0.1.3, titled Physical Keyboard Improvements and Candidate Tab Actions, is dated 2026-07-26, following 0.1.2 in November 2025 and 0.1.1 in March 2025. The cadence is measured rather than fast, and the project is still on 0.1.x after several years of development, which is worth knowing before you build a workflow around it.

The licence is LGPL-2.1. For end users this changes nothing. For anyone embedding the code, the LGPL carries obligations around relinking and source availability that differ from permissive licences, and the plugin architecture means a separately distributed plugin is its own artefact with its own distribution terms. That is a question for your own legal review, not something the README answers.

Upgrade cost is dominated by the signature split. Because Google Play builds use a different certificate from GitHub Release, F-Droid and Jenkins builds, moving between channels is not an in-place upgrade. Pick a channel and stay on it, or plan to uninstall and reinstall.

## Conclusion

Adopt fcitx5-android if you need Chinese, Japanese, Korean, Vietnamese, Sinhala or Thai input on Android and you are willing to install plugins and configure engines yourself. Skip it if you want a stock, zero-configuration keyboard or need a customizable key layout today, because the README lists that as planned rather than implemented. Before installing, check which channel you are using: Google Play builds carry a different signing certificate from GitHub Release, F-Droid and Jenkins builds, so switching between them is not an in-place upgrade.

## FAQ

### How do I know if my Android is 5.0 or higher?

The README does not state a minimum Android version for fcitx5-android, so the repository does not answer this. Check your device's Android version in system settings before installing.

### What is Android 5 called?

The README does not discuss Android version names or minimum version requirements for fcitx5-android. It only notes that dynamic color is available after Android 12.

### What Android is API 34?

The README does not map API levels to Android versions. It specifies Android SDK Platform and Build-Tools 35 as build dependencies, which is a developer requirement rather than a device requirement.

### What Android is API 29?

The README does not map API levels to Android versions. The only version-related feature note is that dynamic color requires Android 12 or later.

## Sources

- [fcitx5-android/fcitx5-android on GitHub](https://github.com/fcitx5-android/fcitx5-android)
- [License: LGPL-2.1](https://github.com/fcitx5-android/fcitx5-android/blob/master/LICENSE)
- [Project website](https://fcitx5-android.github.io/)
- [README](https://github.com/fcitx5-android/fcitx5-android/blob/master/README.md)
- [Releases](https://github.com/fcitx5-android/fcitx5-android/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/fcitx5-android-fcitx5-android
