Skip to content

Releases: QuitOperation/otcat

Release list

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 00:31

🚀 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 both otcat and the short otc binary alias (nc is to netcat as otc is to otcat).
  • 🛡️ Write Safety Gate: Built-in safety guards requirement (--confirm flag 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) and otcat-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 otcat

Docker Container

docker pull ghcr.io/quitoperation/otcat:latest

Python Package (PyPI)

pip install otcat

Go Toolchain (Go 1.22+)

go install github.com/QuitOperation/otcat/cmd/otc@latest
go install github.com/QuitOperation/otcat/cmd/otcat@latest

Raw 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


Full Changelog: https://github.com/QuitOperation/otcat/commits/v1.0.0