Embedded MQTT C/C++ Client

The "full" Paho MQTT C client library was written with Linux and Windows in mind. It assumes the existence of Posix or Windows libraries for networking (sockets), threads and memory allocation. This library is intended to have these characteristics:

  • use very limited resources - pick and choose the components needed
  • not reliant on any particular libraries for networking, threading or memory management
  • ANSI standard C for maximum portability, at the lowest level
  • optional higher layer(s) in C and/or C++.

The library can be used on desktop operating systems, but is primarily aimed for environments such as mbed, Arduino and FreeRTOS.




A prebuilt Arduino port of this client is available from the Paho downloads page. To use download and in the Arduino IDE use Sketch -> Import Library... -> Add Library... with the downloaded client zip file. An example Arduino sketch demonstrating the client is included.

Building from source


Samples and tests can be built with "build" shell scripts in their respective directories


New “Embedded” Paho MQTT C Client

Receiving messages with the Paho embedded C client

Getting Started

Here is the core of a simple publishing program:

MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
int rc = 0;
char buf[200];
MQTTString topicString = MQTTString_initializer;
char* payload = "mypayload";
int payloadlen = strlen(payload);int buflen = sizeof(buf);

data.clientID.cstring = "me";
data.keepAliveInterval = 20;
data.cleansession = 1;
len = MQTTSerialize_connect(buf, buflen, &data); /* 1 */

topicString.cstring = "mytopic";
len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, payload, payloadlen); /* 2 */

len += MQTTSerialize_disconnect(buf + len, buflen - len); /* 3 */

rc = Socket_new("", 1883, &mysock);
rc = write(mysock, buf, len);
rc = close(mysock);