Latest stable release

Serial Port Utility 6.6.7

Explore what is new once, then choose the native build for your system.

Windows, macOS and Linux SHA-256 verified
Release highlights

What is new in 6.6.7

Current

These release notes apply to every platform build. Download details stay in the platform picker.

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 on the machine: the next launch asks the server once more (up to 5 seconds) 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

Interface

  • The registration prompt now 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: Free stays available when the trial ends. 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; that Free supports one connection and local logs while Pro unlocks multiple connections, bridges, the Modbus request builder, file transfer and settings sync, with saved project files and logs kept either way; that a Personal license bound to an Alithon account activates the signed-in computers and Enterprise activation follows the seat count; 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", whichever applies. The App Store build's subscription note likewise opens by saying that Free basic debugging needs no subscription. The Windows installer's license text says the same

Fixes

  • 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 a number of seats for machines that several people sign in to, and the buyer is rarely the one at the keyboard. Once they 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, seats can be released from there, and colleagues keep activating seats with their own accounts and keep them on sign-out. Only a personal key is its owner's alone. The binding hint in the license window says so for enterprise keys
  • A refunded or disabled license stayed Pro on the machine it was activated on: Once the server disabled a key (refund, administrator action), every launch merely added a "DISABLED LICENSE" warning box; 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
Version archive

Previous releases

Choose a platform to review older builds and their release notes.

6.6.6

File
SerialPortUtility-v6.6.6.dmg
File size
27.1 MB
SHA-256
9aee830eb68cd07768be346c79c3299b8d664b7b6e7aa202df40d4ec767dae8f

6.6.6 (2026-09-02)

中文版

新特性

  • App Store 版收留官网买的授权码: 在官网购买过永久授权的用户装上 App Store 版后,授权本身是被认可的,却没有任何界面能把授权码输进去——换一台新 Mac 就彻底断了路,只能改装直装版。现在订阅窗口里多了「输入授权码」入口,打开的就是直装版那个授权管理窗口(按 App Store 规则不含购买入口);绑定到 Alithon 账户的授权码更简单——登录即激活、退出登录即释放,与直装版一致;已装有授权码的副本启动时也会像直装版一样向服务器核对续期与禁用状态
  • 开着的串口改参数立即生效: 在快速设置里改波特率、数据位、校验或流控,此前对已打开的串口毫无作用——新值只是存下来等下一次打开,状态栏照旧显示端口实际在跑的参数,屏幕上也没有一个字说明这一点;它是全软件唯一不立即生效的参数路径(切换端口会重开、RFC 2217 客户端下发 SET-BAUDRATE、实时终端改配置也重开)。现在改动就地应用到打开的端口上,而不是关一次再开一次——重开会拉低 DTR、把多数开发板顺手复位一遍,这并不是「改个波特率」想要的。驱动拒绝的值会连同已接受的一起回滚,端口不会跑出一半新一半旧的组合;传输进行中会拒绝改动并说明原因。实时终端与无界面 CLI 下发参数也走这条路:失败时保持端口打开并回滚,不再断开重连

界面改进

  • 停止位也收进快速设置的抽屉里: 连接组默认隐藏的字段此前只有数据位与校验,停止位(几乎总是 1)现在同样默认不占面板,设置对话框里照旧可改;自己配置过该组显示字段的用户不受影响
  • Microsoft Store 版装完桌面上有图标了: Store 版此前只出现在开始菜单里。现在安装即建桌面快捷方式(需要 Windows 10 build 19645 及以上;更早的系统照常安装,只是没有快捷方式)

修复

  • App Store 版帮助菜单里订阅出现了两次: 「订阅 SPU Pro…」与「SPU Pro 订阅…」打开的是同一个订阅窗口,没订阅时两条甚至一字不差。现在只留一项,标签随订阅状态在两种写法间切换
  • App Store 版把老授权叫成订阅: 持有永久授权的用户在两处被告知自己「订阅」了:注册按钮写着「已订阅」,帮助菜单写着「SPU Pro 订阅…」——可他们从没订阅过。现在这两处跟随授权的实际来源写「已授权」与「SPU Pro 授权…」,与关于框里的「SPU Pro(传统授权)」口径一致
  • 切到网络目标时旧串口会话没有停: 把一个开着的串口在行内编辑器里改成网络目标(实时中继、RFC 2217、TCP/UDP),只有串口句柄被关掉,会话状态还停在「运行中」——工具栏的开始一直灰着、停止一直亮着,而新目标根本没有拨号,这个假状态要手动停止再开始才能解开。设置对话框改模式的洞更深一层:旧会话没结束就换上了新模型,旧的传输层整个泄漏,停止再也够不着它。现在两条路都先停掉旧会话再切
  • 暂停放久了吃内存,恢复时又把窗口冻住: 「暂停」把每个到来的字节都塞进暂停缓冲,没有任何上限——忙碌链路上按下暂停放一下午就是一场无限增长的分配;恢复时又把全部积压当一帧回放,一次解码、一次插入,窗口冻住数秒。现在暂停缓冲以显示缓冲大小为上限、丢最旧留最新(恢复后看到的正是最新的内容),Rx 计数改在字节到达时统计、不因丢弃而缩水;恢复按 64 KB 一帧回放、刷新每轮 256 KB 预算,窗口全程保持响应
  • 持续收流时开着查找栏会把界面拖死: 查找栏开着时,每个携带数据的 20 ms 刷新都把整个接收文档重扫一遍——查找、过滤、高亮各来一次,大文档加持续流量能把界面钉死。流量触发的重扫现在合并为每 250 ms 至多一次;键入关键词、F3、选项开关、发送回显、停止、清屏这些用户操作仍然即时刷新
  • 许可证密钥不再写进日志: 校验授权时,原始密钥、它的各种哈希与签名此前会随调试输出一起打到标准错误——在 macOS 上那就是系统日志。这类调试输出现在默认全部关闭,按模块分类、需要排查时才单独开启;许可证路径的这些行则彻底删除。启动时那条字体族缺失的告警连同它背后 70–80 毫秒的字体别名扫描也一并消失

