Cross-platform Modbus simulation suite — includes ModbusSlave and ModbusMaster, built as Tauri 2 + Vue 3 desktop apps. Supports TCP, TCP+TLS, RTU, ASCII, and RTU-over-TCP transports.
Pre-built Tauri installers are attached to every GitHub Release:
| Platform | Installer formats |
|---|---|
| macOS (Apple Silicon / Intel) | .dmg |
| Windows (x64) | .exe (NSIS) / .msi |
| Linux (x64) | .deb / .AppImage / .rpm |
Note: As of v0.16, the native egui edition (assets with the
-egui-suffix) is discontinued. Please migrate to the Tauri installers listed above.
- Multi-Transport Support — TCP, TCP+TLS, RTU (serial), ASCII (serial), RTU-over-TCP
- Modbus TCP over TLS — TLS 1.2+ encryption, PEM and PKCS#12 certificate formats, optional mTLS (mutual authentication with client certificates)
- Multiple Slave Devices — Create connections on any port, add multiple slave devices per connection
- Four Register Types — Coils (FC01), Discrete Inputs (FC02), Holding Registers (FC03), Input Registers (FC04)
- Full Protocol Support — Read (FC01-04), Write Single (FC05/06), Write Multiple (FC15/16), with Modbus exception codes
- Register Table — Address search/filter, inline value editing, Ctrl/Shift multi-select, virtual scrolling (20,000+ registers), multi-format display (Auto / U16 / I16 / Hex / Bin / Float32 with 4 byte orders)
- Default Initialization — New slaves pre-fill addresses 0-20,000 across all four register types, batch-add supports up to 50,000 entries per operation
- Value Panel — Multi-format display: Signed/Unsigned/Hex/Binary (16-bit), Long/Float (32-bit), Double (64-bit), all byte orders (AB CD / CD AB / BA DC / DC BA)
- Dynamic Data Sources — Simulate changing register values: Fixed, Random, Sine wave, Sawtooth, Triangle, Counter, CSV playback
- Communication Log — Real-time TX/RX logging with search, direction/function-code filtering, and CSV export
- Project Files — Save/load complete configurations as
.modbusprojfiles for quick scenario switching - Serial Port Support — Auto-detect system serial ports, configurable baud rate, data bits, stop bits, parity
- Multi-Transport Support — TCP, TCP+TLS, RTU (serial), ASCII (serial), RTU-over-TCP
- Modbus TCP over TLS — TLS 1.2+ encryption, PEM and PKCS#12 certificate formats, accept-invalid-certs mode for self-signed certificate testing
- Scan Groups — Configure periodic polling with custom intervals per register group, per-group slave ID override
- Device Discovery — Slave ID scan (1-247), register address scan, auto-add discovered devices to scan groups
- Multi-format Data View — Unsigned, Signed, Hex, Binary, Float32 (AB CD / CD AB), virtual scrolling
- Write Operations — Write single/multiple coils and registers (FC05/06/15/16)
- Communication Log — TX/RX logging with search/filter (direction, function code, text)
- Auto-Reconnect — Configurable reconnection with exponential backoff (1s → 2s → 4s → ... → 30s max)
- Project Files — Save/load connection and scan group configurations
- Connection-on-Scan — Auto-prompt to scan devices after successful connection
- Unified Error System — Structured
ModbusErrorwith categorized error types (connection/protocol/application), serialized to JSON for frontend parsing - Shared Vue Components — Common composables and types shared between both Tauri apps via the
shared-frontendnpm workspace
| Code | Function | Slave (Server) | Master (Client) |
|---|---|---|---|
| FC01 | Read Coils | Read | Read/Poll |
| FC02 | Read Discrete Inputs | Read | Read/Poll |
| FC03 | Read Holding Registers | Read | Read/Poll |
| FC04 | Read Input Registers | Read | Read/Poll |
| FC05 | Write Single Coil | Write | Write |
| FC06 | Write Single Register | Write | Write |
| FC15 | Write Multiple Coils | Write | Write |
| FC16 | Write Multiple Registers | Write | Write |
| Mode | Transport | Framing | Use Case |
|---|---|---|---|
| TCP | TCP/IP socket | MBAP header | Standard Modbus TCP |
| TCP+TLS | TLS over TCP | MBAP header | Secure Modbus TCP (TLS 1.2+) |
| RTU | Serial port | Slave ID + CRC-16 | RS-485/RS-232 devices |
| ASCII | Serial port | : + hex + LRC + CRLF |
Legacy serial devices |
| RTU-over-TCP | TCP/IP socket | Slave ID + CRC-16 | Industrial gateways |
- Core (Rust): tokio-modbus + tokio-serial
- TLS: native-tls (system TLS: macOS Security.framework, Linux OpenSSL, Windows SChannel)
- Tauri UI: Vue 3 + TypeScript + @tanstack/vue-virtual on Tauri 2
- Serial: serialport for port enumeration
ModbusSim/
├── crates/
│ ├── modbussim-core/ # Core library: protocol, transport, registers, logging
│ │ ├── src/
│ │ │ ├── slave.rs # Slave connection (TCP/RTU/ASCII/RtuOverTcp dispatch)
│ │ │ ├── master.rs # Master connection with multi-transport support
│ │ │ ├── frame.rs # RTU/ASCII frame encode/decode
│ │ │ ├── pdu.rs # Modbus PDU request/response parsing
│ │ │ ├── transport.rs # Transport enum, serial config, TLS config, port enumeration
│ │ │ ├── mbap.rs # MBAP frame encoding/decoding (for TLS mode)
│ │ │ ├── tls_slave.rs # TLS-enabled Modbus TCP slave server
│ │ │ ├── tls_master.rs # TLS-enabled Modbus TCP master client
│ │ │ ├── register.rs # Register types, encoding/decoding
│ │ │ ├── data_source.rs # Dynamic data sources for register simulation
│ │ │ ├── reconnect.rs # Reconnect policy with exponential backoff
│ │ │ ├── error.rs # Unified ModbusError enum
│ │ │ ├── project.rs # .modbusproj file save/load/migrate
│ │ │ ├── log_collector.rs # Thread-safe log ring buffer
│ │ │ └── ...
│ ├── modbussim-app/ # Tauri app — ModbusSlave
│ └── modbusmaster-app/ # Tauri app — ModbusMaster
├── shared-frontend/ # Shared Vue composables and components (Tauri UI)
│ └── src/
│ ├── composables/ # useDialog, useValueFormat, useLogPanel, useLogFilter, useErrorHandler
│ ├── components/ # AppDialog
│ └── types/ # Shared TypeScript types
├── frontend/ # Vue 3 frontend — ModbusSlave
└── master-frontend/ # Vue 3 frontend — ModbusMaster
# Install frontend dependencies (npm workspaces)
npm install
# ModbusSlave (dev mode)
cd crates/modbussim-app && cargo tauri dev
# ModbusMaster (dev mode)
cd crates/modbusmaster-app && cargo tauri devcd crates/modbussim-app && cargo tauri build
cd crates/modbusmaster-app && cargo tauri buildcargo test --workspaceSee CHANGELOG.md for the full version history, or browse the
Releases page for
downloadable binaries.
MIT