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 13 (Ventura) or later. Apple Silicon (arm64).
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 |
What's Changed in 2.0.0
- chore(release): 2.0.0 by @mumu-lhl
- fix: refresh manage-dictionaries state when background dictionary load finishes
- docs: refresh phone screenshots with new mobile captures
- docs: add post-beta.1 user-facing changes to the in-app changelog by @mumu-lhl
- chore: update flutter version to 3.47.8 by @mumu-lhl
- docs: add Ciyue favicon to the docs site
- docs: mention StarDict dictionary support
- docs: refresh feature lists, drop emoji prefixes by @mumu-lhl
- chore(dict): lockfile for the dict_reader .cidx pin by @mumu-lhl
- feat(dict): switch the index cache to binary .cidx, StarDict single-entry lookup by @mumu-lhl
- test(word-display): update user-script expectations for the #756 theme marker by @mumu-lhl
- refactor(dictionaries): drop the interim support-dir cache fallback by @mumu-lhl
- revert(dictionaries): index cache back in the cache directory by @mumu-lhl
- perf(floating-window): keep the engine warm for the process lifetime by @mumu-lhl
- perf(dictionaries): index cache lives in the support directory now by @mumu-lhl
- fix(word-display): dictionary pages follow the app theme; external .css/.js override .mdd copies by @mumu-lhl
- feat(ai): structured word explanations rendered natively (default on) by @mumu-lhl
- feat(ai): structured word explanations rendered natively (default on) by @mumu-lhl
- feat(ai): structured word explanations rendered natively (default on) by @mumu-lhl
- feat(changelog): structured dialog — latest version popup, grouped history by @mumu-lhl
- docs(metadata): keep F-Droid en-US changelog within the 500-char limit by @mumu-lhl
- fix(changelog): language fallback, 2.0 notes, real F-Droid changelog by @mumu-lhl
- feat(audio): settings page rebuild and tests by @mumu-lhl
- feat(audio): pronunciation modes, real TTS controls, labeled pack management by @mumu-lhl
- feat(audio): pronunciation modes, real TTS controls, labeled pack management by @mumu-lhl
- test(stardict): native view, structured-fields cache, binary-only and fragment cases by @mumu-lhl
- feat(stardict): native entry rendering with WebView fallback for HTML entries by @mumu-lhl
- feat(stardict): format-aware word display and dictionary management UI, plus tests by @mumu-lhl
- feat(stardict): Stardict dictionary class and format dispatch in the manager and add pipelines by @mumu-lhl
- feat(stardict): pin dict_reader with StarDictReader, add LoadedDictionary surface and field-to-HTML conversion by @mumu-lhl
- fix(ci): locate macOS app bundle dynamically instead of assuming Products/Release
- fix(macos): add -common build configurations for the default flavor by @mumu-lhl
- fix(macos): add 'common' Xcode scheme so default-flavor builds work by @mumu-lhl
- fix(settings): learning settings layout/limits and flashcards page consistency by @mumu-lhl
- fix(android): restore flutter default-flavor so flavorless builds (F-Droid) work by @mumu-lhl
- fix(chat): keep word context as system turn for prefix-cache stability by @mumu-lhl
- feat(chat): image input (vision) and image generation by @mumu-lhl
- feat(chat): image input (vision) and image generation by @mumu-lhl
- feat(chat): image input (vision) and image generation by @mumu-lhl
- feat(ai): add Agnes AI provider by @mumu-lhl
- feat(chat): multiple sessions; loud errors when AI is unconfigured by @mumu-lhl
- feat(chat): multiple sessions; loud errors when AI is unconfigured by @mumu-lhl
- feat(ai-settings): dedicated prompt management page by @mumu-lhl
- feat(ai-settings): dedicated prompt management page by @mumu-lhl
- feat: free translation sources first; drop mobile group switcher by @mumu-lhl
- fix(translate): second review round — run control, staleness, CJK joins by @mumu-lhl
- i18n: complete all missing translations for 15 locales (remaining files)
- i18n: complete all missing translations for 15 locales by @mumu-lhl
- i18n: complete all missing translations for 15 locales by @mumu-lhl
- i18n: complete all missing translations for 15 locales by @mumu-lhl
- tools: rewrite find_missing_translations for humans and agents
- feat(learn): mistake review reuses stored questions, works offline
- fix(translate): fix review findings in multi-source translation by @mumu-lhl
- fix(learn): harden chat/quiz against crashes and AI format drift (3/3) by @mumu-lhl
- fix(learn): harden chat/quiz against crashes and AI format drift (2/3) by @mumu-lhl
- fix(learn): harden chat/quiz against crashes and AI format drift (1/3) by @mumu-lhl
- docs: remove old zh translation-sources page (renamed to translation) by @mumu-lhl
- docs: remove old translation-sources page (renamed to translation) by @mumu-lhl
- docs: reframe translation-sources page as Translation feature page by @mumu-lhl
- docs: remove meta references to the disclaimer from FAQ entries by @mumu-lhl
- docs: translation sources guide with disclaimer (EN/ZH) by @mumu-lhl
- feat: AI providers as individual translation sources by @mumu-lhl
- feat: multi-source translation with 13 sources (2/2: settings, l10n, prefs, tests) by @mumu-lhl
- feat: multi-source translation with 13 sources (1/2: sources, UI, view models) by @mumu-lhl
- feat(learn): mistake review, more question types, TTS, chat persistence
- feat(learn): make language learning features customizable by @mumu-lhl
- feat(learn): turn chat into a language learning tool by @mumu-lhl
- feat(chat): rebuild chat UI and wire up entry points by @mumu-lhl
- feat(ai): improve prompts, add chat history and stream cancellation by @mumu-lhl
- feat(ai): stream AI responses token-by-token by @mumu-lhl
- refactor(ai): migrate LLM providers to Genkit Dart 1.0 by @mumu-lhl
- fix(settings): wrap mobile settings page in SafeArea by @mumu-lhl
- fix(stats): group wordbook/open-record counts by local day by @mumu-lhl
- fix(linux): add GPU sync before releasing EGL buffers (fix hardware rendering corruption) by @mumu-lhl
- fix(linux): add GPU sync before releasing EGL buffers by @mumu-lhl
- fix(linux): add GPU sync before releasing EGL buffers (fix hardware rendering corruption) by @mumu-lhl
- fix(linux): fix WebView buffer synchronization and selection stickiness by @mumu-lhl
- fix(build): remove integration_test to fix Android release build failure by @mumu-lhl
- fix(linux): resolve text selection misalignment and sticky selection in WebView by @mumu-lhl
- perf(search): reduce suggestion debounce from 250ms to 100ms by @mumu-lhl
- perf(search): reduce suggestion debounce from 250ms to 100ms by @mumu-lhl
- fix(linux): revert defer-resize-during-drag (caused WPE/Flutter size mismatch)
- fix(linux): reset modifiers on page navigation by @mumu-lhl
- fix(linux): reset button state on page navigation by @mumu-lhl
- fix(linux): reset button state on page navigation by @mumu-lhl
- fix(linux): cancel pending drag on WebView dispose by @mumu-lhl
- fix(linux): clear all button state on pointer release by @mumu-lhl
- fix(linux): defer WPE resize during active drag by @mumu-lhl
- refactor(linux): remove dead SetTextureOffset code by @mumu-lhl
- fix(linux): don't drop pointer UP/CANCEL events by @mumu-lhl
- fix(linux): derive pixel stride from buffer size by @mumu-lhl
- fix(linux): debounce WPE resize (fixed ifdef placement) by @mumu-lhl
- Revert "fix(linux): debounce resize and add SHM fallback env var" by @mumu-lhl
- fix(linux): debounce resize and add SHM fallback env var by @mumu-lhl
- fix(linux): WebView rendering corruption and scroll jitter by @mumu-lhl
- fix(webview): retain desktop view across word changes by @mumu-lhl
- fix(linux): handle WPE frames and pointer cancels by @mumu-lhl
- fix(linux): harden webview callback lifetimes by @mumu-lhl
- fix(docs): approve esbuild builds for pnpm 12 by @mumu-lhl
- chore(ci): install pnpm via npm instead of corepack
- fix(linux): retain WebView across word lookups by @mumu-lhl
- chore(docs): drop packageManager field by @mumu-lhl
- docs: overhaul GitHub Pages site and use pnpm 12 by @mumu-lhl
- chore: update flutter version to 3.47.7 by @mumu-lhl
- feat(i18n): add flashcard translations for all 15 locales by @mumu-lhl
- feat(i18n): localize flashcards pages by @mumu-lhl
- docs: add Obtainium badge, update F-Droid badge URL and expand features list by @mumu-lhl
- fix: repair CI test regressions from settings refactor and desktop nav buttons by @mumu-lhl
- chore(release): v2.0.0-beta.1 by @mumu-lhl
- fix: remove unnecessary flutter/foundation import in settings.dart
- feat: update channel selector (Stable / Beta-Alpha / Nightly)
- fix: sync tab history on search-bar and context-menu navigation
- feat: add back/forward buttons to desktop word page AppBar
- fix: avoid deep word page stack when searching from word page
- fix: settings reactive, hunspell races, tag dangling
- fix: dictionary page toggle error feedback and ghost row on delete
- fix: medium/low bugs and dictionary page GroupDialog refresh
- fix: batch of UI state and data bugs (Riverpod, WebView, sync, DB)
- fix: refresh dictionary group enabled-count after toggle
- perf: third batch of performance optimizations (18 items, schema v21→v22)
- perf: second batch of optimizations (lookup, startup, history import, schema v21 indexes) by @mumu-lhl
- perf(history): regenerate app.g.dart with idx_history_word (schema v20) by @mumu-lhl
- test: register schema v20 in migration test helper by @mumu-lhl
- test: refresh mocks after history model change by @mumu-lhl
- test: add schema v20 fixture for history word index migration by @mumu-lhl
- perf(history): upsert with word index and in-memory list update by @mumu-lhl
- perf(history): add schema v20 migration step for history word index by @mumu-lhl
- perf: fix WebView height update storms and narrow provider subscriptions by @mumu-lhl
- perf: debounce search suggestions and parallelize dictionary lookup by @mumu-lhl
- fix(ci): install enchant, libtasn1 and hyphen for Linux bundle step by @mumu-lhl
- fix(ci): install libinput for Linux bundle step by @mumu-lhl
- style(settings): beautify settings subpages with shared M3 card components (2/2) by @mumu-lhl
- style(settings): beautify settings subpages with shared M3 card components (1/2) by @mumu-lhl
- fix(linux): make is_disposing_ public for WPE FDO C callbacks by @mumu-lhl
- fix(linux): resolve WPE display flicker, black screen, and WebProcess lifecycle crash by @mumu-lhl
- fix: resolve dictionary management bugs and upgrade Linux WPE runtime to 2.54.1 by @mumu-lhl
- fix(linux): resolve WebView black screen, flickering, and WPE WebProcess crash by @mumu-lhl
- style(dict): modernize manage dictionaries page UI and action sheet by @mumu-lhl
- style(ui): modernize Material 3 themes, layouts, and components by @mumu-lhl
- chore(ci): clean up redundant steps and unused inputs in workflows by @mumu-lhl
- feat(l10n): add missing Chinese translations for zh, zh_HK, and zh_TW by @mumu-lhl
- fix(cloud_sync): resolve conflict deadlocks, surface granular errors, and add one-tap sync by @mumu-lhl
- fix(mobile): isolate search controllers and clear mobile tabs on exit to home by @mumu-lhl
- feat(mobile): add Chrome-style bottom bar and tab browsing for small screens by @mumu-lhl
- chore(release): v1.24.0-beta.5 by @mumu-lhl
- refactor(state): completely unify state management to riverpod and remove provider by @mumu-lhl
- refactor: migrate Wordbook, Dictionaries, and Audio to Riverpod (Phase 2) by @mumu-lhl
- refactor: migrate Home and Search to Riverpod (Phase 1) by @mumu-lhl
- fix(startup): eliminate home screen dictionary flicker and improve initial load experience by @mumu-lhl
- feat(desktop): support drag-and-drop reordering for word tabs by @mumu-lhl
- feat(desktop): add GoldenDict-style tabbed word browsing and middle-click open by @mumu-lhl
- fix(desktop): fix stats calendar material error, remove audio back button and optimize desktop ui by @mumu-lhl
- feat(desktop): implement nav-detail split view for settings screen by @mumu-lhl
- fix(translate): use translation placeholder instead of prompt label when output is empty by @mumu-lhl
- feat(desktop): optimize translation, wordbook split view, and settings layout by @mumu-lhl
- feat(desktop): add keyboard shortcuts for search, list navigation, and pronunciation by @mumu-lhl
- feat(desktop): add master-detail split view and integrate toolbar actions by @mumu-lhl
- chore(release): v1.24.0-beta.4 by @mumu-lhl
- fix(appimage): keep a single root desktop entry by @mumu-lhl
- fix(android): extend content behind navigation bar by @mumu-lhl
- fix(android): hide gesture navigation bar by @mumu-lhl
- fix: migrate tray manager to native API by @mumu-lhl
- chore(release): v1.24.0-beta.3 by @mumu-lhl
- feat: enable Dark Reader on Linux by @mumu-lhl
- feat: add optional Dark Reader support by @mumu-lhl
- fix: improve Windows dark-mode dictionary readability by @mumu-lhl
- refactor: remove duplicate home group switcher by @mumu-lhl
- fix: refresh custom dictionary background color by @mumu-lhl
- fix: allow cloud sync preferences by @mumu-lhl
- feat: customize dictionary background and CSS by @mumu-lhl
- fix: support gdlookup entry links by @mumu-lhl
- feat: support SFTP and S3 cloud sync by @mumu-lhl
- Revert "feat: add Google Drive and OneDrive cloud sync" by @mumu-lhl
- feat: add Google Drive and OneDrive cloud sync by @mumu-lhl
- feat: sync selected dictionaries over WebDAV by @mumu-lhl
- feat: sync selected dictionaries over WebDAV by @mumu-lhl
- feat: improve search and dictionary group switching UX by @mumu-lhl
- feat(dict): default to source dictionary on entry jump and lookup by @mumu-lhl
- chore(release): v1.24.0-beta.2 by @mumu-lhl
- feat(ai): support fetching models via API and update model catalogs by @mumu-lhl
- chore(release): fix version to v1.24.0-beta.1 by @mumu-lhl
- feat(audio): add visual feedback while playing audio pronunciation by @mumu-lhl
- chore(release): v1.24.0-beta.1 by @mumu-lhl
- chore: update flutter version to 3.47.5 by @mumu-lhl
- feat(android): add home screen search widget by @mumu-lhl
- fix: prevent IME popup when returning from settings sub-pages by @mumu-lhl
- feat(wordbook): swipe through words in wordbook by @mumu-lhl
- fix(search): prevent cleared text refill on rebuild and auto-select on open by @mumu-lhl
- test: prune redundant and tautological test suites by @mumu-lhl
Full Changelog: v1.23.2...v2.0.0