Skip to content

2.0.0.2192

Choose a tag to compare

@guiyanakuang guiyanakuang released this 04 May 05:18
· 340 commits to main since this release
ffd8fbc

Release Notes - v2.0.0

🧩 Note on the Chrome Extension

The Chrome extension is now live on the Chrome Web Store: https://chromewebstore.google.com/detail/crosspaste/aajpcfbdbnaidaaljamjpmmjcfebhmlh

A few things to keep in mind about scope:

  • The extension is a lightweight companion, not a replacement for the native desktop app. It is not feature-complete and is not intended to cover every workflow the desktop client supports.
  • Supported: using the extension as a lightweight in-browser clipboard manager, and pairing it with the native desktop app to sync clipboard content across devices.
  • Not supported: extension-to-extension cross-device pairing. Two browsers running only the extension cannot sync directly with each other β€” at least one peer in the mesh must be a native CrossPaste desktop (or mobile) instance.

If you need the full cross-device experience, install the native desktop app on at least one of your devices and pair the extension to it.

Highlights 🌟

  • 🧩 Chrome Extension β€” A Brand New Platform
    CrossPaste now runs as a first-class Chrome Extension, bringing clipboard sync directly to the browser. Includes WebSocket-based file pulling, Native Messaging to pause the extension when the desktop app is running, and full SyncState parity with desktop (#4152 #4157 #4158 #4164 #4168 #4176).

  • πŸ” SAS-Based v2 Pairing Protocol
    Pairing now uses a Short Authentication String (SAS) to prevent MITM attacks, with a showPairingCode endpoint and a remote access toggle for safer device onboarding (#4088 #4096 #4098).

  • πŸ”„ WebSocket Sync Protocol
    A new bidirectional, real-time WebSocket sync channel replaces polling for many flows, enabling instant cross-device updates, batch pulls, and live liveness probes (#4112 #4120 #4223).

  • πŸ–₯️ Redesigned Devices Screen
    The devices screen has been rebuilt with offline grouping, a current-device dialog, and a refined add-device flow β€” a cleaner, faster way to manage your mesh (#4207).

  • 🏷️ Namespaced App Source Icons
    App source icons are now namespaced by appInstanceId, eliminating cross-device collisions and enabling correct icon rendering across heterogeneous meshes (#4191 #4193 #4197).

Bug Fixes πŸ›

  • Fix notification close button intercepted by native title bar buttons on Windows (#4039)
  • Fix image side preview crop fill and blurry decode size (#4041)
  • Fix color hex format in MarketingPasteData from ARGB to RGBA (#4043)
  • Fix missing libtesseract.so in Linux builds since 1.2.6 (#4049)
  • Fix ToStartView showing on open and not appearing when scrolled (#4052)
  • Fix HTML/RTF search content returning raw markup (#4062)
  • Fix Sparkle crash on macOS by disabling redundant scheduled check (#4086)
  • Fix SegmentedControlSettingsRow layout in twoLine mode (#4136)
  • Deprioritize virtual network interfaces in auto-selection (#4138)
  • Fix incorrect MCP SSE endpoint URL in configuration command (#4146)
  • Skip sync for remote clipboard data to prevent duplication (#4148)
  • Fix ConnectCodeUtils to use KMP-compatible concatToString (#4154)
  • Restore ESC key binding for hide_window and display it in shortcuts UI (#4183)
  • Fail fast when crosspaste-version.properties is missing the version key (#4277)

New Features ✨

  • ✨ Add loading indicator for pasteboard lazy loading and fix throttle stall (#4054)
  • ✨ Add Portuguese (pt) language support (#4076)
  • ✨ Add mobile app promotion guide in desktop devices view (#4083)
  • ✨ Add user-configurable JVM system-property override file (#4267)

UI Improvements πŸ’„

  • πŸ’„ Replace custom CountBadgeAuto with Material 3 Badge and add image count badge (#4143)
  • πŸ’„ Simplify DesktopPromoteGuide to single download button (#4156)
  • 🎨 Align add-device button style with current-device button (#4273)

Multiplatform Β· Refactor Β· Code Style πŸ”¨

  • πŸ”¨ Extract core module and deduplicate shared/app code (#4060)
  • 🎨 Add Compose stability configuration for core module types (#4064)
  • πŸ”¨ Remove getSearchContent/getSummary from PasteItem, introduce PasteItemReader and PasteDataHelper (#4067)
  • βž– Remove unused material-kolor dependency (#4081)
  • πŸ”¨ Convert withTimeout/withTimeoutOrNull Long overloads to Duration (#4094)
  • πŸ”¨ Abstract TrustDeviceView in DeviceScope for platform-specific pairing (#4098)
  • βž– Remove duplicate exception classes from app module (#4100)
  • πŸ”¨ Refactor SyncResolver to unified single-pass connection flow (#4104)
  • πŸ”¨ Refactor searchPasteData pasteType to pasteTypeList for multi-type filtering (#4122)
  • πŸ”¨ Refactor getCrossPasteWebUrl to use remote locale config from meta.json (#4124)
  • πŸ”¨ Reduce default shortcut key bindings to show_main and show_search only (#4127)
  • πŸ”¨ Migrate promote.json to web API and update data model (#4150)
  • πŸ”¨ Refactor addSyncTask to accept targetAppInstanceIds as Set<String> (#4181)
  • πŸ”¨ Add identity parameter to loadRepresentation for mobile platform support (#4185)
  • πŸ”¨ Refactor targetAppInstanceIds to nullable Set<String>? for explicit no-sync semantics (#4188)
  • πŸ”¨ Unify coroutine scopes via namedScope helper (#4216)

Performance ⚑

  • ⚑ Improve device reconnection with fast-then-slow telnet probe strategy (#4108)
  • ⚑ Skip icon pull when local icon file already exists (#4195)

Dependencies ⬆️

  • ⬆️ Kotlin 2.3.10 β†’ 2.3.20 (#4069)
  • ⬆️ Compose Multiplatform 1.10.1 β†’ 1.10.3 (#4055 #4068)
  • ⬆️ Compose Hot-Reload 1.1.0-alpha05 β†’ 1.1.0-rc01 (#4208)
  • ⬆️ Ktor 3.4.0 β†’ 3.4.2 (#4073 #4128)
  • ⬆️ Koin 4.1.1 β†’ 4.2.1 (#4115 #4159)
  • ⬆️ SQLDelight 2.2.1 β†’ 2.3.2 (#4114)
  • ⬆️ Cryptography 0.5.0 β†’ 0.6.0 (#4132)
  • ⬆️ MCP Kotlin SDK Server 0.8.4 β†’ 0.11.0 (#4024 #4113 #4162)
  • ⬆️ Jewel 0.33.0 β†’ 0.34.0 (#4056 #4129)
  • ⬆️ Lifecycle 2.9.6 β†’ 2.10.0 (#4070)
  • ⬆️ Conveyor 1.13 β†’ 2.0 (#4071)
  • ⬆️ Ktlint 14.0.1 β†’ 14.2.0 (#4072)
  • ⬆️ Okio 3.16.4 β†’ 3.17.0 (#4133)
  • ⬆️ Logback Classic 1.5.31 β†’ 1.5.32 (#4134)
  • ⬆️ Kotlin Logging 7.0.14 β†’ 8.0.01 (#4160)
  • ⬆️ ComposeNativeTray 1.1.0 β†’ 1.3.0 (#4209)
  • ⬆️ Coil 3.3.0 β†’ 3.4.0 (#4210)

Build & Tooling πŸ‘·

  • πŸ‘· Split CI into app-build and web-build with path filters (#4239)
  • πŸ”– Bump version to 2.0.0 (#4243)
  • πŸ‘· Tighten CI path filters and unify Node version in build-release (#4279)

Contributors ✨

  • @Fldicoahkiin use imageFlavor instead of javaFileListFlavor for single-image clipboard writes (#4302)

Full Changelog: 1.2.9.2059...2.0.0.2192