English

Features

  • The App Store build now 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 for renewals and disabling, 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 did nothing to an open serial port — the value was stored for the next open, the status bar kept showing what the port actually ran, and nothing on screen said so. It was the only parameter path in the application that did not take effect immediately (switching ports reopens, an RFC 2217 client pushes SET-BAUDRATE, Live Console reopened). The change now lands on the open port in place, without a close-and-reopen — a reopen drops DTR and resets most dev boards, which is not what "set the baud rate" asked for. A value the driver refuses rolls the accepted ones back too, 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

Interface

  • Stop bits join the quick-settings drawer: 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; older systems install as before, just without it)

Fixes

  • 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 twice over that they had subscribed: the registration button read "Subscribed" and the Help menu "SPU Pro Subscription…" — a subscription they never took out. Both now follow where the entitlement actually comes from — "Licensed" and "SPU Pro License…" — the way the About box already says "SPU Pro (Legacy License)"
  • 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) in the inline editor closed only the port handle; the session state stayed "running", so the toolbar kept Start greyed and Stop armed while nothing had dialled the new target, and only a manual Stop/Start cleared it. The settings dialog had the same hole one layer down: a mode change adopted the new model without ending the old session, leaking 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 diverted every incoming byte into an unbounded buffer — an afternoon of pause on a busy link was an unbounded allocation — and resuming replayed the whole backlog as one giant frame, one decode and one insertion that froze the window for seconds. The pause buffer is now capped at the display buffer size, dropping the oldest bytes so what you un-pause to is the newest; the Rx counter counts at arrival, so the wire statistics never shrink to what survived the cap; and the resume replays in 64 KB frames under a 256 KB-per-tick rendering budget, keeping the window responsive throughout
  • An open find bar pinned the interface under streaming traffic: With the find bar open, every 20 ms display tick that carried data re-scanned the entire receive document — find, filter and highlight each time — and a large document under continuous traffic pinned the GUI. Traffic-driven rescans now coalesce to at most one per 250 ms; typing a keyword, F3, the option boxes, a send echo, 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 along with the rest of the debug output — on macOS, that is the system log. 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. Start-up also loses the warning about a missing font family, and the 70–80 ms font-alias scan behind it

Download

| Platform | File | | --- | --- | | Windows 10 1809 or later, 64-bit | serial_port_utility_*.exe | | macOS 12 or later, Apple Silicon | SerialPortUtility-*.dmg | | Linux x86_64 (Ubuntu 22.04 or later) | serial-port-utility-*-linux-x86_64.tar.gz |

First-launch notes for each platform — Gatekeeper on macOS, the runtime libraries on Linux — are in the README.

SHA-256 checksums are published with every build at alithon.com/downloads.

Documentation · Getting help · All releases

6.6.5

File
SerialPortUtility-v6.6.5.dmg
File size
27.1 MB
SHA-256
fa002a4c1ada0074c2a21b3e614318a69e687658dac56868403f79725563ad65

6.6.5 (2026-08-26)

中文版

