Skip to content

Repository files navigation

WarLink

WAR stands for "Whispers Across Realms" - bridging the gap between industrial automation and modern IT infrastructure.

Factory floors speak their own languages: EtherNet/IP, S7comm, ADS, FINS. Meanwhile, your data platforms expect REST, MQTT, Kafka, and Redis. WarLink translates between these worlds, letting you stream PLC data to dashboards, databases, and analytics pipelines without writing custom integration code. No expensive middleware. No vendor lock-in. Just a single binary that runs anywhere.

At its heart WarLink is a TUI (Text User Interface) gateway for industrial PLCs, and can connect and read / write data from Allen-Bradley, Siemens, Beckhoff, and Omron PLCs. It will then republish that data via REST API, MQTT, Kafka, and Redis/Valkey for use in the wider factory infrastructure. It includes advanced features for grouping tags into 'Soft-UDTs' and a rules engine for executing actions (publish, webhook, writeback) when specific PLC conditions are met. It is optimized for high-performance read from PLCs and writing to upstream services, with write-back functionality for discrete types.

BETA - Allen-Bradley Logix and Siemens support is well-tested. Beckhoff is stable but requires more testing. Omron, SLC-500, and MicroLogix are moderately tested. PLC/5 is untested.

image

War was originally designed as an "Edge" application to simplify pushing data out of NAT'd process networks, but is found to also work well in the server room for aggregating and monitoring data factory-wide. It has been designed for easy configuration and back up (single-file config), and works well for distribution with Ansible and other distribution managers. WarLink runs on most modern terminals, and includes a built-in SSH server and daemon-mode for when you prefer to run it in the background on existing computers or servers, while connecting to it remotely to refine the configuration or monitor conditions.

Warnings

  • WarLink is not a real-time control system - See Safety and Intended Use
  • Write-back should only be used for acknowledgments on dedicated tags
  • Never use WarLink for safety-critical functions or machine control
  • This software is provided without warranty - use at your own risk

Quick Start

Download

Pre-built binaries are available on the Releases page for Linux, macOS, and Windows.

Build from Source (Optional)

git clone https://github.com/yatesdr/warlink.git
cd warlink
go build -o warlink ./cmd/warlink

Run

./warlink

Configuration is stored at ~/.warlink/config.yaml and created automatically on first run.

Documentation

Getting Started

Services

  • REST API - HTTP endpoints for tag values and writes
  • MQTT - Topics, QoS settings, and write-back
  • Valkey/Redis - Keys, Pub/Sub, and write-back queue
  • Kafka - Topics, authentication, and batching
  • API Consumer Examples - Code samples for Python, Node.js, Go, C#

Advanced Features

Operations

Reference

Features

  • Multi-PLC Support - Connect to multiple PLCs from different vendors simultaneously
  • Tag Browser - Browse and select tags with real-time value updates
  • UDT Support - Automatic structure unpacking with change detection filtering
  • Health Monitoring - Periodic health publishing (REST, MQTT, Valkey, Kafka)
  • REST API - HTTP endpoints for tag values and writes
  • MQTT - Publish tags with optional write-back
  • Valkey/Redis - Key storage with Pub/Sub and write-back queue
  • Kafka - High-throughput tag changes and rule events
  • TagPacks - Group tags within a single PLC or across multiple PLCs for atomic publishing, useful for aggregating related data for upstream IT processes
  • Rules Engine - Automation rules with publish (MQTT QoS 2, Kafka), webhook, and writeback actions triggered by PLC conditions
  • Daemon Mode - Background service with SSH access
  • Web UI - Browser-based management interface with dark mode, setup wizard, and real-time SSE updates
  • High Performance - Batched reads, optimized publishing, 100K+ messages/sec

Supported PLCs

Family Models Tag Discovery Protocol Support Level
Allen-Bradley Logix ControlLogix, CompactLogix, Micro800 Automatic EtherNet/IP Tested on Micro820, L7, L8
Allen-Bradley SLC-500 SLC 5/03, 5/04, 5/05 Automatic (file directory) PCCC over EtherNet/IP Tested on SLC 5/05
Allen-Bradley PLC/5 PLC-5 series Manual PCCC over EtherNet/IP Untested
Allen-Bradley MicroLogix MicroLogix 1000/1100/1200/1400/1500 Automatic (file directory) PCCC over EtherNet/IP Tested on MicroLogix 1400
Siemens S7-300/400/1200/1500 Manual S7comm Tested on S7-1200
Beckhoff TwinCAT 2/3 Automatic ADS Tested on CX9020
Omron (FINS) CS1, CJ1/2, CP1 Manual FINS TCP/UDP Tested on CP1
Omron (EIP) NJ, NX Series Automatic (no UDT members) EtherNet/IP Experimental

