Skip to content

Releases: united-manufacturing-hub/benthos-umh

v0.11.15

19 Dec 09:24
02377a7

Choose a tag to compare

🐛 Bug Fixes

  • Sparkplug B Sequence Tracking - Fixed false "Sequence gap detected" errors that
    occurred when NDATA and DDATA messages interleaved from the same Sparkplug node. Per the
    Sparkplug B specification, sequence numbers are node-scoped (shared across all message types
    from a node), but we were incorrectly tracking them per-device. This caused spurious warnings
    when valid interleaved messages arrived.

  • OPC UA Certificate DNS Validation - Added proper DNS hostname validation for X.509
    certificates. This ensures hostnames used in certificates comply with standards, preventing
    potential connection issues with strict OPC UA servers like Ignition 8.1+.

  • JSON Schema Array Type Mapping - Fixed incorrect type mapping for list fields in the
    schema export. Fields like modbus.slaveIDs, s7comm.addresses, and opcua.nodeIDs now
    correctly export as {type: "array", items: {...}} instead of scalar types. This eliminates
    Monaco editor validation warnings when users enter valid array syntax in the Management
    Console.

📝 Documentation

  • S7comm Address Limit - Documented that each S7 connection supports a maximum of 20
    addresses due to underlying library constraints. If you need more than 20 addresses, create
    multiple connections to the same PLC.

🔧 Technical Notes

  • Sparkplug B: Added MessageType enum for compile-time type safety, replacing raw string
    comparisons
  • Sparkplug B: Added NodeKey() and DeviceKey() methods to TopicInfo for cleaner code
  • Removed 8 redundant Sparkplug sequence tests (~126 lines) after validation against spec
  • CI: Upgraded lint runner to 4 cores/16GB for faster builds
  • CI: Replaced S7 EOS runner with Depot
  • CI: Fixed release artifact upload to preserve release body

Pull Requests

  • #257: fix(sparkplug): track sequence numbers per-NODE instead of per-device (ENG-4031)
  • #259: refactor(sparkplug): add MessageType enum for type-safe message handling
  • #261: refactor(sparkplug): remove redundant sequence tests (ENG-4041)
  • #250: fix: add dns validation for hostnames in certs
  • #249: fix: correct JSON Schema type mapping for array fields (ENG-4003)
  • #263: docs: document the max amount of addresses for each connection
  • #254: chore: update CODEOWNERS with code owner and CTO approval requirements
  • #258: fix(ci): preserve release body when uploading artifacts
  • #260: chore: replace S7 EOS runner with Depot
  • #262: chore: upgrade lint runner to 4 cores 16GB

v0.11.14

15 Dec 16:01
e0699e7

Choose a tag to compare

Release v0.11.14

