A modern, high-performance serial port monitor for developers and makers.
xSerial is a native serial port monitoring application built with Tauri 2 (Rust) and React 19 (TypeScript). It replaces outdated terminal emulators with an efficient solution optimized for embedded development workflows.
Status: Production Ready (v1.0) Bundle Size: 8-12 MB | Memory: 30-60 MB idle Platforms: macOS (Intel/ARM64), Windows (x64), Linux (x64)
- Performance: Handle 2M baud without UI lag or data loss
- Cross-Platform: Identical experience on macOS, Windows, Linux
- Zero Friction: Common tasks accessible in 1-2 clicks
- Professional: Auto-logging, export, firmware flashing built-in
- Port Detection: Auto-scan USB CDC, FTDI, CH340, CP210x devices
- Baud Rate: 300 - 2,000,000 bps with custom values
- Flow Control: RTS-CTS, XON-XOFF, or none
- Auto-Reconnect: Intelligent reconnection on device unplug/plug
- Multi-Window: Independent serial connections (Cmd/Ctrl+N)
- Multi-Format: ASCII, HEX, Binary, Decimal views
- Timestamps: Millisecond precision timestamps
- Line Endings: CR, LF, CRLF, None
- Auto-Scroll: Toggle with Space key
- Search: Regex-based text search (Cmd/Ctrl+F)
- High Performance: Virtualized rendering for 100k+ messages
- Integrated Flashing: Flash firmware directly from xSerial
- Custom Commands: Configure flash commands per project
- Template Support: Use
{port}and{baud}placeholders - Real-time Output: View flash progress in terminal
- Auto-Logging: Automatic session recording to file
- Export Formats: .txt, .csv, .log, .bin (raw bytes)
- Selective Export: Export filtered or search-result data
- Dark/Light Theme: Toggle with persistence
- Native Title Bar: Platform-specific window chrome
- Settings Sidebar: Collapsible quick-access panel
- Keyboard Navigation: Full shortcut support
| Metric | Target | Achieved |
|---|---|---|
| Throughput | 10 MB/s | ✅ |
| Render Latency | <100ms | ✅ |
| Memory (100k msgs) | <100 MB | ✅ |
| CPU (steady state) | <5% | ✅ |
| Startup | <2 seconds | ✅ |
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | xSerial_x.x.x_aarch64.dmg |
| macOS (Intel) | xSerial_x.x.x_x64.dmg |
| Windows | xSerial_x.x.x_x64-setup.exe |
| Linux | xSerial_x.x.x_amd64.deb |
| Platform | Architecture | Status |
|---|---|---|
| macOS | arm64, x64 | ✅ Supported |
| Windows | x64 | ✅ Supported |
| Linux | x64 | ✅ Supported |
- Connect Device: Plug in your serial device (Arduino, ESP32, etc.)
- Select Port: Choose the port from dropdown (e.g.,
/dev/cu.usbmodem*) - Set Baud Rate: Match your device's baud rate (default: 115200)
- Connect: Click Connect button or auto-connect on port selection
- Type message in the input field at the bottom
- Press Enter to send
- Select line ending (LF, CR, CRLF) in Settings if needed
- Open Flasher: Press
Cmd/Ctrl+U - Set Workspace: Select your project folder
- Configure Command: Enter flash command with placeholders:
pio run -e myenv -t upload --upload-port {port} - Flash: Click Flash button - connection auto-disconnects during flash
| Tool | Command Template |
|---|---|
| PlatformIO | pio run -e <env> -t upload --upload-port {port} |
| Arduino CLI | arduino-cli upload -p {port} -b <board> <sketch> |
| esptool | esptool.py --port {port} --baud {baud} write_flash 0x0 firmware.bin |
| avrdude | avrdude -p <mcu> -c <programmer> -P {port} -U flash:w:firmware.hex |
| Format | Example | Use Case |
|---|---|---|
| ASCII | Hello World |
Human-readable text |
| HEX | 48 65 6C 6C 6F |
Binary protocols |
| Binary | 01001000 01100101 |
Bit-level analysis |
| Decimal | 72 101 108 108 111 |
Numeric data |
| Shortcut | Action |
|---|---|
Cmd/Ctrl + N |
New Window |
Cmd/Ctrl + U |
Firmware Flasher |
Cmd/Ctrl + F |
Search |
Cmd/Ctrl + L |
Clear Terminal |
Cmd/Ctrl + D |
Disconnect |
Cmd/Ctrl + , |
Settings |
Space |
Toggle Auto-Scroll |
Enter |
Send Message / Find Next |
Shift + Enter |
Find Previous |
Escape |
Close Search |
- Framework: Tauri v2 (Rust backend + Web frontend)
- Frontend: React 19 + TypeScript 5
- Styling: Tailwind CSS 3 + Radix UI
- State: Zustand (30Hz batching, 100k circular buffer)
- Serial: serialport-rs + tokio async I/O
- Virtualization: react-window
- Node.js 18+
- pnpm 10+
- Rust toolchain (rustup)
# Clone repository
git clone https://github.com/xthanhn91/xSerial.git
cd xSerial
# Install dependencies
pnpm install
# Run development server
pnpm tauri:dev
# Build for production
pnpm tauri:buildxSerial/
├── src/ # React frontend
│ ├── components/
│ │ ├── ui/ # Radix UI components
│ │ ├── terminal/ # Terminal display
│ │ ├── connection/ # Port selection
│ │ ├── firmware/ # Firmware flasher
│ │ └── settings/ # Settings sidebar
│ ├── hooks/ # Custom React hooks
│ ├── stores/ # Zustand stores
│ └── lib/ # Utilities
├── src-tauri/
│ ├── src/
│ │ ├── lib.rs # Tauri setup & menus
│ │ ├── serial/ # Serial port module
│ │ └── commands/ # IPC commands + flash
│ ├── Cargo.toml
│ └── tauri.conf.json
├── docs/ # Documentation
└── .github/workflows/ # CI/CD
| Document | Description |
|---|---|
| Project Overview | Vision, requirements, roadmap |
| Codebase Summary | File structure, data flows |
| Code Standards | Conventions, patterns, guidelines |
| System Architecture | Technical architecture, IPC |
| Design Guidelines | UI/UX design system |
| Tech Stack | Technology decisions |
- Fixed: Clear terminal now also clears export data (previously export included cleared messages)
- Initial release
- Core serial monitoring with multi-format display
- Multi-window support
- Firmware flashing integration
- Dark/Light theme
- Auto-logging and export
- Configurable message limit (prevent terminal lag)
- Protocol analyzers (Modbus, CAN)
- Session recording/playback
- Advanced filtering
- Plugin system
- Remote monitoring
- Performance dashboards
Thành Thỏ (@xthanhn91)
MIT License - see LICENSE for details.
