📟 Free · Windows 10/11💾 No install · 8 MB🌐 Rust open source (GitHub)

Zero-install portable
serial terminal

Download → double-click → done. A single 8.25 MB .exe handles serial monitoring, HEX send / receive, and ASCII ↔ HEX conversion. No installer, no runtime, no admin rights. Built for Arduino, ESP32, modems, industrial sensors.

Windows 10 / 11 (64-bit) · No runtime prerequisites · Single .exe · Unzip and double-click. All releases

▶ Live Demo — serial monitor & HEX I/O

An interactive in-browser recreation of the real app flow: connect a port → send / receive text → switch to HEX → save log — all in one screen. Get a feel for it before you download.

The actual app

CNTerminal main window — serial I/O console with HEX conversion

PORT and BAUD on top, console on the left, send panel on the right, HEX and DTR toggles in the second row. First send / receive happens within a minute of first launch.

Why this exists — the gaps in PuTTY & Arduino IDE

Existing tools each have their limits. PuTTY makes you reopen its config dialog every session and is awkward with HEX; the Arduino IDE serial monitoris unusable during a compile and doesn't do HEX; Tera Term still needs an installer; professional serial analyzers tend to be paid.

CNTerminal is a single .exe built with Rust + egui. Unzip and run, drop it on a USB stick and double-click on any PC. Every setting and log lives alongside the .exe, so moving machines doesn't lose state.

Who it's for

  • Embedded developers — Arduino, ESP32, STM32, microcontroller debugging. HEX protocols and checksum verification
  • Makers & students — first serial-comm lesson through final exhibits. Run from a USB stick when school PCs deny installs
  • Automation / test engineers — RS-232 / 485 industrial gear, PLCs, instrumentation. Save Log for regression runs
  • Field engineers— plug a USB stick into the customer's machine, double-click, debug. No install approval needed
  • Team sharing — drop the .exe on a shared network folder; the whole team uses the same environment

Download & first launch

Grab CNTerminal_v0.1.0.exe from the button above or GitHub Releases. About 8.25 MB. Drop it in any folder and double-click.

  • Windows 10 / 11 (64-bit)
  • No admin rights — runs from user folders or USB sticks
  • No .NET / VC++ runtimes / WebView2 — Rust static build, all self-contained
  • USB-serial chipset drivers (CH340 / CP210x / FTDI) are usually auto-installed by Windows. If your port doesn't show up, install the vendor driver first

Windows SmartScreen may say “Windows protected your PC”. Expected for an unsigned free .exe — click More info → Run anyway to continue.

SHA-256 integrity: 32cb1469db828f115d64ffe3c0d88042df31787804e7368cfdd4e364a49e9f5c
PowerShell: Get-FileHash CNTerminal_v0.1.0.exe

5-minute walkthrough — first I/O

Step 1 — Pick a port and baud rate

From the top PORT drop-down, pick your device port (↻ to refresh). BAUD takes presets (9600–921600) or any custom value typed in (e.g. 500000). Hit Connect; the LED turns green and RX prints in real time.

Step 2 — Send + WILL SEND preview

Type a command in the SEND multiline box and hit Enter (line break is Shift+Enter). Pick line terminator (None / LF / CR / CRLF) in the ENDING combo. The WILL SEND preview underneath shows exactly what bytes will hit the wire — catch typos before they go out:

WILL SEND   (5 B)
ASCII  A00\r\n
HEX    41 30 30 0D 0A

Step 3 — HEX mode & RX SPLIT

Toggle HEX in the second row → console switches to hex dump view. RX SPLIT in ms (e.g. 2) auto-breaks a new line whenever no byte arrives for that long — essential for binary frames without a natural delimiter (STX/ETX).

Step 4 — Save Log & send history

Save Log writes the current console to a timestamped .txt. The ↑↓ History on the send box cycles through the last 50 commands for fast repeats.

