Changes

Version 2.0.6

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?

Version 2.0.5

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}

Version 2.0.4

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

Version 2.0.3

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.

Version 2.0.2

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

Version 2.0.1

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

Version 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:

Prefix Examples
$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.

erlang.mk and relx

The EMQ 2.0 adopts erlang.mk 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: https://github.com/emqtt/emqttd_coap

MQTT-SN Support

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

MQTT-SN Plugin: https://github.com/emqtt/emq_sn

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
node.name = emqttd@127.0.0.1
...
## 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_NAME Erlang node name
EMQ_NODE_COOKIE Cookie for distributed erlang node
EMQ_MAX_PORTS Maximum number of opened sockets
EMQ_TCP_PORT MQTT TCP Listener Port, Default: 1883
EMQ_SSL_PORT MQTT SSL Listener Port, Default: 8883
EMQ_HTTP_PORT HTTP/WebSocket Port, Default: 8083
EMQ_HTTPS_PORT HTTPS/WebSocket Port, Default: 8084

Docker Image

We released an official Docker Image for EMQ 2.0. The open source project for Dockerfile: https://github.com/emqtt/emq_docker.

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

Plugins

Plugin Description
emq_dashboard Web Dashboard
emq_auth_clientid ClientId Auth Plugin
emq_auth_username Username/Password Auth Plugin
emq_auth_ldap LDAP Auth
emq_auth_http HTTP Auth/ACL Plugin
emq_auth_mysql MySQL Auth/ACL Plugin
emq_auth_pgsql PostgreSQL Auth/ACL Plugin
emq_auth_redis Redis Auth/ACL Plugin
emq_auth_mongo MongoDB Auth/ACL Plugin
emq_mod_presence Presence Module
emq_mod_retainer Retainer Module
emq_mod_rewrite Topic Rewrite Module
emq_mod_subscription Subscription Module
emq_coap CoAP Protocol Plugin
emq_sn MQTT-SN Protocol Plugin
emq_stomp STOMP Protocol Plugin
emq_sockjs STOMP over SockJS Plugin
emq_recon Recon Plugin
emq_reloader Reloader Plugin
emq_plugin_template Template Plugin

Version 2.0-rc.3

Release Date: 2016-11-01

  1. Change the three modules(Presence, Retainer, Subscription) to standalone plugins:
