Releases: QuitOperation/otcat
Releases · QuitOperation/otcat
Release list
v1.0.0
🚀 otcat v1.0.0 — Initial Release: The Netcat for Industrial I/O
We are thrilled to announce the official v1.0.0 release of otcat (otc) — a fast, zero-dependency CLI tool built in Go that brings Unix pipe philosophy to industrial automation and PLC register inspection.
Read, write, and continuously watch PLC registers directly from your terminal, CI pipelines, or Python scripts without giant vendor SCADA software.
⚡ Highlights & Core Features
- 🔌 Complete Modbus TCP Engine: Full support for Coils (FC01/05/15), Discrete Inputs (FC02), Holding Registers (FC03/06/16), and Input Registers (FC04).
- ⚡ Short Binary Alias (
otc): Includes bothotcatand the shortotcbinary alias (ncis tonetcatasotcis tootcat). - 🛡️ Write Safety Gate: Built-in safety guards requirement (
--confirmflag or interactive confirmation prompt) before mutating any physical PLC register. - 🔁 Continuous Watch Loop: Stream real-time register telemetry with custom polling intervals (
--watch --interval 500ms). - 📊 Unix Pipe Ready: Outputs structured newline-delimited JSON, CSV, or Raw numbers — perfect for
jq,awk,grep, or logging stacks. - 🐍 Official Python Library: Typed Python client (
pip install otcat) with Pandas DataFrame support & FastAPI WebSockets helpers. - 📦 Complete Multi-Platform Distribution: Pre-built static binaries for 24 target architectures across Linux, macOS, and Windows.
- 🛠️ Included Simulation Tools: Bundled with
otcat-mockplc(Modbus TCP server simulator) andotcat-latencyprobe(benchmarking tool).
📦 Quick Installation
Linux Package Managers
# Debian / Ubuntu (APT)
sudo apt install -y otcat
# Fedora / RHEL / CentOS (DNF)
sudo dnf install -y otcat
# Alpine Linux (APK)
apk add otcatDocker Container
docker pull ghcr.io/quitoperation/otcat:latestPython Package (PyPI)
pip install otcatGo Toolchain (Go 1.22+)
go install github.com/QuitOperation/otcat/cmd/otc@latest
go install github.com/QuitOperation/otcat/cmd/otcat@latestRaw Binary Archives
Download the appropriate .tar.gz or .zip archive for your OS and CPU architecture from the Assets section below.
💡 Quick Examples
# 1. Read holding register 40001 as structured JSON
otcat --modbus 192.168.1.10:502 --read holding:40001 --json
# 2. Watch telemetry every 500ms using the 'otc' alias and filter with awk
otc --modbus 192.168.1.10:502 --watch holding:40001 --interval 500ms --raw | awk '{print $1*0.1}'
# 3. Write a setpoint safely with explicit confirmation
otcat --modbus 192.168.1.10:502 --write holding:40001 --value 100 --confirm
# 4. Stream values directly from stdin into a PLC
cat setpoints.txt | otcat --modbus 192.168.1.10:502 --write holding:40001 --from-stdin --confirm📊 Protocol Matrix
| Protocol | Driver Flag | Status | Supported Registers & Function Codes |
|---|---|---|---|
| Modbus TCP | --modbus |
100% Complete | FC01, FC02, FC03, FC04, FC05, FC06, FC15, FC16 |
| EtherNet/IP | --eip |
Roadmap | CLI stub registered |
| S7comm | --s7comm |
Roadmap | CLI stub registered |
| BACnet/IP | --bacnet |
Roadmap | CLI stub registered |
🛡️ Exit Codes & Verification
All release binaries in otcat_1.0.0_checksums.txt are verified with SHA-256 signatures:
| Code | Status | Description |
|---|---|---|
0 |
Success | Query or write completed successfully |
1 |
Usage Error | Invalid flags or register spec |
2 |
Connection Error | Network timeout / connection refused |
3 |
Protocol Error | PLC returned Modbus Exception |
4 |
Write Aborted | Safety confirmation gate declined |
5 |
I/O Error | Broken pipe |
🔗 Useful Links
- 🌐 Live Website: quitoperation.github.io/otcat
- 📚 Documentation: docs/
- 🐍 PyPI Package: pypi.org/project/otcat
- 🛡️ Security Policy: SECURITY.md
Full Changelog: https://github.com/QuitOperation/otcat/commits/v1.0.0