LLCOM: a Windows serial tool that puts a Lua runtime between you and the port
🛠功能强大的串口工具。支持Lua自动化处理、串口调试、WinUSB、串口曲线、TCP测试、MQTT测试、编码转换、乱码恢复等功能
At a glance
- What is it?
- LLCOM is a C# serial port debugging tool for Windows whose distinguishing feature is a Lua runtime that can rewrite outgoing frames, run background tasks and timers, and call back into C# through xlua.
- Who is it for?
- Pick LLCOM when you are bringing up a device and repeating the same byte sequences by hand is costing you time, since the Lua layer turns a send-and-check loop into a script that runs on a timer. Do not pick it to learn from the source, because the project itself says the code was written for function first and is scattered, and it is a Windows tool with no other platform in the repository.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 44 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The Lua runtime is the reason to use this serial tool
LLCOM is described as a high freedom serial port debugging tool that can run Lua scripts. The rest of the feature list looks like any other terminal program: send and receive logs showing both hex values and the actual string, automatic saving of serial and Lua script logs with timestamps, automatic reconnection after the port drops, a quick send panel with ten independent pages of entries, selectable text encoding, a terminal mode where typed keys, including control combinations, are sent directly, and the option to hide sent data on its own. The difference is that the Lua engine sits inside the tool and can act on the traffic, run on its own schedule and reach out to the host system. Everything else on the list is a convenience around that one capability.
Scripts rewrite the bytes before they leave the port
The clearest demonstration is the send preprocessing hook. The data you type in the quick send area passes through a user script first, and the script returns the string to actually transmit. Appending a line ending is one line of code.
return uartData.."\r\n"Hexadecimal output is another.
return uartData:fromHex()The documentation explains that this second script turns input such as `30313233` into the bytes `0123`. A third example shows the pattern for anything structured, splitting the payload on a separator and encoding the pieces as JSON, so a payload like `a,b,c` is sent as `{"key1":"a","key2":"b","key3":"c"}`. The same preprocessing applies to the quick send panel, so a rule written once covers both the terminal and the buttons you click.
Scripts get tasks, timers and a publish and wait message bus
On the Lua side of the tool there is a standalone scripting area where you can run a serial test script on its own, with timer and coroutine task features ported from the Luat Task architecture of the 合宙 open source platform. The shape of the API is a message bus. A receive function publishes to a topic, a task waits for that topic, and another task loops on a timer.
--注册串口接收函数
uartReceive = function (data)
log.info("uartReceive",data)
sys.publish("UART",data)--发布消息
end
--新建任务,等待接收到消息再继续运行
sys.taskInit(function()
while true do
local _,udata = sys.waitUntil("UART")--等待消息
log.info("task waitUntil",udata)
local sendResult = apiSendUartData("ok!")--发送串口消息
log.info("uart send",sendResult)
end
end)
--1000ms循环定时器
sys.timerLoopStart(log.info,1000,"timer test")The interface documentation is published separately in LuaApi.md in the repository, so the full set of exposed functions is listed there rather than in the README.
xlua lets a script call C# and reach the network
The scripting layer is not sandboxed away from the host application, because it runs on xlua and can call C# interfaces directly. The example in the documentation creates a WebRequest, sets a content type, a timeout and a user agent, reads the response stream with a StreamReader and prints the body. The documentation states that with this you can complete most automated serial debugging operations. The practical implication is that a script is not limited to moving bytes. It can issue HTTP calls, read files, or do anything else the C# side can do, which turns the tool into a general purpose automation host as much as a serial terminal. It also means a script is a real risk on a shared machine, since it is not limited to the serial port.
Protocol testing and encoding repair are built into the same window
Alongside the serial work, the tool integrates TCP, UDP and SSL test servers and clients with IPv6 support, an MQTT test feature, a set of conversions between character encodings, and a feature for recovering garbled text when the encoding on the two sides disagrees. That combination is aimed at firmware bring-up, where the failure is often not the serial link but the encoding or the framing around it. The topic tags on the repository match the feature list, naming RS232, WinUSB, libusb, IPv6 support, the MQTT client, TCP and UDP client and server roles, and an SSL server. The serial monitor is the other half of that list, since it can watch traffic on ports used by other software, not only the port this tool owns.
The author warns you off reading the source
There is an unusual note in the open source section. The project says that in its early stage the goal was to implement features, so the code is quite scattered and is therefore not well suited for reading the source to learn, and that a refactor is planned when there is time. That is a direct warning against treating this repository as a C# sample project. The licence is Apache 2.0, with the request that anyone who borrows the code keep a link back to the project. Releases are published as numbered builds, with 1.1.3.9 dated 2025-01-25, 1.1.3.8 dated 2025-01-21 and 1.1.3.7 dated 2024-07-02, and the last push to the repository was on 2026-09-10. Distribution is through the Microsoft Store, a portable executable archive, and nightly builds produced by the project's own GitHub Actions workflow.
A serial port that vanishes is a known .NET problem
The known issues section records one bug with a history worth knowing about. On some conditions, for example when an Air720 module restarts, the COM port disappears and is not released, so it cannot be opened again and the only remedy was restarting the application. The entry traces this to a .NET framework bug that was reported to Microsoft upstream, and marks it as resolved in a specific commit. The entry survives in the documentation because the class of failure is common in embedded work, where a device resets and its USB serial adapter re-enumerates. The fix is in the current builds, but the symptom is worth recognising rather than debugging from scratch.
Editorial conclusion
Pick LLCOM when you are bringing up a device and repeating the same byte sequences by hand is costing you time, since the Lua layer turns a send-and-check loop into a script that runs on a timer. Do not pick it to learn from the source, because the project itself says the code was written for function first and is scattered, and it is a Windows tool with no other platform in the repository. Before you automate a port with it, read LuaApi.md for the exposed interface and test your scripts against the example that sends a carriage return and line feed, then check the hex conversion helper before you assume the string you typed is the string that goes out.
Frequently asked questions
How do I install LLCOM?
It is distributed through the Microsoft Store, as a portable executable archive linked from the project homepage, and as nightly snapshots produced by the repository's GitHub Actions workflow. All official versions are on the GitHub releases page.
Can LLCOM send data as hexadecimal?
Yes. A send preprocessing script can convert the typed string with `uartData:fromHex()`, so input such as 30313233 is sent as the bytes 0123.
Can a Lua script in LLCOM run on a timer?
Yes. The scripting layer has timer and coroutine task features, with a loop timer started through `sys.timerLoopStart`, and tasks created through `sys.taskInit` that can wait on messages published by the receive function.
Does LLCOM monitor serial traffic from other programs?
Yes, the tool includes a serial monitoring function that can watch the serial communication of other software, alongside the TCP, UDP, SSL and MQTT test features built into the same interface.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/chenxuuu-llcom)Was this useful?