Skip to content

Version 0.1 to 3.x


Release Date: 2019-12-03

EMQX 3.2.7 is now available. This version resupports to configure the default username and clientid through the configuration file.

emqx-auth-username (plugin)


  • Resupport to configure the default username through the configuration file

Github PR: emqx/emqx-auth-username#127

emqx-auth-clientid (plugin)


  • Resupport to configure the default clientid through the configuration file

Github PR: emqx/emqx-auth-clientid#123


Release Date: 2019-11-23

EMQX 3.2.6 is now available. This version focuses on feature improvements and bug fixes.

emqx (major)

Bug fixes:

  • Fix the issue that messages maybe disordered when forwarding messages to remote nodes via gen_rpc

Github PR: emqx/emqx#3049

  • Fix emqx crash caused by the crash of auth plugin

Github PR: emqx/emqx#3048


Release Date: 2019-11-15

EMQX 3.2.5 is now available. This version focuses on bug fixes.

emqx-rule-engine (plugin)

Bug fixes:

  • Support rule SQL: FOREACH/DO/INCASE

Github Commit: emqx/emqx-rule-engine#a962e3

  • Support rule SQL: CASE/WHEN

Github Commit: emqx/emqx-rule-engine#40e68e

  • Support comparing atom to binary in WHERE SQL clause

Github Commit: emqx/emqx-rule-engine#b240cc

  • Fix column validation failure in select and foreach

Github Commit: emqx/emqx-rule-engine#6a1267

  • Fix race-conditions when re-build rules

Github Commit: emqx/emqx-rule-engine#af8967

  • Fix incorrect publish message by adding default flags in republish action

Github Commit: emqx/emqx-rule-engine#60e45c

minirest (plugin)

Bug fixes:

  • Fix missing error data in log

Github PR: emqx/minirest#20

emqx-web-hook (plugin)

Bug fixes:

  • Fix bad match

Github Commit: emqx/emqx-web-hook#3dd041


Release Date: 2019-10-28

EMQX 3.2.4 is now available. This version mainly adds IPv6 support for Dashbaord and REST APIs, and fixes some bugs.

Bug fixes:

  • Fix the issue that 'max_subscriptions' don't working

Github PR: emqx/emqx#2922

Github Issue: emqx/emqx#2908

emqx-auth-mysql (plugin)

Bug fixes:

  • Gets the value corresponding to placeholders more securely

Github PR: emqx/emqx-auth-mysql#180

Github Issue: emqx/emqx#2937

emqx-dashboard (plugin)


  • Support for IPv6 access to Dashbaord

Github PR: emqx/emqx-dashboard#161

emqx-management (plugin)


  • REST API supports IPv6

Github PR: emqx/emqx-management#134

emqx-delay-publish (plugin)

Bug fixes:

  • Fix the issue that delayed messages are published disorderly, thanks contribution of soldag

Github PR: emqx/emqx-delay-publish#49

Github Issue: emqx/emqx-delay-publish#15

emqx-rule-engine (plugin)


  • Improved the SQL syntax for decoding the payload of JSON format

Github Repository: emqx/emqx-rule-engine


Release Date: 2019-09-16

EMQX 3.2.3 is now available, and this version focuses on bug fixes.

Bug fixes:

  • Fix the issue that the alarm of CPU usage triggered abnormally when emqx container is running

GitHub Commit: emqx/emqx#9cdaa7

  • Fix the issue that the mechanism of message expiration doesn't take effect

Github Commit: emqx/emqx#31671f

  • Fix the issue thar placeholder like '%c' in mountpoint doesn't take effect

Github Commit: emqx/emqx#58ba22

emqx-dashboard (plugin)

Bug fixes:

  • Fix the issue that the function of SSL is unavailable

Github Commit: emqx/emqx-dashboard#272a42


Release Date: 2019-08-03

EMQX 3.2.2 is now available, and this version focuses on bug fixes.


  • Extends configurations of gen_rpc

Github PR: emqx/emqx#2732

emqx-rule-engine (plugin)

Bug fixes:

  • Fix the issue testing URL connectivity

Github PR: emqx/emqx-rule-engine#88

emqx-dashboard (plugin)


  • Add help page

ekka (dependency)

Bug fixes:

  • Fix the issue that releasing lock could causes crash

Github PR: emqx/ekka#60


