ChangeLog

Serial Port Utility ChangeLog

Every notable change in Serial Port Utility, newest release first.

Versions

Release history of Serial Port Utility — new features, UI improvements and fixes.

6.6.8 (2026-09-30)

Features

  • Command library and command panel: the commands you type every day, one click away: Commands can be kept in a library, grouped, and shown as buttons on the command panel on the right of the window (View → Command Panel); a click sends to the focused connection, and each command can have a keyboard shortcut. A command is text or hex, with its own line ending (text only) and checksum or the connection's, and the editor shows the exact bytes it will send. Hex is parsed strictly, so a typo is an error rather than a silent 00. The library is saved with the .spu project, or on this computer when no project is open. The command panel is complete in Free
  • Sequences: send, wait and check the replies in order, and hand the test over: Build a sequence in the library from Send, Wait, Expect, Label and Repeat steps and run it on the focused connection with one click. Expect matches text, hex, wildcards or a regular expression against the data received since the last Send, and fails on timeout, or records the failure and carries on. While it runs, a strip above the receive view shows the progress; at the end it keeps the verdict — passed, or failed at step N and why — and the receive view records every check. The whole sequence is checked before its first byte goes out, naming the step that is wrong. The library exports to a .spucmd file for a colleague or a customer, and imports by merging. Free runs 3 sequences per session and the first 5 steps of each, and can import and run .spucmd files; exporting and unlimited runs need SPU Pro
  • Auto reply: let a connection play the device: Tools → Auto Reply… (or the receive view's context menu) gives each connection a table of rules; when received data matches one — text, hex with ?? for any byte, wildcards or a regular expression — SPU sends that rule's reply, text or hex, with an optional checksum and delay. AT+VER? gets +VER:1.2.0, a Modbus 03 request gets a register frame. To test a host's timeouts and retries, a rule can answer only every Nth match, drop replies at random or stop after N matches, and "Play dead" silences the connection while still counting. Each TCP server client and UDP sender is matched and answered on its own, and replies never cut into a file transfer. A Try it box runs the rules on pasted input without sending anything, and the rules are saved with the .spu project. Free runs 3 enabled rules per connection and 10 replies per session; SPU Pro has no limit. See Auto reply
  • Real-time plot: the numbers a device prints, drawn as live curves: Tools → Plot, or Plot in the receive view's context menu, opens a plot above the receive view that can also pop out into its own window. It reads text lines (commas, spaces, tabs or semicolons, VOFA+ FireWater and the Arduino Serial Plotter's temp:21.5 hum:40, whose labels name the channels; log lines in between are skipped), VOFA+ JustFloat, or a regular expression whose named groups name the channels. The wheel zooms, dragging pans and pauses, a double click returns to live; the legend is a statistics table (last, mean, min, max, peak-to-peak, standard deviation over what is in view); A/B cursors measure differences and 1/Δt; the plot exports to CSV and PNG. Tens of thousands of points stay smooth and spikes are never thinned away; nothing is parsed while the plot is closed. Free draws the first 2 channels for 120 seconds per session, and saves PNG; CSV export and the cursors need SPU Pro. See Real-time plot
  • Protocol decode view: frames instead of bytes: A Protocol Decode panel under the receive view (View → Protocol Decode Panel, or the receive view's context menu) lists the traffic as frames. Modbus RTU, ASCII and TCP are framed and their CRC / LRC checked, requests are paired with responses and their round-trip time, and function codes, exceptions, registers and coils are explained, each register with both its PDU address and its 40001-style reference. RTU is framed by its CRC rather than by line timing, so reads split or merged by a USB adapter or an RTU-over-TCP server still come out right. Tools → Frame Templates… describes a private protocol by header and length, fixed length, delimiter or idle gap, with SUM8, XOR8, SUM16 or any CRC of the calculator, and typed, scaled fields with units and value labels; a test box decodes pasted hex. The frame table exports to CSV or copies rows with Ctrl+C. Free decodes for 120 seconds each time SPU starts (only seconds in which frames were decoded count, and decoding in a replay is not counted) with the first template; unlimited decoding, every template and CSV export need SPU Pro. See Protocol decode view
  • Session recording and replay: capture the fault on site, watch it at the office: File → Record Session… writes every port's traffic, merged in time order, into one .spulog file (every 250 ms, so a crash loses at most a moment), optionally starting with what SPU already holds; F9 bookmarks the moment without a dialog, and the status bar shows a red REC with the length and size. File → Open Recording… replays a recording or an exported .jsonl in its own window at the pace it was recorded — never to a port, auto reply or bridge — from 0.25x to 100x, with long idle gaps shortened, a timeline of the traffic and bookmarks, stepping, Find in Recording across the whole file, named bookmarks, loops between two bookmarks and full screen; each port can open the plot and the protocol decode panel on the recording's clock. File → Replay This Session replays what SPU holds without exporting first. Recording, bookmarks and search are free; Free replays the first 10 minutes of a recording, SPU Pro all of it. See Session recording and replay
  • Selection export, session export and the diagnostic pack: Right-click a selection in the receive view and Copy Selection As gives a compilable C array, a hex dump or hex bytes of the bytes behind it; Save Selection As… writes .c, .txt or .bin. File → Export Session… writes what the focused port, or every port merged in time, sent and received this session as CSV (with a BOM for Excel), JSON Lines or text — even when logging was off — and File → Export Sequence Report… saves recent sequence runs step by step. Help → Export Diagnostic Pack… collects what support needs into one .zip from a whitelist: the licence key, activation data, account, machine ID (CID), MAC address, CPU ID and user and computer names never go in, and nothing is uploaded. Selection exports, sequence reports and diagnostic packs are free (a pack carries the most recent 256 KB per port in Free); Free exports the most recent 500 records per port, SPU Pro the whole session. See Exporting data and the diagnostic pack
  • Script automation (Lua): Tools → Scripts… opens a script window for flows that need variables, conditions, loops or binary parsing, written in Lua 5.4 as plain sequential code — sendLine("AT"), expect("OK", 1000), sleep(500) — while the window stays responsive and even an endless loop can be stopped. Hex and regex matching, string.pack / unpack, SUM8, XOR8 and over 50 CRC algorithms are built in, and onReceive plays a device that answers; the editor has line numbers, syntax colouring, a syntax check and three examples, and error lines are clickable with a hint. Scripts run in a sandbox with no files, network or programs, and are saved with the .spu project. Free runs 3 scripts each time SPU starts, up to 5 minutes each (a run that fails or is stopped within 30 seconds does not count); SPU Pro has no limits. See Script automation (Lua)
  • Remote serial port to a local TCP server: Remote Serial Port to Local TCP Server… in the Cloud menu and the Live Sync popup serves an RFC 2217 client or Live Relay port as a TCP server on this computer, so other programs and virtual COM drivers can use the remote serial port. By default it passes RFC 2217 through — a client's port settings and DTR / RTS / Break reach the remote port, and its answers and modem lines come back; plain TCP is an option. See Live Relay
  • Escape sequences in the send box: With Escape Sequences ticked on the Send page of the settings (off by default), text mode reads \r \n \t \0 \a \b \f \v \e, \xHH for any byte and \\ for a backslash, so one control byte no longer means switching to Hex. An escape names a byte and bypasses the text encoding; an unknown or unfinished escape refuses the frame with the reason on the status bar instead of guessing. Hex mode is unchanged
  • Update check: Direct downloads ask alithon.com for the latest release about 30 seconds after launch and say so on the status bar when a newer version exists; Help → Check for Updates… asks on demand and offers the version's page. Nothing is downloaded automatically. Microsoft Store and Mac App Store builds are updated by their store and have no such entry
  • Free gets allowances instead of walls: Multiple connections (up to 16), bridges, multi-connection and bridge projects and settings sync are all in Free. The Modbus request builder allows 5 requests and X/YMODEM 3 transfers of up to 128 KB per session; the send history keeps 10 entries in Free and 1,000 in Pro. Reaching an allowance shows one explanation with the way to Pro
  • Delete your account yourself: Cloud > Delete Account… opens the deletion page on alithon.com, which is also in the account center. Deletion is immediate; license keys stay valid and orders are kept for the records the law requires
  • Name this computer: Cloud > Device Name… chooses the name your account, Live Console and Live Share show for this computer. The default is the operating system plus the last four digits of its CID — never the computer's own name

UI Improvements

  • Dark mode: View → Appearance offers System, Light and Dark, applied at once and remembered. Light and Dark look the same on every platform; a receive colour picked for a light page falls back to the normal text colour where it would not read on a dark one
  • Tabs layout: Beside Horizontal, Vertical, Grid and Custom, View → Tabs puts each connection on a page of its own, titled like 1: COM3; the page on show is the one the Tools dialogs and file transfers act on. The choice is saved with the .spu project and remembered for the next launch
  • Free has no time limit: Direct downloads start as Free instead of a 30-day Pro trial. A trial still running when you upgrade lasts until 30 days after installation, and the Mac App Store subscription no longer has an introductory offer
  • Online features ask first: The first start asks whether Serial Port Utility may connect to alithon.com; without permission it works offline as Free. Help > Privacy and Online Features… changes the choice
  • At most one reminder a day: None in the first week after installation
  • SPU Free usage in the status bar: SPU Free in the status bar lists how much of each allowance this launch has used; when auto reply, the plot or decoding runs out, one non-modal notice bar says so and receiving carries on. Send history beyond what Free keeps goes to an archive rather than being deleted, and merges back with SPU Pro. The status bar warns 7 days before an SPU Pro license expires
  • Two copies under one CID: A second copy of SPU on the same computer, or a cloned system sharing its device identifier, takes the other's remote commands, so Live Console and Live Relay fail at random; SPU now says so once per run, without a modal box
  • Live Relay connects sooner: While waiting for a device to report, the picker asks every 2 seconds and gives an honest message after about 45 seconds, keeping your selection across refreshes; a device that receives a command goes back to polling every 2 seconds
  • Modem lines from the local RFC 2217 server: Clients of a local RFC 2217 bridge, the Live Sync RFC 2217 quick share included, now see CTS / DSR / RI / DCD change

Fixes & Enhancements

  • Live Relay never negotiated RFC 2217: A Live Relay port's RFC 2217 control bytes never left, so it fell back to plain bytes after 3 seconds and its parameters, DTR / RTS, Break and modem lines never reached the device. Fixed: with "Keep the remote port's own config" cleared, this end's parameters now reach the remote device
  • Flow control confirmation from the RFC 2217 server: As an RFC 2217 server, SPU confirmed a flow control SET with the port's old value, so pyserial reported rtscts rejected; it now confirms the requested value
  • Qt's own buttons and menus in the Chinese interface: Message box buttons, text box context menus, file dialogs and the like were still in English; they are in Chinese now
  • Data after a coloured program line kept its colour: After a coloured note in the receive view (a file transfer's -- ... --), data no longer stays blue
  • The Log Behavior options now do what they say: "Append to file" / "Overwrite file", "Prompt for filename" and "Start log upon connect" on the settings' Log page had nothing behind them. Overwrite now replaces the file once per logging session and appends after that; Prompt for filename asks each time logging is switched on, and a cancel leaves it off; Start log upon connect switches logging on as the connection opens. Older settings read back as append, no prompt, no auto-start — what earlier releases did
  • The status report carries only what licensing needs: The report sent at start-up and exit has no user name, computer name or MAC address any more, nor the log file path, display settings or CPU ID; Live Console no longer sends the computer name, and a Live Share guest's name no longer defaults to the system user name

6.6.7 (2026-09-16)

Features

  • A restricted device is told why, instead of quietly running on: The server can now restrict a machine by device, for instance after a license activated on it was refunded. On the next launch report the application closes its ports, shows a "Device restricted" dialog with the server's explanation, a contact address and a link to the Terms of Service, and exits when it is dismissed. The verdict is cached: the next launch asks the server once more and shows the main window only on an explicit "not restricted"; a refusal or an unreachable server ends in the same dialog, with a hint to connect to the internet and start again if the restriction has been lifted. A machine that was never restricted is untouched, and an unreachable server still lets it through. The App Store build takes no part in this

UI Improvements

  • The registration prompt explains where Free ends and Pro begins: The direct build's "30-day free trial" window still spoke shareware — "after the trial period you must register the program or remove it from your computer" — which is no longer how the product works. The window is now titled "Free and SPU Pro" and says that direct downloads include a 30-day Pro trial from first launch with Free available afterwards, what Free covers and what Pro unlocks, how Personal and Enterprise licenses activate, and that Live Sync is available in Free within its cloud traffic limits. The buttons read "Buy SPU Pro" and "Continue trial" or "Continue with Free". The App Store build's subscription note and the Windows installer's license text say the same

Fixes & Enhancements

  • A colleague signing in was refused an enterprise key once the buyer had bound it: A bound key answered to its owner's sign-in alone, whatever its edition — but an enterprise key is bought as seats for machines that several people sign in to. Once the buyer ticked the binding, a colleague typing the same key got "This license key is bound to a different account", and signing in with their own account at startup wiped the machine's enterprise activation. An enterprise binding now only says who manages the key: it appears in that account's dashboard and seats can be released from there, while colleagues keep activating seats with their own accounts and keep them on sign-out. Only a personal key is its owner's alone
  • A refunded or disabled license stayed Pro on the machine it was activated on: Once the server disabled a key, every launch merely added a warning box while the machine's own license data was left untouched and Pro kept working until the expiry date. A disabled reply now clears the local license the way a sign-out release does, switches to the free edition and warns once; the application keeps running

6.6.6 (2026-09-02)

Features

  • The App Store build takes a license key bought on the website: A perpetual license kept unlocking Pro in the App Store build, but there was nowhere to type its key in — a new Mac was a dead end short of switching to the direct download. The subscription dialog now has an Enter License Key entry that opens the same license window as the direct build (minus the buy button, per App Store rules); a key bound to an Alithon account still activates on sign-in and releases on sign-out, and an installed key is checked with the license server at startup, exactly as in the direct build
  • Parameter changes reach an open port at once: Editing the baud rate, framing or flow control in the quick settings used to do nothing to an open serial port — the value waited for the next open while the status bar kept showing what the port actually ran. The change now lands on the open port in place, without a close-and-reopen (a reopen drops DTR and resets most dev boards). A value the driver refuses rolls the whole set back so the port never runs a mixture; a transfer in progress refuses the change and says why. Live Console and the headless CLI take the same path: on failure the port stays open with its previous parameters instead of disconnecting

UI Improvements

  • Stop bits leave the default quick settings: The connection group's default-hidden fields used to be Data Bits and Parity only; Stop Bits (nearly always 1) now stays off the panel out of the box too, still editable in the settings dialog. Anyone who has configured that group's visible fields is untouched
  • The Microsoft Store build puts an icon on the desktop: The Store install used to reach no further than the Start menu; installing now creates a desktop shortcut (on Windows 10 build 19645 and later)

Fixes & Enhancements

  • The Help menu offered the subscription twice in the App Store build: "Subscribe to SPU Pro…" and "SPU Pro Subscription…" opened the same dialog, and read identically while unsubscribed. One entry remains, its label following the subscription state
  • The App Store build called a legacy license a subscription: A perpetual-license holder was told they had "Subscribed" on the registration button and offered "SPU Pro Subscription…" in the Help menu — a subscription they never took out. Both now say "Licensed" and "SPU Pro License…", matching the About box
  • Leaving serial for a network target never stopped the old session: Switching an open serial port to a network target (Live Relay, RFC 2217, TCP/UDP) closed only the port handle; the toolbar kept Start greyed and Stop armed while nothing had dialled the new target, and the settings-dialog path even leaked the old transport where Stop could no longer reach it. Both paths now stop the old session first
  • A long PAUSE ate memory, and resuming froze the window: PAUSE buffered every incoming byte without bound, and resuming replayed the whole backlog as one giant frame that froze the window for seconds. The pause buffer is now capped at the display buffer size (oldest bytes dropped, the Rx counter still counting what arrived), and the resume replays in paced frames, keeping the window responsive
  • An open find bar pinned the interface under streaming traffic: Every display tick that carried data re-scanned the entire receive document — find, filter and highlight each time. Traffic-driven rescans now coalesce to at most one per 250 ms; typing a keyword, F3, the options, stop and clear still refresh at once
  • The license key no longer reaches the log: Checking a license used to print the raw key, its hashes and the signature to standard error with the rest of the debug output (the system log, on macOS). Debug output is now off by default and grouped by module, to be switched on only when something needs looking into; the license lines are gone for good, and start-up no longer warns about a missing font family

6.6.5 (2026-08-26)

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. 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 to Serial Port Utility with that address then activates whatever computer you are on, and signing out releases it again. Already have a key? Bind it from Dashboard > Licenses, or when the desktop app offers at sign-in. A key binds to one account and the binding 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, which is the better control
  • Dashboard > Licenses: A page for the keys themselves rather than the orders that sold them — status, expiry, which computers are on each, and a button to release one. Keys bought with your address but not yet claimed are listed separately, with the choice left to you
  • Headless machines too: spu login --email you@example.com collects whatever the account is licensed for and activates the box; --bind-license claims 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 with quota_exceeded instead 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, and hands you XXXX-XXXX-XXXX or a link. Your colleague chooses Remote Serial (Live Relay) and pastes it 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: that switch admits your own other machines, an invite admits the holder of the code, to that one port, for that long. 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 --invite prints the code and link, --invite-ttl takes 30m/4h/1d, --invite-passcode-stdin reads 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 opens onto four peers of equal standing: share the port as an RFC 2217 server, switch Live Console on or off, switch Live Relay on or off, or hand the port 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. A name and one click past the invite page, the guest has a terminal for that one port right in the browser — nothing to install. Headless, --invite-web and --invite-no-relay choose the same two things; the share dialog and the management views show who is watching from a browser
  • One place for every guest share: Cloud > Manage Guest Shares… in the desktop app lists every live share on every machine of the account, grouped by machine, with which port each code opens and who is on it — and a single action: stop. The list comes from the server, not from this process, so a code minted on the laptop in the other room is here too, and stopping it here really stops it there. It only asks that you are signed in — an owner whose license lapsed can still stop their own shares; it mints nothing

UI Improvements

  • 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
  • Invite links have a landing page: An invite link opens a page that says which port it names, whether the host is online, whether someone is already on it, whether a passcode is needed, and how to open it — in the desktop app, or right there in the browser when the invite allows it. It can never mint a code
  • Shares can be stopped from the web: The Live Console device page gains a "Guest shares" panel listing that machine's live shares and who is on each, with a button to revoke one remotely — but never to create one: minting a share grants a takeover, and that consent belongs on the machine holding the port
  • 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 login follow suit; the My Account dialog still lists both. An older account with no username still falls back to the email
  • The license window, remade: The QR code is gone — it encoded the very URL the button beside it already opened, and that URL is a dead end on a phone. Its place goes to a purchase entry: "No license yet?" and a Buy License… button. The window now opens at the size its layout actually needs, and the value column stretches with it instead of growing a scroll bar
  • Buy links go to Alithon's own checkout: The purchase entries in Register Now and License Management used to send non-Chinese users to the old shareit store; they now open the WeChat Pay checkout for Chinese interfaces and the PayPal checkout for the rest
  • Status-bar messages expire, and the account cell opens: The message at the left of the status bar used to sit there forever — "Settings synced" would stay all afternoon, rewritten by every timed sync — and every message shoved the port cells rightward. Messages now carry a type (colour) and a timeout, the cell sits after the port and traffic cells, and long text elides with the full text on hover. A routine sync no longer says anything; clicking the account cell shows who is signed in, the last sync and the recent messages
  • Rx and Tx in one cell: The main window and each port merge the received and sent byte counters into a single status-bar cell

Fixes & Enhancements

  • 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, which stops the read path outright. An open sink with nobody connected is now told apart from a refused write: the frame is counted as dropped, 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
  • 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 license window misstated things, and rejected keys pasted from invoices: An install with no license at all was told it held "Personal"; it now says Unactivated, and a new Status line answers what the window is opened to ask — activated, days of trial left, or expired. The uninstall button had been waiting since 2017 on a widget the window never had; it exists now. And the key field rejected legal keys — a length rule that only accepted the hyphenated form, a case-sensitive alphabet, and line breaks from mail clients were fatal; keys are now normalised and echoed back as accepted, and the two remaining refusals say what is actually wrong
  • Relayed keystrokes came out one per line, and doubled: Live Relay delivered the remote operator's typing frame by frame, and every frame took the TX-echo path with its own line — so every character the guest typed took a line of its own on the host's screen, twice on any device that echoes. Relay writes now follow the Local Echo switch, off by default: the host sees what the device answered, exactly as the guest does, and can switch Local Echo on to watch the keystrokes too
  • macOS clipped the bottom row of the connection settings: Aqua controls paint outside their layout cell, and the stacked pages were pressed tight to their size hint, cutting the descenders off the bottom checkbox row — most visibly "Keep the remote port's own config" on the Live Relay and RFC 2217 pages. The overhang is now measured from the style and added to the page margin
  • Receive-settings captions were squeezed to fragments: "Tx Time Format" displayed as "Tx Time Forma", and the auto-feed row cropped its widest controls to "Auto feed", "Minimal I" and "Line Mode". Both blocks are grid layouts sharing a caption column now, whole at any width
  • The account dialog took clicks while waiting, and one answer crashed it: A sign-in over a slow link showed nothing for seconds, invited another click, and every click was another request. All three buttons now grey together while the page says what is happening ("Signing in…", "Sending the code…"), a 20-second watchdog catches an answer nobody will deliver — and a message box shown from inside the network handler was a use-after-free that crashed on close; every answer-driven message box now waits for the next event-loop turn
  • Status tips stuck in the status bar: Hovering the Live Sync popup's entries left the last tip painted over the port and traffic cells for the rest of the session — the clear event went to the popup window, which is not the main window. Such tips are now forwarded to the main window's status bar

6.6.4 (2026-08-21)

Features

  • Cloud Relay — a serial port on another computer: Switch on Cloud > Allow Cloud Relay on the site machine, pick Remote Serial (Cloud Relay) in the port list on yours, choose a port on one of your account's online computers, and connect. From there it behaves like a local port: baud rate, data bits, parity, stop bits, flow control and DTR/RTS can be set remotely, the remote CTS/DSR/RI/DCD states are shown, and XMODEM/YMODEM transfers and Modbus work as usual. Both ends only need outbound Internet access — no public address, port forwarding or VPN. The picker says whether each computer is online and whether relay is allowed there; a port accepts one relay at a time, the sharing side shows a status line while its port is in remote use, and a dropped relay is never redialled silently. Relayed traffic counts toward the account's cloud traffic quota
  • Remote use of a bridged port is visible: A bridge port served over RFC 2217 or plain TCP now announces clients arriving and leaving, the pane badge turns amber and names who is using it, and the serial parameters or control lines a remote client changes are recorded line by line — a port driven from somewhere else always says so

UI Improvements

  • Remote serial shows what the remote is running: With "Keep the remote port's own config" ticked on the RFC 2217 and Cloud Relay pages, the greyed-out local parameter rows are hidden — a disabled "115200" was too easy to read as a fact about the remote — and a read-only "Remote now" row shows the baud rate, data format, flow control and server signature the remote actually reports
  • Cloud menu grouping: The Cloud Console master switch and the three Allow… consents are grouped, and the consents are disabled while the console is off — they all work through the Cloud Console channel, which the flat menu made look independent

Fixes & Enhancements

  • Log written to a file called NULL: Before the first successful open the log file name is only a placeholder, and a flush triggered by pause, stop or an automatic reconnect did not recognise it — creating a file literally named "NULL" in the working directory. Those flushes now resolve the configured file name and log to the right file
  • DTR lamp stuck grey: After selecting RFC 2217 or Cloud Relay in the connection editor and switching back to a local port, the DTR lamp stayed grey — which reads as "not asserted" — while RTS recovered; both now return to green
  • DTR/RTS lamps grey on an RFC 2217 client connection: With "Keep the remote port's own config" ticked the client never set DTR or RTS, so the server had nothing to confirm and both lamps stayed grey for the whole connection. The first settings sync now asks the remote for its current levels, in both RFC 2217 client and Cloud Relay modes
  • Faster commands on the Cloud Console HTTP fallback: When the backend offers no WebSocket channel, queued commands now ride the heartbeat reply, cutting the worst-case wait from 30 seconds to one 20-second beat; a missing or stale cloud snapshot is re-uploaded as soon as the server asks, so picking a relay target no longer waits out a snapshot round trip

6.6.3 (2026-08-18)

Features

  • Local echo: Terminal passthrough can echo what you type in the receive view, so a device that never echoes back — common on embedded targets — no longer leaves you typing blind. It is separate from Display Send, which shows and logs whole frames from the send box: local echo renders keystrokes in place, in typing order, and keeps them out of the log. Off by default, since a device that does echo would otherwise double every character
  • Indicator lights toggle: The quick-settings panel can hide the TX/RX and control-line indicators and give the space back to the data views
  • Cloud Console live channel: The cloud console now carries commands and status over a WebSocket instead of polling, removing the poll-interval delay. A backend without the live channel keeps working over HTTP polling

UI Improvements

  • The quick-settings bar drags narrower: Its minimum width used to follow the longest port name, the longest combo entry and the widest label all at once, pinning the bar near 300 pixels. Long combo entries now elide in place — the popup still shows them in full — and the shared label column stops growing, so the bar goes as narrow as you need
  • Consistent settings terminology: Options… is now Settings… in the main window and the multi-port dialog, the terminal's connection, receive and send settings read consistently, and the settings panel's Options group is named Log Behavior after what it actually holds

Fixes & Enhancements

  • Misaligned columns from a missing monospace font: The receive and send views name Monaco, which does not exist outside macOS — only Windows' Consolas was substituted before — so those views fell back to a proportional face and the HEX and timestamp columns drifted out of line. Both families now substitute to the system monospace font when they are missing
  • Online services missing from Microsoft Store builds: The Store package shipped without account sign-in, cloud sync and the cloud console. It now matches the direct download

6.6.2 (2026-08-05)

Features

  • X/YMODEM file transfer: Send and receive files over an established serial, TCP or RFC 2217 connection with XMODEM, XMODEM-CRC, XMODEM-1K, YMODEM and YMODEM-G. Protocol traffic is kept apart from ordinary terminal data, and a non-modal progress bar reports the file, progress, rate, ETA and retry count. A TCP server can pin a selected client, so remote firmware updates no longer need another terminal application
  • Single-connection RFC 2217 remote serial: RFC 2217 is now available directly in the port list for connecting to Moxa NPort, ser2net or another Serial Port Utility, with the remote baud rate, data bits, parity, stop bits, flow control and DTR/RTS set in the same connection. The device server's own configuration is kept by default; parameters go out only once you explicitly take control. Peers without RFC 2217 support warn and degrade safely
  • RFC 2217 bridge client mode: A bridge can dial a device server and keep its serial parameters in step with the link's other end. Parameters are sent once negotiation succeeds and only changes afterwards; the remote's replies are recorded in the link messages but never applied back to the local port
  • Remote control-line status: RFC 2217 connections show the remote CTS, DSR, RI and DCD states, so hardware handshaking behind a device server is directly observable

Fixes & Enhancements

  • RFC 2217 negotiation: The access server now answers a client's WILL with DO. It used to work only with clients that also send DO, such as pyserial; a client opening with WILL alone waited until it timed out and fell back to a plain socket
  • RFC 2217 negotiation no longer ping-pongs: Answers are tracked per option and sent only when they change something — two Serial Port Utility bridges pointed at each other used to exchange WILL/DO forever
  • RFC 2217 compatibility: COM-PORT-OPTION refusals are now interpreted by role, fixing parameter delivery after negotiating with ser2net
  • Terminal passthrough on network connections: Keyboard passthrough checked only the local serial handle, which made typing ineffective on TCP, UDP and RFC 2217 connections
  • Bridge peer events: A peer arriving on the device end no longer opens a negotiation with the network end

6.6.1 (2026-08-02)

Features

  • Transparent network-to-serial bridge: Link two connections and this machine becomes a serial device server — a program on the network reads and writes the local serial port directly, while both sides of the traffic stay visible on screen. A fast network feeding a slow port is throttled automatically, and whatever still has to be dropped is counted in red until you clear it. Several clients can be handled exclusively, by broadcast, or by taking turns; an address allowlist keeps strangers out, both directions can be recorded into one time-ordered capture file, and a two-minute traffic curve shows how the link is doing
  • RFC 2217 and Modbus gateway: Two new protocol modes for the bridge. RFC 2217 lets a remote machine set the baud rate, data format, flow control and control lines as if the port were local; the Modbus gateway converts frames between TCP and RTU, and when several masters share one RS-485 bus it serves them one at a time so every answer goes back to whoever asked
  • Selectable wire encodings: Each connection can use its own receive and send encoding (UTF-8, GBK, GB18030, Big5, Shift-JIS, Latin-1, System and more), so a device that speaks GBK no longer arrives as mojibake. Both the settings dialog and the quick-settings panel can change it, and the choice is stored with your settings, the .spu project file and the cloud snapshot; terminal typing and cloud remote send follow the owning connection's encoding too
  • Drag the split between connections: The boundary between connections can be dragged, so a busy connection can be given more room; the proportions you drag survive toggling the quick-settings panel
  • Custom CRC: The toolbox accepts custom CRC parameters, and the result can be fed straight into the send frame
  • Configurable Enter sequence: The bytes sent by Enter in terminal mode are now yours to choose
  • Online help center: The Help menu links straight to the online help center
  • Restore defaults: Added a guarded workflow for restoring default settings
  • Microsoft Store: MSIX packaging is in, so the app can be installed from the Microsoft Store

UI Improvements

  • Bridge editor: The six setting groups became three tabs, so the dialog fits a 13" laptop and OK and Cancel are never pushed off screen
  • Toolbox: Streamlined the toolbox UI and its window entry
  • Quick settings panel: Adding a connection no longer folds the panel away — keeping it open is your call
  • Modbus request builder: Removed the empty space at the bottom of the window; it opens at the height the content actually needs

Fixes & Enhancements

  • Mac App Store launch crash: The 6.6 build installed from the Mac App Store quit immediately on launch. Fixed, and the release pipeline now has a check that stops the same kind of defect from shipping again
  • No way back from TCP/UDP mode: After a connection switched to TCP or UDP, the settings dialog no longer showed the port and mode pickers, leaving no route back to serial mode
  • Monospace font on macOS: The default font does not exist on macOS, so it was replaced with a proportional face and the hex and timestamp columns stopped lining up. The font is now picked from what is actually installed
  • GB18030 four-byte characters: Fixed the decoding of emoji and similar characters, along with a crash on malformed bytes seen with some Qt builds
  • Unencodable characters are no longer swapped silently: A character the current encoding cannot represent is no longer sent as ? — the frame is held back and the status bar names the character
  • Smaller install: Dropped an unused database component, cutting roughly 4 MB from the package

6.6.0 (2026-07-19)

Features

  • Connection activity lamps: New TX/RX and control-line lamps in the connection group blink as data flows, so you can see at a glance that the link is alive
  • Serial control lines: Control lines (DTR/RTS and more) are now supported, with a new Control Lines tab in the settings dialog
  • Modbus request builder: A Modbus request builder in the Tools menu — no more hand-crafting frames
  • Per-field quick settings: Every group in the quick-settings panel can now be tuned field by field, with the picker moved into the settings dialog
  • Append Line Ending and Enter Sends: The send editor can append CR, LF, CRLF or LFCR to each complete message, while terminal typing uses an independent Enter Sends setting; the default remains CR for compatibility
  • Restore last connection: The app reopens the connection you were using when you quit, so you can pick up where you left off
  • Terminal mode improvements: The terminal shows a caret, and the Tx counter now reports real numbers

UI Improvements

  • TCP/UDP mode UI: Polished the TCP/UDP layout and silenced the intrusive server-error popup
  • Toolbar: Reworked the log-recording and quick-settings toolbar buttons
  • UI alignment & polish: Unified the receive and send rows and aligned the combo boxes

Fixes & Enhancements

  • Settings defaults: Fixed missing Log/Display defaults in the settings panel; time formats no longer end up blank
  • Session file loading: Fixed some toggle states being lost when loading a .spu session file
  • Chinese UI: The data-format options are now labeled Text instead of the misleading "ASCII"
  • Log writing: Fixed log writing failing when the log directory did not exist

6.5.6 (2026-07-11)

Features

  • Account system: Sign in / sign out from the Account submenu under File, with a "keep me signed in" option; the status bar shows your account state at a glance
  • Device binding & account sync: Bind this machine to your account after signing in and keep account data in sync
  • Cloud Console: When enabled, a signed-in browser on alithon.com can view this device's ports live; separate "Allow Remote Send" and remote port-control switches govern cloud writes and remote open/close/reconfigure; data uploads only while someone is watching and counts toward the monthly traffic quota
  • Auto-reconnect: Automatically tries to reconnect after an unexpected disconnect
  • Send-frame checksums: Outgoing frames can carry an automatic checksum, with a quick-settings entry
  • Receive find/filter bar: Locate content quickly in large outputs
  • Ad-free for licensed users: Status-bar adverts disappear once a licence is activated

UI Improvements

  • Toolbar rework: Regrouped by function with connection controls first; toggle buttons now reflect their pressed state; shortcuts completed; the port combo defaults to a real available port; the toolbar is locked in place
  • Menu rework: Added a Connection menu, moved Account under File, and consolidated licensing entries; completed Simplified Chinese translations
  • Registration dialog: Redesigned the registration/purchase prompt; the defunct Weidian QR code is now a direct purchase link
  • Network error dialogs: Friendlier, easier-to-understand error messages

Fixes & Enhancements

  • Terminal passthrough: Fixed spaces being sent twice in terminal passthrough mode
  • Session file loading: Fixed port selection and console binding being lost when loading a .spu file
  • Modification tracking: Fixed the "unsaved changes" flag being wrong after New, and the current file path being overwritten
  • Chinese translations: Corrected several translations and disambiguated the "Port" label across contexts

6.5.5 (2026-06-20)

Features

  • UDP communication modes: New UDP Server and UDP Client modes with full configuration pages and send/receive support

Fixes & Enhancements

  • Received text sanitization: Text receive mode filters out terminal control codes, so garbled symbols no longer pollute the display
  • Unified connection settings: Serial, TCP and UDP settings are now managed in one settings panel
  • No-port scenario: Fixed the connection mode being misdetected when no serial port is available
  • Chinese installer: Fixed the Windows installer build so the setup UI displays Chinese correctly

6.5.4 (2026-06-15)

Fixes & Enhancements

  • Adaptive settings panel: Switching to the Log tab now auto-widens a too-narrow window, so settings are no longer clipped

6.5.3 (2026-06-14)

Fixes & Enhancements

  • Hardened logging: Fixed a range of logging issues — writing and toggling logs is more reliable
  • Status-bar log link: The log path in the status bar is now clickable — it saves and opens the current log file; a placeholder is shown when logging is off, and failures are reported clearly

6.5.2 (2026-06-13)

Fixes & Enhancements

  • Major defect sweep: Resolved a batch of defects that affected everyday use
  • License activation: Fixed several activation and validation issues, making activation more reliable
  • Connection stability: Fixed issues in connection-state detection, the disconnect sequence, and UDP/TCP sending
  • Logging: Fixed log toggling and writing when multiple ports are in use
  • Checksum calculation: Corrected the CRC-16/USB checksum results
  • UI details: Fixed toolbar buttons not showing their selected state; the settings panel now resizes itself when switching tabs
  • Transport security: Communication with the server now uses encrypted connections (HTTPS)

6.5.1 (2026-05-27)

Features

  • Safer serial text rendering: Non-printable control characters in the receive pane and log output are replaced with placeholders, keeping the UI and logs clean (line breaks, carriage returns and tabs are preserved)

Fixes & Enhancements

  • More reliable data saving: Fixed several issues when saving local configuration and license data
  • Connection cleanup: Fixed resource release when switching or closing connections, reducing memory growth over long sessions

6.3.1 (2026-03-22)

Features

  • AutoFeed improvements: AutoFeed settings are now saved correctly, and the feed interval is configurable
  • High-baud-rate support: Unified serial port name display and improved communication at high baud rates
  • Adaptive QR codes: QR code images in the license management dialog now scale to fit

Fixes & Enhancements

  • Window position memory: Fixed window position and size not being saved and restored correctly
  • TCP stability: Fixed occasional TCP connection crashes
  • AutoFeed timing: Corrected the AutoFeed time calculation