新特性

  • 许可证绑定账户,登录即激活: 注册码和 Alithon 账户此前互不相识——注册码只认机器码,账户只认设备和订单,于是每换一台机器都得重新去翻交付邮件。现在结账时勾选「将许可证绑定到我的 Alithon 账户」(个人版默认勾选,企业版默认不勾),密钥就记在买家邮箱名下;之后在软件里用该邮箱登录,你所在的那台电脑会自动激活,退出登录时自动释放。已经装好密钥的机器,首次登录时会问一次要不要绑定;「许可证管理」对话框里也有「同时绑定到我的账户」勾选。一个密钥只能绑定一个账户且之后无法更改,因此每个入口都会先说明并要求确认
  • 激活需要登录账户: 「许可证管理」里的激活现在先登录再激活,这样服务端才知道是谁在激活——也正因如此,这里输入的密钥之后才能跟着账户走到下一台机器。已绑定的密钥不再接受旧版本的匿名激活,会提示升级并登录
  • 取消三次转移限制: 个人版密钥此前是一次激活加三次转移、用掉就没了——重装四次 Windows 授权就到头了。现在未绑定的密钥最多可同时用于三台机器,停用其中一台即刻释放名额;绑定到账户的密钥则完全没有设备数限制——它只在主人登录的地方生效
  • 无界面机器也能这样激活: spu login --email you@example.com 登录成功后会自动领取账户名下的许可证并激活本机,--bind-license 可顺带把本机已装的密钥绑定到该账户
  • Live Sync 全版本可用: RFC 2217 服务器、实时终端、实时中继、实时分享——以及「远端串口 (RFC 2217)」端口类型——不再要求 SPU Pro;免费版全部可用,无界面的 spu --invite 也一样。Pro 授权改变的只是每月云流量额度:免费账号每方向 10 MB,Pro 1 GiB,用完后消耗购买的流量包。额度现已真正执行——实时终端或实时中继会话超出额度后以 quota_exceeded 停止,而不是继续跑。没有 Pro 的副本启动时只恢复 RFC 2217 快捷分享这一类桥接链路,其余链路原样保存、等授权到位再恢复
  • 实时分享(Live Share)——把串口分享给没有账号的同事: 实时中继此前要求两台机器登录同一个账号。现在可以为一个已打开的串口签发一张有时限的邀请码:在"云 > 分享串口给访客…"里选有效期(1/4/12/24 小时,默认 12 小时)、可选口令和一句标签,把 XXXX-XXXX-XXXX 或那条链接发给同事,他在自己的软件里选"远端串口 (实时中继)"、在"用邀请码加入"里粘贴即可——不需要注册、不需要订阅、不需要绑定设备,流量记在分享方。它与"实时中继"互不隐含:那个开关管的是你自己名下的其他机器,邀请码管的是拿着这张码的这个人、这个口、这段时间。分享随端口关闭、实时终端关闭、退出登录或程序退出而结束;口令连续错 5 次会烧掉这张码;到期的码不再接受新的加入,但不会切断正在进行的会话
  • 状态栏的 Live Sync 状态: 状态栏的 Live Sync 格子在空闲时只是入口,一旦本机有任何一项在跑,它就把名字让给状态本身:琥珀色的已分享表示门开着还没人进来(RFC 2217 在监听、邀请码已签发、实时终端或实时中继已开启),橙色加粗的使用中表示有人正在驱动你的串口(只有一位时直接写出是谁,如「访客:张三」或「远端操作者」),红色的未在监听表示 RFC 2217 服务器要的 TCP 端口被占用、这条链路其实没在工作——这种情况此前只有一闪而过的一条提示,之后就再无声息。RFC 2217 服务器现在也算在内:此前状态栏只统计云端的分享与中继,本机开着 RFC 2217 服务器、甚至远端客户端正在占用串口时,状态栏都毫无表示。悬停可看四项各自的状态(哪个端口、哪个监听端口、哪位访客、什么时候接入),点击弹出的菜单上半段列出正在跑的每一项并给出对应的管理入口,下半段仍然是那四项开关
  • 无界面机器也能签发: spu -D /dev/ttyUSB0 --invite 直接打印邀请码与链接,--invite-ttl 接受 30m/4h/1d--invite-passcode-stdin 从管道读口令,Ctrl-C 退出时自动撤销
  • 状态栏一键分享——把本地串口变成 RFC 2217 服务器: 此前要把一个串口暴露为 RFC 2217 服务器得走三个对话框:先占一格网格给 TCP 服务端面板、再开"工具 > 桥接"、再在五页编辑器里逐项核对默认值。现在状态栏多了一个 Live Sync(实时同步)入口,点击后三选一:分享为 RFC 2217 服务器、开关实时终端,或分享给访客(Live Share)。选 RFC 2217 只需回答一个问题——监听哪个 TCP 端口(自动建议空闲值),可选地限定允许连接的地址或网段;其余按安全默认值建链。网络端由桥接内置的监听器承担,不再占用网格里的端口位,也不受 16 个端口上限约束;在"工具 > 桥接"里它显示为 TCP :2217(内置),可以像其他链路一样改监听端口、看流量与状态
  • 浏览器访客——同事不装软件也能看这个口: 签发邀请码时可以定这张码在浏览器里能做什么:不开放、只看、看并发送、看并发送且可改串口参数(默认只看);另一个开关决定它是否还能在桌面端开一条实时中继(默认可以)。链接点开是一个说明页:这是哪台机器的哪个口、主人在不在线、是不是已经有人在上面、要不要口令;填个名字就进去,进去是一个只属于这个口的终端。无界面用 --invite-web--invite-no-relay 指定同样这两件事。分享对话框与管理列表里会标出谁正从浏览器看
  • 一处管完所有访客分享: "云 > 管理访客分享…"列出账户名下每台机器上仍然有效的分享,按机器分组,写明每张码开的是哪个口、谁在上面,只有一个动作:停止。这张列表来自服务器而不是本进程,所以另一间屋子的笔记本上签发的码也在这里,在这里停掉它那边就真的停了。它只要求登录:授权过期的主人依然可以停掉自己开出去的分享;它不签发任何东西

