Skip to content

HiveMQ Edge 2026.16 is Released

by HiveMQ TeamNOV 10, 2026

What's New in HiveMQ Edge 2026.16

HiveMQ Edge 2026.16 ships the BACnet/IP adapter as part of the distribution, together with a set of fixes that make BACnet data collection reliable. Data Hub 3.5.0 keeps HiveMQ Edge responsive when scripts need more CPU than they get. OPC UA method calls now answer refused requests with an error response, and polling adapters set to retry forever keep polling through long device outages.

BACnet/IP Adapter Included in HiveMQ Edge

The BACnet/IP adapter now ships with HiveMQ Edge, like every other protocol adapter. The separate download is no longer needed.

This release also fixes several problems in the adapter:

  • Editing tags no longer stops data collection. Adding or changing tags restarts the adapter. If a read was waiting for a slow device at that moment, the read could block for good. After a few such edits, HiveMQ Edge stopped polling every adapter, of any protocol, while all of them still reported connected, and only a restart of HiveMQ Edge restored polling. A restart of the adapter now ends the waiting read.
  • Restarts after a configuration change are reliable. Changing an adapter, its tags, or its mappings restarts the adapter. During the restart, the adapter's previous socket could still hold UDP port 47808, and the adapter stayed stopped until it was restarted by hand. The adapter now waits up to 2 seconds for the port to be released. If another adapter or another process holds the port, the start still fails, as before.
  • "Publish changed data only" now publishes changes. With this option on (the default), first and changed values were dropped. Constant binary values such as door contacts never reached MQTT, and unchanged values such as device names were published on every poll. The adapter now publishes each tag's first value, then every change. If you turned the option off as a workaround, you can turn it back on.
  • Discovery works when the adapter is bound to one network interface. With the IP interface set to one interface's address instead of 0.0.0.0, discovery found no devices. The broadcast address is now optional: left empty, it is 255.255.255.255 for 0.0.0.0 and the interface's own broadcast address otherwise. A configured 255.255.255.255 on a single interface is replaced the same way; any other configured address is used as given.
  • Unsigned integer values are published as correct numbers. Most were published as text, for example "3", and 32-bit values above 2147483647 came out negative. All are now JSON numbers with their actual value. See the Upgrade Notes.
  • A failed adapter start appears in the event log. Before, it was only logged.

The adapter is also faster and clearer about its own identity:

  • Faster polling. Each poll sends one request per tag instead of four, so polling keeps up at shorter intervals, and devices see a quarter of the traffic.
  • Clearer device ID handling. With the device ID set to 0, the adapter selects a random device ID from 4000000 to 4194302, a range that BACnet numbering schemes rarely use. If another device uses the same device ID as HiveMQ Edge, the adapter logs a warning and creates an event.

Data Hub 3.5.0

HiveMQ Edge 2026.16 ships Data Hub 3.5.0.

Script-heavy policies no longer bring HiveMQ Edge down under a CPU limit. When every Data Hub script engine was busy, each waiting message held a thread that checked for a free engine every few milliseconds. Under a CPU limit (docker run --cpus, CPU limits in Kubernetes), thousands of waiting messages could stall HiveMQ Edge for good. Now a message waits idle until an engine is free, and messages get an engine in the order they arrived. At most 500 messages wait at once; a message that arrives while 500 are waiting is dropped. HiveMQ Edge reports dropped messages in the main log at most once a second, with their number and what to do, instead of one error per message. The new metric com.hivemq.edge.data-hub.scripting.script-runtime.engines.unavailable.count counts them. If HiveMQ Edge runs on dedicated cores, you can raise the limit with the environment variable HIVEMQ_DATAHUB_SCRIPT_ENGINE_QUEUE_LIMIT (an integer from 1 to 60,000). For details, see Data Hub on Edge.

A newer JavaScript engine. Data Hub now runs scripts on a newer version of the V8 JavaScript engine. The newer V8 makes script execution up to 15% slower, depending on the number of scripts in a policy's pipeline.

Stopping under load no longer risks a crash. When HiveMQ Edge stopped or reloaded Data Hub while a script was still running, the script could call into a closed JavaScript engine and crash the JVM. Data Hub now waits up to 5 seconds for running scripts, stops any script still running after that, and only then closes the engines. Data Hub now also removes the state of a deleted script from an engine that was busy when the script was deleted.

Upgrade Notes

  • BACnet/IP unsigned integers are JSON numbers. Values that were published as text, for example "3", are now published as numbers, 3. The affected values include the present value, number of states, and relinquish default of multi-state objects; the present value and limits of positive integer value and accumulator objects; the change-of-state count and elapsed active time of binary objects; notification class and time delay; and the device object's APDU timeout, retries, database revision, and protocol revision. Consumers that parse these values as text need to read a number instead.
  • EtherNet/IP tag addresses above 65535 are refused. In the EtherNet/IP - Logical Addressing adapter, a class, instance, or attribute number above 65535 is no longer accepted. An adapter with such a tag no longer starts. Correct the address, and it starts again.
  • BACnet/IP: before you downgrade to 2026.15, set a broadcast address on every adapter that has none. HiveMQ Edge 2026.16 makes the broadcast address (subnetBroadcastAddress) of a BACnet/IP adapter optional. HiveMQ Edge 2026.15 requires the address: after a downgrade, HiveMQ Edge 2026.15 starts but does not create an adapter that has no broadcast address, and the adapter stays missing until you add the address. Adapters created on 2026.15 have a broadcast address and need no change.