💡 ESP32 auto-reset avoidance: toggle DTRto off (gray) in the second row. The DTR line then stays put across connect / disconnect and the board doesn't reset.

Use cases

Arduino serial monitoring

Lines like Serial.println("temp=25.3") land in the console with a per-line timestamp. Auto-scroll keeps you at the bottom; Save Log preserves a session. Unlike the Arduino IDE serial monitor, it stays open while you re-flash.

HEX protocols (STX/ETX, checksums)

Industrial sensors and PLCs that wrap payloads in 0x02 ... 0x03 STX/ETX binary frames? HEX mode plus RX SPLIT 2 ms is the recipe. Sending raw bytes is just 02 41 35 30 30 03 into the HEX send box.

ESP32 / Wi-Fi module debugging

When debugging AT commands or boot logs, flip DTR off so connect / disconnect doesn't reset the board mid-stream. Uninterrupted log capture from power-on.

Customer-site / on-call debugging

Don't want to drag a laptop into a customer's factory? A USB stick is enough — plug into their PC, double-click, debug. No admin approval, no install hand-off form.

Under the hood — Rust + egui, statically linked .exe

CNTerminal is a native desktop app built on Rust + egui. Serial I/O goes through the serialport crate, and an mpsc channel decouples the UI thread from a dedicated reader thread so bursty RX doesn't stutter the UI.

[UI thread (egui)]
  └─ send: tx → channel
        ▼
[send channel (mpsc)]
  └─ writer thread: serialport.write()
        ▼
[serial port]
        ▲
[reader thread (50 ms timeout)]
  └─ serialport.read() → channel
        ▼
[UI thread (egui)]
  └─ console refresh (20 ms batch)

Full source on GitHub — build, fork, redistribute freely.

Key features

FeatureNotes
ASCII ↔ HEX converterBuilt-in popup, instant two-way conversion, escape sequences (\n, \r, \t, \xNN)
WILL SEND previewASCII + HEX shown side-by-side before the bytes hit the wire
DTR toggleStop ESP32 / Arduino from auto-resetting; capture uninterrupted boot logs
Send history (50)Cycle prior commands with ↑↓
5,000-line auto-trimMemory-bounded for long monitoring sessions
Auto-saved configcnterminal.cfg — plain key=value, travels with the .exe
Save LogHH:MM:SS.mmm timestamp prefix .txt — feed into regression diff or QA reports

FAQ

Q. Why no installer?

It's a single .exe — unzip and run. Settings and logs live next to the .exe as plain text, so you can put the whole thing on a USB stick and use it on any machine without admin rights or install approvals.

Q. SmartScreen or antivirus blocks it.

Expected for an unsigned free .exe. Click More info → Run anyway. Or build from source — it's a stock Rust cargo build, one command.

Q. My ESP32 resets every time I connect.

ESP32 and Arduino reset on DTR line changes. To avoid unintentional resets while debugging, toggle DTR off (gray)in the second toolbar row. The DTR line then stays put across connect / disconnect and the board doesn't reset.

Q. Korean / non-ASCII text shows as garbage.

If your device sends EUC-KR or another legacy encoding, the console will show garbage. Either change the firmware to UTF-8 output, or switch the console to HEX mode and inspect the bytes directly.

Q. What format are the saved logs?

Save Log writes the current console to a .txt file with HH:MM:SS.mmm timestamp prefixes — easy to grep and to feed into regression / QA reports.

Q. What about the license?

Full source on GitHub — build, modify, redistribute freely. No fee for personal or commercial use. See the LICENSE file in the repo for exact terms.

📟 Free · Open source · No ads

Made so that “debug a serial device” doesn't require an install dialog every time. One USB stick, every machine, from Arduino to industrial PLC.

Source & issues: github.com/cflab2017/tool_serial_terminal_Rust

Found this useful? ❤️ Support the maker

Any amount helps. Sent directly with no ad or processing fees.