Downloads (v2.1.8)
| Platform | Architecture | Download |
|---|---|---|
| Windows | x64 | Installer · Portable |
| Windows | arm64 | Installer · Portable |
| macOS | Apple silicon (arm64) | DMG · ZIP |
| macOS | Intel (x64) | DMG · ZIP |
| Linux | x64 | AppImage · DEB · RPM |
| Linux | arm64 | AppImage · DEB · RPM |
Release Notes
Cherry Studio 2.1.8 - Editing, Voice, and Integration Updates
✨ New Features
- [File Editing] Isolate drafts across notes, skills and artifacts, retain failed edits for retry, and support up to 8 MiB text editing and previews.
- [Language] Add Italian (it-IT) UI support with full translations and emoji picker.
- [Voice] Hold the mouse button in a text input to start dictation, release to transcribe.
- [Voice] Streaming speech synthesis with real-time audio playback.
- [Web Search] Add Tencent Yuanbao Search as a built-in provider.
- [Scheduled Tasks] Create and manage scheduled tasks through an agent chat with an interactive task card.
- [Screenshot] Copy the capture to clipboard while keeping the overlay open.
- [Selection] Select text anywhere to automatically copy it and show a quick-quote toolbar.
- [Composer] File and link tokens align with the text line, show per-type file icons, and load favicons while editing.
- [RTF] Preview Rich Text Format files as formatted documents.
- [Feishu] Configure whether the bot only replies to @mentions in group chats.
- [Remote Access] Set a custom hostname, IP or port for pairing invitations.
- [Assistant] Remember the “Also archive related topics” choice for future archives.
🐛 Bug Fixes
- [Notes] Fix note content being overwritten when switching between cached notes.
- [Skills] Show localized error messages when a ZIP or folder is missing SKILL.md, without leaking temporary paths.
- [Chat] Expand long user messages by default; keep follow-up queues independent of read receipts.
- [Proxy] Match short wildcard IP bypass rules like 192.168.* on Windows.
- [Claude Code] Keep the 1M context budget when routing through the internal gateway.
- [Tab Bar] Closing the last tab opens the Launchpad instead of quitting the app.
- [File Preview] Preserve reading state when refreshing files; fix line spacing for Word documents.
- [Sidebar] Selected entries use neutral filled icons in both light and dark themes.
- [Chat Layout] Isolate list-group expansion state per window.
- [Paintings] Cap loading grid density to prevent performance issues.
- [MCP] Keep literal # characters in saved headers and environment values.
- [Knowledge] Ship a baseline sqlite-vec build for Linux x64.
- [Voice] Add diagnostics for operation failures and stream timeouts.
- [Agent Session] Continue the target workspace when creating across agents; surface compaction failures.
- [Messages] Drop historical tool parts with incompatible replay inputs.
- [Virtual List] Hand sticky headers over at the pinned stack bottom.
- [Notes] Fixed an issue where dismissing the "note changed on disk" conflict dialog left the editor session stuck, failing all later note renames, deletions, and moves with misleading errors.
🔒 Security
- [Electron] Upgrade to 44.9.3 for certificate security fixes.
What's Changed
- hotfix(voice): read code blocks and inline code aloud by @DeJeune in #21799
- hotfix(agent-bootstrap): allow users to decline onboarding by @DeJeune in #21798
- fix(doc): read the text boxes, footnotes and endnotes of a legacy .doc by @L4XB in #20636
- hotfix(translate): keep dictation controls beside input text by @DeJeune in #21825
- hotfix(computer-use): preserve tool output and paginate AX observations by @DeJeune in #21824
- fix(error-boundary): allow copying error details by @ActiveSky in #19485
- fix(release): preserve final newline when updating hotfix notes by @DeJeune in #21830
- fix(pi-runtime): send adaptive thinking for always-adaptive Claude models by @cherry-coding[bot] in #21810
- feat(input-file-preview): preview files in right pane by @SiinXu in #19894
- fix(prompt-management): expose global prompts from editors by @1lck in #21673
- fix(api-gateway): resolve Coding Partner model ids carrying a [1M] marker by @404-Page-Found in #21873
- fix(web-search): make Querit and Crawl4AI URL fetch checks pass by @404-Page-Found in #21874
- refactor(web-search): extract shared protocols and integrate Desktop by @zhangjiadi225 in #21807
- fix(chat-scroll): use viewport movement to resolve scroll direction by @1lck in #21783
- feat(i18n): add Thai localization by @KuronanaTh in #20637
- fix(webview): fix address bar history flash and partial URL selection on click by @EurFelux in #21879
- feat(prompt-polish): lock the prompt editor while polishing by @EurFelux in #21878
- hotfix(settings): restore scrollbars and align Computer Use layout by @kangfenmao in #21794
- chore: version packages by @github-actions[bot] in #21848
- fix(package-release): reject changesets for ignored packages by @DeJeune in #21890
- fix(sidebar): open pinned Agent instead of All Agents by @gokay-ai in #20327
- test(e2e): identify the built-in agent by builtin_role, not its display name by @cherry-coding[bot] in #21895
- test(e2e): accept the placeholder label when selecting the A-03 work directory by @cherry-coding[bot] in #21894
- fix(pdf-translation): normalize sidecar IPv6 proxy bypass entries by @kangfenmao in #21549
- refactor(sidebar-shortcuts): carry agent pin intent on tab state by @cherry-coding[bot] in #21843
- fix(windows-asr): accept canonical 16 kHz WAV input by @SiinXu in #21762
- feat(model-pricing): configure per-image prices by @WhiteZeek in #21892
- test(pdf-translation): take the gateway host from the scoped credential by @1lck in #21902
- fix(chat-messages): display Pi generated images inline by @WhiteZeek in #21908
- fix(remote-access): byte-budget agent list pages under the record ceiling by @cherry-coding[bot] in #21854
- feat(web-search): add DeepSeek Search & Fetch provider by @angri450 in #21909
- fix(composer): preserve the edited queued draft when switching Edit targets by @cherry-coding[bot] in #21863
- chore: version packages by @github-actions[bot] in #21915
- feat(doc-governance): integrate spec-driven development workflow by @DeJeune in #18920
- feat(voice): add configurable dictation shortcuts by @ousugo in #21695
- fix(rtk): stop caching a timed-out probe as unavailable by @lianshuang-photo in #21606
- fix(provider): accept null AiHubMix model pricing by @lorenzozanee in #21923
- fix(openai-responses): accept url_citation without start/end index by @EurFelux in #21944
- feat(agent-sessions): allow pinned sessions to be dragged into a custom order by @NatsUIJM in #21948
- fix(image-preview): avoid Windows caption controls by @chronicle12345 in #21950
- fix(file-metadata): upgrade isbinaryfile so CJK text is not read as binary by @zzoraemon043 in #21954
- fix(mcp): retry legacy connect on bare probe 5xx responses by @ningyixi in #21946
- fix(model-parameters): omit sampling params for all Claude models that reject them by @pcbeingused333 in #21939
- fix(selection-action): seed translate languages from saved preferences by @EurFelux in #21960
- chore(release): sync v2.1.7 metadata by @kangfenmao in #21963
- fix(file-snapshot): preserve lossless filesystem identities by @acedatacloud-dev in #21952
- chore(computer-use): bump SDK and native runtimes to 0.1.9 by @DeJeune in #21966
- fix(markdown): avoid cumulative word animation delays by @DeJeune in #21971
- fix(code-viewer): correct virtual row offsets for wrapped collapsed blocks by @404-Page-Found in #21157
- feat(message-display): allow expanding long user messages by default by @louisfy in #21806
- fix(agent-create): default to Pi and list it first by @kangfenmao in #21985
- fix(agent-session): honor permission modes for agent delegation by @WhiteZeek in #21936
- fix(language-select): hide raw language code from translate selector trigger by @zzx04-cool in #21993
- fix(skill-marketplace): keep distinct same-named install sources by @acedatacloud-dev in #21924
- refactor(voice): unify speech and transcription execution lifecycle by @DeJeune in #21795
- feat(utility-process): support bounded request streams by @DeJeune in #21920
- feat(voice): stream Qwen3 speech to bounded playback by @DeJeune in #21925
- feat(local-asr): add Qwen3 1.7B complete transcription by @DeJeune in #21928
- feat(voice): support streaming Qwen3 dictation by @DeJeune in #21964
- feat(voice): stream Apple system speech PCM by @DeJeune in #21969
- feat(voice): read incremental assistant text by @DeJeune in #21988
- fix(navigation): refine sidebar, launchpad and tab visuals by @kangfenmao in #21980
- fix(ai-sdk-provider): omit tool input examples on the CherryIN Anthropic model by @cherry-coding[bot] in #22001
- chore: version packages by @github-actions[bot] in #22018
- fix(remote-access): support paged message summaries by @WhiteZeek in #21992
- feat(provider-registry): support MiniMax-M3.1-Flash by @SaladDay in #21999
- fix(file-preview): resolve relative Markdown images against the document by @cherry-coding[bot] in #22015
- chore: version packages by @github-actions[bot] in #22019
- refactor(mcp): trim built-in tool and skill descriptions to 120 characters by @angri450 in #22025
- chore: version packages by @github-actions[bot] in #22030
- fix(api-gateway): report OS-refused gateway binds with recovery steps by @cherry-coding[bot] in #22009
- fix(tool-schema): add properties map to parameterless MCP tool schemas by @cherry-coding[bot] in #22004
- fix(remote-transport): apply backpressure instead of aborting at the queued-bytes cap by @drakeo338 in #21979
- fix(file-preview): treat a missing w:lineRule as auto line spacing by @cherry-coding[bot] in #22031
- chore: version packages by @github-actions[bot] in #22032
- chore: version packages by @github-actions[bot] in #22033
- fix(provider): tolerate chat-completions tool_call deltas without a function object by @cherry-coding[bot] in #22006
- fix(agent-session): surface automatic compaction failures by @WhiteZeek in #21929
- chore: version packages by @github-actions[bot] in #22034
- fix(package-release): skip obsolete changeset runs by @DeJeune in #22037
- feat(scheduled-tasks): create scheduled tasks through an agent chat by @1lck in #21796
- feat(scheduled-tasks): interactive task card for scheduled tasks created in chat by @1lck in #21823
- feat(runtime-activity): keep active AI and background tasks awake by @DeJeune in #20891
- feat(application): confirm quit while runtime tasks are active by @DeJeune in #20892
- fix(error-detail): hide direct reports for verified HTTP 5xx by @SiinXu in #20721
- docs(readme): refresh v2 features and product screenshots by @kangfenmao in #22039
- test(e2e): add SET-05 About page case by @cherry-qa[bot] in #22047
- fix(provider-models): project Ollama's embedding capability for knowledge-base model picking by @cherry-coding[bot] in #22064
- feat(qa-ondemand): run single desktop QA plans on demand by @kangfenmao in #22057
- fix(knowledge): ship a baseline sqlite-vec build on Linux x64 by @cherry-coding[bot] in #22056
- feat(voice): add mouse-hold dictation by @ousugo in #22063
- fix(tab-bar): close the last tab into the Launchpad fallback by @NatsUIJM in #22085
- feat(selection): add automatic copy and quote toolbar by @ousugo in #22099
- fix(web-search): default Crawl4AI URL fetching to the Cloud API host by @cherry-coding[bot] in #22102
- fix(mcp-settings): keep literal '#' in saved headers and env values by @cherry-coding[bot] in #22065
- fix(agent-session): continue the target Agent workspace on cross-Agent create by @NatsUIJM in #22076
- fix(sidebar): align hidden sidebar spacing with content frame by @kangfenmao in #22111
- chore(deps): upgrade selection-hook to 2.1.2 by @0xfullex in #22079
- fix(api-gateway): classify statusless upstream timeouts and aborts as 504 by @cherry-coding[bot] in #22081
- ci(issue-management): remove stale issue auto-closing by @kangfenmao in #22115
- fix(composer): drain follow-up queues independently of read receipts by @ousugo in #21149
- feat(composer-tokens): align chips with prose, per-type file icons, link favicons by @DeJeune in #21792
- feat(screenshot): add copy-to-clipboard action by @UmarAlMukhtar in #22110
- fix(message-actions): balance read aloud icon weight by @DeJeune in #22119
- fix(claude-code): keep the [1m] context budget on the gateway route by @NatsUIJM in #22116
- fix(report-artifacts): align cards and clarify preview actions by @DeJeune in #22338
- fix(proxy): match short wildcard IP bypass rules like 192.168.* by @HHHSL in #22118
- feat(i18n): add Italian (it-IT) language support by @lianshuang-photo in #21029
- fix(electron): upgrade to 44.9.3 for certificate security fixes by @DeJeune in #22357
- fix(chat-attachments): restore external file cards and clarify preview actions by @DeJeune in #22347
- fix(voice): add operation failure and stream timeout diagnostics by @DeJeune in #22371
- test(e2e): cover conversations, composer, message actions and settings navigation by @cherry-qa[bot] in #22367
- feat(assistant): remember the related-topics choice when archiving by @cherry-coding[bot] in #22378
- fix(virtual-list): hand sticky headers over at the pinned stack bottom by @cherry-coding[bot] in #22379
- fix(resource-list): show the whole-group drop indicator under section headers by @cherry-coding[bot] in #22380
- fix(external-app): list the default application once in open-with by @cherry-coding[bot] in #22377
- ci(qa-ondemand): correct startup budget and Windows timezone by @kangfenmao in #22070
- feat(web-search): add Tencent Yuanbao Search provider by @WhiteZeek in #22343
- feat(file-preview): add rich text format preview by @DeJeune in #22376
- chore: version packages by @github-actions[bot] in #22391
- feat(remote-access): support custom pairing addresses and ports by @DeJeune in #21387
- chore: version packages by @github-actions[bot] in #22397
- chore: version packages by @github-actions[bot] in #22398
- fix(agent-lifecycle): reclaim purged session transcripts immediately by @lianshuang-photo in #21582
- fix(remote-access): preserve entered HTTP and HTTPS addresses by @DeJeune in #22409
- fix(e2e-regression): make CDP and inspector ports configurable by @cherry-qa[bot] in #22423
- fix(skills): parse CRLF frontmatter with the strict YAML engine by @cherry-coding[bot] in #22410
- chore(codeowners): assign main core and data owners by @DeJeune in #22438
- fix(resource-list): prevent session hover preview shaking by @DeJeune in #22417
- fix(file-preview): preserve reading state when refreshing files by @ousugo in #20897
- chore: version packages by @github-actions[bot] in #22456
- fix(proxy-settings): explain TUN mode in Proxy Mode and correct the painting image warning by @lianshuang-photo in #21090
- fix(chat-layout): isolate list-group expansion state per window by @NatsUIJM in #20848
- fix(paintings): cap loading grid density by @SiinXu in #17585
- fix(i18n): restore Italian proxy translations by @DeJeune in #22473
- fix(pi-runtime): omit reasoning.summary for third-party Responses hosts by @cherry-coding[bot] in #22491
- fix(ai-messages): drop historical tool parts with non-object replay inputs by @cherry-coding[bot] in #22507
- feat(feishu-channel): make the group mention requirement configurable by @cherry-coding[bot] in #22472
- test(e2e): add settings persistence cases (SET-02, SET-03) by @cherry-qa[bot] in #22390
- test(system-speech): avoid executing writable request fixtures by @DeJeune in #22529
- fix(notes): keep the file-edit session's identity when switching back to a cached note by @cherry-coding[bot] in #22406
- fix(i18n): localize the file preview and correct the Italian busy-session copy by @cherry-coding[bot] in #22348
- fix(skills): localize local skill import failures and stop printing temp paths by @cherry-coding[bot] in #22421
- chore: version packages by @github-actions[bot] in #22530
- fix(sidebar): use filled icons for selected navigation by @DeJeune in #22537
- hotfix(file-edit): isolate drafts and serialize file persistence by @DeJeune in #22420
- fix(release): backport #22617 to v2.1.8 by @DeJeune in #22672
- fix(release): backport #22671 to v2.1.8 by @kangfenmao in #22676
New Contributors
- @KuronanaTh made their first contribution in #20637
- @chronicle12345 made their first contribution in #21950
- @zzoraemon043 made their first contribution in #21954
- @ningyixi made their first contribution in #21946
- @pcbeingused333 made their first contribution in #21939
- @acedatacloud-dev made their first contribution in #21952
- @louisfy made their first contribution in #21806
- @zzx04-cool made their first contribution in #21993
- @SaladDay made their first contribution in #21999
- @drakeo338 made their first contribution in #21979
- @UmarAlMukhtar made their first contribution in #22110
Full Changelog: v2.1.7...v2.1.8