Industrial Protocol Simulator Server
"Spawn protocols at will"
Mabinogion is an industrial protocol simulator server written in Rust. It creates virtual devices that speak real industrial protocols, allowing you to develop and test client software without physical hardware.
- No Hardware Required: Simulate PLCs, sensors, and building automation systems
- Realistic Testing: Virtual devices respond exactly like real equipment
- Scale Testing: Spawn 10,000+ devices to stress test your client
- Chaos Engineering: Inject network delays, packet loss, and device failures
Mabinogion comes from Welsh mythology — ancient tales of magical forges where legendary weapons were crafted.
Your protocol clients are forged here too.
And yes, I spent way too many hours playing Mabinogi back in the day.
# Start a Modbus server with 10 virtual devices
mabi modbus --port 5020 --devices 10
# Connect with any Modbus client
mbpoll -a 1 -r 1 -c 10 -p 5020 127.0.0.1cargo install mabi-cliAll protocols, scenario engine, and chaos engineering built-in.
[dependencies]
mabi-core = "1.0" # Core abstractions (required)
mabi-modbus = "1.0" # Modbus TCP/RTU (optional)
mabi-opcua = "1.0" # OPC UA (optional)
mabi-bacnet = "1.0" # BACnet/IP (optional)
mabi-knx = "1.0" # KNXnet/IP (optional)
mabi-scenario = "1.0" # Scenario engine (optional)
mabi-chaos = "1.0" # Chaos engineering (optional)mabi modbus --port 502 --devices 10 --points 100
mabi opcua --port 4840 --nodes 1000
mabi bacnet --port 47808 --instance 1234
mabi knx --port 3671 --address 1.1.1
mabi run scenario.yaml --time-scale 2.0 --duration 10mAll detailed documentation lives in the docs/ directory. Each module has a comprehensive guide covering architecture, API reference, configuration, and usage examples.
| Protocol | Use Case | Key Features | Guide |
|---|---|---|---|
| Modbus TCP/RTU | Factory automation, PLCs, sensors | TCP/RTU dual mode, handler registry, sparse registers, multi-unit, fault injection pipeline (11 types), RTU timing faults | docs/modbus-simulator |
| OPC UA | Industrial IoT, SCADA systems | Address space, subscriptions, historical access, 22+ aggregates, event system, method calls, browse paths, security policies | docs/opcua-simulator |
| BACnet/IP | Building automation (HVAC, lighting) | 14 object types, 17+ confirmed services, COV subscriptions, priority array, BBMD, APDU segmentation, TSM, alarm/event services, file access, device control | docs/bacnet-simulator |
| KNXnet/IP | Smart home/building systems | Tunneling with 7-state FSM, sequence validation, 25+ datapoint types, flow control filter chain, heartbeat fault injection, group value cache, metrics/diagnostics | docs/knx-simulator |
| Module | Description | Key Features | Guide |
|---|---|---|---|
| Core | Common abstractions and utilities | Device trait, SimulatorEngine, factory system, metrics, capabilities, lifecycle | docs/core |
| Scenario Engine | Declarative time-based simulation | 9 pattern types, event triggers/actions, time scaling, YAML schema, replay, 5 BACnet templates | docs/scenario-engine |
| Chaos Engine | Fault injection framework | Network/device/protocol faults, latency models, scheduler, middleware, BACnet-specific faults (40+ modes) | docs/chaos-engine |
| CLI | Command-line interface | All commands, global options, output formats, exit codes, validation | docs/cli |
| Crate | crates.io | docs.rs |
|---|---|---|
| mabi-core | docs.rs | |
| mabi-modbus | docs.rs | |
| mabi-opcua | docs.rs | |
| mabi-bacnet | docs.rs | |
| mabi-knx | docs.rs | |
| mabi-scenario | docs.rs | |
| mabi-chaos | docs.rs | |
| mabi-cli | docs.rs |
| Metric | Target |
|---|---|
| Concurrent Devices | 10,000+ |
| Data Points | 1,000,000+ |
| Message Throughput | 100,000 msg/s |
| Memory (10K devices) | < 2GB |
| Latency (p99) | < 10ms |
mabinogion/
├── crates/
│ ├── mabi-core/ # Core abstractions and utilities
│ ├── mabi-modbus/ # Modbus TCP/RTU simulator
│ ├── mabi-opcua/ # OPC UA server simulator
│ ├── mabi-bacnet/ # BACnet/IP simulator
│ ├── mabi-knx/ # KNXnet/IP simulator
│ ├── mabi-scenario/ # Scenario engine
│ ├── mabi-chaos/ # Chaos engineering
│ └── mabi-cli/ # CLI (mabi)
├── docs/ # Detailed documentation
├── scenarios/ # Scenario files
└── tests/ # Integration/E2E tests
cargo build --workspace # Build
cargo test --workspace # Full test suite
cargo test --test integration_tests # Integration tests
cargo test --test e2e_protocol_tests # E2E tests
cargo bench # BenchmarksRequirements: Rust 1.75+, Tokio async runtime
Licensed under the Apache License, Version 2.0.
"Your protocols are forged in the crucible of mythology"
