chore(deps): update docker.io/emqx/emqx-enterprise docker tag to v6 - #731
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/major-oci-container-images
branch
from
September 27, 2026 01:34
0d5311e to
33f2d12
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
5.10.5→6.3.1Release Notes
emqx/emqx (docker.io/emqx/emqx-enterprise)
v6.3.1: EMQX Enterprise (LTS) 6.3.1Compare Source
Download
Ubuntu / Debian
ubuntu24.04ubuntu24.04ubuntu22.04ubuntu22.04debian13debian13debian12debian12debian11debian11RHEL / Rocky / Amazon Linux
el10el10el9el9el8el8amzn2023amzn2023el7macOS
macos14macos15macos26Plugins
emqx_acmeemqx_agentemqx_backup_syncemqx_bridge_mqtt_dqemqx_maptabsemqx_offline_messagesemqx_relupemqx_sync_requestemqx_unsgovemqx_username_quotaBreaking Changes
#18465 Fixed handling of templated INSERT SQL statements in the ClickHouse, TDengine, SQL Server, and MySQL bridges (when batch insert is enabled).
Previously, rendering SQL templates could often produce malformed SQL due to syntax errors in the manually entered template itself and due to interpolation issues.
Now, SQL statements are fully parsed when an action is created, and invalid SQL is rejected. During rendering, correct escaping is enforced. To provide consistent and predictable behavior, we limit the SQL features that can be used. Most notably, we reject comments in SQL statements. However, we support a large subset of syntax features: constant values, strings and string interpolation, arithmetic, functions, conditions, and conditional operators.
MySQL also supports
ON DUPLICATE KEY UPDATE, ClickHouse supportsFORMAT ValuesandFORMAT JSONCompactEachRow, and TDengine supportsINSERT ... USING ... TAGSand table identifier interpolation.To provide consistent rendering for MySQL templates, the MySQL bridge unconditionally disables
ANSI_QUOTESandNO_BACKSLASH_ESCAPESmodes for all connections, and treats the statements accordingly.The ClickHouse bridge now infers the batch value separator from the SQL template and ignores the configured
batch_value_separatorvalue.#18630 Namespaced administrator API keys can no longer be created, updated, or bootstrapped with scopes the namespaced role is not allowed to hold (such as
gatewaysoraudit), matching the existing dashboard user rule.Rotate any existing namespaced API key that was granted such scopes, since keys already minted with them keep working until rotated.
#18824 Fixed a misspelled field name in the
emqx ctl listenersoutput.The command printed the listener's enabled flag as
enbale. It now printsenable. Scripts that parse this output must be updated to match the corrected name.Enhancements
Access Control
#18777 Added optional SCRAM-SHA-256 challenge-response authentication for Dashboard JSON API login and switched the embedded API Spec login page to SCRAM by default. The existing password login remains enabled by default.
When
dashboard.password_login = scram_only, scripts and third-party clients usingPOST /api/v5/loginwith a username and password must migrate to the SCRAM challenge-response flow or use API keys.Packaging
#18977 Switched the official EMQX Enterprise Docker release images to Docker Hardened Debian 13 (Trixie). The runtime images no longer include package managers such as
aptanddpkg.Release images now include build provenance and software bill of materials (SBOM) attestations, allowing Docker Scout to apply Docker's vulnerability assessments (VEX statements) for the hardened base image.
Performance
#18806 Reduced memory usage of MQTT connections.
Each connection allocated rate-limiter state at connect time, even when no rate limit is configured. The state is now allocated when the client first publishes or subscribes, so connections that only stay connected use about 2 KB less memory each. Configured rate limits behave the same as before.
#18807 Reduced memory usage of MQTT sessions.
Each session allocated delivery rate-limiter state at creation, even when no delivery rate limit is configured. The state is now allocated on first delivery after a delivery rate limit is configured, saving about 0.5 KB per session. Configured delivery rate limits behave the same as before.
#18808 Reduced memory usage of MQTT connections that publish or subscribe.
Rate-limiter state per connection is now allocated only for rate limits that are actually configured. With default settings (no rate limits) an active connection uses about 1.6 KB less memory. Configured rate limits behave the same as before, including limits added at runtime.
#18809 Reduced memory usage of MQTT connections when rate limits are configured.
Rate-limiter bookkeeping shared by all connections is no longer copied into each connection, saving about 0.5 KB per connection with rate limits enabled. Rate-limit behavior is unchanged.
#18875 Reduced memory usage of MQTT connections that belong to a multi-tenant namespace.
Rate-limiter state for namespace clients is now allocated when a client first publishes, subscribes or receives a message, and only for limits that are actually configured, matching the behavior of ordinary connections. Configured tenant and client rate limits behave the same as before, including denial after a namespace's limiter configuration is removed.
Bug Fixes
Core MQTT Functionalities
#18734 Fixed a TCP listener issue where
tcp_options.buffer = 0made every new connection fail on the defaultsocketbackend.tcp_options.active_nis now clamped to the 1..1000 range andtcp_options.bufferto at least 5 bytes (the largest MQTT fixed header), on all listener types. Out-of-range values are still accepted and are silently adjusted.#18789 MQTT and Gateway listener creation now rejects listener names longer than 64 bytes or not matching the restricted-name format with a clear
BAD_REQUESTresponse. Existing listeners with longer names remain editable.#18811 Fixed a regression in 6.3.0 that sent topic aliases to MQTT v5 clients which do not accept them.
A client that omits the
Topic Alias Maximumproperty, or sets it to 0, was still sent PUBLISH packets carrying aTopic-Aliasproperty when it authenticated with enhanced authentication, for example SCRAM.#18828 MQTT listeners now close a connection when its first packet is not a CONNECT, without parsing the packet body.
Access Control
#18681 Fixed REST API authentication error messages to match what the target endpoint accepts. A rejected bearer token or missing authorization header on an endpoint that rejects API keys, such as
POST /api/v5/logout, no longer suggests using one. The message also no longer names theapi_key.bootstrap_fileconfiguration key.#18724 Dashboard SSO OIDC now rejects configuration where the issuer's URL scheme and the TLS option disagree (
httpswith TLS disabled, orhttpwith TLS enabled) at config time, instead of failing repeatedly at runtime with an unclear TLS error or silently ignoring the TLS option.#18737 Fixed
${peerport}rendering as an empty string in authentication and authorization request templates.Also added
${peername}to the client information available in these templates. It renders as the client's address and port, for example192.168.0.1:51544.#18852 Fixed bootstrap API keys being rejected by the nodes still running the older version during a rolling upgrade to 6.3.
When a 6.3 node started, it rewrote the cluster-shared API key record with a secret hash that older nodes cannot verify, so those nodes rejected the key. The bootstrap file loader now keeps the stored hash when the file still holds the same secret, and refreshes only the key metadata such as role and scopes.
Changing the secret in the bootstrap file still replaces the hash. Rotate a bootstrap secret only after the whole cluster runs 6.3.
#18904 Fixed an issue where creating or updating an enabled Dashboard SSO backend could fail with an internal error when its resource remained in the
connectingstate until the start timeout.The backend now remains tracked with its resource ID so that it can be cleaned up after the start timeout.
Multi-tenancy
Data Integration
#18763 Fixed an error reported by the TDengine action. When the action could not be found, the error named the connector's ID instead of the action's ID, which made the error read as if a valid connector ID was invalid.
#18775 Renamed the RocketMQ connector's
namespaceconfiguration field torocketmq_namespace.The old name is still accepted, so existing configurations, API calls and imported backups keep working without change. The field was renamed because its name collided with the EMQX namespace reported by the connector API, which made the Dashboard treat the connector as owned by a namespace named after the RocketMQ instance.
The value is shown as
rocketmq_namespacein API responses and in the Dashboard.#18846 Fixed SQL template rendering in data integrations. Doris batch inserts now use Doris-compatible syntax and escaping for text and binary values. MySQL templates now handle escaped dollar signs correctly.
#18925 Fixed QuasarDB actions to validate SQL templates and escape interpolated values according to their SQL context.
#18941 Fixed GreptimeDB connectors that switched between connected and disconnected under heavy write load. The health check no longer waits behind pending writes, so it fails only when GreptimeDB does not respond.
Clustering
#18826 Backup import now confirms that every node in the cluster runs the same version before it starts.
Importing during a rolling upgrade could apply the backup through calls that the not-yet-upgraded nodes interpret differently. The import now stops before it begins and names the nodes still to be upgraded, so the cluster is left as it was.
#18862 Validate the options passed to
emqx_router_tool:scan_missing_routes/1andemqx_router_tool:reconcile_missing_routes/1.Invalid
chunkorsleep_msvalues were accepted silently and disabled the scan throttling, so the scan ran at full speed while the operator believed it was throttled. The tool now raises an error naming the offending option instead. Unknown option keys, such as a misspelledchunks, are rejected as well.#18899 Fixed a regression where
GET /api/v5/listenersandGET /api/v5/listeners_statuscould return500 INTERNAL_ERRORin a mixed-version cluster during a rolling upgrade from an earlier release.Durable Storage
Gateway
#18755 Fixed an issue where saving an existing NATS Gateway configuration from the Dashboard could replace its authentication credentials with the masked value displayed in the form, causing NATS clients to fail authentication.
Authentication credentials are now preserved when users update other Gateway settings without changing the authentication configuration.
NATS Gateway authentication settings now reject duplicate authentication methods and credential entries, including duplicate NKeys and JWT account entries, to prevent ambiguous authentication behavior.
#18776 MQTT-SN now publishes configured Will messages when sleeping clients exceed their sleep duration and no longer publishes Will messages when clients disconnect normally.
#18842 Gateway connections now ignore
clientid_overridevalues returned by authentication backends, which is not supported by Gateway protocols. A warning is logged when this occurs.Mountpoint templates for Gateway connections are now evaluated in the shared Gateway authentication flow after authentication results are merged.
#18855 Fixed MQTT-SN session wake-up authorization for DTLS clients authenticated with verified client certificates. A certificate-bound session can be resumed from a new association only when it presents the same peer certificate. Wake-up without a client certificate or with a different or reissued certificate is rejected.
Plaintext UDP and DTLS clients without a certificate retain the legacy ClientId-only PINGREQ wake-up behavior.
Plugins
missing_i18n_referror. The plugin now starts successfully and its API endpoint is available.Observability
#18664 Audit records for namespaced requests now identify the namespace a request targeted. Previously, resetting a topic-metrics collection with the same name in different namespaces produced audit records that looked identical, so it was not possible to tell which namespace's collection was affected. The audit log now also records any query parameters a request carried.
#18677 Audit records for data-backup requests now identify the namespace a request targeted. Previously, exporting, importing, uploading, or deleting a backup in different namespaces produced audit records that looked identical, so it was not possible to tell which namespace's backup was affected. The audit log now also records any query parameters a request carried.
#18678 Audit records for A2A registry requests now identify the namespace a request targeted. Previously, registering or deleting an agent card in different namespaces produced audit records that looked identical, so it was not possible to tell which namespace's card was affected. The audit log now also records any query parameters a request carried.
#18684 Fixed a crash on connect when OpenTelemetry tracing was enabled and an MQTT 5 client's CONNECT packet carried will User-Property entries.
#18686 Audit records for authorization, authentication, connector, bridge, rule-engine and trace requests now identify the namespace a request targeted. Previously, these audit records looked identical across namespaces, so it was not possible to tell which namespace's resources a request affected. The audit log now also records any query parameters a request carried.
#18754 Stop creating audit log records for CLI commands that only print help.
Running a command such as
emqx ctl api_keyswithout a subcommand prints the usage text. Previously this also wrote an audit log record with an empty argument list, which looked like an operation had been performed. Commands that do work are still audited, including read-only ones.#18853 Fixed an issue where SSO MFA setup and verification credentials could be stored unredacted in audit logs when audit logging was enabled.
SSO MFA request bodies now keep only
usernameandbackendin audit records; temporary tokens, TOTP codes, and unknown credential fields are redacted before being written to audit files or the audit database.#18961 Fixed a regression where audit log entries for
emqx ctl plugins ...commands masked every argument as******. Allpluginsarguments are non-sensitive (plugin name-version, boot position, and the package sha256 digest), so they are now recorded as-is instead of being redacted. Theplugins install --clusteroption, which was accidentally dropped in the same CLI refactoring, is restored.Management
#18600 Fixed client list API filtering when durable sessions are enabled.
GET /api/v5/clientsappended all disconnected durable sessions to the result, ignoring query-string filters such asconn_state,username, andclientid. For example,conn_state=connectedalso returned disconnected durable sessions. Now the filters apply to disconnected durable sessions as well.When filters are applied and disconnected durable sessions exist, the response omits the
meta.countfield instead of reporting a wrong number. Queries that filter withconn_state=connectedkeep an exactmeta.count.#18666
GET /api/v5/topicsnow returns the full shared-subscription topic, for example$share/group/a/1, for a durable shared subscription.Previously the response showed only the bare topic, for example
a/1, so a durable shared subscription was indistinguishable from a normal durable subscription to the same topic.#18817 Fixed
PUT /api/v5/telemetry/statusreturning500 INTERNAL_ERRORwith an Erlang stack trace when the request body omits theenablefield.The endpoint now returns
400 BAD_REQUESTwith a validation message. The API documentation marksenableas required and no longer shows a default value for it, because the endpoint has never applied that default.#18859 Fixed an issue where changing only the letter casing of a sensitive HTTP header name while updating a configuration could remove its stored value.
#18860 Fixed client message pagination returning a continuation position on the final page.
GET /clients/{clientid}/mqueue_messagesandGET /clients/{clientid}/inflight_messagesnow returnmeta.positionasend_of_datawhen no more messages are available. API clients can stop without requesting an additional empty page.#18963 #18975 Fixed
POST /api/v5/api_keyreturning HTTP 500 when the optionaldescorenablefield is omitted from the request body. The key is now created with an empty note and enabled by default. Request body fields that are not part of the API key schema (for exampledescriptioninstead ofdesc) are still ignored by request validation.Deployment and Security
#18836 Stopped including the result of a successful configuration change in the cluster configuration sync debug logs.
The result could carry compiled runtime state, such as the HTTP authenticator header templates, which held secrets that log redaction did not cover.
v6.3.0: EMQX Enterprise (LTS) 6.3.0Compare Source
EMQX Enterprise 6.3.0 focuses on stronger security defaults, leaner deployments, and broader operational visibility.
Highlights include:
EMQX_FEATURES=ESSENTIALto run the core MQTT broker with an under-100 MB boot-time memory footprint;EMQX_SECURITY_PROFILE=hardenedfor secure-by-default deployments;In summary, this release includes 39 enhancements and 47 bug fixes comparing to version 6.2.3
Download
Ubuntu / Debian
ubuntu24.04ubuntu24.04ubuntu22.04ubuntu22.04debian13debian13debian12debian12debian11debian11RHEL / Rocky / Amazon Linux
el10el10el9el9el8el8amzn2023amzn2023el7macOS
macos14macos15macos26Plugins
emqx_acmeemqx_agentemqx_backup_syncemqx_bridge_mqtt_dqemqx_maptabsemqx_offline_messagesemqx_relupemqx_sync_requestemqx_unsgovemqx_username_quotaBreaking Changes
#17185 The MQTT parser now runs in strict mode by default. To restore the previous lenient behavior, set
mqtt.strict_mode = false(globally or per-zone).In strict mode, the broker validates incoming MQTT packets against the protocol specification and disconnects clients that send malformed packets. The validations enforced only in strict mode are:
bad_frame_header).reserved_connect_flag).invalid_will_qos,invalid_will_retain).[MQTT-3.1.2-22](invalid_password_flag). MQTT 5.0 lifts this constraint and is unaffected.utf8_string_invalid).bad_packet_id).When a client violates one of these checks, the broker logs an
info-level entry withmsg=frame_parse_errorand a structuredreason(for example,cause=invalid_password_flag,proto_ver, orreceived_prefix) for troubleshooting. For MQTT 5.0 connections, the broker also responds with CONNACK/DISCONNECT carrying reason code0x81 Malformed Packetbefore closing; for MQTT 3.1/3.1.1, the connection is silently closed (no CONNACK reason code is defined for malformed packets in those versions).#17215 Removed the bundled Swagger UI assets from the EMQX release package, reducing tarball size by approximately 11 MB.
/api-docs/swagger.jsoncontinues to serve the full OpenAPI 3 JSON spec, so external Swagger UI deployments that load it by URL keep working. The legacy/api-docsURL responds with an HTTP 308 redirect to/api-spec.html, the in-tree spec explorer introduced in 6.3.0. Other/api-docs/*subpaths (the embedded Swagger UI assets) are no longer served and return 404.#17267 The
node.max_portsconfig now defaults toauto, which scales the Erlang VM port limit (+Q) with the number of logical CPU cores: 65536 ports per core for up to 8 cores, and1048576(the historical fixed default) above that. Explicit integer values are still accepted.This is a behavior change for nodes upgraded from earlier versions where
max_portsdefaulted to a fixed1048576: hosts with 8 or fewer CPU cores will now boot with a smaller port table. Setups that rely on accepting more thancores * 65536connections must setnode.max_portsexplicitly (and restart the node) before upgrading.The hidden
node.process_limitsetting is reinstated as an override: when set to a value larger than the derived limit (2 * max_ports), it is respected; smaller values are ignored so the process table never under-sizes the port table.A new
node.schedulerssetting (defaultauto) controls the Erlang scheduler count (+S). Withauto, the count is capped at the number of logical processors actually available to the VM (sched_getaffinityon Linux), so containers limited via--cpuset-cpusor Kubernetes CPU requests no longer spawn scheduler OS threads they cannot run in parallel. Set it to a positive integer to override the auto-detected value.#17437 Prometheus scrape endpoints (
/api/v5/prometheus/*) now require authentication by default. Setprometheus.enable_basic_auth = falseexplicitly to restore the previous unauthenticated behavior. Deployments that scrape these endpoints without credentials will need to either configure credentials on the scraper or set the config field. The recommended setup is a dedicated API key with themonitoringscope, used with Bearer auth in the scraper.#17582 Prometheus VM and Mnesia collector metric names now use the
prometheus.erl6.x promtool-compliant names.Affected metric renames:
erlang_mnesia_failed_transactions->erlang_mnesia_failed_transactions_totalerlang_mnesia_committed_transactions->erlang_mnesia_committed_transactions_totalerlang_mnesia_logged_transactions->erlang_mnesia_logged_transactions_totalerlang_mnesia_restarted_transactions->erlang_mnesia_restarted_transactions_totalerlang_vm_memory_atom_bytes_total->erlang_vm_memory_atom_byteserlang_vm_memory_bytes_total->erlang_vm_memory_byteserlang_vm_memory_processes_bytes_total->erlang_vm_memory_processes_byteserlang_vm_memory_system_bytes_total->erlang_vm_memory_system_byteserlang_vm_statistics_context_switches->erlang_vm_statistics_context_switches_totalerlang_vm_statistics_garbage_collection_number_of_gcs->erlang_vm_statistics_garbage_collection_number_of_gcs_totalerlang_vm_statistics_garbage_collection_words_reclaimed->erlang_vm_statistics_garbage_collection_words_reclaimed_totalerlang_vm_statistics_garbage_collection_bytes_reclaimed->erlang_vm_statistics_garbage_collection_bytes_reclaimed_totalerlang_vm_statistics_runtime_milliseconds->erlang_vm_statistics_runtime_seconds_totalerlang_vm_statistics_wallclock_time_milliseconds->erlang_vm_statistics_wallclock_time_seconds_totalerlang_vm_port_count->erlang_vm_portserlang_vm_process_count->erlang_vm_processeserlang_vm_atom_count->erlang_vm_atoms#17596 Added authorization
Configuration
📅 Schedule: (in timezone America/New_York)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.