2.1.6.2390
Highlights π
-
π Fixed a clipboard loop between the Chrome extension and desktop
Running the Chrome extension and the desktop app on the same machine
could bounce the same clipboard entry back and forth endlessly,
flooding the history with duplicates. Both sides now recognize
content written by the other and no longer re-trigger each other
(#4619 #4620). -
πͺ Same-machine pause protection now actually works on Windows
The native messaging bridge that lets the extension detect a running
desktop app never launched on Windows: the host manifest pointed to
the bridge script with a forward-slash path, which cmd.exe β used by
Chromium to launch non-exe hosts β cannot execute. The manifest now
keeps native backslashes, the bridge script resolves the pid file at
run time (immune to code-page path garbling on non-ASCII user
profiles), and stdin draining is Windows PowerShell 5.1-safe. While
the desktop app is running, the extension on the same machine now
pauses its clipboard capture as designed (#4633 #4634). -
πͺ Upgraded clipboard monitoring on Windows
Clipboard monitoring on Windows now uses the AddClipboardFormatListener
event mechanism, so copied content is picked up faster and more
reliably. The "copied from" app is now resolved via GetClipboardOwner
β the program that actually wrote to the clipboard β instead of
whichever window happened to be in the foreground (#4597 #4606). -
πͺ Works on newer Windows builds without wmic
Newer Windows 11 builds have removed the wmic tool, which prevented
CrossPaste from generating a device identifier. It now reads the
registry MachineGuid instead (#4580). -
π§© Extension zip from GitHub Releases now connects to the desktop app
Loading the Chrome extension zip via "Load unpacked" used to fail with
"Access to the specified native messaging host is forbidden", because
Chrome assigned it a different extension ID on every machine. The
extension ID is now pinned to the Chrome Web Store ID, so unpacked
installs connect to the desktop app just like the store version
(#4631 #4632). -
π Search window resets properly on reopen
Reopening the search window or changing the query now scrolls the
list back to the top and selects the newest entry, instead of keeping
a stale position or selection (#4595 #4600). -
πΆ Device discovery prefers your LAN
When a computer has multiple network connections (such as a cellular
modem or a phone hotspot), CrossPaste now ranks local network
interfaces first when discovering nearby devices (#4568). -
π§ New Linux ARM64 build
CrossPaste now ships a Linux ARM64 (aarch64) package, so ARM-based
Linux devices are supported too (#4581 #4582 #4626).
Bug Fixes π
- π Keep native backslashes in the native messaging host path so cmd.exe can launch the bridge script, resolve the pid file via %~dp0, and make the stdin drain PowerShell 5.1-safe (#4634)
- π Read lastError on native host disconnect to log the reason and silence unchecked-error noise (#4634)
- π Pin Chrome extension ID via manifest key so unpacked installs can reach the native messaging host (#4632)
- π Build Linux ARM64 in releases and survive the apt-repo site layout (#4626)
- π Fix endless clipboard duplication loop between Chrome extension and desktop (#4620)
- π Force PNG output for README avatars to keep circle-mask corners transparent (#4615)
- π Migrate Windows clipboard monitoring to AddClipboardFormatListener (#4606)
- π Reset side search selection and scroll to newest on reopen and query change (#4600)
- π Resolve Windows clipboard source via GetClipboardOwner instead of foreground window (#4597)
- π Pass signing_key to Conveyor in the Linux beta workflow (#4584)
- π Replace deprecated wmic with registry MachineGuid for Windows device UUID (#4580)
- π Lower WindowsProcessUtils version-resource log from error to debug (#4578)
- π Capture network errors in ResourcesClient.request() instead of throwing (#4577)
- π Rank LAN interfaces above cellular for device discovery (#4568)
New Features β¨
Performance β‘
- β‘ Use plain remember for RichTextState in side preview views (#4618)
Multiplatform Β· Refactor Β· Code Style π¨
- π¨ Remove runBlocking from DesktopAppLaunchState DI assembly (#4575)
- π¨ Group Koin module declarations by sub-domain with regions (#4573)
- π¨ Make ImageHandler and ImageWriter I/O methods suspend (#4570)
Build & CI π·
- π· Decouple update-site publishing from release builds (#4630)
- π· Drop the nested apt repo from versioned release assets (#4627)
- π· Replace contrib.rocks with manually triggered contributors README workflow (#4613)
- π· Add manual Linux beta build workflow (#4583)
- π· Serve updates from the OSS-backed CDN site (#4560)
- π· Mirror the Conveyor update site to a stable OSS prefix (#4559)
Documentation π
- π Fix checkered flag emoji code in commit guide (#4598)
Dependencies β¬οΈ
- β¬οΈ Gradle Wrapper 9.5.1 β 9.6.1 (#4589 #4608)
- β¬οΈ logback-classic 1.5.34 β 1.5.37 (#4592 #4611)
- β¬οΈ MCP Kotlin SDK Server 0.13.0 β 0.14.0 (#4628)
- β¬οΈ Ktor 3.5.0 β 3.5.1 (#4607)
- β¬οΈ web build deps vite / @babel/core security bump (#4593)
- β¬οΈ composenativetray-jvm bump (#4591)
- β¬οΈ webp-imageio 0.10.2 β 0.11.0 (#4588)
- β¬οΈ Koin 4.2.1 β 4.2.2 (#4585)
- β¬οΈ Coil 3.4.0 β 3.5.0 (#4566)
- β¬οΈ filekit-dialogs 0.14.1 β 0.14.2 (#4565)
- β¬οΈ HikariCP 7.0.2 β 7.1.0 (#4564)
- β¬οΈ JNA 5.19.0 β 5.19.1 (#4563)
New Contributors π
- @swording-k made their first contribution in #4598
Full Changelog: 2.1.5.2343...2.1.6.2390