Release Date: 2019-07-20

EMQX 3.2.1 is now available. We've enhanced performance and fixed bugs.


  • Optimize the performance of gen_rpc

Github PR: emqx/emqx#2694

  • Support using hostname to automatically discover k8s cluster

Github PR: emqx/emqx#2699

  • Change the default uptime heartbeat interval to 30s

Github PR: emqx/emqx#2696

Bug fixes:

  • Fix the issue that encouter crash when Websocket sessions go offline abnormally

Github PR: emqx/emqx#2697

  • Fix the issue that ws_channel is still online when session closed on exception

Github PR: emqx/emqx#2704

emqx-rule-engine (plugin)


  • Improve parameters for republish action

Github PR: emqx/emqx-rule-engine#81

Bug fixes:

  • Fix the issue that fail to select payload fields using '.'

Github PR: emqx/emqx-rule-engine#83

emqx-dashboard (plugin)

Bug fixes:

  • Fix the issue rendering resources list incorrectly in Dashboard on Safari

Github PR: emqx/emqx-dashboard#124 , emqx/emqx-dashboard#125 , emqx/emqx-dashboard#126

emqx-lwm2m (plugin)


  • Compatible with client login using LwM2M v1.1

Github Commit: emqx/emqx-lwm2m#1c03bf

emqx-rel (build project)


  • Support building emqx-rel with built-in rebar3

Github PR: emqx/emqx-rel#394

  • Delay EMQX windows service auto start

Github PR: emqx/emqx-rel#395


Release Date: 2019-07-12

EMQX 3.2.0 is mainly for improvements of rule engine.

Rule Engine

Improve rule engine and ui of dashboard, support more actions.

Project building

Support rebar3 to build project.

MQTT Broker Bridge

Bridging to MQTT Broker is now provided by emqx-bridge-mqtt (plugin) instead.

HTTP Plugin

Support HTTPs.

Cluster (ekka)

Improve stability of emqx cluster.

Other Plugins and Dependencies

Fix Windows service registering issue.


Release Date: 2019-06-06

EMQX 3.1.2 is now available. We've fixed bugs and improved stability.


Bug fixes:

Github PR: emqx/emqx#2601

  • Fix the issue that failed when setting the log level

Github PR: emqx/emqx#2600

  • Fix the issue that doesn't match the return value

Github PR: emqx/emqx#2560

  • Hotfix for emqx_sn and emqx_coap plugins

Github PR: emqx/emqx#2556

emqx-coap (plugin)

Bug fixes:

  • Fix the issue that messages can't be published

Github PR: emqx/emqx-coap#120

ekka (deps)

Bug fixes:

  • Fix the issue makes emqx_sm_locker crash

Github PR: emqx/ekka#54

  • Fix the issue that k8s can't use dns cluster

Github PR: emqx/ekka#53

  • Fix the issue that etcd cluster is unusable

Github PR: emqx/ekka#52


Release Date: 2019-05-10

EMQX 3.1.1 is now available. In this version we've fixed bugs and improved stability.



  • Enlarge the maximum number of characters printed by each log event

Github PR: emqx/emqx#2509

  • force_shutdown_policy will use a different value according to digits of system

Github PR: emqx/emqx#2515

Bug fixes:

  • Configure and use long_gclong_schedule correctly

Github PR: emqx/emqx#2504 , emqx/emqx#2513

  • Fix the issue suboptions/count not been updated

Github PR: emqx/emqx#2507

emqx-lwm2m (plugin)

Bug fixes:

  • Fix the issue that mountpoint didn't take effect

Github PR: emqx/emqx-lwm2m#34

  • Fix the issue that message couldn't be forwarded by emqx-web-hook

Github PR: emqx/emqx-lwm2m#35


Release Date: 2019-04-26

EMQX 3.1.0 is now available. The rule engine has become stable and production ready. We've also introduced an emqx-edge manager - the Storm , and improved some code for flapping.



  • Add emqx_ct_helpers as deps and refactor test suites

Github PR: emqx/emqx#2480

  • Refactor flapping code

Github PR: emqx/emqx#2476

emqx-management (plugin)

Bug fixes:

  • Fixed listeners acceptors is undefined

Github PR: emqx/emqx-management#76

emqx-rule-engine (plugin)


  • Support validation of rule action params

