Home

Awesome

awesome-open-iot Awesome

A curated list of awesome open source IoT frameworks, libraries and software.

Note that the list only features components we think are particularly relevant for IoT (e.g they are appropriate for use in embedded IoT devices, deal with the specific constraints of IoT communication networks, etc.). The reader will want to refer to the Awesome catalog for more references in his/her programming language or technical field of choice.

Connectivity

Bluetooth 4.0, Bluetooth Smart (BLE)

NameDescriptionLicenseLanguage
bluezOfficial Linux Bluetooth protocol stackGPLC
Gatt <br> GitHub starsGatt is a Go package for building Bluetooth Low Energy peripheralsBSD-3Go
noble <br> GitHub starsA Node.js BLE (Bluetooth Low Energy) central moduleMITNode.js

enOcean

NameDescriptionLicenseLanguage
EnJ <br> GitHub starsEnJ: EnOcean Java libraryASLJava
Python EnOcean <br> GitHub starsA Python library for reading and controlling EnOcean devicesMITPython
serialport-enocean-parser <br> GitHub starsAn EnOcean Serial Protocol 3 (ESP3) parser for node-serialportWTFPLNode.js

KNX

TBC

LoRa / LoRaWAN

NameDescriptionLicenseLanguage
LoRa packet forwarder <br> GitHub starsA program running on the host of a Lora Gateway that forward RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server.BSD-3C
The Things Network <br> GitHub starsA complete LoRaWAN network stack (router, broker, message handler)MITGo

NFC

NameDescriptionLicenseLanguage
libnfc <br> GitHub starslibnfc is a library which allows userspace application access to NFC devices.LGPL v3C
Go NFC <br> GitHub starsGo bindings for libnfcLGPL v3Go
Node NFC <br> GitHub starsNode.js bindings for libnfcMITNode.js
Java NFC <br> GitHub starsnfctools library for JavaASLJava

RS-232 / Serial

NameDescriptionLicenseLanguage
Java Simple Serial Connector <br> GitHub starsPlatform-independent serial port access for JavaLGPLJava
rxtx <br> GitHub starsA Java cross platform wrapper library for the serial portLGPLJava/C
OpenJDK Device/IOThe Device I/O Project provides a Java-level API for accessing generic device peripherals on embedded devices.GPL w/ classpath exceptionJava/C

RS-485

TBC

ZigBee

TBC

Z-Wave

TBC

Data Encoding

This section focuses on data encoding formats that are particularly appropriate for IoT scenarios (i.e bandwidth or battery efficient, small memory footprint, …)

CBOR

NameDescriptionLicenseLanguage
TinyCBOR <br> GitHub starsTinyCBOR is Intel's industrial strength C/C++ implementation of CBOR, as used in the IoTivity framework.MITC

More at: http://cbor.io/impls.html

FlatBuffers

NameDescriptionLicenseLanguage
Offical libraries from Google <br> GitHub starsFlatBuffers is an efficient cross platform serialization library for games and other memory constrained apps.ASLv2C++, C#, C, Go, Java, JavaScript, PHP, Python

Protocol Buffers

NameDescriptionLicenseLanguage
Offical libraries from Google <br> GitHub starsProtocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.BSD-3C++, Java, Python, Objective-C, C#, JavaScript, Ruby, Go
nanopb <br> GitHub starsNanopb is a small code-size Protocol Buffers implementation in ansi C. It is especially suitable for use in microcontrollers, but fits any memory restricted system.BSD-3C

Data Visualization

See awesome-dataviz.

Data Storage

NameDescriptionLicenseLanguage
CrateDB <br> GitHub starsCrateDB is a distributed SQL database that makes it simple to store and analyze massive amounts of machine data in real-time.Apache 2.0Java

Device Discovery

mDNS / Bonjour

NameDescriptionLicenseLanguage
mdns <br> GitHub starsSimple mDNS client/server library in GolangMITGo
bonjour <br> GitHub starsmDNS/DNS-SD (also known as Apple Bonjour) library for Go (in pure Go)MITGo
node_mdns <br> GitHub starsmDNS/zeroconf/bonjour service discovery add-on for Node.jsMITNode.js
mdnsjava <br> GitHub starsMulticast DNS (mDNS) & DNS-Based Service Discovery (DNS-SD) in JavaBSDJava

uPNP

NameDescriptionLicenseLanguage
goupnp <br> GitHub starsgoupnp is a UPnP client library for GoBSD-2Go
UpnpServer <br> GitHub starsFast and light upnp server for Node.jsGPLv2Node.js
ClingJava/Android UPnP library and toolsLGPL/CDDL-1.0Java