界面改进

  • 统一命名: 状态栏 Live Sync(实时同步)入口下四项平级:RFC 2217 服务器、Live Console(实时终端,原云控制台)、Live Relay(实时中继,原云中继)、Live Share(实时分享,原远程协助)。云菜单里的「云控制台」「允许云中继」、端口列表里的「远端串口 (云中继)」随之改名;功能、设置与账号数据不变
  • 桥接角标可以直接关掉桥接: 接收区上方那条淡蓝色(有客户端接入时琥珀色)的桥接角标,右端新增关闭按钮:默认不显示,点一下角标才出现,再点它就移除这个端口参与的全部桥接链路并在状态栏说明——"注意到这个口被桥接了"和"把桥接拆掉"是两次分开的点击,不会误触。这也是快捷分享的"停止分享"入口
  • 状态栏显示用户名: 状态栏最右边的账户格此前显示登录邮箱,现在显示用户名——那才是账户的名字,也不必把邮箱地址一直摆在别人能看见的地方。点开的账户菜单和无界面的 spu login 一并跟随;「我的账户」对话框里邮箱与用户名照旧都列出。用户名为空的老账户仍回落到邮箱
  • 许可证窗口重做: "许可证管理"里那张二维码去掉了——它编码的正是旁边按钮已经打开的同一个网址,而那个网址在手机上是死路:下单页给回的是扫码付款的图,没人能用扫过来的那台手机再扫它一次;英文界面还会被硬塞一张微信码。腾出来的地方给了购买入口:一条分隔线、"还没有许可证?"和一个蓝色的"购买许可证…"按钮。默认尺寸也从 606×364 改到 820×520(布局本来就要 755×481),数值列跟着面板伸缩,不再为一张没有内容可滚的表格挂一条横向滚动条
  • 购买链接指向 Alithon 自己的下单页: "立即注册"与"许可证管理"里的购买入口此前把非中文用户送到旧的 shareit 商店;现在中文界面走微信支付下单页、其余走 PayPal 下单页
  • 状态栏的消息会自己消失,账户格可以点开: 状态栏最左边那条消息此前写上去就不走了——"设置已同步"会在那儿坐一整场,还被每次定时同步重写一遍;这个格子又排在最前面且宽度为零,每说一句话就把端口状态往右推一次。现在每条消息都带类型(信息、警告、错误,决定颜色)和超时,格子挪到端口与流量之后且不再影响其他格子的位置,放不下就省略、完整内容在悬停提示里。同步结果也归到它该在的地方:定时同步成功不再出声,点开账户格就能看到谁登录着、上次同步是什么时候、最近几条消息,以及账户相关的操作
  • 收发字节数合并为一格: 主窗口与每个端口的状态栏把 Rx 与 Tx 的计数合并显示在一格里