Github PR: emqx/emqx-rule-engine#b28318

  • Check dependency when deleting resources

Github PR: emqx/emqx-rule-engine#fa75b9

  • Remove from param from republish action

Github PR: emqx/emqx-rule-engine#8721eb

  • Fix where clause of SQL cannot handle integers

Github PR: emqx/emqx-rule-engine#c9c761

emqx-storm (plugin)


  • Support edge storm

Github Repository: emqx/emqx-storm


Release Date: 2019-01-25

The EMQX 3.0.1 is now available. Many improvements and bug fixes has been made.



  • Add +L vm args for reducing some memory for emqx edge

Github PR: emqx/emqx#2110

  • Change logger level in a single command

Github PR: emqx/emqx#2115

  • Refactor the emqx bridge; Support bridge message persistence.

Github PR: emqx/emqx#2160 , emqx/emqx#2117 , emqx/emqx#2113 , emqx/emqx#2108 , emqx/emqx#2053

  • Optimize route matching

Github PR: emqx/emqx#2124

  • Improve the design of 'emqx_client' module

Github PR: emqx/emqx#2137

  • Improve the design of 'emqx_pool' module

Github PR: emqx/emqx#2138

  • Improve shared subscribe dispatch implementation

Github PR: emqx/emqx#2144

  • Re-generate the configuration when restarting emqx

Github PR: emqx/emqx#2175

Bug Fixes:

  • Fix crash if peer closed the connection

Github PR: emqx/emqx#2120

  • Fix the bug that send will message unexpectedly

Github PR: emqx/emqx#2156

emqx-lwm2m (plugin)

Bug Fixes:

  • Remove authentication for LwM2M

GitHub PR: emqx/emqx-lwm2m#14

emqx-auth-username (plugin)


  • Support optional encryption modes

GitHub PR: emqx/emqx-auth-usernmae#64

emqx-auth-clientid (plugin)


  • Support optional encryption modes

GitHub PR: emqx/emqx-auth-clientid#52

emqx-management (plugin)


  • Add a new CLI 'plugins reload <Name>'; Re-generate the configuration when reloading emqx plugin

Github PR: emqx/emqx-management#30


Release Date: 2018-12-22

The EMQX 3.0.0 is now available. In this release, we have re-designed the ETS tables for subscripions, and enhanced the performance by refactoring some modules and tuning the erlang vm args.



  • Move addtional vm args to a separate vm.args file

Github PR: emqx/emqx#2033 , emqx/emqx#2057 , emqx/emqx#2070

  • Add will topic validation and acl check

Github PR: emqx/emqx#2075

  • Add option to disconnect client in case of ACL denied

Github PR: emqx/emqx#2059

  • Implement a new session supervisor

Github PR: emqx/emqx#2077

  • Add 'active_n' option to optimize the CPU usage of emqx_connection

Github PR: emqx/emqx#2060

  • Supports batch processing 'DOWN' events

Github PR: emqx/emqx#2060

  • Add sharding for subscription tables

Github PR: emqx/emqx#2044

  • Implement a new 'emqx_gc' module

Github PR: emqx/emqx#2090

Bug Fixes:

  • Fix bug for Topic Alias Maximum

Github PR: emqx/emqx#2074

  • Fix a bug that would not send a will message in some cases

Github PR: emqx/emqx#2068

emqx-auth-ldap (plugin)


  • Better design

GitHub PR: emqx/emqx-auth-ldap#46

emqx-lua-hook (plugin)

Bug Fixes:

  • Make all test cases pass

GitHub PR: emqx/emqx-lua-hook#45

emqx-management (plugin)


  • Add test cases for rest api and better design for the format of response

GitHub PR: emqx/emqx-management#21


Release Date: 2018-07-23

Bugfix and Enhancements

Fix the getting config REST API which throws exceptions.

Support to restart listeners when emqttd is running.

Specify a fixed tag for the dependency libraries.


Fix token verification with jwerl 1.0.0