emq_mod_retainer Retained Message Storage
emq_mod_presence Publish presence message to $SYS topics when client connected or disconnected
emq_mod_subscription Subscribe topics automatically when client connected
  1. Update the SSL certificates under the etc/certs/ folder.
  2. Bugfix: Fixed a typo (#716)
  3. Bugfix: emqttd_http can not use emq_auth_http? #739
  4. Bugfix: emq_auth_redis cannot use hostname as server address (#741)
  5. Upgrade Redis, MySQL, Postgre and MongoDB plugins to support hostname.

Version 2.0-rc.2

Release Date: 2016-10-19

  1. A more user-friendly configuration for the EMQ broker. Integrate with cuttlefish library and adopt K = V syntax:

    node.name = emqttd@127.0.0.1
    
    ...
    
    mqtt.listener.tcp = 1883
    
    ...
    
  2. Support OS Environments:

    EMQ_NODE_NAME
    EMQ_NODE_COOKIE
    EMQ_MAX_PORTS
    EMQ_TCP_PORT
    EMQ_SSL_PORT
    EMQ_HTTP_PORT
    EMQ_HTTPS_PORT
    
  3. Refactor all the modules and plugins, and adopt new configuration syntax.

TODO: issues closed.

Version 2.0-rc.1

Release Date: 2016-10-03

  1. mqtt/superuser POST called two times in emqtt_auth_http (#696)

  2. Close MQTT TCP connection if authentication failed (#707)

  3. Improve the plugin management. Developer don’t need to add plugin’s config to rel/sys.config

  4. Add BUILD_DEPS in the plugin’s Makefile:

    BUILD_DEPS = emqttd
    dep_emqttd = git https://github.com/emqtt/emqttd emq20
    
  5. Improve the design of Redis ACL.

Version 2.0-beta.3

Release Date: 2016-09-18

New Features

Shared Suscriptions (#639, #416):

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

Local Subscriptions that will not create global routes:

mosquitto_sub -t '$local/topic'

Bugfix

Error on Loading emqttd_auth_http (#691)

Remove ‘emqttd’ application from dependencies (emqttd_coap PR#3)

Version 2.0-beta.2

Release Date: 2016-09-10

CoAP Support

Release an experimental CoAP Gateway: https://github.com/emqtt/emqttd_coap

API Breaking Changes

‘$u’, ‘$c’ variables in emqttd.conf and modules/acl.conf changed to ‘%u’, ‘%c’

Improve the design of mqtt retained message, replace emqttd_retainer with emqttd_mod_retainer.

Add ‘session.subscribed’, ‘session.unsubscribed’ hooks, remove ‘client.subscribe.after’ hook

Tab ‘retained_message’ -> ‘mqtt_retained’

Bugfix

[2.0 beta1] FORMAT ERROR: “~s PUBLISH to ~s: ~p” (PR #671)

Fixing issues in cluster mode. (PR #681)

Fixing issues with unsubscribe hook (PR #673)

Version 2.0-beta.1

Release Date: 2016-08-30

Release Name: West of West Lake

EMQ - Shortened Project Name

Adopt a shortened project name: EMQ(Erlang/Enterprise/Elastic MQTT Broker),E means Erlang/OTP, Enterprise and Elastic.

Improve the Release Management

In order to iterate the project fast, we will adopt a new release management strategy since 2.0. There will be two or three ‘Preview Release’ named beta1, beta2 or beta3, and then one or two ‘Release Candidate’ named rc1, rc2 before a Major version is production ready.

Seperate Rel from Application

We split the emqttd 1.x project into two projects since 2.0-beta1 release to resolve the plugins’ dependency issue.

A new project named `emqttd-relx`_ is created and responsible for buiding the emqttd application and the plugins:

git clone https://github.com/emqtt/emqttd-relx.git

cd emqttd-relx && make

cd _rel/emqttd && ./bin/emqttd console

erlang.mk and relx

The rebar which is used in 1.x release is replaced by erlang.mk and relx tools since 2.0-beta1 release.

You can check the ‘Makefile’ and ‘relx.config’ in the release project of the borker: `emqttd-relx`_ .

Improve Git Branch Management

stable 1.x Stable Branch
master 2.x Master Branch
emq10 1.x Developement Branch
emq20 2.x Development Branch
emq30 3.x Development Branch
issue#{id} BugFix Branch

New Config Syntax

Since 2.0-beta1 release the configuration file of the broker and plugins adopt a new syntax like rebar.config and relx.config:

etc/emqttd.conf for example:

%% Max ClientId Length Allowed.
{mqtt_max_clientid_len, 512}.

%% Max Packet Size Allowed, 64K by default.
{mqtt_max_packet_size, 65536}.

%% Client Idle Timeout.
{mqtt_client_idle_timeout, 30}. % Second

MQTT-SN Protocol Plugin

The MQTT-SN Protocol Plugin emqttd_sn has been ready in 2.0-beta1 release. The default UDP port of MQTT-SN is 1884.

Load the plugin:

./bin/emqttd_ctl plugins load emqttd_sn

Improve the PubSub Design

_images/publish.png

Improve the Plugin Management

The plugin of EMQ 2.0 broker is a normal erlang application which depends on and extends ‘emqttd’. You can create a standalone plugin application project, and add it to `emqttd-relx`_ Makefile as a DEP.

All the plugins’ config files will be copied to emqttd/etc/plugins/ folder when making emqttd brinary packages in `emqttd-relx`_ project:

▾ emqttd/
  ▾ etc/
    ▸ modules/
    ▾ plugins/
        emqtt_coap.conf
        emqttd.conf
        emqttd_auth_http.conf
        emqttd_auth_mongo.conf
        emqttd_auth_mysql.conf
        emqttd_auth_pgsql.conf
        emqttd_auth_redis.conf
        emqttd_coap.conf
        emqttd_dashboard.conf
        emqttd_plugin_template.conf
        emqttd_recon.conf
        emqttd_reloader.conf
        emqttd_sn.conf
        emqttd_stomp.conf

EMQ 2.0 Documentation

http://emqtt.io/docs/v2/index.html

Version 1.1.3

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)

Version 1.1.2

Version 1.1.2

Release Date: 2016-06-30

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

Fix WebSocket Client Leak (PR #612)

java.io.EOFException 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)

Version 1.1.1

Release Date: 2016-06-04

Compatible with the Qos0 PUBREL packet (#575)

phpMqtt Client Compatibility (#572)

java.io.EOFException using paho java client (#551)

Version 1.1

Release Date: 2016-06-01

Highlights

Upgrade eSockd library to 4.0 and Support IPv6

Support to listen on specific IP Address:

{mqtt, {"192.168.1.20", 1883}, [
    ...
]},

Add MongoDB, HTTP Authentication/ACL Plugins

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

Enhancements

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

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)

Tests

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: https://github.com/emqtt/emqttd_auth_http

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.

Version 1.0.3

Release Date: 2016-05-23

eSockd 3.2

MochiWeb 4.0.1

Version 1.0.2

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.

Version 1.0.1

Release Date: 2016-04-16

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

Version 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)

Thanks

Thank Ericsson for the Great Erlang/OTP Platform (http://erlang.org/)!

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

Partners: EACG (http://eacg.de/)

Favorite Band: The Seven Mile Journey (http://www.thesevenmilejourney.dk/)

Version 0.17.1-beta

Release Date: 2016-03-22

Enhancements

Time unit of session ‘expired_after’ changed to minute. (#479)

Dashboard

Code Review and improve the design of Dashboard.

Version 0.17.0-beta

Release Date: 2016-03-15

Highlights

Installation and Configuration Guide released on http://docs.emqtt.com

Improve and Consolidate the design of Hook, Server, PubSub and Router

Upgrade the [Web Dashboard](https://github.com/emqtt/emqttd_dashboard) to support pagination

Bridge emqttd broker to another emqttd broker & emqttd to mosquitto bridge (#438)

Enhancements

emqttd_ctl: better error message (#450)

./bin/emqttd_ctl: add ‘routes’ command:

routes list             # List all routes
routes show <Topic>     # Show a route

Add ‘backend_subscription’ table and support static subscriptions (emqttd_backend)

Add ‘retained_message’ table and refactor emqttd_retainer module (emqttd_backend)

A New Hook and Callback Design (emqttd_hook)

Add PubSub, Hooks APIs to emqttd module (emqttd)

Move start_listeners/0, stop_listeners/0 APIs to emqttd_app module (emqttd_app)

Tests

Add 100+ common test cases.

Plugins

Upgrade Dashboard, Redis, Stomp and Template Plugins

Version 0.16.0-beta

Release Date: 2016-02-16

Highlights

Licensed under the Apache License, Version 2.0 Now.

Improve the design of cluster, support to join or leave the cluster (#449):

$ ./bin/emqttd_ctl cluster
cluster join <Node>                     #Join the cluster
cluster leave                           #Leave the cluster
cluster remove <Node>                   #Remove the node from cluster
cluster status                          #Cluster status

Improve the design of Trie and Route, only the wildcard topics stored in Trie.

Common Test to replace EUnit.

Enhancements

mqtt_message record: add ‘sender’ field (#440)

refactor the emqttd, emqttd_time, emqttd_opts, emqttd_node modules.

Bugfix

noproc error when call to gen_server2:call(false, {add_route,Topic,<0.685.0>}, infinity) (#446)

Plugins

Changed the license of all plugins.

Version 0.15.0-beta

Release Date: 2016-01-31

Highlights

Optimize for Push Application, 500K+ Subscribers to a Topic.

Optimization for Route ETS insertion (#427)

Priority Message Queue for Persistent Session (#432)

Add Redis, MongoDB Plugins (#417)

Enhancements

Username/Password Authentication: Support to configure default users (#428)

Improve CLI Commands: pubsub, bridges, trace (#429)

emqttd_mod_subscription: fix client_connected/3

emqttd_auth_mod: add passwd_hash/2 function

priority_queue: add plen/2, out/2 functions

Bugfix

Fix dequeue/1 of emqttd_bridge...

Add emqttd:seed_now/0 function

Plugins

emqttd_plubin_mysql: Changed mysql driver to mysql-otp

emqttd_plugin_pgsql: Integrate with ecpool

emqttd_plugin_redis: First release

emqttd_plugin_mongo: First release

Version 0.14.1-beta

Release Date: 2015-12-28

Bugfix: emqttd_ws_client.erl: Unexpected Info: {‘EXIT’,<0.27792.18>,{shutdown,destroy}} (#413)

Improve: fix spec errors found by dialyzer

Version 0.14.0-beta

Release Date: 2015-12-18

Highlights

Scaling to 1.3 Million Concurrent MQTT Connections on a 12 Core, 32G CentOS server.

New PubSub, Router Design (#402). Prepare for scaling to 10 millions on one cluster.

Enhancements

Improve the gproc_pool usage with a general emqttd_pool_sup

Improve the design of emqttd_pubsub, add a new emqttd_router module

Improve the design of the whole supervisor tree

Route aging mechanism to remove the topics that have no subscriptions

Improve the dashboard, mysql, pgsql, stomp, sockjs plugins

Add ‘topics’, ‘subscriptions’ admin commands

Avoid using mnesia table index and mnesia:index_read API to lower CPU usage

Subscribe timeout exception (#366)

Long Delay on Multiple Topic Subscription (#365)

Subscriptions persistence (#344)

emqttd_ctl: ‘subscriptions’ command to force clients to subscribe some topics (#361)

Bugfix

emqttd_sm: spec of lookup_session/1 is not right BUG (#411)

Observer application should be removed from reltool.config for ‘wx’ app is not available (#410)

Benchmark

1.3 million concurrent MQTT connections on a 12 Core, 32G CentOS Server, consume about 15G Memory and 200% CPU.

Version 0.13.1-beta

Release Date: 2015-11-28

Bugfix: Plugin pathes error under windows (#387)

Improve: Too many error logs “[error] Session ..... Unexpected EXIT: client_pid=<0.14137.35>, exit_pid=<0.30829.22>, reason=nop...” (#383)

Improve: Define QOS0/1/2, Pooler Error (PR#382)

Improve: High CPU load when 400K unstable mobile connections (#377)

BugFix: emqttd_plugin_pgsql - error using same query with latest update plugin (pgsql#5)

Version 0.13.0-beta

Release Date: 2015-11-08

Highlights

Rate Limiting based on [Token Bucket](https://en.wikipedia.org/wiki/Token_bucket) and [Leaky Bucket](https://en.wikipedia.org/wiki/Leaky_bucket#The_Leaky_Bucket_Algorithm_as_a_Meter) Algorithm

Upgrade eSockd and MochiWeb libraries to support Parameterized Connection Module

Improve emqttd_client to support fully asynchronous socket networking

Enhancements

Protocol Compliant - Session Present Flag (#163)

Compilation fails if repo is cloned with a different name (#348)

emqttd_client: replace gen_tcp:send with port_command (#358)

TCP sndbuf, recbuf, buffer tuning (#359)

emqttd_client.erl to handle ‘inet_async’, ‘inet_reply’ properly (#360)

Refator the [client/session management design](https://github.com/emqtt/emqttd/blob/master/doc/design/ClientSession.md)

Bugfix

Cannot kick transient client out when clientId collision (#357)

Fix the order of emqttd_app:start_server/1 (#367)

emqttd_session:subscribe/2 will crash (#374)

Benchmark

[benchmark for 0.13.0 release](https://github.com/emqtt/emqttd/wiki/benchmark-for-0.13.0-release)

3.1G memory and 50+ CPU/core:

Connections: 250K
Subscribers: 250K
Topics:      50K
Qos1 Messages/Sec In:  4K
Qos1 Messages/Sec Out: 20K
Traffic In(bps):  12M+
Traffic Out(bps): 56M+

Version 0.12.3-beta

Release Date: 2015-10-22

Bugfix: emqttd_sysmon crasher for ‘undefined’ process_info (#350)

Bugfix: emqttd_client: catch parser exception (#353)

Version 0.12.2-beta

Release Date: 2015-10-16

Bugfix: Retained messages should not be expired if ‘broker.retained.expired_after = 0’ (#346)

Version 0.12.1-beta

Release Date: 2015-10-15

Highlight: Release for Bugfix and Code Refactor.

Feature: Retained message expiration (#182)

Improve: ‘$SYS/#’ publish will not match ‘#’ or ‘+/#’ (#68)

Improve: Add more metrics and ignore ‘$SYS/#’ publish (#266)

Improve: emqttd_sm should be optimized for clustered nodes may be crashed (#282)

Improve: Refactor emqttd_sysmon and suppress ‘monitor’ messages (#328)

Task: benchmark for 0.12.0 release (#225)

Benchmark: About 900K concurrent connections established on a 20Core, 32G CentOS server.

Version 0.12.0-beta

Release Date: 2015-10-08

Highlights

Enhance the emqttd_ctl module to allow plugins to register new commands (#256)

Add [emqttd_recon plugin](https://github.com/emqtt/emqttd_recon) to debug/optimize the broker (#235)

Add ‘./bin/emqttd_ctl broker pubsub’ command to check the status of core pubsub processes

Add ‘./bin/emqttd_top’ command(like etop) to show the top ‘msg_q’, ‘reductions’, ‘memory’ or ‘runtime’ processes

‘rel/files/emqttd.config.production’ for production deployment(default)

‘rel/files/emqttd.config.development’ for development deployment

Enhancements

Qos1/2 messages will not be dropped under unstable mobile network (#264)

emqttd_session:subscribe/2, emqttd_session:unsubscribe/2 APIs should be asynchronous (#292)

etc/emqttd.config: ‘idle_timeout’ option to close the idle client(socket connected but no ‘CONNECT’ frame received)

etc/emqttd.config: ‘unack_retry_interval’ option for redelivering Qos1/2 messages

How to monitor large ‘message_queue_len’ (#283)

Bugfix

Behaviour emqttd_auth_mod is missing init callback (#318)

Benchmark

Write a new [benchmark tool](https://github.com/emqtt/emqtt_benchmark) to benchmark this release

Hw requirements - 5K users, 25-50 msgs/sec, QoS=1 (#209)

Supported Number of Connections Greatly Reduced When Clients are Subscribing (#324)

Version 0.11.0-beta

Release Date: 2015-09-25

Highlight: Rebar to manage plugin dependencies.

Highlight: [Stomp](https://github.com/emqtt/emqttd_stomp) and [SockJS](https://github.com/emqtt/emqttd_sockjs) Plugins!

Improve: add rel/files/emqttd.config.development|production.

Improve: rel/reltool.config.script to release deps of plugin.

Improve: persist mnesia schema on slave nodes.

Improve: use timer:seconds/1 api.

Improve: The binary release will be compiled with R18.1 now.

Bugfix: issue#306 - emqttd_cm should unregister the duplicated client

Bugfix: issue#310 - usage of emqttd_ctl error: ‘session list’ should be ‘sessions list’

Bugfix: issue#311 - ‘./bin/emqttd_ctl sessions list’ error

Bugfix: issue#312 - unsubcribe will lead to crash if emqttd_plugin_template plugin loaded

Version 0.10.4-beta

Release Date: 2015-09-18

Optimize session management and upgrade eSockd library to 2.7.1

[Benchmark for 0.10.4 release](https://github.com/emqtt/emqttd/wiki/benchmark-for-0.10.4-release)

Improve: issue#294 - [error] failed to start connection on 0.0.0.0:1883 - enotconn

Improve: issue#297 - How do I allow user with some pattern to access topic with some pattern?

Bugfix: issue#291 - ”./bin/emqttd attach ...” cannot work

Bugfix: issue#284 - Should not use erlang:list_to_atom/1 in emqttd_vm.erl

Version 0.10.3-beta

Release Date: 2015-08-30

Bugfix: issue#271 - add emqttd_ws_client:subscribe/2 function

Bugfix: issue#269 - bin/emqttd Syntax error on ubuntu

Improve: issue#265 - client under unstable mobile network generate a lot of logs

Version 0.10.2-beta

Release Date: 2015-08-26

Improve: issue#257 - After the node name changed, the broker cannot restart for mnesia schema error.

Version 0.10.1-beta

Release Date: 2015-08-25

Bugfix: issue#259 - when clustered the emqttd_dashboard port is close, and the ‘emqttd’ application cannot stop normally.

Feature: issue#262 - Add ‘http://host:8083/mqtt/status‘ Page for health check

Version 0.10.0-beta

Release Date: 2015-08-20

[Web Dashboard](https://github.com/emqtt/emqttd_dashboard) and [MySQL](https://github.com/emqtt/emqttd_plugin_mysql), [PostgreSQL](https://github.com/emqtt/emqttd_plugin_pgsql) Authentication/ACL Plugins!

Highlight: Web Dashboard to monitor Statistics, Metrics, Clients, Sessions and Topics of the broker.

Highlight: JSON/HTTP API to query all clients connected to broker.

Highlight: A new [Plugin Design](https://github.com/emqtt/emqttd/wiki/Plugin%20Design) and a [Template project](https://github.com/emqtt/emqttd_plugin_template) for plugin development.

Highlight: Authentication/ACL with MySQL, PostreSQl databases (#194, #172)

Feature: Session Statistics including inflight_queue, message_queue, message_dropped, awaiting_rel, awaiting_ack, awaiting_comp (#213)

Feature: Cookie based authentication for MQTT over websocket connections (#231)

Feature: Get all clients connected to the broker (#228, #230, #148, #129)

Feature: ”./bin/emqttd_ctl clients show ClientId” to query client status (#226)

Feature: ”./bin/emqttd_ctl clients kick ClientId” to kick out a client

Feature: ”./bin/emqttd_ctl sessions list” to show all sessions

Feature: ”./bin/emqttd_ctl sessions show ClientId” to show a session

Feature: Erlang VM metrics monitor with Web Dashboard (#59)

Improve: Too many “inflight queue is full!” log when session is overloaded (#247)

Improve: There are two many “MQueue(~s) drop ~s” logs if the message queue of session is small (#244)

Improve: gen_server2(from RabbitMQ) to improve emqttd_session, emqttd_pubsub

Improve: Makefile to build plugins

Bugfix: emqttd_broker:unhook/2 cannot work (#238)

Bugfix: emqttd plugin cannot include_lib(“emqttd/include/emqttd.hrl”) (#233)

Bugfix: Too many ‘Session ~s cannot find PUBACK’ logs (#212)

Bugfix: emqttd_pooler cannot work

Version 0.9.3-alpha

Release Date: 2015-07-25

Wiki: [Bridge](https://github.com/emqtt/emqttd/wiki/Bridge)

Improve: emqttd_protocol.hrl to define ‘QOS_I’

Improve: emqttd_pubsub to add subscribe/2 API

Improve: ./bin/emqttd_ctl to support new bridges command

Bugfix: issue #206 - Cannot bridge two nodes

Version 0.9.2-alpha

Release Date: 2015-07-18

Improve: issue #196 - Add New Hook ‘client.subscribe.after’

Version 0.9.1-alpha

Release Date: 2015-07-10

Bugfix: issue #189 - MQTT over WebSocket(SSL) cannot work?

Bugfix: issue #193 - ‘client.ack’ hook should be renamed to ‘message.acked’, and called by emqttd_broker:foreach_hooks

Version 0.9.0-alpha

Release Date: 2015-07-09

[Session, Queue, Inflight Window, Hooks, Global MessageId and More Protocol Compliant](https://github.com/emqtt/emqttd/releases/tag/0.9.0-alpha) Now!

Feature: Session/Queue/Inflight Window Design (#145).

Feature: Support to resume a persistent session on other clustered node.

Feature: Support alarm management.

Feature: emqttd_guid to generate global unique message id.

Feature: Hooks for message pub/ack.

Feature: Protocol compliant - message ordering, timeout and retry.

Improve: Every client will start_link a session process, whether or not the client is persistent.

Improve: etc/emqttd.config to support more session, queue configuration.

Improve: issue #179 - Max offline message queue {max_queue, 100} meaning.

Improve: issue #180 - Should change project structure for other projects maybe depend on ‘emqttd’. Merge emqtt, emqttd apps.

Improve: issue #185 - PacketId and MessageId: the broker should generate global unique message id.

Improve: issue #187 - etc/emqttd.config to support https listener

Improve: issue #186 - emqttd_cm to store client details

Improve: issue #174 - add ‘from’ field to mqtt_message record.

Improve: issue #170 - $SYS Topics should support alarms.

Improve: issue #169 - Add More [Hooks](https://github.com/emqtt/emqttd/wiki/Hooks-Design)

Improve: issue #167 - Inflight window to assure message ordering.

Improve: issue #166 - Message delivery timeout and retry.

Improve: issue #143 - Qos1, Qos2 PubSub message timeout.

Improve: issue #122 - Labeling message with unique id. emqttd_guid module to generate global unique msgid.

Improve: emqttd_bridge to support pending message queue, and fix the wrong Qos design.

Improve: mqtt_message record to add ‘msgid’, ‘from’ and ‘sys’ fields.

Change: Add emqttd_mqueue, emqttd_guid, emqttd_alarm modules.

Bugfix: issue #184 - emqttd_stats:setstats is not right.

Bugfix: Closed issues #181, #119.

Tests: fix the parser, acl test cases.

Version 0.8.6-beta

Release Date: 2015-06-17

Bugfix: issue #175 - publish Will message when websocket is closed without ‘DISCONNECT’ packet

Version 0.8.5-beta

Release Date: 2015-06-10

Bugfix: issue #53 - client will receive duplicate messages when overlapping subscription

Version 0.8.4-beta

Release Date: 2015-06-08

Bugfix: issue #165 - duplicated message when publish ‘retained’ message to persistent client

Version 0.8.3-beta

Release Date: 2015-06-05

Bugfix: issue #158 - should queue:in new message after old one dropped

Bugfix: issue #155 - emqtt_parser.erl: parse_topics/3 should reverse topics

Bugfix: issue #149 - Forget to merge plugins/emqttd_auth_mysql from ‘dev’ branch to ‘master’ in 0.8.x release

Version 0.8.2-alpha

Release Date: 2015-06-01

Bugfix: issue #147 - WebSocket client cannot subscribe queue ‘$Q/queue/${clientId}’

Bugfix: issue #146 - emqttd_auth_ldap: fill(Username, UserDn) is not right

Version 0.8.1-alpha

Release Date: 2015-05-28

Client [Presence](https://github.com/emqtt/emqttd/wiki/Presence) Support and [$SYS Topics](https://github.com/emqtt/emqttd/wiki/$SYS-Topics) Redesigned!

Bugfix: issue #138 - when client disconnected normally, broker will not publish disconnected $SYS message

Bugfix: fix websocket url in emqttd/priv/www/websocket.html

Improve: etc/emqttd.config to allow websocket connections from any hosts

Improve: rel/reltool.config to exclude unnecessary apps.

Version 0.8.0-alpha

Release Date: 2015-05-25

[Hooks](https://github.com/emqtt/emqttd/wiki/Hooks%20Design), Modules and [Plugins](https://github.com/emqtt/emqttd/wiki/Plugin%20Design) to extend the broker Now!

Plugin: emqttd_auth_mysql - MySQL authentication plugin (issues #116, #120)

Plugin: emqttd_auth_ldap - LDAP authentication plugin

Feature: emqttd_broker to support Hooks API

Feature: issue #111 - Support ‘Forced Subscriptions’ by emqttd_mod_autosub module

Feature: issue #126 - Support ‘Rewrite rules’ by emqttd_mod_rewrite module

Improve: Support hooks, modules to extend the broker

Improve: issue #76 - dialyzer check

Improve: ‘Get Started’, ‘User Guide’, ‘Developer Guide’ Wiki

Improve: emqtt_topic to add join/1, feed_var/3, is_queue/1

Improve: emqttd_pooler to execute common tasks

Improve: add emqttd_sm_sup module, and use ‘hash’ gproc_pool to manage sessions

Tests: add more test cases for ‘emqttd’ app

Version 0.7.1-alpha

Release Date: 2015-05-04

Add doc/design/* and merge doc/* to github Wiki

Bugfix: issue #121 - emqttd cluster issuse

Bugfix: issue #123 - emqttd:unload_all_plugins/0 cannot unload any plugin

Bugfix: fix errors found by dialyzer

Version 0.7.0-alpha

Release Date: 2015-05-02

[MQTT over WebSocket(SSL)](https://github.com/emqtt/emqttd/wiki/MQTT-Over-WebSocket) Now!

[Plugin Achitecture](https://github.com/emqtt/emqttd/wiki/Plugin%20Design) based on OTP application

[Trace MQTT Packets or Messages](https://github.com/emqtt/emqttd/wiki/Trace%20Design) to log files

Feature: issue #40, #115 - WebSocket/SSL Support

Feature: issue #49, #105 - Plugin Architecture Support

Feature: issue #93 - Trace API Design

Improve: issue #109 - emqttd_broker should add subscribe, notify API

Improve: update README.md to add ‘Goals’, ‘Contributors’ chapters

Change: rename etc/app.config to etc/emqttd.config

Change: etc/emqttd.config changed

Bugfix: critical issue #54 - error when resume session!

Bugfix: issue #118 - error report when UNSUBSCRIBE with no topics

Bugfix: issue #117 - sys_interval = 0 config cannot work

Bugfix: issue #112 - Makefile to support build plugins

Bugfix: issue #96 - “make clean” cannot work

Version 0.6.2-alpha

Release Date: 2015-04-24

Bugfix: critical issue #54, #104, #106 - error when resume session

Improve: add emqttd_cm_sup module, and use ‘hash’ gproc_pool to register/unregister client ids

Improve: kick old client out when session is duplicated.

Improve: move mnesia dir config from etc/app.config to etc/vm.args

Version 0.6.1-alpha

Release Date: 2015-04-20

Integrate with [gproc library](https://github.com/uwiger/gproc) to support pool

Feature: issues#91 - should use worker_pool to handle some async work?

Feature: issues#95 - Topic filters in ACL rule should support ‘eq’ tag

Improve: issues#84 - emqttd_pubsub is redesigned again to protect mnesia transaction

Improve: issues#74 - ACL Support and update [ACL Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design)

Version 0.6.0-alpha

Release Date: 2015-04-17

ACL Support Now: [ACL-Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design)

Authentication with username, clientid Now: [Authentication Wiki](https://github.com/emqtt/emqttd/wiki/Authentication)

Seperate common MQTT library to ‘emqtt’ application

Redesign message pubsub, route and retain modules

Redesign mnesia database cluster

Feature: issues#47 - authentication, authorization support

Feature: issues#92 - merge emqttd_acl and emqttd_auth to emqttd_access_control

Feature: emqttd_acl_mod, emqttd_auth_mod behaviour to extend ACL, authentication

Feature: issues#85 - lager:info to log subscribe, unsubscribe actions

Feature: issues#77 - authentication with clientid, ipaddress

Improve: issues#90 - fix lager_file_backend log format, and rotate 10 log files

Improve: issues#88 - use ‘-mneisa_create’, ‘-mnesia_replicate’ attributes to init mneisa

Improve: issues#87 - record mqtt_user and mqtt_client is duplicated

Improve: issues#81 - redesign nodes cluster to support disc_copies mnesia tables

Improve: issues#80 - redesign emqttd_cm to handle more concurrent connections

Improve: issues#70 - how to handle connection flood? Now could support 2K+ CONNECT/sec

Change: redesign mnesia tables: message, topic, subscriber, trie, trie_node

Bugfix: issues#83 - emqttd_broker stats cannot work

Bugfix: issues#75 - careless about function name when emqttd_pubsub handle getstats message

Version 0.5.5-beta

Release Date: 2015-04-09

Bugfix: issue #75 - careless about function name when emqttd_pubsub handle getstats message.

Bugfix: issue #79 - cannot find topic_subscriber table after cluster with other nodes.

Version 0.5.4-alpha

Release Date: 2015-03-22

Benchmark this release on a ubuntu/14.04 server with 8 cores, 32G memory from QingCloud.com:

200K Connections,
30K Messages/Sec,
20Mbps In/Out Traffic,
200K Topics,
200K Subscribers,

Consumed 7G memory, 40% CPU/core

Benchmark code: https://github.com/emqtt/emqttd_benchmark

Change: rewrite emqttd_pubsub to handle more concurrent subscribe requests.

Change: ./bin/emqttd_ctl add ‘stats’, ‘metrics’ commands.

Bugfix: issue #71, #72

Version 0.5.3-alpha

Release Date: 2015-03-19

Bugfix: issues#72 - emqttd_cm, emqtt_sm ets:match_delete/2 with wrong pattern

Version 0.5.2-alpha

Release Date: 2015-03-18

Change: upgrade esockd to 2.1.0-alpha, do not tune socket buffer for mqtt connection.

Version 0.5.1-alpha

Release Date: 2015-03-13

Change: upgrade esockd to v1.2.0-beta, rename ‘acceptor_pool’ to ‘acceptors’

Version 0.5.0-alpha

Release Date: 2015-03-12

RENAME ‘emqtt’ to ‘emqttd’!

Support [Broker Bridge](https://github.com/emqtt/emqttd/wiki/Bridge-Design) Now!

Change: rename project from ‘emqtt’ to ‘emqttd’

Change: lager:debug to dump RECV/SENT packets

Feature: emqttd_bridge, emqttd_bridge_sup to support broker bridge

Feature: emqtt_event to publish client connected/disconnected message to $SYS topics

Feature: ./bin/emqttd_ctl add more commands: listeners, broker, bridges, start_bridge, stop_bridge...

Feature: issue#57 - support to configure max packet size

Feature: issue#68 - if sys_interval = 0, emqttd_broker will not publish messages to $SYS/brokers/#

Bugfix: issue#67 - subscribe ‘#’ to receive all messages

Bugfix: issue#64 - emqtt_app start/2: should wait_for_databases

Test: emqttd_topic_tests add more ‘_match_test’

Version 0.4.0-alpha

Release Date: 2015-03-10

Support [$SYS Topics of Broker](https://github.com/emqtt/emqttd/wiki/$SYS-Topics-of-Broker) Now!

Feature: emqtt_broker to publish version, uptime, datetime to $SYS/brokers/# topics

Feature: emqtt_broker to publish count of clients, sessions, suscribers to $SYS/brokers/# topics

Feature: emqtt_metrics to publish bytes, packets, messages metrics to $SYS/brokers/# topics

Feature: add include/emqtt_systop.hrl

Change: emqtt_cm to count current clients

Change: emqtt_sm to count current sessions

Change: emqtt_pubsub to count current topics and suscribers

Change: emqtt_pubsub to add create/1 API

Change: emqtt_pubsub dispatch/2 to return number of subscribers

Change: emqtt_pubsub to count ‘dropped’ messages

Change: emqtt_opts to add merge/2 function

Test: add emqtt_serialiser_tests.erl

Version 0.3.4-beta

Release Date: 2015-03-08

Bugfix: emqtt_serialiser.erl cannot serialise UNSUBACK packets

Version 0.3.3-beta

Release Date: 2015-03-07

Bugfix: emqtt_serialiser.erl cannot serialise PINGRESP issue#60

Version 0.3.2-beta

Release Date: 2015-03-05

Improve: merge emqttc serialiser, parser, packet

Add: emqtt_opts to merge socket options

Version 0.3.1-beta

Release Date: 2015-03-02

Feature: SSL Socket Support

Feature: issue#44 HTTP API should add Qos parameter

Bugfix: issue#52 emqtt_session crash

Bugfix: issue#53 sslsocket keepalive error

Upgrade: esockd to v0.2.0

Upgrade: mochiweb to v3.0.0

Version 0.3.0-beta

Release Date: 2015-01-19

Feature: HTTP POST API to support ‘qos’, ‘retain’ parameters

Feature: $SYS system topics support

Change: Rewrite emqtt_topic.erl, use ‘’, ‘#’, ‘+’ to replace <<”“>>, <<”#”>>, <<”+”>>

Change: fix emqtt_pubsub.erl to match ‘#’, ‘+’

Tests: emqtt_topic_tests.erl add more test cases

Version 0.3.0-alpha

Release Date: 2015-01-08

NOTICE: Full MQTT 3.1.1 support now!

Feature: Passed org.eclipse.paho.mqtt.testing/interoperability tests

Feature: Qos0, Qos1 and Qos2 publish and suscribe

Feature: session(clean_sess=false) management and offline messages

Feature: redeliver awaiting puback/pubrec messages(doc: Chapter 4.4)

Feature: retain messages, add emqtt_server module

Feature: MQTT 3.1.1 null client_id support

Bugfix: keepalive timeout to send will message

Improve: overlapping subscription support

Improve: add emqtt_packet:dump to dump packets

Test: passed org.eclipse.paho.mqtt.testing/interoperability

Test: simple cluster test

Closed Issues: #22, #24, #27, #28, #29, #30, #31, #32, #33, #34, #36, #37, #38, #39, #41, #42, #43

Version 0.2.1-beta

Release Date: 2015-01-08

pull request 26: Use binaries for topic paths and fix wildcard topics

emqtt_pubsub.erl: fix wildcard topic match bug caused by binary topic in 0.2.0

Makefile: deps -> get-deps

rebar.config: fix mochiweb git url

tag emqtt release accoding to [Semantic Versioning](http://semver.org/)

max clientId length is 1024 now.

Version 0.2.0

Release Date: 2014-12-07

rewrite the project, integrate with esockd, mochiweb

support MQTT 3.1.1

support HTTP to publish message

Version 0.1.5

Release Date: 2013-01-05

Bugfix: remove QOS_1 match when handle PUBREL request

Bugfix: reverse word in emqtt_topic:words/1 function

Version 0.1.4

Release Date: 2013-01-04

Bugfix: fix “mosquitto_sub -q 2 ......” bug

Bugfix: fix keep alive bug

Version 0.1.3

Release Date: 2013-01-04

Feature: Support QOS2 PUBREC, PUBREL, PUBCOMP messages

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

Version 0.1.2

Release Date: 2012-12-27

Feature: release support like riak

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

Version 0.1.1

Release Date: 2012-09-24

Feature: use rebar to generate release

Feature: support retained messages

Bugfix: send will msg when network error

Version 0.1.0

Release Date: 2012-09-21

The first public release.