A desktop serial monitor for embedded development — built with Tauri 2, React, and Rust. Targets Teensy, Arduino, ESP32, and any other device that communicates over a serial port.
- Real-time serial receive display, virtualized for high-throughput streams (up to 1.5 Mbaud+)
- Send text or raw hex bytes with configurable newline (LF / CRLF / CR / none)
- Timestamps per line, auto-scroll, manual freeze
- Sent-message history side panel
- Secondary monitor panel for side-by-side channel views
Auto-discovers graph channels from serial output — no configuration needed. Any line matching key: value1, value2, ... creates or updates a channel named key. Supports four panel types per channel:
| Panel type | Use case |
|---|---|
| Time series | Waveforms, sensor readings over time |
| XY scatter | Lissajous figures, parametric curves |
| FFT | Frequency spectrum from a continuous signal |
| Bar | Live bar chart for slow-changing values |
- Configurable time window (1 s – 60 s)
- Per-series color, Y-axis limits, enable/disable
- Pause, zoom (X / Y / both), pan, reset
- Sync zoom across all panels
- Save serial commands with a name, payload (text or hex), and group
- Drag-and-drop reorder within and across groups
- Run All executes an entire group in sequence, with optional
delaysteps between commands - Select a group to target where new commands are added
- Light / dark / auto theme
- Memory usage side panel (lines buffer + plot buffer stats)
- Full keyboard shortcut system (press
⇧?to see all shortcuts) - Persistent panel state across view switches
Print lines from your firmware in this format:
graphName: series1=value, series2=value
or, for a single series:
graphName: value
Examples:
// Single value → one series
Serial.print("temperature: ");
Serial.println(temp, 2);
// Multiple values → multiple series on the same graph
Serial.print("imu: x="); Serial.print(ax);
Serial.print(", y="); Serial.print(ay);
Serial.print(", z="); Serial.println(az);
// Lines without a "key: value" pattern are shown in the monitor but ignored by the plotter
Serial.println("System OK");Lines starting with # are treated as comments. The = sign in values is optional — key: 1.0, 2.0 and key: a=1.0, b=2.0 both work.
See test.ino for a full working example covering all four panel types.
Pre-built binaries are attached to each GitHub Release.
| Platform | File to download |
|---|---|
| macOS (Apple Silicon + Intel) | Serial Monitor_*_universal.dmg |
| Windows 64-bit | Serial Monitor_*_x64-setup.exe |
These builds are unsigned. Both platforms will show a one-time security warning.
After opening the .dmg and dragging the app to Applications, macOS may refuse to open it.
Option 1 — right-click method (easiest):
- Right-click
Serial Monitor.appin Applications - Click Open
- Click Open again in the dialog
Option 2 — remove quarantine flag:
xattr -dr com.apple.quarantine "/Applications/Serial Monitor.app"Then open normally.
When you run the installer, Windows may show "Windows protected your PC":
- Click More info
- Click Run anyway
Building locally avoids all signing/quarantine issues — macOS and Windows treat locally-built apps as trusted.
All platforms:
macOS only:
xcode-select --installWindows only: Install the Microsoft C++ Build Tools. During setup, select Desktop development with C++.
git clone https://github.com/seanboerhout/serial-monitor.git
cd serial-monitor
npm install
npm run tauri buildThe first build takes 5–15 minutes (Rust compile). Subsequent builds are much faster.
macOS:
src-tauri/target/release/bundle/dmg/Serial Monitor_*.dmg
Open the .dmg and drag to Applications. Or use the .app directly from bundle/macos/.
Windows:
src-tauri\target\release\bundle\nsis\Serial Monitor_*_x64-setup.exe
src-tauri\target\release\bundle\msi\Serial Monitor_*_x64_en-US.msi
Run either installer. The NSIS .exe is a standard installer wizard; the .msi is for enterprise/group policy deployment.
Press ⇧? inside the app to see all shortcuts. Common ones:
| Shortcut | Action |
|---|---|
⇧M |
Monitor view |
⇧P |
Plotter view |
⇧D |
Commands view |
⇧C |
Connect / disconnect |
⇧X |
Clear display |
⇧H |
Toggle sent-history panel |
⇧I |
Toggle memory panel |
⇧? |
Toggle shortcut hints |
Esc |
Close open panels |
npm install
npm run tauri devThe dev server runs at http://localhost:1420 with hot-reload for the frontend. Rust changes trigger a recompile automatically.