Gateway

NameDescriptionLicenseLanguage
Eclipse Kura <br> GitHub starsEclipse Kura is a Java/OSGi-based framework for IoT gatewaysJava
OpenWrtOpenWrt is an embedded operating system based on the Linux kernel, primarily used on embedded devices to route network trafficGPLv2C, Lua
UBOS <br> GitHub starsUBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal Servers and Indie IoT DevicesLinuxmany

Home Automation

NameDescriptionLicenseLanguage
Calaos <br> GitHub starsCalaos is a free software project (GPLv3) that lets you control and monitor your home.GPLv3C++
Freedomotic <br> GitHub starsFreedomotic is an open source, flexible, secure Internet of Things (IoT) development framework, useful to build and manage modern smart spaces.GPLv2Java
openHAB <br> GitHub starsThe open Home Automation Bus (openHAB) project aims at providing a universal integration platform for all things around home automationEPLJava
Eclipse SmartHome <br> GitHub starsThe Eclipse SmartHome project is a framework that allows building smart home solutions that have a strong focus on heterogeneous environments. It provides a uniform access to devices and information and to facilitate different kinds of interactions with them.EPLJava
Home Assistant <br> GitHub starsHome Assistant is a home automation platform running on Python 3. It is able to track and control all devices at home and offer a platform for automating control.Apache 2.0Python 3

Messaging

CoAP

NameDescriptionLicenseLanguage
Californium <br> GitHub starsCalifornium is a Java CoAP implementation for IoT Cloud services.EPL/EDLJava
microcoap <br> GitHub starsA small CoAP implementation for microcontrollersMITC (Arduino)
gocoap <br> GitHub starsImplementation of CoAP in goMITGo
node-coap <br> GitHub starsnode-coap is a Node.js client and server library for CoAP modelled after the http module.MITNode.js

Modbus

NameDescriptionLicenseLanguage
go modbus <br> GitHub starsFault-tolerant implementation of modbus protocol in GoBSD-3Go
j2mod <br> GitHub starsEnhanced Modbus library implemented in the Java programming languageApacheJava
libmodbus <br> GitHub starslibmodbus is a free software library to send/receive data with a device which respects the Modbus protocol. This library can use a serial port or an Ethernet connection.LGPL v2.1C
modbus4j <br> GitHub starsA high-performance and ease-of-use implementation of the Modbus protocol written in Java by Infinite Automation Systems and Serotonin Software. Supports ASCII, RTU, TCP, and UDP transports as slave or master, automatic request partitioning and response data type parsing.GPL v3Java
node-modbus-stack <br> GitHub starsA StreamStack implementation of the MODBUS protocol, for NodeJS.MITNode.js
pymodbus <br> GitHub starsA full modbus protocol written in PythonBSDPython

MQTT