Performance

WarLink is designed for high-throughput industrial data streaming with batched PLC reads, change filtering, and efficient broker publishing.

Republishing Throughput

Simulated publishing test with 50 PLCs × 100 tags (5,000 total tags) on localhost:

Broker Confirmed Delivery Implementation
Kafka 290,000+ msg/s Batched async
Valkey 45,000+ msg/s Synchronous
MQTT 32,000+ msg/s Synchronous QoS 1

PLC Read Performance

PLC Family Batching Typical Throughput
Allen-Bradley Logix Yes (MSP) 500-2,000 tags/sec
Siemens S7 Yes (PDU) 300-1,500 tags/sec
Beckhoff ADS Yes (SumUp) 1,000-5,000 tags/sec
Omron FINS Yes (Multi-read) 300-1,500 tags/sec
Omron EIP Yes (MSP) 500-2,000 tags/sec
Allen-Bradley PCCC Yes (contiguous) Tested on SLC 5/05, MicroLogix 1400

Run warlink --stress-test-republishing to benchmark your system.

Keyboard Shortcuts

Tab Key Action
Global P/B/T/R/E/M/V/K/D Jump to tab
Global Shift+Tab Cycle tabs
Global N Configure namespace
Global F6 Cycle themes
Global ? Help
Global Q Quit
PLCs d/a/e/x Discover/Add/Edit/Remove
PLCs c/C/i Connect/Disconnect/Info
Browser / then c Filter / Clear filter
Browser p Switch PLC
Browser Space/w/i Toggle publish/writable/ignore
Browser s/d Per-service config / Details
Browser a/e/x Add/Edit/Delete (manual PLCs)
TagPacks a/x Add/Remove (context-sensitive)
TagPacks Space/e/i Toggle enable/Edit/Ignore changes
Rules a/x/e Add/Remove/Edit
Rules Space/F Toggle enable / Test fire
Services a/e/x/c/C Add/Edit/Remove/Connect/Disconnect

Command Line Options

--config <path>              Path to config file (default: ~/.warlink/config.yaml)
--namespace <name>           Set instance namespace (saved to config)
--log <path>                 Write debug messages to a file
--log-debug [filter]         Enable protocol debugging (omron,ads,logix,pccc,s7,mqtt,kafka,valkey,tui)
-d, --no-tui                 Headless mode (no local TUI)
-p <port>                    HTTP listen port (overrides config)
--host <addr>                HTTP bind address (overrides config)
--admin-user <user>          Create/update admin user (saved to config)
--admin-pass <pass>          Password for admin user (saved to config)
--no-api                     Disable REST API (ephemeral)
--no-webui                   Disable browser UI (ephemeral)
--ssh-port <port>            SSH listen port (default: 2222)
--ssh-pass <pw>              SSH password for remote TUI access
--ssh-keys <path>            Path to authorized_keys file or directory
--stress-test-republishing   Stress test Kafka, MQTT, and Valkey throughput
--test-duration <dur>        Stress test duration (default: 10s)
--test-tags <n>              Simulated tags per PLC (default: 100)
--test-plcs <n>              Simulated PLCs (default: 50)
-y                           Skip confirmation prompts
--version                    Show version

Daemon Mode

Run as a background service with SSH access:

./warlink -d --ssh-pass "secret"
ssh -p 2222 localhost

Add the web UI to daemon mode for browser-based management alongside SSH:

./warlink -d --ssh-pass "secret" --admin-user admin --admin-pass "password"

See Daemon Mode for systemd setup, Docker deployment, and security options.

Acknowledgements

This project builds on excellent open source libraries:

PLC Communication:

  • gos7 - Siemens S7 protocol reference
  • fins - Omron FINS/UDP protocol reference
  • pylogix - Allen-Bradley EtherNet/IP reference

Infrastructure:

User Interface:

About

WarLink - Whisper Across Realms (WAR) for Industrial Data

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages