# Ciyue reads MDX and MDD dictionaries and turns them into a study app

> Ciyue is a Flutter dictionary client for the mdict formats, shipping on Android, Windows, Linux and macOS with AI translation, text to speech, flashcards with spaced repetition and an AI writing check. It is MIT licensed, it is a client for dictionaries you supply rather than a dictionary itself, and its WebView based rendering is why it needs internet permission.

**mumu-lhl/Ciyue** — A mdict dictionary with Android/Windows/Linux/macOS support

- Repository: https://github.com/mumu-lhl/Ciyue
- Website: https://mumulhl.eu.org/Ciyue/
- Stars: 626 · Forks: 38
- Language: Dart
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/mumu-lhl-ciyue

## A client for dictionaries you already own

Ciyue is described in one line as an mdict dictionary with Android, Windows, Linux and macOS support, and that line sets both the scope and the audience. The repository topics name the formats, mdict, mdd and mdx, along with the platforms and the flutter base, and the primary language is Dart. This is not a dictionary service with a catalogue of its own. It is an application that reads dictionary files you supply, in the mdict family of formats, and the README's job is to point you at the content rather than host it. The install section offers a GitHub release, an F-Droid package under the id org.eu.mumulhl.ciyue, an Obtainium entry, a Repology packaging status badge, an Arch User Repository package, an AppImage, a Flatpak and an inno_setup.iss file for Windows, which is a fairly complete distribution matrix for a single app. The recommended dictionaries live in the project wiki, so the choice of content stays with the user, and the app is the reader.

## The features are study features, not lookup features

The features list is short and it explains what kind of application this is. There is support for MDX and MDD files, support for searching and displaying multiple dictionaries at once, and support for Material You, which is the dynamic colour system on Android. Then the four features that go beyond a dictionary viewer. AI Translate supports OpenAI, Gemini and Deepseek among others, so a lookup can be turned into a translation without leaving the app. Read aloud covers the pronunciation. Bookmarking words to a word book keeps a vocabulary list. Flashcards with FSRS spaced repetition turn a saved word into something you review on a schedule, and FSRS is the specific scheduling algorithm rather than a generic flashcard feature. The last is an AI writing check, which is the odd one out, because it evaluates text you write rather than text you look up. Taken together the list describes a reading and vocabulary app that happens to open mdict files, and that is the framing to keep in mind when you decide whether it fits your routine.

## Installing on Linux: AUR, AppImage or Flatpak

The Linux paths are the most concrete in the README, and there are three. Arch users can install from the AUR or from the archlinuxcn repository using whichever AUR helper they already use.

```bash
yay -S ciyue
```

For the AppImage there are two rootless installers, AppMan and AM, both in the same family of tools.

```bash
  appman -i ciyue
```

```bash
  am -i ciyue
```

The Flatpak route is a download of the packaged file from a release, followed by a user scoped install.

```bash
flatpak install --user ./ciyue-x86_64.flatpak
```

The Flatpak filename is worth noting because it is architecture specific, ciyue-x86_64.flatpak, so a different machine may need a different asset from the same release. On Android the app comes through F-Droid or Obtainium, and on Windows through the GitHub release and the inno_setup script that produces the installer. The project also publishes a nightly build alongside its tagged versions, and the recent release list shows a v2.0.0-beta.1 from 2026-10-17 and a v1.24.0-beta.5 from 2026-10-07, so the 1.x and 2.x lines are both in beta at the same time, which is a pattern worth remembering when you pick a build.

## Why a dictionary app needs the INTERNET permission

The permissions section is the most interesting part of the README, because it explains an unexpected requirement. Ciyue uses WebView to display words in a dictionary, and WebView needs INTERNET permission to work, even when displaying local data. That is the whole explanation. The WebView renders the entry, and the renderer on Android expects the internet permission, so the manifest asks for it and the app looks like it wants to phone home when it does not. The README is careful about the rest: when checking for updates or requesting third-party services such as an AI provider, Ciyue will use this permission, and Ciyue will not independently initiate requests. The distinction matters for anyone who reads Android permission lists the way they read browser permissions, because an app that renders local content through a web view and an app that fetches remote content look identical in the permission dialog. If the AI features are switched off and updates are not being checked, the permission is still there because the rendering path needs it, which is a good example of a technical constraint showing up as a policy question.

## A Flutter project with its own build and packaging machinery

