Skip to content

2.1.3.2297

Choose a tag to compare

@guiyanakuang guiyanakuang released this 27 May 03:09
· 235 commits to main since this release

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 -D flags (#4452)
  • πŸ› Replace dzirbel/compose-material-context-menu (incompatible with Compose 1.11 TextContextMenu API) 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.URL transfer data in DesktopUrlTypePlugin (#4349)
  • πŸ› Fix side search crashes on fast horizontal scroll (#4347)
  • πŸ› Route Apple Universal Clipboard pastes to non-Mac peers (#4344)
  • πŸ› Correct .gitignore entry to scheduled_tasks.lock

New Features ✨

  • ✨ Add desktop file push protocol β€” /sync/paste push 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.filterExistingIds for stale-id filtering (#4428)
  • ✨ Add bulk tag operations to PasteTagDao (#4426)
  • ✨ Animate GIFs in image side preview via Skia codec (#4410)
  • ✨ Add UserAttentionService to 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 SyncPasteTaskExecutor into SharePushOrchestrator (#4467)
  • πŸ”¨ Extract DesktopBootstrap to consolidate process-wide hooks (#4450)
  • πŸ”¨ Opt in to ExperimentalRichTextApi in HTML/RTF side previews (#4424)
  • πŸ”¨ Catch block exceptions inside launchWhileAttentive so a single failed tick doesn't kill the poller (#4415)
  • πŸ”¨ Regenerate web/package-lock.json and i18n/translations.generated.ts (#4386)
  • πŸ”¨ Lazy-resolve npm in :web Gradle config, drop interactive-shell probe (#4384)
  • πŸ”¨ Consolidate MacAcrylicEffect and tidy small readability issues (#4369)
  • πŸ”¨ Extract hbitmapToBufferedImage and add Platform.isApple (#4359)
  • πŸ”¨ Introduce PasteSourceContext to bundle paste origin metadata (#4342)
  • πŸ”¨ Use Duration form for kotlinx.coroutines.delay calls (#4340)
  • πŸ”¨ Extract AbstractGlobalCopywriter to commonMain (#4338)
  • πŸ”¨ Hoist shared i18n primitives to commonMain (#4336)
  • πŸ”¨ Clarify DiscoveryDriver.browse contract and make TargetCache atomic (#4334)
  • πŸ”¨ Harden DiscoveryDriver.close() and use DateUtils in e2e (#4332)
  • πŸ”¨ :e2e harness review follow-ups (#4329)
  • πŸ”¨ Harden appInstanceId loadOrCreate and surface OneFilePersist write failures (#4322)
  • πŸ”¨ Harden appInstanceId migration against corrupt metadata (#4317)
  • πŸ”¨ Extract appInstanceId out of AppConfig (#4313)
  • πŸ”¨ Lazy-init deviceId / deviceName in EndpointInfoFactory (#4311)

Performance ⚑

  • ⚑ Decode GIF frames off the UI thread with double buffering (#4422)
  • ⚑ Defer dragOffsetX read to layer phase in SearchTagsView (#4388)
  • ⚑ Stop firing side search load-more on every scroll frame (#4351)

Testing βœ…

  • βœ… Regression tests for MaterialContextMenu hover-index and submenu position (#4454)
  • βœ… Regression test for SkiaAnimatedImageView close ordering (#4444)
  • βœ… Add :e2e real-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.lock and skills-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