💪 Improvements:

  • Schema Export Automation - Added internal tooling to automatically generate JSON schemas for ManagementConsole when new benthos-umh versions are released. This streamlines the development workflow between repositories. (#234)
  • Reduced Container Attack Surface - Removed unused busybox dependency from Docker images, reducing potential security vulnerabilities and image size. No configuration changes required. (#253)
  • Tag Processor Documentation - Clarified that the tag processor always sets the output key to value in the payload. Previously the documentation was misleading about this behavior. (#244)
  • Sparkplug B Documentation - Added links to Sparkplug B input plugin documentation in the inputs README for easier discovery. (#248)

🐛 Bug Fixes:

  • Go 1.25.5 Security Update - Updated Go runtime from 1.25.4 to 1.25.5, addressing 2 stdlib vulnerabilities (1 high severity, 1 medium severity). No configuration changes required - the fix is automatic. (#252)

📝 Key Notes:

  • Go updated to 1.25.5 (security fixes)
  • CI/CD improvements for faster builds and better code quality
  • All changes are backward compatible

Contributors: @JeremyTheocharis, @led0nk, @daniel-umh, @FalconTube

Pull Requests:

  • #234: [ENG-3974] Schema Export and Automation for Dynamic Protocol Forms
  • #241: Fix flaky GlobalWorkerPool counter test (ENG-3944)
  • #243: chore: build-binaries with hetzner-runners
  • #244: [ENG-3947] update docs tagprocessor
  • #245: chore: concise test output format
  • #246: chore: change runner to depot for opcua + path-filter
  • #247: chore: add linting to CI
  • #248: docs: add sparkplug-b linking to input-readme
  • #252: chore: upgrade to go 1.25.5
  • #253: chore: rmv busybox from dockerfile (not needed)
  • #255: chore: replace all runners with depot ubuntu

v0.11.13

27 Nov 15:15
84fef3c

Choose a tag to compare

🐛 Bug Fixes

JavaScript Node-RED Plugin Stringify Improvements (from v0.11.13)
Implemented stringify functionality close to Node.js representation for better JSON readability and
resolved handling of edge cases that JSON doesn't natively support (Infinity, NaN, large integers).
Previously, console output contained excessive escaped characters making bridge configuration
debugging difficult. The Node.js-style representation is more efficient for use within JSON as it
doesn't use double-quotes for formatting, resulting in fewer backslashes and significantly improved
readability when debugging bridge configurations. (#239)

OPC UA Virtual Path Handling (from v0.11.13)
Fixed handling of null or empty virtual paths for OPC UA connections. Previously, OPC UA
configurations without virtual paths would fail validation. The tag processor plugin now correctly
accepts empty or null virtual path values, enabling broader compatibility with OPC UA server
configurations that don't require virtual paths. (498986d)

💪 Improvements

Automated Version Bumping Workflow (from v0.11.13)
Added new GitHub Actions workflow for automated benthos-umh version updates in the
united-manufacturing-hub repository. When a new benthos-umh release is published, the workflow
automatically generates app tokens, checks out the united-manufacturing-hub repository, updates
BENTHOS_UMH_VERSION in the Makefile, validates the version replacement, and creates pull requests with
team reviewers assigned. Release notes are automatically extracted and included in PR descriptions,
streamlining the release process and reducing manual coordination between repositories. (#242)

📝 Notes

  • JavaScript logging improvements make debugging bridge configurations significantly easier with
    cleaner output
  • OPC UA configurations are now more flexible with optional virtual path support
  • CI/CD automation reduces manual effort for version coordination across repositories
  • All changes are backward compatible - no configuration migration needed
  • Release Notes: https://github.com/united-manufacturing-hub/benthos-umh/releases/tag/v0.11.12

Full Changelog: v0.11.12...v0.11.13

v0.11.12

24 Nov 15:30
26d1a4e

Choose a tag to compare

🐛 Bug Fixes

OPC UA Browse Deadlock Prevention (from v0.11.12)
Fixed critical deadlock in GlobalWorkerPool when OPC UA browse operations were cancelled during task submission. Previously, the system would hang indefinitely when connection issues or shutdowns occurred while workers were submitting child tasks, requiring manual intervention. Browse operations now respond properly to context cancellation through a select statement that checks for context.Done() during channel sends, preventing system hangs during server connection problems or graceful shutdowns. This fix ensures OPC UA browse operations remain responsive under all conditions, particularly important for large-scale deployments with 300+ nodes. (#238)

SparkplugB Device Discovery via Passive Rebirth (from v0.11.12)
Fixed critical bug where device-level tags (motors, sensors, compressors, control configurations) were completely undiscoverable via passive discovery. The protocol converter was incorrectly using "Node Control/Rebirth" metric for both node-level (NCMD) and device-level (DCMD) rebirth commands, violating SparkplugB 3.0 specification section 6.4.24. Device-level rebirth requests now correctly use "Device Control/Rebirth" metric, enabling full device tag discovery through passive mechanisms. In production testing with Ignition Edge servers, this fix increased device tag discovery from 0 to 103 unique tags (90.1% discovery rate) with 309 DBIRTH messages captured. This is critical for achieving complete brownfield device inventory without requiring manual OPC UA browsing or pre-configuration - users can now discover all device-level tags (configuration parameters, motor states, sensor values, compressor metrics, tower controls, palletizer settings) automatically through SparkplugB's passive discovery protocol. (#217)

SparkplugB NDATA Processing Restored (from v0.11.12)
Fixed bug where node-level SparkplugB data (NDATA messages) were being dropped with umh_conversion_status: skipped_insufficient_data error status. NDATA messages don't have device IDs by design - they carry node-level data using edge_node_id as the identifier. The protocol converter was incorrectly rejecting these messages during validation, treating the absence of device_id as an error condition. The plugin now correctly processes NDATA messages using edge_node_id as the device identifier while maintaining strict validation for DDATA (device-level) messages. In production PCAP analysis from customer deployment, 262 NDATA messages that were being silently lost are now processed correctly. Nodes sending NDATA (edge-level metrics, node status information) now appear in Topic Browser with complete SparkplugB hierarchy visibility, ensuring no data loss for customers using node-level instrumentation. (#217)

Configuration Example Syntax Errors Fixed (from v0.11.12)
Corrected Sparkplug B input documentation example that contained syntax errors preventing successful copy-paste usage. Changed processing: to pipeline: (the correct benthos configuration term for processor sections) and fixed JavaScript comment syntax from # to // (required by the goja JavaScript engine used in benthos). Users copying the example from documentation were experiencing immediate configuration validation errors ("unknown field processing") and JavaScript syntax errors during execution. With this fix, the documented example now works correctly when copied directly, reducing friction for new users implementing SparkplugB integrations. (#236)

💪 Improvements

JavaScript console.debug Support (from v0.11.12)
Added console.debug() to the JavaScript processor logging API, completing the console logging interface to match standard browser console behavior. You can now use debug-level logging in your JavaScript processors for verbose diagnostic output that can be filtered in production environments through log level configuration. This fills the gap in the console API (which previously only supported log/info/warn/error) and enables proper separation of development debugging output from production logging, following standard JavaScript logging patterns that developers expect. (#235)

Developer Experience Enhancement (from v0.11.12)
Added make run and make run-debug commands to the benthos-umh Makefile for easier local testing and development workflows. Set the CONFIG=./path/to/your/config environment variable and run make run to test benthos configurations during development without requiring full deployment or complex setup steps. The debug variant enables additional logging and diagnostic output. This streamlines the development workflow by reducing the friction between code changes and testing, making configuration iteration and debugging significantly faster for protocol converter development. (#237)

🎉 New Features

SparkplugB Message Observability via Split Tracking (from v0.11.12)
Added spb_metric_index and spb_metrics_in_payload metadata fields to enable tracing of message splitting behavior. When SparkplugB NDATA/DDATA messages are split into multiple UNS messages (1 MQTT message with N metrics → N separate UNS messages for individual metric subscriptions), you can now trace each split message back to its original source message using these metadata fields. This explains why duplicate sequence numbers appear when subscribing to *._raw.* patterns - they're valid splits from the same source message, not protocol errors or data duplication issues. The spb_metric_index shows the position of the metric within the original payload (0-based), while spb_metrics_in_payload shows the total number of metrics that were split. Useful for debugging SparkplugB message flows, understanding sequence number behavior in split scenarios, and validating that message transformation is working correctly without data loss. (#217)

📝 Notes

  • SparkplugB improvements span three critical areas: passive discovery (device-level tags now discoverable), message processing (NDATA support restored), and observability (dual-sequence metadata for split tracking)
  • OPC UA browse operations are now resilient to cancellation and connection issues under high-load scenarios
  • Developer tooling improvements reduce friction for local testing and debugging workflows
  • All changes are backward compatible - no configuration migration needed
  • Release Notes: v0.11.12
  • Unblocks device discovery workflows for brownfield deployments relying on SparkplugB passive enumeration
  • Resolves data loss issues for customers using node-level SparkplugB instrumentation
  • All 233 SparkplugB tests passing with comprehensive coverage of edge cases, lock management, and production PCAP patterns

v0.11.11

12 Nov 21:14
601c4d1

Choose a tag to compare

Key Updates

New Features:

OPC UA integrations gain automatic DataChangeFilter capability detection for servers lacking filter support, particularly Siemens S7-1200 PLCs implementing the Micro Embedded Device Profile. The
system now uses a three-way hybrid logic (profile-based detection, S7-1200 special-casing, and trial-based runtime discovery) to prevent StatusBadFilterNotAllowed subscription errors while
maintaining optimal filtering on capable servers.

Improvements:

  • Browse operations migrated to a shared GlobalWorkerPool architecture, fixing high-concurrency issues where browsing 300+ nodes could create thousands of workers and exhaust server session
    limits (preventing EOF errors on servers like Ignition with 64-session limits)
  • Server auto-optimization profiles now include automatic detection for Ignition, Kepware, Siemens S7-1200/S7-1500, and Prosys servers with vendor-specific tuning
  • Kafka headers in uns_input now convert to strings by default (fixing byte array display issues), with backward compatibility via metadata_format: "bytes" flag

Security Fixes:

Go was upgraded from 1.25.2 to 1.25.3, resolving 10 security vulnerabilities in the standard library (4 high severity, 6 medium severity).

Bug Fixes:

  • S7-1200 PLCs no longer reject subscriptions when DataChangeFilter is applied (StatusBadFilterNotAllowed errors eliminated)
  • Profile validation strengthened with compile-time checks for invalid MinWorkers/MaxWorkers configurations
  • Browse operation deadlock test stability improved for reliable CI execution

Compatibility

All existing configurations remain compatible - no migration needed. The Kafka metadata format change defaults to string conversion (recommended), but legacy byte array behavior is preserved via
metadata_format: "bytes" for existing flows with workarounds.

v0.11.10

07 Nov 12:29
29d18ae

Choose a tag to compare

[ENG-3852] Implement Server Auto-Optimization Profiles + MaxMonitored…

v0.11.9

31 Oct 17:50
c9964d0

Choose a tag to compare

fix: make console.{log|info|warn|error} work more standard compliant …

v0.11.8

29 Oct 21:05
ac78148

Choose a tag to compare

fix(opcua): Fix certificate Key Usage bits per OPC UA Part 6 [ENG-377…

v0.11.7

24 Oct 13:53
c73f738

Choose a tag to compare

Release v0.11.7

🎉 New Features:

  • Redpanda Connect Upgraded to v4.67.5 - Upgraded from v4.49.1 to v4.67.5, bringing 7 months of improvements including dynamic Parquet schema inference for data lake workflows, enhanced CDC support for MongoDB and MySQL, AI/LLM tool calling capabilities, and improved reliability for Kafka/MQTT/database integrations. The most impactful change for UMH users is the ability to automatically infer Parquet schemas from your UNS messages using the new schema_metadata field, eliminating the need for manual schema definitions when batching to S3/MinIO. This enables hive-style partitioning for DuckDB analytics and adapts seamlessly to evolving data structures across your unified namespace. See the full Redpanda Connect changelog for complete details spanning 18 upstream releases. (#216)

💪 Improvements:

  • OPC UA Quality/Status Visibility - OPC UA data now includes the opcua_attr_statuscode metadata field, which shows human-readable quality information (called "Quality" in Ignition). This helps you monitor data reliability and filter unreliable values from your OPC UA servers. (#214)

🐛 Bug Fixes:

  • Go Security Update - Fixed 10 critical vulnerabilities in the Go standard library (Go 1.24.1 → 1.25.2), including CVE-2025-22871 (arbitrary code execution via malformed certificates). Your benthos-umh workflows are now protected against certificate attacks, header parsing exploits, and credential exposure risks. No configuration changes needed - security is automatic. (#215)
  • Timestamp Handling for Batched Messages - Fixed timestamp processing for batched OPC UA messages (from Kepware, Wago, Siemens servers) that use RFC3339Nano format. Previously, batched messages would all receive the same timestamp; now each message uses its proper timestamp_ms metadata value. Improved downsampler log messages to clarify how to override timestamps when needed. (#210)
  • Stream Processor Error Reporting - The stream processor now properly reports errors when it receives non-timeseries data (like relational/tabular data) instead of silently dropping it. You'll now see warning messages with metrics, making it easier to diagnose data format mismatches. (#213)

📝 Key Notes:

  • Redpanda Connect: v4.49.1 → v4.67.5 (18 upstream releases, 100+ improvements)
  • Go: 1.24.1 → 1.25.2 (security patches for 10 CVEs)
  • All existing configurations remain compatible - no migration needed
  • No breaking changes to UMH use cases

Contributors: @JeremyTheocharis, @led0nk

Pull Requests:

  • #216: feat: upgrade Redpanda Connect to v4.67.5 for parquet_encode schema_metadata support
  • #215: security: upgrade Go to 1.25.2 for stdlib CVE fixes
  • #214: [ENG-3436] - OPCUA - add statuscode/quality to metadata
  • #210: [ENG-3402]: timestamp-implementation for metadata-usage
  • #213: [ENG-3620] - Streamprocessor: escalate non-timeseries data to warning

v0.11.6

17 Oct 08:23
2ae25e1

Choose a tag to compare

Merge pull request #214 from united-manufacturing-hub/eng-3436

[ENG-3436] - OPCUA - add statuscode/quality to metadata