Skip to content

Latch v3.1.0

Choose a tag to compare

@MrBeldum MrBeldum released this 09 Sep 22:48
· 176 commits to main since this release

Both apps now keep themselves current, the Mac says why a PC is slow and
asks the stream for what the path can carry, and the clipboard follows
you across.

Updates

  • The Mac checks GitHub about every six hours and twenty seconds after it
    starts (Settings has the switch and Check now). A newer app is
    downloaded, checked against the SHA-256 GitHub publishes and against its
    own code signature, moved over /Applications/Latch.app once no
    stream is running, and relaunched.
  • The Mac sends the new brolink-host.exe to every PC whose Latch Host
    reports an older version, over the same Tailscale-authenticated control
    API that can put the PC to sleep (POST /v1/update). The host verifies
    the digest, that the bytes are a Windows executable and a newer version,
    swaps the file in beside itself and restarts; a running stream is not
    interrupted. A PC that is asleep gets it the next time the Mac sees it.
  • A PC still on 3.0 has no update route. PC → Update Latch Host… in
    the stream toolbar installs 3.1 through the stream: the Mac serves the
    executable on its own Tailscale address to that PC only, presses Win+R,
    types one PowerShell line and presses Enter; the script checks the
    SHA-256 baked into it, swaps the file and starts the new service. The
    PC's desktop has to be unlocked.

Path and quality

  • Each PC shows Direct · 38 ms or Relayed via Tokyo · 210 ms.
    Both apps run tailscale netcheck; when a PC is relayed, the lobby says
    which router is in the way and what would fix it (UPnP or NAT-PMP on
    the PC's router, a forwarded UDP port, or IPv6 on both ends).
  • Auto quality, the default, picks resolution, frame rate and bitrate
    from the path right before connecting: 1080p/30/4 Mbps through a relay,
    1080p/60/8 across a long round trip, 1440p/60/15 nearby, 1440p/60/30 on
    a LAN. The toolbar's Quality menu switches between Auto, Smooth,
    Balanced and Sharp with a reconnect, and a dropped session offers Try
    again at Smooth
    .
  • The decoder takes frames straight from the receive thread and accepts
    HEVC reference-frame invalidation, so a lost packet costs a repair frame
    rather than a keyframe. An explicit HEVC choice no longer falls back to
    H.264. Stats show packet loss, path and quality.
  • Latch Host reads which encoder Sunshine settled on from its log; the
    lobby and the host window warn when it is software encoding.

Clipboard

  • Latch Host serves /v1/clipboard (text only, up to 32 KB). While
    streaming, text copied on the PC is in the Mac's clipboard within a
    second, and ⌘V on the PC first sends the Mac's text across, then
    presses Ctrl+V there. Notices under the toolbar say when something
    crossed.

Keyboard and mouse

  • A chord no longer releases a modifier the user is still holding, so ⌘C
    then ⌘V in one ⌘ hold both work.
  • The keys macOS keeps for itself and what ⌘ does on the PC live in one
    Keys menu; the mouse mode is a menu that explains each choice.

Staying reachable

  • Latch Host starts with Windows by default and sets that again at every
    service start unless the owner turned it off. It holds the PC awake
    while plugged in (a new setting, on by default; setup also zeroes the AC
    sleep timers). The Mac's offer to sleep the PC after a session is off by
    default.
  • PCs are remembered with their Tailscale address and when they were last
    seen, so they stay listed while Tailscale on the Mac is down, and every
    machine whose Tailscale node key is due to expire gets a warning.

Sound

  • The Mac plays at the output device's own rate, channel count and sample
    format (48 kHz stereo f32 that the DAC refused was silence, with the
    reason only in the log). A short pre-roll avoids a click on the first
    packet; stats and a toast say where sound goes, or why it does not.
  • Latch Host reads Sunshine's log for a failed audio capture (no
    speakers, a missing sink). The lobby and the host window say so, with
    how to add a virtual device.

Fixes

  • Launched from Finder or the Dock, the Mac app reported "Tailscale is
    needed" with Tailscale running: the CLI inside Tailscale.app only answers
    when SHLVL is set.
  • The Mac bundle has an icon.
  • The Mac no longer POSTs the executable at a host older than 3.1 (which
    showed as a broken pipe); socket timeouts and closed connections read as
    such everywhere, and a push is retried on a transient error.
  • The host's POST routes accept only JSON or an executable, so a web page
    open in a browser on the PC or on the Mac cannot sleep the PC, stop the
    service or replace its clipboard through a cross-origin form post.
  • The Smooth preset (4 Mbps) survives a restart; the saved bitrate used to
    be raised to 5 Mbps on load.
  • A downloaded app that fails its signature or version check is discarded
    and fetched again at the next check instead of failing the same way
    every fifteen minutes.
  • Ctrl+Alt no longer toggles mouse capture every frame while the chord is
    held.
  • VideoToolbox recreates its session after sleep/wake or a GPU reset
    instead of staying on a black picture until reconnect.
  • An old Latch Host window no longer kills a just-updated service in a
    loop; it relaunches itself from the new exe.
  • Setup scripts are UTF-8 with a BOM, so a Korean Windows username or
    adapter name is not mangled, and the Sunshine installer path is quoted
    for msiexec.
  • Holding a key repeats on the PC; a cancelled connect is not shown as an
    error; Sunshine's certificate changing (a reinstall) pairs again instead
    of asking the user to edit a file.