修复

  • 中继错误此前到不了调用方: 服务端的中继错误(端口已被占用、设备未就绪等)与实时终端的错误同形,原来一律被送进设备代理静默丢弃,操作端只能一直等——现在按请求来源分发,失败会立刻显示原因
  • 桥接的串口在无人接入时会失聪: 把一个串口对外提供为 RFC 2217 服务器(或桥接到 TCP 服务端)之后,只要还没有客户端连进来,这个串口就再也收不到东西了——键入照样发得出去,设备的回应却永远不显示,只有拆掉桥接才恢复。设备发来的第一个字节就足以触发:它进入出口队列,而向零个客户端广播写出的是零字节,桥接把这个零读成"传输层拒收",于是留住这一帧并给源端加限流——而限流会让整条读取路径停摆,接收区与桥接抽头都走这条路。现在"开着但没人连"与"写失败"被区分开来:无人接入时该帧计入丢弃,而不是把队列卡死等一个可能永远不来的客户端,链路状态也会写明"运行中,暂无客户端连接"。另外,没有 RTS/CTS 的串口本就无法真正限流,这类限流现在会被拒绝——不读串口并不能让设备慢下来,只会把字节丢在驱动缓冲里
  • 文件传输结束后"发送文件…/接收文件…"一直灰着: 一次传输之后——无论成功、失败还是取消——"连接"菜单里的发送文件与接收文件始终不可用、"取消传输"始终可用,只有重启程序才能恢复。菜单原先只在传输开始时刷新一次,现在跟随每个端口的传输状态与键盘焦点:传输一结束即恢复,某个端口传输中也不会把另一个端口的发送文件一并灰掉
  • 许可证窗口说了假话,也收不下从发票里粘来的密钥: 没装许可证的安装被告知自己持有"个人版"——判断只看了企业版标志,而没有许可证时它本来就是否,从没问过到底有没有许可证;现在写"未激活",并新增一行"状态",直接回答人们打开这个窗口想问的问题:已激活、试用中还剩几天、还是已过期。此前也没有任何办法卸掉一个许可证:卸载按钮的槽函数从 2017 年起就在等一个 .ui 里根本不存在的控件,现在按钮真的有了。密钥输入框则在拒收合法的密钥:长度检查只认 29 位带横杠的写法(而校验本来就先去横杠)、密钥字母表是大写且区分大小写、只裁两端所以邮件客户端带来的换行是致命的——现在统一归一化并回显被接受的写法,两句还会拒绝的提示也改成说清哪里不对(其中一句从来没被 tr() 包住,中文界面会显示英文,还带着拼错的 "licnese")
  • 中继来的按键在主人屏幕上一字一行、还带重影: 实时中继把远端操作者的键入一次一帧地送过来,而每一帧都走了 TX 回显、每个 TX 帧另起一行——于是访客敲的每个字符在主人这边独占一行;遇到会回显的设备(任何交互式控制台)还各出现两次,一句 uptime 读起来是六行叠字。中继写入现在交给"本地回显"这个本来就是为按键准备的开关:默认只显示设备回的内容,与访客自己屏幕上看到的一致;想看访客敲了什么,把本地回显打开即可。端口在别人手里这件事本来就有接管提示在说
  • macOS 上连接设置最底下一行被切掉: Aqua 控件会画到布局给它的格子之外,而堆叠页面被贴着尺寸提示零边距压紧,最底下那行复选框于是丢了字母的下伸部分——在实时中继与 RFC 2217 页面上表现为"沿用远端串口的现有配置"被削掉一截。现在向样式查询这部分外溢并计入页面下边距,没有外溢的样式不受影响
  • 接收设置页的标题被挤成半截: "Tx 时间格式"的标题被压到只剩六分之一行宽、显示成 "Tx Time Forma",两个输入框差了 40 px;自动换行那一行的六个控件想要 740 px 而页面只开 538 px,于是最宽的四个各被裁到 96 px,标题读作 "Auto feed"、"Minimal I"、"Line Mode"。两块都改成网格布局、共用标题列,把页面拉宽或缩到最小都保持完整
  • 账户对话框在等待应答时可以被反复点击(其中一种应答还会崩溃): 登录要往服务器跑一个来回,慢链路上好几秒屏幕上没有任何反应,于是被再点一次,而每一次都是一个新的登录请求。现在按下任一按钮,三个按钮一起置灰,页面写明正在做什么("正在登录…""正在发送验证码…""正在创建账户…"),应答或错误到达时恢复;20 秒看门狗兜住那种谁也收不到的应答。另外,在网络应答的处理函数里直接弹消息框是一次 use-after-free——Qt 还在收尾,而模态框跑的嵌套事件循环会删掉那个已交给 deleteLater 的 reply,关掉消息框时必崩——现在所有由应答触发的消息框都推迟到事件循环的下一轮
  • 状态栏弹出菜单会把状态提示留在栏里: 点开 Live Sync 格子、指针从"实时终端"移到弹出菜单自己的条目上,Qt 把清除提示发给了弹窗——它是一个独立的窗口,主窗口收不到,那句提示就在状态栏里留一整场,端口状态与流量计数一直被它盖住。现在这类提示统一转发到主窗口的状态栏

English

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.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. 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 --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 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-web and --invite-no-relay choose 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 login follow 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

Download

| Platform | File | | --- | --- | | Windows 10 1809 or later, 64-bit | serial_port_utility_*.exe | | macOS 12 or later, Apple Silicon | SerialPortUtility-*.dmg | | Linux x86_64 (Ubuntu 22.04 or later) | serial-port-utility-*-linux-x86_64.tar.gz |

First-launch notes for each platform — Gatekeeper on macOS, the runtime libraries on Linux — are in the README.

SHA-256 checksums are published with every build at alithon.com/downloads.

Documentation · Getting help · All releases

6.6.4

File
SerialPortUtility-v6.6.4.dmg
File size
27.0 MB
SHA-256
302faf742ec9670f0b2184375ccf65584d2274f25da0b9331de5ecbf2587aeb8

6.6.4 (2026-08-21)

中文版