Known Limitations

  • At most 30 to 40 protocol adapters with southbound mappings in one HiveMQ Edge. An adapter counts once toward the limit, however many southbound mappings it has. Each such adapter needs its own Data Hub instance with a pair of V8 JavaScript engines, and each V8 engine needs 1,376 GB of address space. Address space is not memory; an engine uses little memory. Somewhere between 30 and 40 such adapters, the address space that Linux gives a process is exhausted. Deleting an adapter does not free its engines, so a deleted adapter still counts toward the limit. Only a restart of HiveMQ Edge frees them.

Additional Improvements

Bug Fixes

  • Fixed polling adapters set to retry forever stopping during a long device outage: A polling adapter with maxPollingErrorsBeforeRemoval set to -1 stopped polling for good when its device had not answered for about five minutes, and only a restart brought it back. Poll timeouts now count as poll errors for maxPollingErrorsBeforeRemoval: with -1, the adapter keeps polling and resumes once the device answers again, and with a limit of N, a timeout counts as one of the N errors.
  • Fixed EtherNet/IP tag addresses above 65535 addressing the wrong object: In the EtherNet/IP - Logical Addressing adapter, a class, instance, or attribute number above 65535 in a tag address was cut to its lowest 16 bits. A tag at @300/70000/1 therefore read or wrote instance 4464, a different object on the device, without any error. Such an address is now refused, and the log names the tag address and the number that is out of range.

Improvements

  • OPC UA method calls answer refused requests: Until now, HiveMQ Edge copied a method request whose arguments failed the schema check to $invalid/<topic>, and the caller got no answer. Now HiveMQ Edge answers such a request on its responseTopic with the status code Bad_InvalidArgument and the request's correlationData, and does not call the device. A request that arrives while the adapter has no connection to the device now gets Bad_NotConnected instead of no answer; HiveMQ Edge does not send the call, so the caller can repeat the request once the adapter is connected again. The new field statusInfo.reason in the response says why HiveMQ Edge refused the request. Every response in which HiveMQ Edge refuses a request has the field. A request with faulty fields of its own, such as a missing methodName or an unusable reply address, still goes to $invalid/<topic>, because HiveMQ Edge has no reliable address for an answer.
  • Clearer messages when an EtherNet/IP write fails: When a device refused a write to a tag of the EtherNet/IP - Logical Addressing adapter, HiveMQ Edge reported only Failed to write tag '<name>'., and for some unusual replies it lost the device's own reason entirely. The message now says what went wrong and adds what the device answered in parentheses, for example Failed to write tag 'pressure': the device refused the write (device said: status 0x0E Attribute not settable). A reply that does not belong to a write is reported as such, with the warning that the value may have been written anyway.
  • Usage tracking: installation ID, license ID, and configured adapters: With usage tracking on, HiveMQ Edge now keeps one installation ID across restarts and upgrades. It is a random ID stored in the file installation-id in the data folder, and it replaces the earlier value, which was derived from the host's network address and changed whenever a container was recreated. Every event now includes the ID of the installed license while the license is valid, and the periodic ping lists the configured protocol adapters, with their type, version, and count. The ping is sent for the first time once HiveMQ Edge has started. The collected data and how to turn usage tracking off are described in the usage tracking section of the configuration guide.
  • The web app says why the configuration cannot be changed: When HiveMQ Edge was started with configuration updates turned off, the web app showed "Config cannot be manipulated via the web app" without saying why. It now says "Config cannot be updated in this Edge", explains that the Edge was started with configuration updates turned off, the default with the HiveMQ Edge Helm chart, and points to the Helm values or the configuration file the Edge was started with. The warning now appears only after the web app has loaded the Edge's settings. Before, the web app showed the warning for an Edge that accepts updates while the web app was loading.
  • Security: Third-party libraries that vulnerability scanners report were raised to patched releases. Two of the fixes concern code a running HiveMQ Edge reaches: Netty 4.2.19, which handles the handshake of MQTT over WebSocket (HTTP request smuggling), and DOMPurify 3.4.17 in the web app's code editor (cross-site scripting). Guava, Logback, asm, axios, mermaid, and tiptap were updated as well. No configuration changes are needed.
  • Data Intelligence agent updated to 3.6.0.

Get Started Today

Use the download link to get HiveMQ Edge 2026.16, or find us on GitHub and Docker:

Get started by running

docker run --name hivemq-edge --pull=always -d -p 1883:1883 -p 8080:8080 hivemq/hivemq-edge

Or clone our repository

git clone git@github.com:hivemq/hivemq-edge.git

You may also try out our Helm Chart

helm repo add hivemq https://hivemq.github.io/helm-charts && helm repo update