The repository listing shows a full multi platform Flutter project rather than a single application directory. There are android/, linux/, macos/ and windows/ folders for the platform shells, a lib/ directory for the Dart code, a packages/ directory that suggests the code is split into more than one package, and a tools/ directory with shell scripts. Alongside them sit flatpak/ for the Flatpak manifest, metadata/ for the store listings and screenshots, drift_schemas/ for the database migrations, a l10n.yaml for localisation, an analysis_options.yaml for the linter, a devtools_options.yaml, a build.yaml, a justfile for the task runner, a desktop_updater.yaml with a matching keys file, and a cliff.toml plus a changelogs/ directory for the changelog generation. The justfile shows how the packaging is done.

```bash
build-appimage:
    ./tools/build_appimage.sh

build-rpm:
    ./tools/build_rpm.sh

build-deb:
    ./tools/build_deb.sh
```

The same file also carries the code generation and maintenance tasks, with build_runner running the Dart code generation and make-migrations running drift_dev to produce the database migrations, and a count-codes recipe that measures the size of the lib/ tree while excluding the generated files, the steps files and the localisations. That last recipe is a small sign of a project that has been thinking about the size of its generated code, and the desktop updater configuration is another, since it means a desktop user gets updates without reinstalling.

## How it compares to a plain dictionary reader

The alternative is a dedicated mdict reader, of which there are several, and the difference in approach is mostly about what surrounds the lookup. A plain reader opens the file, shows the entry and stops there, and its whole job is fidelity to the dictionary format. Ciyue keeps the reading job and adds the study job around it, with a word book, flashcards on a schedule, an AI writing check and machine translation, which means the app is more useful for someone learning a language and more work than a viewer. The second difference is the platform spread. A reader that exists only on Android is fine for a phone; Ciyue ships on four platforms with a common Flutter codebase, so a word looked up on a laptop and a card reviewed on a phone live in the same place, which is a real advantage for a vocabulary habit. The third is the cost of the design choices. The WebView rendering is what lets arbitrary dictionary formats display, and it is also what forces the internet permission, and the AI features require a provider key and send your text to a third party, which is a different privacy posture from a purely local reader. The project publishes a privacy policy and a terms of service, which is the right way to handle that, and a disclaimer that the maintainers and contributors are not responsible for losses or problems arising from use, with the software provided as is.

## Conclusion

Ciyue suits someone who already owns mdict dictionaries and wants them on a phone and a laptop in one app, with the study features that a plain dictionary viewer does not have, since the flashcards with spaced repetition and the writing check are the parts that turn it into a learning tool. It is the wrong tool if you want a dictionary included, because the dictionaries come from elsewhere and the project only recommends them in its wiki, and it is the wrong tool for anyone who objects to an app that renders dictionary entries through a WebView and therefore asks for internet permission. Before you adopt it, check the format of the dictionaries you own, since support is listed for MDX and MDD, and read the permissions section, which explains that the internet permission exists for the WebView and for update checks and third party AI providers.

## FAQ

### What dictionary formats does Ciyue support?

The features list says MDX and MDD support, and the repository topics name mdict, mdd and mdx. The dictionaries themselves are not included, they are recommended through the project wiki, and the app reads the files you supply.

### Why does Ciyue need the INTERNET permission on Android?

Because Ciyue uses WebView to display words in a dictionary, and WebView needs INTERNET permission to work even when displaying local data. The permission is also used when checking for updates or requesting third-party services such as an AI provider, and the README states that Ciyue will not independently initiate requests.

### How do I install Ciyue on Linux?

Through the AUR with an AUR helper such as yay, as an AppImage with AppMan or AM using appman -i ciyue or am -i ciyue, or as a Flatpak with flatpak install --user ./ciyue-x86_64.flatpak downloaded from a release. It is also on F-Droid, Obtainium, the GitHub releases and in the Arch Linux CN repository.

## Sources

- [License: MIT](https://github.com/mumu-lhl/Ciyue/blob/main/LICENSE)
- [mumu-lhl/Ciyue on GitHub](https://github.com/mumu-lhl/Ciyue)
- [Project website](https://mumulhl.eu.org/Ciyue/)
- [README](https://github.com/mumu-lhl/Ciyue/blob/main/README.md)
- [Releases](https://github.com/mumu-lhl/Ciyue/releases)

---

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