新特性

  • 云中继(Cloud Relay)——使用另一台计算机上的串口: 现场机器在"云 > 允许云中继"打开开关,操作端在端口列表选择"远端串口 (云中继)",从账户下在线的计算机中挑一个串口,按下连接后它就像本地串口一样可用:波特率、数据位、校验、停止位、流控与 DTR/RTS 可远程设置,远端 CTS/DSR/RI/DCD 状态同步显示,X/YMODEM 文件传输与 Modbus 照常工作。两端只需能访问互联网,不需要公网地址、端口映射或 VPN。选择对话框会说明每台机器是否在线、是否允许中继;一个串口同一时刻只接受一个中继会话,串口被远程使用时本机会在状态栏提示;链路断开后不会自动重连,需要手动重新连接。中继流量计入账户的云流量额度
  • 桥接端口被远程使用时会提示: 对外提供 RFC 2217 或 TCP 服务的桥接端口,现在会在客户端接入和离开时给出状态消息,面板徽标显示"正被 <客户端> 使用"并变为琥珀色,远程客户端修改串口参数或控制线也会逐条记录——与云中继遵循同一条原则:被别处驱动的串口必须让人看得出来

界面改进

  • 远端串口显示"远端当前"参数: RFC 2217 与云中继页面勾选"沿用远端串口的现有配置"时,不再显示灰掉的五行本地参数(容易把灰色的"115200"误读成远端实情),改为一行只读的"远端当前",显示远端服务器报告的实际波特率、数据格式、流控及其签名
  • 云菜单分组: "云控制台"总开关与三个"允许…"开关分组显示,云控制台关闭时三个开关一并置灰——它们都经由云控制台通道生效,此前平铺的菜单让人误以为彼此独立

修复

  • 日志被写进名为 NULL 的文件: 日志文件名在首次成功打开前只是一个占位符,而暂停、停止或自动重连打开端口后触发的写入没有识别它,于是在程序工作目录里生成了一个名叫 "NULL" 的文件;现在这些写入会先按配置的文件名模板解析,再写入正确的文件
  • DTR 指示灯变灰后不恢复: 在连接编辑器里选过 RFC 2217 或云中继后切回本地串口,DTR 灯一直保持灰色(意为"未置位"),而 RTS 灯会正常恢复;现在两者一致恢复为绿色
  • RFC 2217 客户端的 DTR/RTS 灯整个连接期间都是灰色: 勾选"沿用远端串口的现有配置"时客户端从不下发 DTR/RTS,服务端也就无从确认,两盏灯始终显示"未询问";现在首次同步时会查询远端的当前电平,RFC 2217 与云中继两种模式下都能看到确认后的状态
  • 云控制台 HTTP 回退路径的命令延迟: 服务端未提供 WebSocket 通道时,排队的命令现在随心跳应答一起下发,最长等待从 30 秒缩短到一次 20 秒心跳;云端快照缺失或过期时也会按服务端提示立即重传,选择中继目标时不必再等一轮快照请求

English

Features

  • Cloud Relay — use a serial port on another computer: The site machine turns on Cloud > Allow Cloud Relay; the operator picks Remote Serial (Cloud Relay) in the port list, chooses a port on one of the account's online computers and presses 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 X/YMODEM transfers and Modbus work as usual. Both ends need nothing more than 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 session 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 — connect again deliberately. Relayed traffic draws on the account's cloud traffic quota
  • Remote use of a bridged port is visible on the sharing side: A bridge port served over RFC 2217 or plain TCP now announces clients arriving and leaving, the pane badge reads "in use by " and turns amber, and the serial parameters or control lines a remote client sets are logged line by line — the same rule Cloud Relay follows: a port driven from somewhere else must say so

Interface

  • 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 five 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 ride the Cloud Console channel, which the flat menu made look independent

Fixes

  • Log written to a file called NULL: Until the first successful open the log file name is only a placeholder, and flushes triggered by pause, stop or a port opened by the reconnect supervisor did not recognise it, creating a file literally named "NULL" in the working directory. Those flushes now resolve the configured file name template first 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 for the life of 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 showed "never asked" throughout. The first settings sync now queries the remote's current levels, so the confirmed state shows in both RFC 2217 client and Cloud Relay modes
  • Command latency 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 for it, so picking a relay target no longer waits out a snapshot round trip

Download

| Platform | File | | --- | --- | | Windows 10 1809 or later, 64-bit | serial_port_utility_*.exe | | macOS 12 or later, Apple Silicon | SerialPortUtility-*.dmg | | Linux x86_64 (Ubuntu 22.04 or later) | serial-port-utility-*-linux-x86_64.tar.gz |

First-launch notes for each platform — Gatekeeper on macOS, the runtime libraries on Linux — are in the README.

SHA-256 checksums are published with every build at alithon.com/downloads.

Documentation · Getting help · All releases

6.6.3

File
SerialPortUtility-v6.6.3.dmg
File size
26.9 MB
SHA-256
271505abfe5dcd699850075c1f7fdf55fcc7be02dfef3f2faa84c86efc2eca77

6.6.3 (2026-08-18)

中文版

