Skip to content

Latch v4.1.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 15:28
· 47 commits to main since this release
bfba0f7
  • BroLink is now Latch, by Bardbro. The app, the repository
    (github.com/MrBeldum/latch), the release files (latch-macos-arm64.tar.gz,
    latch-windows-x64.zip), the executables (Latch.app, latch-host.exe),
    the services and login items, the environment variables (LATCH_*) and
    bardbro.com all carry the new name, with a new logo: a square with a
    corner cut away, and a blue square in the cut. Bardbro is the
    project behind it, for cloud gaming.
  • An installed BroLink updates itself to Latch. Settings, the pairing
    identity, paired devices and the streaming engine carry over. On a Mac
    the app moves from BroLink.app to Latch.app the first time it runs
    and its login item with it; on Linux latch.service replaces
    brolink.service; on Windows the host keeps working in place, and
    install-host.ps1 followed by Set up as administrator moves it to
    %LOCALAPPDATA%\Latch, the LatchStream service and the new firewall
    rule names. Machines on either name still find each other, and a 4.1 Mac
    can still update a 4.0 PC. The release also carries
    brolink-macos-arm64.tar.gz and brolink-windows-x64.zip, which are the
    same builds under the old file names, because a 4.0 updater looks for
    nothing else. Everything that still says BroLink is in
    crates/core/src/legacy.rs and crates/host/src/legacy.rs.
  • LATCH_DATA_DIR and LATCH_GITHUB_TOKEN replace the BROLINK_ names,
    which still work. The Docker node and relay read LATCH_*.
  • The About page names Bardbro and links to bardbro.com. The accent
    colour for focus and progress is the logo's blue, where it was violet.
  • The window is redesigned around one design system, in the product
    site's black, white and hairlines, set in Geist and Geist Mono. Colour
    now means something: green for ready, amber for needs attention, red
    for broken, and the logo's blue only for keyboard focus and
    progress. Every text colour meets WCAG AA on every surface it sits on;
    the old footer and captions did not.
  • Tabs across the top: Machines, Sharing and Settings
    (Command-1, 2 and Command-comma on a Mac; Ctrl elsewhere; Escape goes
    back). The Sharing tab is new in the unified app: this machine's setup,
    what it reports (Tailscale, streaming engine, network, Wake-on-LAN,
    controllers), the devices paired with it, its options and its log.
    Until now the unified window showed only a one-line summary and a
    setup button; paired devices, the log and Stop service were
    unreachable.
  • The machine list shows each machine's state as a dot and one line,
    with Connect (or Wake and connect) and a menu for Wake, Test
    wake, Sleep, Restart, Shut down and Copy Tailscale address. Buttons
    stay put and dim while a connection is in progress instead of
    disappearing. This machine leads the list and opens its Sharing tab.
  • Connecting says what is happening and what to expect; pairing shows
    the PIN in boxes. A failure is titled "Couldn't connect to …" or
    "… disconnected", with Try again, and a lighter profile is offered
    only when the stream itself failed. The empty list, "looking",
    Tailscale missing and Tailscale stopped each say what to do.
  • Settings is grouped (Stream, Window and input, Power, Updates, Relay,
    About) and the quality profile is one control: Recommended, Smooth,
    Balanced, Sharp or Custom. Mouse capture is now a setting as well as a
    toolbar choice. "Command acts as Ctrl" shows only on a Mac, and "Keep
    this PC awake" only on Windows, where it does something.
  • In a stream, the toolbar's menus look and behave the same, open
    towards the window's middle, and fold into one More menu on narrow
    windows. The host key is shown as keycaps (control option on a Mac,
    Ctrl Alt elsewhere) when a stream starts and on the toolbar. The
    connecting screen has a Cancel button, so leaving no longer needs
    the host key. Stream settings and Stream performance are proper
    panels with a close button; Escape closes Stream settings.
  • Every menu, dropdown and panel fits the window down to its smallest
    size (640×420). A menu opens upwards when there is more room above,
    and scrolls, with its scroll bar showing, when neither side has room
    for all of it; at the smallest size the stream toolbar's More menu cut
    off "Command acts as Ctrl" and the PC's power items. Stream settings
    and Stream performance stay below the toolbar, and Tab scrolls the
    control it reaches into view.
  • A notice's actions line up with its text: "Dismiss" sat 12 points to
    the right of the words above it.
  • A relayed path is amber, not red: it works, and Connection details
    says how to get a direct one.
  • The idle window no longer repaints on a timer (it redrew 2.5 times a
    second forever), machine discovery redraws it only when the list
    changes, and the Tailscale check that could start a process
    every two seconds on the UI thread now runs on its own thread.
    Unpairing and installing the controller driver no longer block the
    window.
  • The app is about 470 KB smaller (11.7 MB for the macOS release
    binary): Geist's five cuts replace Inter's three.
  • The control service again answers only machines signed in to the same
    Tailscale account. Since 4.0.0 it answered any machine Tailscale could
    name, so a machine shared in from someone else's tailnet could pair with
    the PC, sleep or restart it, read and write its clipboard, and push it a
    new latch-host.exe. A tagged server such as the relay VPS belongs to
    no account, so it answers the members of its own tailnet, which keeps a
    Mac able to open the VPS desktop.
  • Text copied on a Mac or Linux machine you are streaming from now reaches
    the machine you are watching on. Only Windows reported a clipboard
    sequence number; everywhere else it was always 0, so the viewer took
    every copy for the one it had already seen. On a Linux desktop, text
    pasted in from the viewer also stays on the clipboard now instead of
    vanishing when no clipboard manager picks it up.
  • A Windows PC whose pushed update crashes on start keeps the version it
    had. The service used to exit as soon as the new executable had been
    launched, so a replacement that died straight away left the PC with no
    Latch service until someone logged in again. It now waits two seconds,
    and puts the previous executable back if the new one has already exited.
    The PC's log says so, and the Mac warns once instead of sending the same
    release again every three minutes.
  • Update downloads try each of a server's addresses in turn. Only the first
    one the name resolved to was ever tried, so one unreachable address (an
    IPv6 one on a network without IPv6, say) failed the whole update check.
  • latch-host.exe's version details (Explorer's Details tab) named the
    wrong licence, MIT; they now say GPL-3.0-or-later, the licence Latch
    and moonlight-common-c are under.
  • Windows setup no longer breaks on a network adapter whose name holds a
    " or a $. The name was written into a double-quoted PowerShell
    string, where a " ends the string (a syntax error that stops the whole
    setup) and a $ expands. It is now only ever a single-quoted literal.
  • The macOS install scripts restart the background service after putting
    the new app in place. It kept running the old version until the next
    login, so a Mac that shares its desktop served other machines from the
    previous release.
  • A Windows machine no longer runs the Mac's updater. Since 4.0 every
    machine runs the same window, so a Windows PC also checked GitHub and
    would try to send other Windows PCs their update with a Mac-only unzip,
    failing every few minutes. Its settings now say that updates arrive
    from the Mac.
  • Installing Latch Host through the stream (for a PC on 3.0) can finish
    on a Mac. The Mac served the file from a socket that macOS left
    non-blocking, so sending the executable stopped as soon as the network
    buffer filled and the PC rejected the truncated download.
  • Share this machine works on a Windows account whose folder has a
    space in it ("C:\Users\Ada Lovelace"). The elevated setup was handed
    that folder through PowerShell's Start-Process, which splits unquoted
    arguments at spaces, so it received half a path and an unexpected
    extra argument and failed.
  • The service log keeps what matters. Every machine that polled the
    service was logged again each minute ("hermes (…) asked" was 2,707 of
    the 2,810 lines in this Mac's service.log), and every change of the
    nearest Tailscale relay region logged a network line. Each peer is now
    logged when first seen, when its answer changes or after an hour away,
    and the network line only when the NAT itself changes.
  • When the Mac's sound output changes mid-stream (AirPods connect, say),
    the stream's stats name the device the sound moved to. macOS already
    moved it; Latch kept naming the old one and logged a warning.
  • A host update that lands is no longer reported as a failure. A PC can
    take the new executable and restart before its reply reaches the Mac;
    the Mac then retried, heard "this PC already runs Latch Host 4.0.2",
    and showed "Could not update" in red. It now asks the PC which version
    it runs before calling a push failed.
  • Cancel stops a connection attempt straight away while the PC is not
    answering. The pairing check retried eight times regardless, which could
    hold the window on "Checking pairing…" for most of a minute after Cancel.
  • A Windows or Linux viewer no longer calls its stream HEVC: those decode
    H.264 only, and the toolbar named the codec the PC could offer instead
    of the one in use.
  • The check that notices a black picture costs the decoder 0.14 ms a frame
    instead of 2.5 ms at 3024×1964 when the picture really is black (15% of
    a core at 60 fps, on the path every frame takes to the screen).
  • A Mac or Linux machine that shares its desktop no longer runs a program
    (scutil or hostname) for every status request it answers.
  • When the picture is black, the PC's explanation gets a minute to arrive
    instead of 25 seconds, which its slower checks sometimes needed.