Changelog

What's new in Link All.

Every release and what changed in it, newest first.

  1. 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.exe is native code and no .NET runtime ships with it. Daemon requests are built as JsonObjects and all JSON reading goes through a source-generated DeskdropJsonContext, so nothing relies on reflection. The unused System.Drawing.Common package 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 only Deskdrop.exe and deskdrop_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.

    Fixed

    • 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 (missingDimensionStrategy outside defaultConfig), which broke every Android build after the full/play flavors 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 build no longer writes a stale 113 MB copy of the tray helper into publish\.
    • 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 are partial for the same reason.
    • WindowsThe MSI now builds with WiX 5 (it had an invalid XML comment, an unsupported Condition attribute, 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 native Deskdrop.pdb (~52 MB) no longer ships.
    Release on GitHub
  2. 1.3.3

    Fixed

    • AndroidFix release build workflow by targeting :app:assembleRelease directly to avoid building the broken benchmark module.
    Release on GitHub
  3. 1.3.2

    Fixed

    • AndroidAdded -dontwarn rules for the benchmark module's R8 pass (androidx.profileinstaller.ProfileInstallReceiver, androidx.startup.Initializer, com.google.errorprone.annotations.MustBeClosed) - optional classes referenced by androidx.benchmark:benchmark-macro-junit4 that aren't on the classpath and aren't needed at runtime, which made minifyReleaseWithR8 fail once shrinking was enabled there in 1.3.1.
    Release on GitHub
  4. 1.3.1

    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 benchmark module's release build type so it matches app:release, fixing a checkTestedAppObfuscationRelease failure in the release build.
    Release on GitHub
  5. 1.3.0

    Added

    • CoreKnown devices now display their trust fingerprint and first-seen date.

    Changed

    • WindowsDiagnostic tracing consolidated into a single TraceLog writer instead of ad-hoc File.AppendAllText calls scattered across the UI layer; daemon calls that previously ran fire-and-forget now report failures through DaemonActions.
    • BuildEvery shippable artifact now carries a single shared version. The Rust crates inherit it from [workspace.package], and scripts/bump-version.sh --check gates CI so the components cannot drift apart again.

    Fixed

    • CoreClosed a race in PeerManager::replace_live_session where 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 Failed immediately after it had successfully connected.
    • CoreReconnect logging no longer floods during transient network interface flaps.

    Removed

    • 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
  6. 1.2.8

    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
  7. 1.2.7

    Fixed

    • CoreFix intermittent e2e test failure (test_tier4_scenario_device_reconnect_retry).
    Release on GitHub
  8. 1.2.6

    Fixed

    • CoreFix formatting errors that broke CI pipeline (rustfmt).
    Release on GitHub
  9. 1.2.5

    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.
    Release on GitHub