新特性

  • 本地回显: 终端直通模式下,敲下的字符会在接收区原位显示,对着不回显的嵌入式设备不再是盲打。它与"显示发送"相互独立——后者显示并记录发送框发出的整帧,本地回显只按输入顺序在接收区显示按键、不写入日志;默认关闭,避免设备自身回显时每个字符出现两遍
  • 指示灯开关: 快捷设置面板新增"指示灯"一项,可隐藏 TX/RX 与控制线指示灯,把空间让给收发区
  • 云控制台实时通道: 云端控制台改用 WebSocket 收发命令与状态,去掉轮询间隔带来的延迟;服务端未提供该通道时自动退回原有的 HTTP 轮询

界面改进

  • 快捷设置栏可以拖得更窄: 此前它的最小宽度被最长的端口名、最长的下拉条目和最宽的标签一起撑到约 300 像素;现在超长的下拉条目在原地省略(展开列表仍显示完整内容),共用标签列也不再无限变宽,这条栏可以拖到实际需要的宽度
  • 设置术语统一: 主窗口与多端口对话框的"选项…"改为"设置…",终端内的连接/接收/发送设置措辞统一,设置面板中的"选项"分组按其实际内容改名为"日志行为"

修复

  • 等宽字体缺失导致的列错位: 收发视图指定的 Monaco 在 macOS 之外并不存在(此前只替换了 Windows 的 Consolas),缺失时会退化成比例字体,HEX 与时间戳列随之错位;现在两种字体缺失时都会替换为系统等宽字体
  • Microsoft Store 版本缺少在线服务: MSIX 打包此前会把账户登录、云同步与云控制台整体编译掉,商店版本因此没有这些功能,现已与直接下载的版本一致

English

Features

  • Local echo: Terminal passthrough now echoes 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 now 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 that does not advertise the gateway keeps working on the previous HTTP polling path

Interface

  • 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 it
  • 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

  • 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: MSIX packaging compiled out account sign-in, cloud sync and the cloud console entirely, so the Store build shipped without them. It now matches the direct download

Download

| Platform | File | | --- | --- | | Windows 10 1809 or later, 64-bit | serial_port_utility_*.exe | | macOS 12 or later, Apple Silicon | SerialPortUtility-*.dmg | | Linux x86_64 (Ubuntu 22.04 or later) | serial-port-utility-*-linux-x86_64.tar.gz |

First-launch notes for each platform — Gatekeeper on macOS, the runtime libraries on Linux — are in the README.

SHA-256 checksums are published with every build at alithon.com/downloads.

Documentation · Getting help · All releases

6.6.2

File
SerialPortUtility-v6.6.2.dmg
File size
26.8 MB
SHA-256
5d5ca1e1365c18ddd87ed8e5f838b10828c8e8128feaad98bc129810c45e1290

6.6.2 (2026-08-05)

中文版

新特性
  • X/YMODEM 文件传输: 在已建立的串口、TCP 或 RFC 2217 连接上直接收发文件,支持 XMODEM、XMODEM-CRC、XMODEM-1K、YMODEM 与 YMODEM-G。传输期间协议数据与普通终端数据隔离,非模态进度条实时显示文件名、进度、速率、剩余时间与重传次数;TCP 服务端可锁定指定客户端,远程固件升级无需再切换到其他终端工具
  • 单连接 RFC 2217 远程串口: 端口列表新增 RFC 2217 模式,可直接连接 Moxa NPort、ser2net 或另一台 SPU,并在同一连接中设置远端波特率、数据位、校验、停止位、流控和 DTR/RTS。默认保留设备服务器自身配置,只有用户明确接管后才下发参数;不支持 RFC 2217 的对端会给出警告并安全退化
  • RFC 2217 桥接客户端模式: 桥接可主动连接设备服务器,并把链路另一端的串口参数同步到远端串口;协商成功后一次性下发,之后只补发变化项,远端回执会记录在链路消息中但不会反向修改本机串口
  • 远程控制线状态: RFC 2217 连接可显示远端 CTS、DSR、RI 与 DCD 状态,让设备服务器后的串口握手状态也能直接观察
修复
  • RFC 2217 协商: 服务端现在会用 DO 回应客户端的 WILL——此前只对同时发送 DO 的客户端(如 pyserial)有效,只发 WILL 的客户端会一直等到超时并退化成普通 socket
  • RFC 2217 协商不再无限往复: 协商按选项记录状态,只有当回答会改变状态时才回复;此前两台互相对接的 SPU 会无休止地交换 WILL/DO
  • RFC 2217 兼容性: 按客户端与服务端角色分别处理 COM-PORT-OPTION 的拒绝响应,修复与 ser2net 协商后参数无法下发的问题
  • 网络连接终端直通: 修复终端键盘直通仅检查本地串口句柄、导致 TCP、UDP 与 RFC 2217 连接中键盘输入无效的问题
  • 桥接对端事件串台: 设备端出现新对端时不再向网络端发起协商