Support $all variable in ACL query. (emq-auth-mongo#123)

Support both clientid and username variables in all queries. (emq-auth-mongo#123)


Release Date: 2018-06-27

Bugfix and Enhancements

Upgrade the esockd library to v5.2.2


Ignore auth on ignore in body, allows for chaining methods


Release Date: 2018-05-20

Bugfix and Enhancements

Bugfix: check params for REST publish API (#1599)

Upgrade the mongodb library to v3.0.5


Bugfix: proxy protocol - set socket to binary mode (#78)


Release Date: 2018-05-11

Bugfix and Enhancements

Bugfix: unregister users CLI when unload emq_auth_username (#1588)

Bugfix: Should be an info level when change CleanSession (#1590)

Bugfix: emqttd_ctl crashed when emq_auth_usename doesn't exist (#1588)


Improve: Support authentication database (authSource) (#116)


Release Date: 2018-04-22

Bugfix and Enhancements

Bugfix: fixed spec of function setstats/3 (#1575)

Bugfix: clean dead persistent session on connect (#1575)

Bugfix: dup flag not set when re-deliver (#1575)

Bugfix: Upgrade the lager_console_backend config (#1575)

Improve: Support set k8s namespace (#1575)

Upgrade the ekka library to v0.2.3 (#1575)

Improve: move PIPE_DIR dir from /tmp/WHOAMIerlpipes/NAME/ to /RUNNERDATADIR/{WHOAMI}_erl_pipes/$NAME/ (emq-relx#188)


Improve: Retry 3 times when httpc:request occurred socket_closed_remotely error (emq-auth-http#70)


Release Date: 2018-03-25

Bugfix and Enhancements

Security: LWT message checking the ACL (#1524)

Bugfix: Retain msgs should not be sent to existing subscriptions (#1529)


Validate JWT token using a expired field (#29)


Release Date: 2018-03-03

Bugfix and Enhancements

Feature: Add etc/ssl_dist.conf file for erlang SSL distribution (emq-relx#178)

Feature: Add node.ssl_dist_optfile option and etc/ssl_dist.conf file (#1512)

Feature: Support Erlang Distribution over TLS (#1512)

Improve: Tune off the 'tune_buffer' option for external MQTT connections (#1512)


Clean registered topics if mqtt-sn client send a 2nd CONNECT in connected state (#76)

Upgrade the esockd library to v5.2.1 (#76)


Remove 'password' param from ACL and superuser requests (#66)


Release Date: 2018-01-29

Bugfix and Enhancements

Feature: Forward real client IP using a reverse proxy for websocket (#1335)

Feature: EMQ with link local ipv6 address not responding to ping (#1460)

Feature: Add PROTO_DIST_ARG flag to support clustering via IPv6 address. (#1460)

Bugfix: retain bit is not set when publishing to clients (when it should be set). (#1461)

Bugfix: Can't search topic on web dashboard (#1473)


Bugfix: CONNACK is not always sent to the client (emq-sn#67)

Bugfix: Setting the port to ::1:2000 causes error (emq-sn#66)


Release Date: 2018-01-08

Bugfix and Enhancements

Add a full documentation for emq.conf and plugins.

Repair a dead link in README - missing emq-lwm2m. (#1430)

Subscriber with wildcard topic does not receive retained messages with sub topic has $ sign (#1398)

Web Interface with NGINX Reverse Proxy not working. (#953)


Add dashboard.default_user.login , dashboard.default_user.password options to support configuring default admin.


The emq-modules rewrite config is not right. (#35)


Upgrade alpine to 3.7 (#31)


Support ARM Platform (#12)


Release Date: 2017-12-26

Bugfix and Enhancements

Support X.509 certificate based authentication (#1388)

Add proxy_protocol, proxy_protocol_timeout options for ws/wss listener.

Cluster discovery etcd nodes key must be created manually. (#1402)

Will read an incorrect password at the last line of emq_auth_username.conf (#1372)

How can i use SSL/TLS certificate based client authentication? (#794)

Upgrade the esockd library to v5.2.


Improve the parser of proxy protocol v2.

Add 'send_timeout', 'send_timeout_close' options.

Rename esockd_transport:port_command/2 function to async_send/2.

Add test case for esockd_transport:async_send/2 function.

Add esockd_transport:peer_cert_subject/1, peer_cert_common_name/1 functions.


Update depends on emqtt/mysql-otp.

Fixed the issue that Cannot connect to MySQL 5.7 (#67).


Fix mergeconf/3 appending line break error. (#152)


Fix crash in emq_sn_gateway:transform() function which handles SUBACK. (#57)

Define macro SN_RC_MQTT_FAILURE. (#59)


Filter auth_failure client for disconnected hook. (#30)


Release Date: 2017-12-03

Bugfix and Enhancements

Remove the unnecessary transactions to optimize session management.

Should not exit arbitrarily when clientid conflicts in mnesia.

Change the default value of 'mqtt.session.enable_stats' to 'on'.

The DUP flag should be set to 0 for all QoS0 messages. (emqttd#1319)

Fix the 'no function clause' exception. (emqttd#1293)

The retained flags should be propagated for bridge. (emqttd#1293)

The management API should listen on (emqttd#1353)

Fast close the invalid websocket in init/1 function.

erlang:demonitor/1 the reference when erasing a monitor. (emqttd#1340)


Don't clean the retain flag after the retained message is stored.

Add three CLIs for the retainer plugin. (emq-retainer#38)


Refactor(priv/www): improve the routing page. (emq-dashboard#185)


Turn off the subscription module by default. (emq-modules#26)


Add an integration test case for sleeping device.

Do not send will topic if client is kicked out.

Prevent crash information in log when emq_sn_gateway getting timeout, since it is a possible procedure.


Support node cookie value with = characters. (emq-relx#146)


Improve Req:get(peername) funciton to support x-forwarded-for and x-remote-port . (emqtt/mochiweb#9)

2.3.0 "Passenger's Log"

Release Date: 2017-11-20

EMQ 2.3.0 is available now! EMQ R2.3.0 improved the PubSub design to avoid race-condition issue and optimized the message routing efficiency. The self-signed certificates for SSL released with EMQ has been updated. This release also comes with a new dashboard theme and improvement of API design.

Bugfix and Enhancements

Fixed the issue that Retained message is not sent for Subscribe to existing topic. (emqttd#1314)

Fixed the issue that The DUP flag MUST be set to 0 for all QoS0 messages.(emqttd#1319)

Improve the pubsub design and fix the race-condition issue. (emqttd#PR1342)

Crash on macOS High Sierra (emqttd#1297)

emq-dashboard Plugin (emq-dashboard#PR174)

Upgraded the 'subscriptions' RESTful API.

Improvement of the auth failure log. (emq-dashboard#59)

emq-coap Plugin (emq-coap#PR61)

Replaced coap_client with er_coap_client.

Fixed: correct the output format of coap_discover() to enable ".well-known/core".

Refactor the coap_discover method.


Upgraded the bin/nodetool script to fix the rpcterms command.

emq-web-hook Plugin

Fixed the emq_web_hook plugin getting username from client.connected hook. (emq-web-hook#19)

emq-auth-jwt Plugin(emq-auth-jwt#PR15)

Added test cases for emq_auth_jwt.

Fixed jwt:decode/2 functions's return type.

emq-auth-mongo Plugin(emq-auth-mongo#PR92)

Updated the default MongoDB server configuration.

2.2 "Nostalgia"

Release Date: 2017-07-08

Release Name: Nostalgia

EMQ 2.2.0 is available now! EMQ R2.2 supports CoAP(RFC 7252), MQTT-SN protocols completely, and it is extensible with Web Hook, Lua Hook and Elixir Hook.

Feature: Add 'listeners restart/stop' CLI command (emqttd#1135)

Bugfix: Exit Code from emqttd_ctl (emqttd#1133)

Bugfix: Fix spec errors found by dialyzer (emqttd#1136)

Bugfix: Catch exceptions thrown from rpc:call/4 (emq-dashboard#128)

Bugfix: Topic has been decoded by gen-coap, no conversion needed (emq-coap#43)


Release Date: 2017-04-21

Fix emqttd_ctl sessions list CLI

Newline character in emq.conf causing error;(emqttd#1000)

Fix crash caused by duplicated PUBREC packet (emqttd#1004)

Unload the 'session.created' and 'session.teminated' hooks (emq-plugin-template)


Release Date: 2017-04-14

Localhost:8083/status returns 404 when AWS LB check the health of EMQ (emqttd#984)

Https listener not working in 2.1.0 as in 2.0.7 (emq-dashboard#105)

Fix mqtt-sn Gateway not working (emq-sn#12)

Upgrade emq-sn Plugin (emq-sn#11)

Upgrade emq-coap Plugin (emq-coap#21)


Release Date: 2017-04-07

The stable release of 2.1 version.

Trouble with auth.mysql.acl_query (emq-auth-mysql#38)

Filter the empty fields in ACL table (emq-auth-mysql#39)


Release Date: 2017-01-20

The Last Maintenance Release for EMQ 2.0, and support to build RPM/DEB Packages.

Create the emq-package project:

emq-auth-http#9: Update the priv/emq_auth_http.schema, cuttlefish:unset() if no super_req/acl_req config exists

emq-auth-mongo#31: cuttlefish:unset() if no ACL/super config exists

emq-dashboard#91: Fix the exception caused by binary payload

emq-relx#21: Improve the binemqttd.cmd batch script for windows platform

emqttd#873: Documentation: installing-from-source

emqttd#870: Documentation: The word in Documents is wrong

emqttd#864: Hook 'client.unsubscribe' need to handle 'stop'

emqttd#856: Support variables in etc/emq.conf: , ,


Release Date: 2017-01-08

Upgrade the esockd library to v4.1.1

esockd#41: Fast close the TCP socket if ssl:ssl_accept failed

emq-relx#15: The EMQ 2.0 broker cannot run on Windows.

emq-auth-mongo#31: Mongodb ACL Cannot work?


Release Date: 2016-12-24

emq-auth-http#9: Disable ACL support

emq-auth-mongo#29: Disable ACL support

emq-auth-mongo#30: {datatype, flag}


Release Date: 2016-12-16

emqttd#822: Test cases for SSL connections

emqttd#818: trap_exit to link WebSocket process

emqttd#799: Can't publish via HTTPS


Release Date: 2016-12-12

emqttd#796: Unable to forbidden tcp lisener

emqttd#814: Cannot remove a 'DOWN' node from the cluster

emqttd#813: Change parameters order

emqttd#795: Fix metrics of websocket connections

emq-dashboard#88: Rename the default topic from “/World” to “world”

emq-dashboard#86: Lookup all online clients

emq-dashboard#85: Comment the default listener port

emq-mod-retainer#3: Retained messages get lost after EMQTT broker restart.


Release Date: 2016-12-05

emqttd#787: Stop plugins before the broker stopped, clean routes when a node down

emqttd#790: Unable to start emqttd service if username/password contains special characters

emq-auth-clientid#4: Improve the configuration of emq_auth_clientid.conf to resolve emqttd#790

emq-auth-username#4: Improve the configuration of emq_auth_username.conf to resolve emqttd#790


Release Date: 2016-11-30

emqttd#781: Update README for EMQ 2.0

emq_dashboard#84: Show the Cluster Status of Node

emq_dashboard#79: disc_copies to store mqtt_admin table

emq_auth_clientid: disc_copies to store mqtt_auth_clientid table

emq_auth_username: disc_copies to store mqtt_auth_username table

emq_mod_subscription#3: Remove emq_mod_subscription table and module.subscription.backend config

emq_plugin_template#5: Unregister Auth/ACL modules when the plugin unloaded

2.0 "West of West Lake"

Release Date: 2016-11-24

Release Name: West of West Lake

The EMQ Version 2.0, named "West of West Lake", has been released with a lot of improvements and enhancements, and is ready to deploy in production now.

  1. First of all, the EMQ broker now supports Shared Subscription and Local Subscription .
  2. Supports CoAP(RFC 7252) and MQTT-SN protocol/gateway.
  3. Adopt a more user-friendly k = v syntax for the new configuration file.
  4. Add more hooks and new plugins, integrate with HTTP, LDAP, Redis, MySQL, PostgreSQL and MongoDB.
  5. Cross-platform Builds and Deployment. Run the broker on Linux, Unix, Windows, Raspberry Pi and ARM platform.

Shared Subscription

Shared Subscription supports Load balancing to distribute MQTT messages between multiple subscribers in the same group:

|       | --Msg1--> Subscriber1
Publisher--Msg1,Msg2,Msg3-->|  EMQ  | --Msg2--> Subscriber2
|       | --Msg3--> Subscriber3

Create a shared subscription with $queue/ or $share/<group>/ prefix:

$queue/mosquitto_sub -t '$queue/topic
$share/<group>/mosquitto_sub -t '$share/group/topic

Local Subscription

The Local Subscription will not create global routes on clustered nodes, and only dispatch MQTT messages on local node.

Usage: subscribe a topic with $local/ prefix. and relx

The EMQ 2.0 adopts and relx tools to build the whole projects on Linux, Unix and Windows.

CoAP Support

The EMQ 2.0 supports CoAP(RFC7252) protocol/gateway now, and supports communication between CoAP, MQTT-SN and MQTT clients.

CoAP Protocol Plugin:

MQTT-SN Support

The EMQ 2.0 now supports MQTT-SN protocol/gateway.

MQTT-SN Plugin:

New Configuration File

The release integrated with cuttlefish library, and adopted a more user-friendly k = v syntax for the new configuration file:

## Node name = emqttd@
## Max ClientId Length Allowed.
mqtt.max_clientid_len = 1024

The new configuration files will be preprocessed and translated to an Erlang app.config before the EMQ broker started:

----------------------                                          2.0/schema/*.schema      -------------------
    | etc/emq.conf       |                   -----------------              \|/              | data/app.config |
    |       +            | --> mergeconf --> | data/app.conf | -->  cuttlefish generate  --> |                 |
    | etc/plugins/*.conf |                   -----------------                               | data/vm.args    |
    ----------------------                                                                   -------------------

OS Environment Variables

EMQ_NODE_NAMEErlang node name
EMQ_NODE_COOKIECookie for distributed erlang node
EMQ_MAX_PORTSMaximum number of opened sockets
EMQ_TCP_PORTMQTT TCP Listener Port, Default: 1883
EMQ_SSL_PORTMQTT SSL Listener Port, Default: 8883
EMQ_HTTP_PORTHTTP/WebSocket Port, Default: 8083
EMQ_HTTPS_PORTHTTPS/WebSocket Port, Default: 8084

Docker Image

We released an official Docker Image for EMQ 2.0. The open source project for Dockerfile: .

Full Support for Windows

The EMQ 2.0 fully supports Windows platform. You can run 'emqttd_ctl' command and cluster two nodes on Windows now.

Bugfix and Enhancements

  • 764: add mqtt.cache_acl option

  • 667: Configuring emqttd from environment variables

  • 722: mqtt/superuser calls two times emqtt_auth_http

  • 754: "-heart" option for EMQ 2.0

  • 741: emq_auth_redis cannot use hostname as server address


emq_dashboardWeb Dashboard
emq_auth_clientidClientId Auth Plugin
emq_auth_usernameUsername/Password Auth Plugin
emq_auth_ldapLDAP Auth
emq_auth_httpHTTP Auth/ACL Plugin
emq_auth_mysqlMySQL Auth/ACL Plugin
emq_auth_pgsqlPostgreSQL Auth/ACL Plugin
emq_auth_redisRedis Auth/ACL Plugin
emq_auth_mongoMongoDB Auth/ACL Plugin
emq_mod_presencePresence Module
emq_mod_retainerRetainer Module
emq_mod_rewriteTopic Rewrite Module
emq_mod_subscriptionSubscription Module
emq_coapCoAP Protocol Plugin
emq_snMQTT-SN Protocol Plugin
emq_stompSTOMP Protocol Plugin
emq_sockjsSTOMP over SockJS Plugin
emq_reconRecon Plugin
emq_reloaderReloader Plugin
emq_plugin_templateTemplate Plugin


Release Date: 2016-08-19

Support './bin/emqttd_ctl users list' CLI (#621)

Cannot publish payloads with a size of the order 64K using WebSockets (#643)

Optimize the procedures that retrieve the Broker version and Borker description in the tick timer (PR#627)

Fix SSL certfile, keyfile config (#651)



Release Date: 2016-06-30

Upgrade mysql-otp driver to 1.2.0 (#564, #523, #586, #596)

Fix WebSocket Client Leak (PR #612) using paho java client (#551)

Send message from paho java client to javascript client (#552)

Compatible with the Qos0 PUBREL packet (#575)

Empty clientId with non-clean session accepted (#599)

Update docs to fix typos (#601, #607)


Release Date: 2016-06-04

Compatible with the Qos0 PUBREL packet (#575)

phpMqtt Client Compatibility (#572) using paho java client (#551)


Release Date: 2016-06-01


Upgrade eSockd library to 4.0 and Support IPv6

Support to listen on specific IP Address:

{mqtt, {"", 1883}, [

Add MongoDB, HTTP Authentication/ACL Plugins

Upgrade MySQL, PostgreSQL, Redis Plugins to support superuser authentication and avoid SQL Injection


Allow human-friendly IP addresses (PR#395)

File operation error: emfile (#445)

emqttd_plugin_mongo not found in emqttd (#489)

emqttd_plugin_mongo Error While Loading in emqttd (#505)

Feature request: HTTP Authentication (#541)

Compatible with the Qos0 PUBREL packet (#575)


Bugfix: function_clause exception occurs when registering a duplicated authentication module (#542)

Bugfix: ./emqttd_top msg_q result: {"init terminating in do_boot",{undef,[{etop,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}} (#557)


111 common test cases.

Dashboard Plugin

WebSocket Page: Support 'Clean Session', Qos, Retained parameters (emqttd_dashboard#52)

Upgrade eSockd library to 4.0, Show OTP Release on Overview Page (emqttd_dashboard#61)

Changing dashboard credentials for username authentication (emqttd_dashboard#56)

Add './bin/emqttd_ctl admins' CLI, support to add/delete admins

HTTP Auth Plugin

Authentication/ACL by HTTP API:

MongoDB Plugin

Upgrade Erlang MongoDB driver to v1.0.0

Support superuser authentication

Support ACL (emqttd_plugin_mongo#3)

MySQL Plugin

Support superuser authentication

Use parameterized query to avoid SQL Injection

Postgre Plugin

Support superuser authentication

Use parameterized query to avoid SQL Injection

Redis Plugin

Support superuser authentication

Support ClientId authentication by '%c' variable

Reloader Plugin

Reload modified modules during development automatically.


Release Date: 2016-05-23

eSockd 3.2

MochiWeb 4.0.1


Release Date: 2016-05-04

Issue#534 - './bin/emqttd_ctl vm' - add 'port/count', 'port/limit' statistics

Issue#535 - emqttd_client should be terminated properly even if exception happened when sending data

PR#519 - The erlang '-name' requires the fully qualified host name

emqttd_reloader plugin - help reload modified modules during development.


Release Date: 2016-04-16

PR#515 - Fix '$queue' pubsub, add 'pubsub_queue' test and update docs

1.0 (The Seven Mile Journey)

Release Date: 2016-04-13

Release Name: The Seven Mile Journey

We finally released Version 1.0 (The Seven Mile Journey) with full documentation after two years' development and more than fifty iterations.

The emqttd 1.0 implements a fully-featured, scalable, distributed and extensible open-source MQTT broker for IoT, M2M and Mobile applications:

  1. Full MQTT V3.1/3.1.1 Protocol Specifications Support
  2. Massively scalable - Scaling to 1 million connections on a single server
  3. Distributed - Route MQTT Messages among clustered or bridged broker nodes
  4. Extensible - LDAP, MySQL, PostgreSQL, Redis Authentication/ACL Plugins

Bugfix and Enhancements

Possible race condition using emqttd_cm (#486)

Improve the design of retained message expiration (#503)

Do not expire the retained messages from $SYS/# topics (#500)



Thank Ericsson for the Great Erlang/OTP Platform ( )!

Contributors on GitHub: @callbay @lsxredrain @hejin1026 @desoulter @turtleDeng @Hades32 @huangdan @phanimahesh @dvliman @Prots @joaohf

Partners: EACG ( )

Favorite Band: The Seven Mile Journey ( )


Release Date: 2014-12-07

rewrite the project, integrate with esockd, mochiweb

support MQTT 3.1.1

support HTTP to publish message


Release Date: 2013-01-05

Bugfix: remove QOS_1 match when handle PUBREL request

Bugfix: reverse word in emqtt_topic:words/1 function


Release Date: 2013-01-04

Bugfix: fix "mosquitto_sub -q 2 ......" bug

Bugfix: fix keep alive bug


Release Date: 2013-01-04

Feature: Support QOS2 PUBREC, PUBREL, PUBCOMP messages

Bugfix: fix emqtt_frame to encode/decoe PUBREC/PUBREL messages


Release Date: 2012-12-27

Feature: release support like riak

Bugfix: use ?INFO/?ERROR to print log in tcp_listener.erl


Release Date: 2012-09-24

Feature: use rebar to generate release

Feature: support retained messages

Bugfix: send will msg when network error


Release Date: 2012-09-21

The first public release.