Changelog
What's new in Link All.
Every release and what changed in it, newest first.
- 1.4.0
Latest
Added
- All platformsSend whole folders. A folder keeps its tree on the other device, a second copy lands in "Name (2)", and each side shows one progress row and one notification per folder. Accepting, declining or cancelling one file answers for the whole folder.
- All platformsA health banner says what stops sync right now (no network, listener down, sync paused, devices not found, connection blocked) and the one thing to do about it.
- All platformsEach device shows its operating system's icon.
- WindowsClipboard images sync both ways, including Win+Shift+S screenshots. Images in history copy again when clicked.
- WindowsPhone notifications and incoming calls show as Windows notifications.
- WindowsThe welcome guide opens on first run until a device is paired, and Settings can show it again. The installer adds a desktop shortcut.
- AndroidPin activity items to the top; pinned items are never trimmed or cleared and survive restarts.
- Home screensEach app's home leads with this device's identity ("Visible as"), then Send (Files & folders, Clipboard, and Camera or Browse device), Transferring, Your devices and Recent.
- ModalsAndroid, macOS and Windows each use one custom modal style for sending, pairing, device actions and questions. Sending defaults to all connected devices.
Changed
- Older installsA device reinstalled or renamed no longer shows up as several paired devices; old copies of it are retired automatically.
- PairingA device on an older version is told it needs an update instead of failing silently.
- WindowsThe system tray helper is now a native Rust exe (
platforms/windows/tray, ~0.3 MB) instead of a WinForms app with its own self-contained .NET runtime (~110 MB). Same process name, pipes and menu. - WindowsOnly English language resources ship; WinUI's built-in control text shows in English on other display languages.
- WindowsThe app targets .NET 10 and publishes with Native AOT:
Deskdrop.exeis native code and no .NET runtime ships with it. Daemon requests are built asJsonObjects and all JSON reading goes through a source-generatedDeskdropJsonContext, so nothing relies on reflection. The unusedSystem.Drawing.Commonpackage is removed. - WindowsThe Rust engine DLL and tray helper link the C runtime statically, so they no longer need
vcruntime140.dll(missing on some clean installs). - BuildWindows releases ship as a per-user MSI and a portable zip of the whole app folder instead of a single-file
Deskdrop.exe. The MSI now installs every published file; before it listed onlyDeskdrop.exeanddeskdrop_core.dll. - Android (battery)No Wi-Fi lock is held while idle; only a transfer that is moving bytes takes one. The clipboard is polled at full rate only when it can be read (app in the foreground, an enabled accessibility service, or Android 9 and below), otherwise every 2 s instead of 2 - 5 times a second. Notification mirroring skips group summaries, media/progress/navigation updates and re-posts with unchanged text. Battery level is reported in 5% steps while the screen is off.
- Core (battery)LAN discovery sweeps (~250 TCP connects each) pause while the device sleeps, and the steady UDP discovery beacon slows from every 15 s to every 60 s.
Release on GitHubFixed
- CoreSending many files at once no longer loses about a third of them (a race accepted the same transfer twice).
- CorePausing a large transfer near the end and resuming it no longer fails, and resuming no longer rehashes the whole file.
- macOSThe transfer pill no longer stays on screen after a transfer finishes, and it counts a folder's files instead of the few in flight.
- AndroidFolder progress keeps in step with the other device instead of sitting still during big files.
- Android (Play build)No longer asks for permissions Play restricts (all-files media, contacts, full-screen intents, battery exemption, background clipboard, accessibility); data shared with calls and notification mirroring is explained before it is turned on.
- AndroidThe benchmark module failed to configure (
missingDimensionStrategyoutsidedefaultConfig), which broke every Android build after thefull/playflavors were added. - WindowsThe tray menu's "Rescan Network" now rescans. It used to post to a local HTTP port nothing listened on.
- BuildA plain
dotnet buildno longer writes a stale 113 MB copy of the tray helper intopublish\. - CoreTransfers interrupted by a reconnect now resume reliably; about half of them used to end with "missing chunks". Three races are closed: the old connection's teardown no longer pauses a transfer the new connection already resumed, a stale send loop can no longer skip chunks after a resume, and chunks still arriving on the old connection are dropped instead of being queued on a disk writer that is about to be torn down (which left the resumed copies skipped as duplicates).
- WindowsThe taskbar progress bar uses source-generated COM interop; the old
[ComImport]code is not supported under Native AOT and would have thrown on the first transfer. Value converters arepartialfor the same reason. - WindowsThe MSI now builds with WiX 5 (it had an invalid XML comment, an unsupported
Conditionattribute, and a<Files>path that produced an empty installer), and installing a rebuilt MSI of the same version replaces the installed app instead of registering a second Deskdrop entry. The nativeDeskdrop.pdb(~52 MB) no longer ships.
- Release on GitHub
Fixed
- AndroidFix release build workflow by targeting
:app:assembleReleasedirectly to avoid building the broken benchmark module.
- AndroidFix release build workflow by targeting
- Release on GitHub
Fixed
- AndroidAdded
-dontwarnrules for thebenchmarkmodule's R8 pass (androidx.profileinstaller.ProfileInstallReceiver,androidx.startup.Initializer,com.google.errorprone.annotations.MustBeClosed) - optional classes referenced byandroidx.benchmark:benchmark-macro-junit4that aren't on the classpath and aren't needed at runtime, which mademinifyReleaseWithR8fail once shrinking was enabled there in 1.3.1.
- AndroidAdded
- Release on GitHub
Fixed
- AndroidRelease builds are now signed with the release keystore instead of the debug key; the build also fails fast if the keystore is configured but any of the store password, key alias, or key password is missing.
- AndroidEnabled R8 shrinking in the
benchmarkmodule's release build type so it matchesapp:release, fixing acheckTestedAppObfuscationReleasefailure in the release build.
Added
- CoreKnown devices now display their trust fingerprint and first-seen date.
Changed
- WindowsDiagnostic tracing consolidated into a single
TraceLogwriter instead of ad-hocFile.AppendAllTextcalls scattered across the UI layer; daemon calls that previously ran fire-and-forget now report failures throughDaemonActions. - BuildEvery shippable artifact now carries a single shared version. The Rust crates inherit it from
[workspace.package], andscripts/bump-version.sh --checkgates CI so the components cannot drift apart again.
Fixed
- CoreClosed a race in
PeerManager::replace_live_sessionwhere two concurrent sessions for the same peer could each read the same stale state, both pass the tie-break check, and both insert - letting whichever insert landed last win the live slot regardless of which one the tie-break rule selected. - CoreClosed a race where a stale failure report from a losing multi-address connect attempt could mark a peer
Failedimmediately after it had successfully connected. - CoreReconnect logging no longer floods during transient network interface flaps.
Release on GitHubRemoved
- Stale build artifacts (prebuilt
.zip/.dll/.exe/.pdb) are no longer tracked in the repository, along with one-shot migration scripts and dated internal audit documents.
- Release on GitHub
Fixed
- CoreFixed a bug where untrusted discovery beacons (mDNS/UDP) were incorrectly saved as "remembered" peers, causing phantom devices to appear in the Known Devices list.
- Release on GitHub
Fixed
- CoreFix intermittent e2e test failure (test_tier4_scenario_device_reconnect_retry).
- Release on GitHub
Fixed
- CoreFix formatting errors that broke CI pipeline (rustfmt).
- Release on GitHub
Added
- CoreAdded camera stream request API to FFI.
- AndroidRedesigned Ecosystem header with a sleek segmented control.
- AndroidUpgraded "JUST COPIED" card styling and contrast.
- AndroidDisabled mesh gradient in pure dark mode for a true black background.
- WindowsComprehensive UI overhaul for the WinUI dashboard and dialogs.