A beautiful, professional cross-platform serial console application built with Electron and TypeScript. Monitor and communicate with serial devices through an elegant, modern interface.
- macOS
- Linux
- Windows
- Auto-detect serial ports - Automatically discovers all available serial ports
- Real-time communication - Send and receive data with instant feedback
- Beautiful UI - Modern, dark-themed interface with smooth animations
- High performance - Efficient data handling and rendering
- Baud Rate: Standard presets from 300 to 2,000,000 baud, plus custom rates
- Data Bits: 5, 6, 7, 8
- Stop Bits: 1, 2
- Parity: None, Even, Odd, Mark, Space
- Flow Control: Supported through serialport library
- ASCII Mode - Send and receive human-readable text
- HEX Mode - Work with raw hexadecimal data
- CR+LF Support - Optional line ending addition
- Local Echo - See what you're sending in the terminal
- Live Statistics - Track RX/TX bytes and connection uptime
- Timestamps - Optional timestamps for debugging
- Color-coded messages - Visual distinction between sent/received data
- Clear terminal - Fresh start with one click
- Auto-scroll - Toggle automatic scrolling
- Error highlighting - Instantly spot errors and warnings
npm installnpm run buildnpm startserial-console-pro/
├── src/
│ ├── main/ # Main process (Node.js environment)
│ │ └── index.ts # Serial port management & IPC handlers
│ ├── preload/ # Secure bridge between processes
│ │ └── preload.ts # Context bridge API exposure
│ └── renderer/ # Renderer process (Browser environment)
│ ├── index.html # Application UI structure
│ ├── renderer.ts # UI logic & serial communication
│ ├── types.d.ts # TypeScript type definitions
│ └── styles.css # Modern styling
├── dist/ # Compiled output
├── package.json
└── tsconfig.json
- Select Port: Choose your serial device from the dropdown
- Configure Settings: Choose a standard baud rate or select
Custom...to enter any positive whole-number baud rate, then set the remaining port parameters - Click Connect: Establish the connection
- Start Communicating: Send and receive data
ASCII Mode:
- Type your message in the input field
- Optionally enable "Add CR+LF" for line endings
- Press Enter or click Send
HEX Mode:
- Enter hexadecimal bytes (e.g.,
48 65 6C 6C 6F) - Spaces are optional and ignored
- Click Send to transmit
- Clear Terminal - Remove all messages
- Toggle Autoscroll - Enable/disable automatic scrolling
- Refresh Ports - Rescan for available serial ports
- Incoming data appears with a ← arrow in cyan
- Outgoing data appears with a → arrow in yellow
- Enable timestamps from the UI or application menu when you need them
- Color coding for errors, warnings, and info messages
This application follows Electron security best practices:
- Context Isolation - Renderer process is sandboxed
- No Node Integration - Renderer doesn't have direct Node.js access
- Preload Scripts - Safe IPC communication via contextBridge
- CSP Headers - Content Security Policy enforced
- Secure by Default - All dangerous features disabled
| Command | Description |
|---|---|
npm install |
Install dependencies |
npm run build |
Compile TypeScript and copy assets |
npm start |
Build and run the application |
npm run dev |
Quick development build and run |
- Electron - Cross-platform desktop framework
- TypeScript - Type-safe JavaScript
- SerialPort - Node.js serial port communication
- Material Icons - Icon font for UI elements
- Native CSS - Custom styling with CSS variables
Edit CSS variables in src/renderer/styles.css:
:root {
--accent-primary: #00d4ff; /* Primary accent color */
--accent-secondary: #7000ff; /* Secondary accent */
--bg-primary: #0f0f1e; /* Main background */
/* ... more variables */
}- Main Process (src/main/index.ts):
ipcMain.handle('custom:method', async (event, data) => {
// Your logic here
return result;
});- Preload (src/preload/preload.ts):
contextBridge.exposeInMainWorld('electronAPI', {
custom: {
method: (data: any) => ipcRenderer.invoke('custom:method', data)
}
});- Renderer (src/renderer/renderer.ts):
const result = await window.electronAPI.custom.method(data);- Embedded Development - Debug microcontrollers and IoT devices
- Hardware Testing - Communicate with serial peripherals
- Data Logging - Monitor and record serial data streams
- Protocol Analysis - Debug serial communication protocols
- Automation - Script serial device interactions
# Add user to dialout group (Linux)
sudo usermod -a -G dialout $USER
# Grant permissions (macOS)
# System will prompt for permission on first access- Close other applications using the serial port
- Disconnect and reconnect the USB device
- Check if another instance is running
# Clean install
rm -rf node_modules dist
npm install
npm run buildContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Clone your fork:
git clone https://github.com/miroslavpetrov/serial-console-pro.git - Create a feature branch:
git checkout -b feature/amazing-feature - Install dependencies:
npm install - Make your changes
- Build and test:
npm run build && npm start - Commit your changes:
git commit -m 'Add some amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
MIT License
Copyright (c) 2025 Serial Console Pro
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Built with Electron
- Serial communication via node-serialport
- Inspired by professional serial console applications
