Release highlights
What is new in 6.6.5
Features
- Licenses can belong to an account, so signing in activates the machine: A license key and an Alithon account used to know nothing about each other -- the key knew machine ids, the account knew devices and orders -- so every new machine meant finding the delivery email again. Tick Bind the license to my Alithon account at checkout (on by default for Personal, off for Enterprise) and the key is recorded against the buyer's email; signing in with that address then activates whatever computer you are on, and signing out releases it again. A machine that already has a key is asked once, at its first sign-in, whether to bind it; the License Management dialog carries the same tick. A key binds to one account and cannot be moved afterwards, so every place that offers it says so first and asks for a confirmation
- Activation now signs you in first: License Management activates through your account, so the server knows who is asking -- which is what lets a key typed there afterwards follow its owner to the next machine. A bound key is no longer accepted by the anonymous endpoint older builds use; those are told to update and sign in
- The three-transfer limit is gone: A personal key used to allow one activation and three transfers, spent forever -- reinstall Windows four times and the licence was finished. An unbound key now runs on up to three machines at once, and deactivating one gives the slot straight back. A key bound to an account has no device limit at all: it is live only where its owner is signed in
- Headless machines too:
spu login --email you@example.comcollects whatever the account is licensed for and activates the box;--bind-licenseclaims the key already installed there for that account - Live Sync for every edition: RFC 2217 Server, Live Console, Live Relay and Live Share — and the Remote Serial (RFC 2217) port type — no longer ask for SPU Pro; a free copy uses all of them, and so does a headless
spu --invite. What a Pro entitlement changes is the monthly cloud traffic allowance: 10 MB per direction on a free account, 1 GiB with Pro, then purchased traffic packs. The allowance is now enforced — a Live Console or Live Relay session that runs past it stops withquota_exceededinstead of running on. A copy without Pro restores only the RFC 2217 quick shares among its saved bridge links on start-up; the others are kept as saved and come back once Pro does - Live Share — share a port with a colleague who has no account: Live Relay used to require both machines on the same account. Now you can mint a time-limited invite code for one open serial port: Cloud > Share Port with a Guest… lets you pick how long it lasts (1/4/12/24 hours, 12 by default), an optional passcode and a label. Your colleague chooses Remote Serial (Live Relay) and pastes the code or link under "Join with an invite code" — no registration, no subscription, no bound device, with the traffic staying on the sharing side. It is independent of Live Relay in both directions. A share ends when the port closes, when Live Console is switched off, on sign-out and on exit; five wrong passcodes burn the code; an expired code admits no new guest but never cuts a session already in progress
- Live Sync state in the status bar: The status bar's Live Sync cell is only an entry point while nothing is running; the moment something is, it gives the name up for the state itself. Amber Shared means a door is open and nobody has come through it (an RFC 2217 listener, an invite code, Live Console or Live Relay switched on); orange bold In use means somebody is driving one of your ports right now — named outright when there is only one of them, as in "Guest: Ann" or "Remote operator"; red Not listening means an RFC 2217 server never got the TCP port it asked for and the link is not working, which until now was said once, in a status message that scrolled away, and never again. RFC 2217 servers count here for the first time: the bar used to tally only cloud shares and relays, so a local RFC 2217 server showed nowhere in it — not while it stood open, not while a remote client was driving the port. Hovering lists all four peers with their own state (which port, which listening port, which guest, since when); clicking opens a menu whose upper half lists everything running with the way to manage each, and whose lower half is still the four switches
- Headless machines can mint one too:
spu -D /dev/ttyUSB0 --inviteprints the code and link,--invite-ttltakes30m/4h/1d,--invite-passcode-stdinreads a passcode from a pipe, and Ctrl-C revokes the invite on the way out - One-click sharing from the status bar — turn a local serial port into an RFC 2217 server: Exposing a port over RFC 2217 used to take three dialogs: spend a grid slot on a TCP Server pane, open Tools > Bridges, then check every field across a five-tab editor against its defaults. The status bar now has a Live Sync entry that offers three choices: share the port as an RFC 2217 server, switch Live Console on or off, or hand it to a guest (Live Share). The RFC 2217 path asks one question — which TCP port to listen on, with a free one suggested — and optionally which addresses or subnets may connect; everything else takes safe defaults. The network end is a listener built into the bridge, so it spends no grid slot and is not bound by the sixteen-port limit; under Tools > Bridges it shows as
TCP :2217 (built-in)and can have its port changed, its traffic watched and its link removed like any other - Guests in a browser — a colleague with nothing installed: Minting an invite now also says what the code opens in a browser: nothing, view only, view and send, or view, send and set the port's parameters (view only by default); a second switch says whether it still opens a Live Relay in the desktop client, which it does by default. The link lands on a page that says which port it names, whose machine it is on, whether the host is online, whether somebody is already on it and whether a passcode is needed; a name and one click later the guest has a terminal for that one port. Headless,
--invite-weband--invite-no-relaychoose the same two things. The share dialog and the management view show who is watching from a browser - Every guest share in one place: Cloud > Manage Guest Shares… lists the live shares on every machine the account owns, grouped by machine, with the port each code opens and who is on it, and one action: stop it. The list is the server's, not this process's, so a code minted on the laptop in the other room is in it, and ending it here ends it there. It asks only that you are signed in — an owner whose subscription has lapsed can still stop what they started — and it mints nothing
Interface
- One naming scheme: The status bar's Live Sync entry lists four peers: RFC 2217 Server, Live Console (formerly Cloud Console), Live Relay (formerly Cloud Relay) and Live Share (formerly Remote Assist). The Cloud menu's Cloud Console and Allow Cloud Relay switches and the Remote Serial (Cloud Relay) port type follow suit; nothing about the features, your settings or your account changes
- The bridge badge can close the bridge: The pale-blue (amber while a client is connected) bridge badge above the receive view gains a close button at its right edge. It is hidden by default and appears after a click on the badge; clicking it removes every bridge link this port is part of and says so in the status bar — noticing that a port is bridged and tearing the bridge down are two separate clicks, so it cannot happen by accident. This is also how a quick share is stopped
- The status bar shows your username: The account cell at the far right of the status bar used to show the email address you signed in with; it now shows your username — that is what the account is called, and it keeps an address off the screen for anyone looking over your shoulder. The menu it opens and the headless
spu loginfollow suit; the My Account dialog still lists both. An older account with no username still falls back to the email - The licence window, rebuilt: The QR code in License Management is gone — it encoded exactly the URL the button beside it already opened, and on a phone that URL dead-ends: the order form hands back a scan-to-pay image, which nobody can scan with the phone they arrived on. It also showed the WeChat code to English users whose language setting had never been touched. The room it leaves goes to the purchase path, which is its own group at last: a separator, "Don't have a license yet?" and a blue Buy a License… button. The dialog opens at 820×520 rather than 606×364 against a layout that asks for 755×481, and the value column stretches with the pane instead of being pinned wider than it, which had bought a horizontal scrollbar over content with nothing to scroll to
- Purchases go to Alithon's own order pages: Register Now and the purchase button in License Management sent non-Chinese users to the old shareit storefront; they now open the WeChat Pay order page for Chinese and the PayPal one for everyone else
- Status notices clear themselves, and the account cell opens: A message written to the status bar's left-hand cell used to stay there — "Settings synced" sat through the rest of the session and was rewritten by every scheduled sync — and the cell sat first at zero width, shoving the port status right each time it spoke. Every message now carries a kind (Info, Warning, Error — the colour) and a timeout, and the cell is the bar's elastic middle after the port and traffic cells, so a notice coming or going moves nothing; what does not fit is elided with the whole line on the tooltip. Sync outcomes move to the account they belong to: a scheduled sync that simply worked is silent, and a click on the account cell says who is signed in, when settings last synced, the recent notices newest first, and the account actions
- Rx and Tx share one cell: The byte counters in the main window's status bar and in each port's own bar are composed into a single cell
Fixes
- Relay errors never reached the caller: The server reports relay failures (port already in use, device not ready) in the same shape as Live Console errors, and they were all handed to the device agent and dropped, leaving the operator side waiting on an answer already given. They are now routed by the request that asked, so a failure says why immediately
- A bridged serial port went deaf while nobody was connected: Serving a port over RFC 2217 (or bridging it to a TCP server) stopped that port receiving anything for as long as no client had connected: typing still put bytes on the wire, but the device's answer never appeared, and only removing the bridge brought it back. The first byte from the device was enough — it reached the egress queue, a broadcast to zero clients writes zero bytes, and the bridge read that zero as a transport refusing the frame, so it kept the frame and throttled the source. The throttle stops the read path outright, and both the receive view and the bridge tap read through it. An open sink with nobody connected is now told apart from a refused write: the frame is counted as dropped instead of stalling the queue against a client that may never arrive, and the link's state says "Running, no client connected". Separately, a serial port without RTS/CTS cannot be throttled at all, and such a throttle is now refused — not reading a serial line does not slow the device down, it only loses the bytes in the driver's buffer
- Send File / Receive File stayed greyed out after a transfer: After one transfer — finished, failed or cancelled — Send File… and Receive File… in the Connection menu stayed disabled and Cancel Transfer stayed live until the application was restarted. The menu used to be refreshed only when a transfer started; it now follows each port's transfer state and the keyboard focus, so the items come back the moment a transfer ends, and a transfer on one port no longer greys out Send File on another
- The licence window told the truth about nothing, and refused keys pasted from an invoice: An install with no licence was told it held a "Personal Edition" one — the check read the enterprise flag, which is false when there is no licence at all, and never asked whether there was one. It says "Not activated" now, and a new Status row answers the question people open the window with: activated, trial with the days left, or expired. There was also no way to remove a licence: the uninstall button's slot has waited since 2017 for a widget the .ui never had, so the button exists now. And the key field refused valid keys — the length gate demanded the 29-character dashed form though the checks strip dashes before counting, the key alphabet is upper case and was compared case-sensitively, and only the ends were trimmed, so a newline from a mail client was fatal. Keys are normalised now and the field shows what was accepted; the two messages it can still refuse with say what is wrong, and one of them was never wrapped in tr(), so a Chinese install got English — twice over the same typo ("licnese")
- Relayed keystrokes arrived one character per line, and doubled: A Live Relay carries the remote operator's typing one keystroke per frame, every frame went through the TX-frame echo, and a TX frame opens a display line of its own — so on the owner's screen each character landed on its own line, and against a device that echoes (any interactive console) it landed twice: "uptime" typed by a guest read as six lines of doubled letters. Relayed writes now follow Local Echo, the switch the terminal already has for keystroke-shaped traffic: by default the pane shows only what the device sends back, which is exactly what the guest's own terminal shows, and an owner watching a silent device ticks Local Echo to see the guest's keystrokes. That the port is in someone else's hands is already said by the relay takeover notice
- The bottom row of the connection stack was clipped on macOS: Aqua controls paint a few pixels outside the cell the layout books for them, and the stacked pages are clamped flush to the form's size hint with zero margins, so a bottom-row checkbox lost its descenders — visible on the Live Relay and RFC 2217 pages as a cut-off "Keep the remote port's own config". The bleed is now queried from the style and booked as each page's bottom margin; styles without it report zero and are unaffected
- Captions on the receive settings page were cut in half: "Tx Time Format" was squeezed to a sixth of its row and read "Tx Time Forma", leaving the two edits 40 px apart; the auto-feed row wants ~740 px of Consolas 11 in a page that opens at 538, so its widest four widgets were cut to 96 px each and read "Auto feed", "Minimal I", "Line Mode". Both blocks are grids now, sharing a caption column, and keep whole captions at the opening size, 300 px wider, and at the dialog's minimum
- The account dialog could be clicked again while it waited — and one reply crashed it: Signing in is a round trip to the server, and on a slow link it takes seconds with nothing saying the click landed, so the dialog gets clicked again and every click is another login request. All three buttons now grey the moment one is pressed, the page says what is happening ("Signing in…", "Sending the code…", "Creating the account…"), and the reply or the error gives them back; a 20-second watchdog covers the reply that reaches nobody. Separately, opening a message box from a network reply's own slot is a use-after-free — Qt is still unwinding, and the nested event loop a modal box runs deletes the reply the manager reads again the moment the box closes — so every box a reply asks for now waits for the next turn of the event loop
- Status bar popups left their status tip behind: Clicking the Live Sync cell and moving the pointer from Live Console onto one of the popup's own entries sends the clearing tip to the popup, which is a window of its own, so it never reached the main window and the tip stayed in the status bar for the rest of the session, hiding the port status and the traffic counters. Tips landing on a status bar popup are now routed to the window's status bar