2.1.3.2297
Highlights π
-
π€ Faster file sharing across devices
Sharing files between your devices is now snappier and more reliable.
The device you copied from delivers files directly to your other
devices, instead of making them ask for the data first. This also
paves the way for the upcoming iOS Share Extension, letting you share
files straight from any app on your iPhone or iPad to your desktop
(#4456 #4457 #4467 #4468). -
π‘οΈ Windows: heads-up when your network blocks CrossPaste
On Windows, if your network is set to "Public", the Windows Firewall
silently blocks CrossPaste from finding nearby devices. CrossPaste
now detects this and offers a one-click shortcut to the Windows
setting where you can switch the network to Private (#4402 #4404). -
π±οΈ Smoother drag-and-drop from CrossPaste
Dragging items from the CrossPaste side panel into other apps is
now much better. On macOS, the drag preview no longer hides behind
the paste window β you can finally see what you're dragging. The
side panel also handles edge cases more gracefully, so drags don't
get blocked while previews are still loading, and dragging stays
smooth even with lots of items on screen. Bonus: you can now drag
to reorder your search tags too (#4361 #4357 #4377 #4388). -
πΌοΈ Animated GIFs and real video thumbnails in the side preview
GIFs in your clipboard history now actually animate (smoothly, even
for large ones), and video files show a real thumbnail of the first
frame in the side panel instead of a generic icon. We also fixed a
rare crash that could happen while previews were loading (#4353 #4410
#4422 #4438).
Bug Fixes π
- π Pre-allocate file slots on push receive so the first chunk has somewhere to land (#4468)
- π Namespace nearby device LazyColumn keys to avoid a Compose 1.11 duplicate-key crash (#4470)
- π Bypass JVM system proxy for LAN sync traffic so peer sync no longer hangs behind a configured HTTP proxy (#4449)
- π Make smoke-test orphan-JVM kill order-independent so cleanup keeps working if the launcher reorders
-Dflags (#4452) - π Replace
dzirbel/compose-material-context-menu(incompatible with Compose 1.11TextContextMenuAPI) with an in-tree Material context menu to fix text-field crash (#4448) - π Stop smoke-test from killing user's PROD CrossPaste and aborting on macOS bash 3.2 (#4445)
- π Serialize Skia codec/bitmap close with in-flight readPixels (#4438)
- π Bring main window to front on every showMainWindow call (#4408)
- π Fix COM ref leak and false-positive warning in Windows network detection (#4404)
- π Composite translucent HTML/RTF preview bg over theme to avoid double-blending (#4400)
- π Sort nvm node versions by parsed semver in web build (#4390)
- π Reset selected index when the search window opens (#4382)
- π Stop surfacing CancellationException as a refresh failure (#4373)
- π Stop ClientEncryptPlugin throwing on bodyless GET and harden pull error handling (#4371)
- π Harden thumbnail extraction and fix .ts TypeScript misclassification (#4367)
- π Resolve npm absolute path in :web build to fix daemon Exec error 2 (#4365)
- π Lower mac paste window level so drag preview is visible (#4361)
- π Skip empty Apple sync tasks and harden side drag preview (#4357)
- π Skip iPhone/iPad peers for Apple Universal Clipboard pastes (#4355)
- π Accept
java.net.URLtransfer data inDesktopUrlTypePlugin(#4349) - π Fix side search crashes on fast horizontal scroll (#4347)
- π Route Apple Universal Clipboard pastes to non-Mac peers (#4344)
- π Correct
.gitignoreentry toscheduled_tasks.lock
New Features β¨
- β¨ Add desktop file push protocol β
/sync/pastepush mode +/sync/file/push+/sync/paste/push/complete(M1+M2) (#4456) - β¨ Add desktop-side client for the file push protocol (M4) (#4457)
- β¨ Redesign OCR language rows and add drag-to-reorder for loaded languages (#4473)
- β¨ Add
PasteDao.filterExistingIdsfor stale-id filtering (#4428) - β¨ Add bulk tag operations to
PasteTagDao(#4426) - β¨ Animate GIFs in image side preview via Skia codec (#4410)
- β¨ Add
UserAttentionServiceto gate background pollers on window visibility (#4406) - β¨ Detect Windows Public network profile and offer one-click jump to settings (#4402)
- β¨ Add drag-and-drop reordering for search tags (#4377)
- β¨ Add Chrome extension release tooling and marketing preview (#4363)
- β¨ Preview video files in side panel with native thumbnails (#4353)
- β¨ Make device info values selectable for copy (#4320)
UI Improvements π
- π¨ Simplify settings description copy across all locales (#4315)
Multiplatform Β· Refactor Β· Code Style π¨
- π¨ Extract push out of
SyncPasteTaskExecutorintoSharePushOrchestrator(#4467) - π¨ Extract
DesktopBootstrapto consolidate process-wide hooks (#4450) - π¨ Opt in to
ExperimentalRichTextApiin HTML/RTF side previews (#4424) - π¨ Catch block exceptions inside
launchWhileAttentiveso a single failed tick doesn't kill the poller (#4415) - π¨ Regenerate
web/package-lock.jsonandi18n/translations.generated.ts(#4386) - π¨ Lazy-resolve npm in
:webGradle config, drop interactive-shell probe (#4384) - π¨ Consolidate
MacAcrylicEffectand tidy small readability issues (#4369) - π¨ Extract
hbitmapToBufferedImageand addPlatform.isApple(#4359) - π¨ Introduce
PasteSourceContextto bundle paste origin metadata (#4342) - π¨ Use
Durationform forkotlinx.coroutines.delaycalls (#4340) - π¨ Extract
AbstractGlobalCopywritertocommonMain(#4338) - π¨ Hoist shared i18n primitives to
commonMain(#4336) - π¨ Clarify
DiscoveryDriver.browsecontract and makeTargetCacheatomic (#4334) - π¨ Harden
DiscoveryDriver.close()and useDateUtilsin e2e (#4332) - π¨
:e2eharness review follow-ups (#4329) - π¨ Harden
appInstanceIdloadOrCreateand surfaceOneFilePersistwrite failures (#4322) - π¨ Harden
appInstanceIdmigration against corrupt metadata (#4317) - π¨ Extract
appInstanceIdout ofAppConfig(#4313) - π¨ Lazy-init
deviceId/deviceNameinEndpointInfoFactory(#4311)
Performance β‘
- β‘ Decode GIF frames off the UI thread with double buffering (#4422)
- β‘ Defer
dragOffsetXread to layer phase inSearchTagsView(#4388) - β‘ Stop firing side search load-more on every scroll frame (#4351)
Testing β
- β
Regression tests for
MaterialContextMenuhover-index and submenu position (#4454) - β
Regression test for
SkiaAnimatedImageViewclose ordering (#4444) - β
Add
:e2ereal-device test harness (#4318)
Build & CI π·
- π· Auto-update GitHub Sponsors avatars in README, with historical sponsors and rounded avatar rendering (#4458 #4462 #4464)
- π· Add desktop startup smoke test to CI (#4442)
- π· Drop
/hyperframes-demo/from.gitignore(#4412) - π· Ignore
/.claude/worktrees/ - π· Ignore
scheduled_task.lockandskills-lock.json - π· Ignore
/hyperframes-demo/directory - π· Ignore
/.dev-context/directory (#4309)
Documentation π
- π Require English for GitHub issue and PR content
- π Refresh README, CHANGELOG and Roadmap for v2.0.0 release (#4327)
Dependencies β¬οΈ
- β¬οΈ kotlinx-coroutines 1.10.2 β 1.11.0 (#4474)
- β¬οΈ kotlinx-serialization-json bump (#4475)
- β¬οΈ kotlin-logging 8.0.02 β 8.0.03 (#4477)
- β¬οΈ kotter 1.2.1 β 1.3.0 (#4478)
- β¬οΈ Compose Multiplatform β 1.11.0 (#4417)
- β¬οΈ Ktor 3.4.2 β 3.5.0 (#4305 #4429)
- β¬οΈ Kotlin 2.3.20 β 2.3.21 (#4324)
- β¬οΈ Jewel 0.34.0-253 β 0.36.0-261 (#4307 #4432 #4434)
- β¬οΈ Compose Shimmer β 1.5.0-beta02 (#4325 #4436)
- β¬οΈ richeditor-compose β 1.0.0-rc14 (#4419)
- β¬οΈ filekit-dialogs 0.13.0 β 0.14.1 (#4430)
- β¬οΈ Gradle Wrapper 9.4.0 β 9.5.0 (#4394)
- β¬οΈ atomicfu 0.31.0 β 0.32.1 (#4391)
- β¬οΈ kotlin-logging 8.0.01 β 8.0.02 (#4392)
- β¬οΈ kotlinx-datetime bump (#4393)
- β¬οΈ MCP Kotlin SDK Server bump (#4431)
- β¬οΈ semver 3.0.0 β 3.1.0 (#4379)
- β¬οΈ compose.hot-reload bump (#4378)
- β¬οΈ ksoup 0.2.5 β 0.2.6 (#4380)
- β¬οΈ icu4j 78.2 β 78.3 (#4308)
- β¬οΈ metadata-extractor 2.19.0 β 2.20.0 (#4323)
Full Changelog: 2.0.0.2192...2.1.3.2297