English

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 isolated from ordinary terminal data, while a non-modal progress bar reports the file, progress, rate, ETA and retry count. TCP servers can pin a selected client, so remote firmware updates no longer require 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 and setting remote baud rate, data bits, parity, stop bits, flow control and DTR/RTS in the same connection. The device server's existing configuration is preserved by default; parameters are sent only after the user explicitly takes control. Peers without RFC 2217 support warn and degrade safely
  • RFC 2217 bridge client mode: A bridge can dial a device server and synchronize its serial parameters from the link's other endpoint. Parameters are sent once negotiation succeeds and only changes are sent afterward; remote replies are recorded in the link messages but never applied back to the local serial port
  • Remote control-line status: RFC 2217 connections show the remote CTS, DSR, RI and DCD states, making hardware handshaking behind a device server directly observable
Fixes
  • RFC 2217 negotiation: The access server now answers a client's WILL with DO. It previously worked only with clients that also send DO, such as pyserial; a client that opens 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 negotiation with ser2net
  • Terminal passthrough on network connections: Fixed keyboard passthrough checking 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

Download

| Platform | File | | --- | --- | | Windows 10 1809 or later, 64-bit | serial_port_utility_*.exe | | macOS 12 or later, Apple Silicon | SerialPortUtility-*.dmg | | Linux x86_64 (Ubuntu 22.04 or later) | serial-port-utility-*-linux-x86_64.tar.gz |

First-launch notes for each platform — Gatekeeper on macOS, the runtime libraries on Linux — are in the README.

SHA-256 checksums are published with every build at alithon.com/downloads.

Documentation · Getting help · All releases

6.6.0

File
SerialPortUtility-v6.6.0.dmg
File size
38.8 MB
SHA-256
3bb23798605390676cec2562d6008d1ec891e16cb17c83d8d09a4e5914099f95

6.6.0 (2026-07-19)

中文版

新特性
  • 连接活动指示灯: 连接组新增可交互的 TX/RX 与控制线指示灯,实时闪烁反映收发与控制线状态;退役旧版控制线界面,改用指示灯呈现
  • 串口控制线: 新增串口控制线处理,设置对话框新增 Control Lines 标签页
  • Modbus 请求构建器: 工具菜单新增 Modbus 请求构建器
  • 逐项快捷设置: 所有分组均支持逐项快捷设置,快捷设置选择器移入设置对话框
  • 行结束符下拉框: 以 Line Ending 下拉框替代发送区的自动换行复选框
  • 恢复上次连接: 启动时自动恢复上次退出时打开的连接
  • 终端光标与真实发送统计: 终端模式新增光标显示,发送计数改为真实统计
界面改进
  • TCP/UDP 模式界面: 静默服务器错误弹窗,优化 TCP/UDP 模式界面
  • 工具栏: 重做日志记录与快捷设置的工具栏控件
  • 多处 UI 对齐与打磨: 统一接收 Auto FL 与发送 Loop 行、对齐 Line Ending 与 Append Checksum 下拉框等
修复与完善
  • 设置默认值: 补齐并保护设置面板中 Log/Display 相关默认值,不再保存空的 Rx/Tx 时间格式
  • .spu 会话加载: 以 toBool 解析 .spu 布尔标记,确保已保存的 true 值在重载后保留
  • 国际化: 中文界面将格式单选项标注为 Text 而非 ASCII
  • 日志目录: 打开日志文件前先创建日志目录

English

Features
  • Connection activity lamps: The connection group gains interactive TX/RX and control-line indicator lamps that blink to reflect live traffic and control-line state; the classic control-line UI is retired in favour of the lamps
  • Serial control lines: Added serial control line handling with a new Control Lines tab in the settings dialog
  • Modbus request builder: Added a Modbus request builder to the Tools menu
  • Per-field quick settings: Quick settings are now available per field across all groups, with the picker moved into the settings dialog
  • Line Ending combo: Replaced the send auto-feed checkbox with a Line Ending combo
  • Restore last connection: Automatically restores the connection that was open at last exit
  • Terminal caret & honest Tx metrics: The terminal mode shows a caret and reports real Tx counts
UI Improvements
  • TCP/UDP mode UI: Silenced the server-error popup and polished the TCP/UDP mode UI
  • Toolbar: Reworked the log-recording and quick-settings toolbar controls
  • UI alignment & polish: Unified the receive Auto FL and send Loop rows, aligned the Line Ending and Append Checksum combos, and more
Fixes & Enhancements
  • Settings defaults: Seeded and guarded the remaining Log/Display defaults in the settings panel; never store empty Rx/Tx time formats
  • .spu session loading: Parse .spu bool flags with toBool so saved true values survive reload
  • Internationalization: Label the format radios Text, not ASCII, in Chinese
  • Log directory: Create the log directory before opening the log file

3.9.1

File
SerialPortUtility_391.dmg
  • Fixed the setting file save problem
  • Updated support to multi port
  • Add checkable menu for auto restore last connection
  • Improved support for 4K and retina screen