Skip to content

The Origin of MQTT

by Ian Craggs
8 min read

Welcome to the first blog in a series on the history of MQTT written by Ian Craggs, a technology thought leader currently working on the standardization of MQTT-SN at OASIS, and project lead of Eclipse Paho and the maintainer of several components there, as well as contributing to Eclipse Sparkplug. Ian’s four part series gives a behind-the-scenes look at the creation of MQTT and its evolution to the beloved protocol we have today.

MQTT is the protocol for industrial device communication that has existed since 1999. Its name has changed several times during that time, usually as an abbreviation for a longer phrase. During standardization at OASIS, it was agreed that the name MQTT would not represent anything else, but itself. Unfortunately, the standardization committee was then informed that according to OASIS convention, the name of the committee could not be changed once it had been created, so that historical name lives on.

Many people have worked on MQTT over the years, contributing to its success. This is an attempt to condense the story of MQTT and acknowledge those people and contributions.

Pre-standardization (1999 - 2012)

The polling approach to collecting data from industrial devices was designed to avoid packet collisions when more than one device on the same network tried to send data at the same time. Each device manufacturer wanted to beat the competition to market, tolerating no delay to participate in or wait for standards to appear, so each developed its own method.

Polling relies on the server to regularly contact all connected devices whether or not the data they held has changed. A server can be overloaded with communications to a large number of devices, even if their data changes infrequently.

Arlen Nipper (then of Arcom Control Systems) and Andy Stanford-Clark of IBM drew up the first version of MQTT at the start of 1999. It was then known as the “Argo Lightweight On The Wire Protocol”, Argo being an IBM product codename. Its primary aim was to move away from the “legacy of literally hundreds of proprietary poll/response protocols” that existed at the time. It was the bare bones of what was to become MQTT, without DISCONNECT, UNSUBSCRIBE or PING messages. 

Version 1 didn’t last long. Arlen and Andy defined version 2 later that year, changing the name to “MQ Integrator Pervasive Device Protocol'' (MQIpdp). The changes incorporated into version 2 made it look very like the MQTT 3.1.1 that we know today, with will messages, keepalive processing and the ability to unsubscribe being added for the first time. 

Version 3 followed the next year, 2000, with minor changes and clarifications that were to remain stable for the next ten years until version 3.1 came out in 2010. Those ten years saw the adoption of MQTT in Arcom and IBM in various projects including:

  • 2000: Arcom Control Systems “Director” - MQTT enabled industrial network gateway

  • 2002: SCADA Mousetrap (Andy SC)

  • 2004: IBM Microbroker - a Java MQTT broker implementation 

  • 2005: UIB - a smart phone app to interact with MQTT data (Bharat Bedi)

  • 2006: MQTT.org Launched

    • IA92 Java Client

    • IA93 C reference implementation

    • Websphere MQ

    • MQ Message and Event Broker

    • Websphere Business Integration Message Broker

    • CPAN Websphere::MQTT::Client

    • Combichem (Dr. Jeremy Frey)

  • 2007: RSMB - a minimalist MQTT broker in C (Ian Craggs)

  • 2007: Home power and water use monitoring (Andy SC)

  • 2009: Isle of Wight Redjet Ferry status on Twitter (Andy SC)

  • 2009: the house that Tweets (Andy SC)

  • 2010: the open source Mosquitto project (Roger Light)

  • 2010: IBM and Eurotech published MQTT 3.1, which made the following changes:

    • Username and password could now be sent with a CONNECT packet

    • New return codes on CONNACK packets, for security problems

    • Clarification that clients are not informed of un-authorized PUBLISH or SUBSCRIBE commands, and that the normal MQTT flow should complete even though the command has not been performed

    • Strings now supported full UTF-8, instead of just the US-ASCII subset

  • 2011: use in Facebook messenger

  • 2011: the open source Eclipse Paho project

  • 2012: the Chale community project

  • 2012: IBM MessageSight

  • 2012: Mosquitto joins the Eclipse Foundation

By this time, enough use was being made of MQTT that standardization became a top priority for the community to ensure its future success.

Our next installment will highlight the challenges and adoption of standardization in MQTT. Sign up for our mailing list so you don’t miss the next blog on the history of MQTT and all the celebration activities for MQTT’s 25th anniversary.

Ian Craggs

Ian Craggs works for IBM, and has been involved with MQTT for more than 10 years. He wrote the IBM MQTT server Really Small Message Broker which became the inspiration for the Eclipse Mosquitto project. He contributed C client libraries to the Eclipse Paho project at its onset and is now the project leader.

HiveMQ logo
Review HiveMQ on G2