Downloads
Android
| Architecture | Common APK | Full APK |
|---|---|---|
| Universal (armeabi-v7a, arm64-v8a, x86_64) | Download | Download |
| armeabi-v7a (32-bit ARM) | Download | Download |
| arm64-v8a (64-bit ARM) | Download | Download |
| x86_64 | Download | Download |
Android Common vs Full: Common uses Android's system folder picker and copies selected dictionaries/audio into app-private storage, so it does not require broad storage access. Full requires the "Manage all files" permission on Android 11+ and reads dictionaries/audio directly from the selected external folder, avoiding the extra copy and saving storage.
Windows
| Artifact | Download |
|---|---|
| Installer | ciyue-installer.exe |
| Portable bundle | ciyue-windows.zip |
Linux
| Artifact | Download |
|---|---|
| AppImage | Ciyue-latest-x86_64.AppImage |
| Debian package | ciyue-x86_64.deb |
| RPM package | ciyue-x86_64.rpm |
| Portable tarball | ciyue-linux.tar.xz |
| Flatpak | ciyue-x86_64.flatpak |
macOS
Requires macOS 12 (Monterey) or later. The disk image is a universal build.
Launch at login needs macOS 13 (Ventura) or later; on macOS 12 the toggle has no effect.
The app is ad-hoc signed. If Gatekeeper reports the app as damaged or unverified, remove the quarantine flag with (or right-click the app and choose Open) after moving it to Applications.
| Artifact | Download |
|---|---|
| Disk image | ciyue-macos.dmg |
| Portable bundle | ciyue-macos.zip |
System requirements
| Platform | Minimum |
|---|---|
| Windows | Windows 10 version 1809 (LTSC 2019) or later |
| Linux | glibc 2.38 or later (Debian 13, Ubuntu 24.04 or later) |
Windows: entries are rendered with Microsoft Edge WebView2. Windows 11 and
most Windows 10 installations already have the Evergreen Runtime through Edge
updates; Windows 10 LTSC and images without Edge do not, and need it installed
from https://go.microsoft.com/fwlink/p/?LinkId=2124703 before the first
launch. Ciyue checks for it at startup and shows a prompt when it is missing.
Linux: the bundle ships its own WebKit, which requires glibc 2.38. Debian 12
(glibc 2.36) and Ubuntu 22.04 (glibc 2.35) cannot load it.
What's Changed in 2.1.0
- chore(release): 2.1.0 by @mumu-lhl
- docs: clarify the Android caveat on keyboard shortcuts and sync the English page by @mumu-lhl in #815
- docs(en): follow the revised Chinese keyboard-shortcuts note on Android by @yx-wh
- docs(zh): tighten the keyboard-shortcut notes for Android and selection by @yx-wh
- feat(android): give the full-dev build its own name and icon by @mumu-lhl in #814
- feat(android): give the full-dev build its own name and icon by @yx-wh
- fix(word display): refresh the not found page when the group changes by @mumu-lhl in #812
- fix(word display): refresh the not found page when the group changes by @yx-wh
- feat(settings): let the reader reorder the dictionary groups by @mumu-lhl in #811
- feat(settings): let the reader reorder the dictionary groups by @yx-wh
- docs(release): list the minimum Windows and Linux requirements by @mumu-lhl in #810
- docs: align English keyboard-shortcuts 'Looking up a selection' with the revised Chinese version by @yx-wh
- docs: document long-press pronunciation controls and Kiwix ZIM sources by @yx-wh
- docs(release): list the minimum Windows and Linux requirements by @yx-wh
- fix(windows): prompt to install WebView2 when the runtime is missing by @mumu-lhl in #809
- chore(i18n): translate the WebView2 prompt into Chinese by @yx-wh
- fix(windows): prompt to install WebView2 when the runtime is missing by @yx-wh
- fix(windows): route dictionary entry/sound link clicks through the JS bridge by @mumu-lhl in #808
- fix(windows): route dictionary entry/sound link clicks through the JS bridge by @yx-wh
- fix(i18n, setting): keep the UI usable in the languages Flutter does not translate by @mumu-lhl in #807
- fix(settings): fall back to what fits when the segmented button runs out of room by @yx-wh
- test(l10n): check that every locale the app ships has Material localizations by @yx-wh
- fix(settings): name Gothic in Gothic by @yx-wh
- fix(l10n): give the languages Flutter does not translate a fallback by @yx-wh
- fix(word): use a plain back button on the word page by @yx-wh
- fix(settings): keep a long translation from breaking the navigation bar by @yx-wh
- fix(l10n): shorten the Gothic labels that overflowed their controls by @yx-wh
- fix(settings): keep the segmented buttons from squeezing the list tile titles by @yx-wh
- docs(macos): state the macOS 12 floor and the launch-at-login caveat by @mumu-lhl in #806
- ci(release): derive the macOS requirement from the Xcode project by @yx-wh
- docs(macos): state the macOS 12 floor and the launch-at-login caveat by @yx-wh
- chore(macos): update cnativeapi to 0.5.7 for macOS 12 support by @mumu-lhl in #805
- chore(macos): update cnativeapi to 0.5.7 for macOS 12 support by @yx-wh
- fix(settings): make the TTS preview text editable by @mumu-lhl in #804
- feat(settings): make the TTS preview text editable by @yx-wh
- feat(pronunciation): quick pronunciation settings from the word page by @mumu-lhl in #803
- feat(settings): let the TTS voices be reordered and show the current one clearly by @yx-wh
- fix(word): keep the pronunciation sheet clear of the navigation bar by @yx-wh
- fix(word): make the long press reachable on touch screens by @yx-wh
- fix(settings): refresh the TTS language list after adding a voice by @yx-wh
- fix(settings): expand the dropdowns so long voice names do not overflow by @yx-wh
- feat(word): open pronunciation settings by long-pressing the speaker by @yx-wh
- feat(settings): keep several TTS voices and pick the active one by @yx-wh
- docs(guide): publish the keyboard shortcuts page again by @mumu-lhl in #802
- docs(guide): publish the keyboard shortcuts page again by @yx-wh
- fix(linux): keep host desktop-stack libraries out of the Linux bundle by @mumu-lhl in #801
- docs: record the Linux bundle's host-library boundary by @yx-wh
- fix(linux): take GTK from the host so desktop input methods work by @yx-wh
- fix(linux): take the GLib and GStreamer stacks from the host by @yx-wh
- fix(linux): stop bundling host-coupled Wayland libraries by @yx-wh
- fix(android): resolve SD-card dictionary folders to paths (fallback to SAF copy) by @mumu-lhl
- build(macos): lower deployment target to 12.0 to support macOS 12 by @mumu-lhl in #799
- build(macos): lower deployment target to 12.0 to support macOS 12 by @yx-wh
- feat(shortcuts): desktop keyboard shortcuts, and the focus handling they need on Linux by @mumu-lhl in #798
- test: cover the content scale script by @yx-wh
- fix(linux): scale the entry again after a reload on Android by @yx-wh
- docs: sync the Chinese guide with the search box behaviour by @yx-wh
- fix(shortcuts): forward the plain PageUp and PageDown keys by @yx-wh
- fix(shortcuts): land the focus on the search box the reader last used by @yx-wh
- fix: send a lookup to the entry page that is on screen by @yx-wh
- fix(linux): keep the keyboard focus on the entry after a click by @yx-wh
- refactor(shortcuts): keep the desktop focus path lean by @yx-wh
- fix(shortcuts): give Ctrl+F the same focus hand-off as Esc by @yx-wh
- feat(shortcuts): keyboard shortcuts for lookup, tabs, groups and zoom by @yx-wh
- chore: use upstream hotkey_manager at 5a409ac (drop deleted-branch fork; nativeapi/cnativeapi 0.5.6) by @mumu-lhl
- chore: bump dict_reader pin to e6854b1 (serialize StarDict concurrent reads) by @mumu-lhl
- fix(linux): render the WebView on VirGL and drop the unused runner template by @mumu-lhl in #797
- chore(linux): drop the unused runner template by @yx-wh
- fix(linux): use the software WebView texture on VirGL by @yx-wh
- feat(settings): use the dictionary-group icon and label for the sidebar toggle by @mumu-lhl in #796
- feat(settings): update the sidebar group icon label in every locale by @yx-wh
- feat(settings): rename the sidebar icon setting and use the group icon by @yx-wh
- feat(linux): wire native TTS into word pronunciation, TtsHelper, and audio settings (voice picker + backend status) by @mumu-lhl
- feat(linux): native TTS backends - SSIP client (speech-dispatcher) and espeak-ng runner with fake-transport tests by @mumu-lhl
- feat(web): support dictionary groups, folding, dark mode, and AI explain/translate by @mumu-lhl
- feat: online pronunciation settings UI (Wiktionary/Forvo toggles, languages, Forvo API key field) by @mumu-lhl
- feat: online pronunciation via Wiktionary and Forvo (cached, quota-guarded, pack-first chain) by @mumu-lhl
- feat(web): add local web query service and browser extension by @mumu-lhl
- chore(l10n): clean up the ARB files, guard them in CI, and complete the German translation by @mumu-lhl in #793
- chore(ui): show every language name in its own script by @yx-wh
- chore(l10n): call every prompt a "Prompt" in German by @yx-wh
- chore(ci): run gen-l10n before the ARB structure check by @yx-wh
- feat(l10n): complete the German translation by @yx-wh
- chore(l10n): drop dead keys and add an ARB structure check by @yx-wh
- feat(word-page): add the dictionary-group switcher to word pages by @mumu-lhl in #792
- fix(word-page): add the AI chat button to the expansion app bar by @yx-wh
- fix(word-page): use the book icon for every group switcher by @yx-wh
- fix(word-page): restore the group-switch fixes and wait for entries by @yx-wh
- fix(word-page): keep the previous entry while the new group loads by @yx-wh
- fix(word-page): reset tab controller and cached lookups on group switch by @yx-wh
- fix(word-page): wait for the group switch before caching empty content by @yx-wh
- fix(word-page): rebuild entry views after a dictionary-group switch by @yx-wh
- feat(word-page): show the dictionary-group switcher on word pages by @yx-wh
- test: rename the duplicated kana test in dictionary_lookup_test.dart by @mumu-lhl
- chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 in /docs in the npm_and_yarn group across 1 directory by @mumu-lhl in #744
- feat(desktop): command line arguments and ciyue:// URL scheme by @mumu-lhl in #791
- docs(desktop): document command line, ciyue:// links and editor integration by @yx-wh
- feat(desktop): add command line diagnostics and readable file logs by @yx-wh
- feat(desktop): add command line arguments and ciyue:// URL scheme by @yx-wh
- feat(lookup): try full-width and half-width spellings on lookup by @mumu-lhl in #790
- Merge remote-tracking branch 'fork/feat/lookup-variants' into feat/lookup-variants by @yx-wh
- Merge branch 'main' into feat/lookup-variants by @mumu-lhl
- fix(stardict): resolve the headword before reading an entry by @yx-wh
- fix(lookup): fold width in search suggestions by @yx-wh
- test(lookup): cover width folding and case×width crossing by @yx-wh
- feat(lookup): enumerate full-width and half-width spellings on lookup by @yx-wh
- feat: per-dictionary full-text index management in the properties page (status, size, rebuild, delete) by @mumu-lhl
- fix: full-text search review fixes (ready-state counts, broken-store recovery, rune-safe truncation, status-row overflow) by @mumu-lhl
- feat: full-text search over definitions (FTS5 indexes built lazily per dictionary, with UI) by @mumu-lhl
- fix: ZIM resolveKeys titles via entry titles, bump dict_reader to 1198a8f (file lock, redirect reads, XHTML indexing, version gate) by @mumu-lhl
- fix(dictionaries): don't hang close() on a never-initialized dictionary by @mumu-lhl
- refactor(dictionaries): extract BaseLoadedDictionary and unify resource loading by @mumu-lhl
- feat(dictionaries): add support for ZIM dictionary format by @mumu-lhl
- ci(check): install Linux dependencies for native assets by @mumu-lhl
- docs: add a guide to the MDict and StarDict formats by @mumu-lhl in #788
- Merge branch 'main' into docs/dictionary-formats by @mumu-lhl
- feat(word-display): offer hiragana long-vowel spellings when nothing matches by @mumu-lhl in #789
- feat(word-display): offer hiragana long-vowel spellings when nothing matches by @yx-wh
- fix(stardict): restore audio and video from converter media tags by @mumu-lhl in #787
- fix(stardict): restore audio and video from converter media tags by @yx-wh
- fix(linux): show the Ciyue icon in the taskbar and window switcher by @mumu-lhl in #786
- fix(linux): publish a taskbar icon and map the app to its desktop file by @yx-wh
- fix(linux): declare assets/icon.png so the desktop tray icon loads by @yx-wh
- fix(hunspell): make morphology consistent for the first lookup by @mumu-lhl in #785
- fix(dictionaries): drop cached lookups once the group has loaded by @yx-wh
- fix(hunspell): wait for the first load before answering queries by @yx-wh
- feat(word-display): resolve anchors in dictionary entry links by @mumu-lhl in #784
- test(word-display): cover anchors on bword links by @yx-wh
- test(dictionaries): space the anchor targets a screenful apart by @yx-wh
- test(dictionaries): give the anchor fixtures distinct stems by @yx-wh
- fix(word-display): keep an entry anchor inside the dictionary that owns it by @yx-wh
- test(browser): cover entry anchors and in-place scrolling by @yx-wh
- test(dictionaries): add MDict and StarDict entry-anchor fixtures by @yx-wh
- feat(word-display): resolve entry anchors with a ## escape for literal hashes by @yx-wh
- docs: add dictionary formats guide and link schemes deep dive by @yx-wh
- docs: add a guide to the MDict and StarDict formats by @yx-wh
- fix(word-display): play sound:// links from StarDict dictionaries by @mumu-lhl in #782
- docs(pronunciation): mention StarDict entry audio by @yx-wh
- fix(word-display): play sound:// links from StarDict dictionaries by @yx-wh
- feat(cloud-sync): carry StarDict dictionaries through cloud sync by @mumu-lhl in #781
- feat(cloud-sync): carry StarDict dictionaries through cloud sync by @yx-wh
- fix(word-display, word-split): widen the bounds that kept German out of the lookup by @mumu-lhl in #780
- fix(word-split): raise the bounds so long German compounds split again by @yx-wh
- fix(word-display): read a phrasal verb out of a sentence limitation changed to suit German better by @yx-wh
- feat(audio): accept .zip and .zips pronunciation packs by @mumu-lhl in #779
- feat(audio): accept .zip and .zips pronunciation packs by @yx-wh
- fix(audio): make pronunciation packs usable by @mumu-lhl in #778
- fix(audio): make pronunciation packs usable by @yx-wh
- fix(dictionaries): keep enables made while a group is loading by @mumu-lhl in #777
- fix(dictionaries): keep enables made while a group is loading by @yx-wh
- fix(settings): stop deleting StarDict dictionaries that are healthy by @mumu-lhl in #776
- fix(settings): stop deleting StarDict dictionaries that are healthy by @yx-wh
Full Changelog: v2.0.1...v2.1.0