NameDescriptionLicenseLanguage
Eclipse PahoThe Eclipse Paho project provides open-source client implementations of MQTTEPL/EDLJava, Python, Javascript, Go, C, .Net (C#), Embedded C/C++
Eclipse Mosquitto<br> GitHub starsEclipse Mosquitto is an open source message broker that implements the MQTT protocol versions 3.1 and 3.1.1. [...] This makes it suitable for "Internet of Things" messaging such as with low power sensors or mobile devices such as phones, embedded computers or microcontrollers like the Arduino.EPL/EDLC, Python
Moquette <br> GitHub starsMoquette is a lightweight MQTT broker in JavaASLv2Java
MQTT.js <br> GitHub starsMQTT.js is a client library for the MQTT protocol, written in JavaScript for node.js and the browser.MITJavascript

MQTT-SN

NameDescriptionLicenseLanguage
mqtt-sn-tools <br> GitHub starsCommand line tools written in C for the MQTT-SN (MQTT for Sensor Networks) protocol.MITC

OPC-UA

NameDescriptionLicenseLanguage
Eclipse Milo <br> GitHub starsEclipse Milo provides all the tools necessary to implement OPC Unified Architecture (UA) client and/or server functionality in any JVM-based project.EPL/EDLJava
node-opcua <br> GitHub starsAn implementation of a OPC UA stack fully written in Javascript and Node.jsMITNode.js
OPC UA .NET <br> GitHub starsThe official OPC Foundation OPC UA .NET Stack and sample applications.GPLv2.Net
open62541 <br> GitHub starsAn open source and free C (C99) OPC UA stack licensedMPLv2C

Operating Systems

NameDescriptionLicenseLanguage
Contiki <br> GitHub starsContiki is an open source operating system for the Internet of Things. Contiki connects tiny low-cost, low-power microcontrollers to the Internet.BSD-3C
FreeRTOSA cross-platform real-time operating systemGPL-likeC
mbed OSARM® mbed™ OS is an open source embedded operating system designed specifically for the "things" in the Internet of Things (IoT). It includes all the features you need to develop a connected product based on an ARM Cortex-M microcontrollerASLv2C/C++
OpenWrtOpenWrt is an embedded operating system based on the Linux kernel, primarily used on embedded devices to route network trafficGPLv2C, Lua
RIOT-OS <br> GitHub starsRIOT OS is an operating system for Internet of Things (IoT) devices. It is based on a microkernel and designed for energy efficiency, hardware independent development and a high degree of modularityLGPLC
UBOS <br> GitHub starsUBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal Servers and Indie IoT DevicesLinuxmany
ZephyrZephyr Project is a small, scalable real-time operating system for use on resource-constrained systems supporting multiple architectures.ASLv2C

Remote Management

Libraries that can be used to implement remote management of IoT devices

LWM2M

NameDescriptionLicenseLanguage
Betwixt <br> GitHub starsBetwixt is a LWM2M Client and Server in GoASLGo
Eclipse Leshan <br> GitHub starsEclipse Leshan is a LWM2M implementation in JavaEPL/EDLJava
lwm2m-node-lib <br> GitHub starslwm2m-node-lib is a library for building LWM2M applications (client and server) in JavascriptAGPLNode.js
Eclipse Wakaama <br> GitHub starsEclipse Wakaama is a LWM2M implementation in CEPL/EDLC
AwaLWM2M <br> GitHub starsAwa LWM2M is an implementation of the OMA Lightweight M2M protocol in CBSD-3C

OMA-DM

NameDescriptionLicenseLanguage
libdmclient <br> GitHub starslibdmclient implements the client-side of OMA DM 1.2 protocolASLC

SNMP

NameDescriptionLicenseLanguage
SNMP4JSNMP4J is an enterprise class free open source and state-of-the-art SNMP implementation for Java™ SE 1.4 or laterASLJava
GoSNMP <br> GitHub starsA simple SNMP library written in GoBSDGo

TR-069

NameDescriptionLicenseLanguage
netcwmp <br> GitHub starsA software client for enabling TR-069 in embedded devicesASLv2C

Robotics and Physical computing

NameDescriptionLicenseLanguage
Artoo <br> GitHub starsArtoo is a micro-framework for robotics using Ruby.ASLv2Ruby
Cylon.js <br> GitHub starsCylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things.ASLv2Node.js
Gobot <br> GitHub starsGobot is a framework using the Go programming language for robotics, physical computing, and the Internet of Things.ASLv2Go

Security

DNS-SEC

NameDescriptionLicenseLanguage
Dnsruby <br> GitHub starsDnsruby is a pure Ruby DNS client library which implements a stub resolver and supports DNSSECASLv2Ruby
dnssecjava <br> GitHub starsA DNSSEC validating stub resolver for Java.EPLJava

DTLS

NameDescriptionLicenseLanguage
DTLS Go <br> GitHub starsDTLS 1.2 in GoMITGo
Eclipse Scandium <br> GitHub starsThe Scandium (Sc) sub-project within Californium implements DTLS 1.2 to secure your application through ECC with pre-shared keys, certificates, or raw public keys.EPL/EDLJava
Eclipse TinyDTLStinydtls is a library for Datagram Transport Layer Security (DTLS) covering both the client and the server state machine. tinydtls is a library for Datagram Transport Layer Security (DTLS) covering both the client and the server state machine.EPL/EDLC
mbed TLSmbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and the respective cryptographic algorithms and support code required.ASLv2C
OpenSSLOpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.OpenSSL/SSLeayC/Assembly
PyDTLS <br> GitHub starsDatagram Transport Layer Security for PythonASLv2Python

TLS

NameDescriptionLicenseLanguage
mbed TLSmbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and the respective cryptographic algorithms and support code required.ASLv2C
OpenSSLOpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.OpenSSL/SSLeayC/Assembly

Workflow management

NameDescriptionLicenseLanguage
Node-RED <br> GitHub starsA visual tool for wiring the Internet of Things.ASLNode.js
huginn <br> GitHub starsHuginn is a system for building agents that perform automated tasks for you online.MITRuby
Nebula <br>A docker orchestrator designed to manage IoT devicesGPL v3Python

Contributing

Contributions are very welcome! In order to be considered an Awesome Open IoT project you need the following:

Please also have a look at this contributing guide for some general guidelines.