awesome-open-iot 
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)
| bluez |
Official Linux Bluetooth protocol stack |
GPL |
C |
Gatt  |
Gatt is a Go package for building Bluetooth Low Energy
peripherals |
BSD-3 |
Go |
noble  |
A Node.js BLE (Bluetooth Low Energy) central module |
MIT |
Node.js |
enOcean
EnJ  |
EnJ: EnOcean Java library |
ASL |
Java |
Python EnOcean  |
A Python library for reading and controlling EnOcean devices |
MIT |
Python |
serialport-enocean-parser
 |
An EnOcean Serial Protocol 3 (ESP3) parser for node-serialport |
WTFPL |
Node.js |
KNX
TBC
LoRa / LoRaWAN
LoRa packet
forwarder  |
A 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-3 |
C |
The Things
Network  |
A complete LoRaWAN network stack (router, broker, message
handler) |
MIT |
Go |
NFC
libnfc  |
libnfc is a library which allows userspace application access to NFC
devices. |
LGPL v3 |
C |
Go NFC  |
Go bindings for libnfc |
LGPL v3 |
Go |
Node NFC  |
Node.js bindings for libnfc |
MIT |
Node.js |
Java NFC  |
nfctools library for Java |
ASL |
Java |
RS-232 / Serial
Java Simple Serial
Connector  |
Platform-independent serial port access for Java |
LGPL |
Java |
rxtx  |
A Java cross platform wrapper library for the serial port |
LGPL |
Java/C |
| OpenJDK
Device/IO |
The Device I/O Project provides a Java-level API for accessing
generic device peripherals on embedded devices. |
GPL w/ classpath exception |
Java/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
TinyCBOR  |
TinyCBOR is Intel’s industrial strength C/C++ implementation of
CBOR, as used in the IoTivity framework. |
MIT |
C |
More at: http://cbor.io/impls.html
FlatBuffers
Offical libraries
from Google  |
FlatBuffers is an efficient cross platform serialization library for
games and other memory constrained apps. |
ASLv2 |
C++, C#, C, Go, Java, JavaScript, PHP, Python |
Protocol Buffers
Offical libraries from
Google  |
Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral,
platform-neutral, extensible mechanism for serializing structured
data. |
BSD-3 |
C++, Java, Python, Objective-C, C#, JavaScript, Ruby, Go |
nanopb  |
Nanopb 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-3 |
C |
|
|
|
|
Data Visualization
See awesome-dataviz.
Data Storage
CrateDB  |
CrateDB is a distributed SQL database that makes it simple to store
and analyze massive amounts of machine data in real-time. |
Apache 2.0 |
Java |
Device Discovery
mDNS / Bonjour
mdns  |
Simple mDNS client/server library in Golang |
MIT |
Go |
bonjour  |
mDNS/DNS-SD (also known as Apple Bonjour) library for Go (in pure
Go) |
MIT |
Go |
node_mdns  |
mDNS/zeroconf/bonjour service discovery add-on for Node.js |
MIT |
Node.js |
mdnsjava  |
Multicast DNS (mDNS) & DNS-Based Service Discovery (DNS-SD) in
Java |
BSD |
Java |
uPNP
goupnp  |
goupnp is a UPnP client library for Go |
BSD-2 |
Go |
UpnpServer
 |
Fast and light upnp server for Node.js |
GPLv2 |
Node.js |
| Cling |
Java/Android UPnP library and tools |
LGPL/CDDL-1.0 |
Java |
Gateway
Eclipse Kura  |
Eclipse Kura is a Java/OSGi-based framework for IoT gateways |
|
Java |
| OpenWrt |
OpenWrt is an embedded operating system based on the Linux kernel,
primarily used on embedded devices to route network traffic |
GPLv2 |
C, Lua |
UBOS  |
UBOS is an Arch-derived Linux distro optimized for cost-efficient
administration Personal Servers and Indie IoT Devices |
Linux |
many |
Home Automation
Calaos  |
Calaos is a free software project (GPLv3) that lets you control and
monitor your home. |
GPLv3 |
C++ |
Freedomotic  |
Freedomotic is an open source, flexible, secure Internet of Things
(IoT) development framework, useful to build and manage modern smart
spaces. |
GPLv2 |
Java |
openHAB  |
The open Home Automation Bus (openHAB) project aims at providing a
universal integration platform for all things around home
automation |
EPL |
Java |
Eclipse SmartHome  |
The 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. |
EPL |
Java |
Home Assistant  |
Home 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.0 |
Python 3 |
Messaging
CoAP
Californium  |
Californium is a Java CoAP implementation for IoT Cloud
services. |
EPL/EDL |
Java |
microcoap  |
A small CoAP implementation for microcontrollers |
MIT |
C (Arduino) |
gocoap  |
Implementation of CoAP in go |
MIT |
Go |
node-coap
 |
node-coap is a Node.js client and server library for CoAP modelled
after the http module. |
MIT |
Node.js |
Modbus
go modbus  |
Fault-tolerant implementation of modbus protocol in Go |
BSD-3 |
Go |
j2mod  |
Enhanced Modbus library implemented in the Java programming
language |
Apache |
Java |
libmodbus
 |
libmodbus 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.1 |
C |
modbus4j
 |
A 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 v3 |
Java |
node-modbus-stack
 |
A StreamStack implementation of the MODBUS protocol, for
NodeJS. |
MIT |
Node.js |
pymodbus  |
A full modbus protocol written in Python |
BSD |
Python |
MQTT
| Eclipse Paho |
The Eclipse Paho project provides open-source client implementations
of MQTT |
EPL/EDL |
Java, Python, Javascript, Go, C, .Net (C#), Embedded C/C++ |
Eclipse Mosquitto  |
Eclipse 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/EDL |
C, Python |
Moquette  |
Moquette is a lightweight MQTT broker in Java |
ASLv2 |
Java |
MQTT.js  |
MQTT.js is a client library for the MQTT protocol, written in
JavaScript for node.js and the browser. |
MIT |
Javascript |
|
|
|
|
MQTT-SN
mqtt-sn-tools
 |
Command line tools written in C for the MQTT-SN (MQTT for Sensor
Networks) protocol. |
MIT |
C |
OPC-UA
Eclipse Milo  |
Eclipse Milo provides all the tools necessary to implement OPC
Unified Architecture (UA) client and/or server functionality in any
JVM-based project. |
EPL/EDL |
Java |
node-opcua  |
An implementation of a OPC UA stack fully written in Javascript and
Node.js |
MIT |
Node.js |
OPC UA .NET
 |
The official OPC Foundation OPC UA .NET Stack and sample
applications. |
GPLv2 |
.Net |
open62541  |
An open source and free C (C99) OPC UA stack licensed |
MPLv2 |
C |
Operating Systems
Contiki  |
Contiki is an open source operating system for the Internet of
Things. Contiki connects tiny low-cost, low-power microcontrollers to
the Internet. |
BSD-3 |
C |
| FreeRTOS |
A cross-platform real-time operating system |
GPL-like |
C |
| mbed
OS |
ARM® 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 microcontroller |
ASLv2 |
C/C++ |
| OpenWrt |
OpenWrt is an embedded operating system based on the Linux kernel,
primarily used on embedded devices to route network traffic |
GPLv2 |
C, Lua |
RIOT-OS  |
RIOT 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 modularity |
LGPL |
C |
UBOS  |
UBOS is an Arch-derived Linux distro optimized for cost-efficient
administration Personal Servers and Indie IoT Devices |
Linux |
many |
| Zephyr |
Zephyr Project is a small, scalable real-time operating system for
use on resource-constrained systems supporting multiple
architectures. |
ASLv2 |
C |
Remote Management
Libraries that can be used to implement remote management of IoT
devices
LWM2M
Betwixt  |
Betwixt is a LWM2M Client and Server in Go |
ASL |
Go |
Eclipse Leshan  |
Eclipse Leshan is a LWM2M implementation in Java |
EPL/EDL |
Java |
lwm2m-node-lib
 |
lwm2m-node-lib is a library for building LWM2M applications (client
and server) in Javascript |
AGPL |
Node.js |
Eclipse Wakaama  |
Eclipse Wakaama is a LWM2M implementation in C |
EPL/EDL |
C |
AwaLWM2M  |
Awa LWM2M is an implementation of the OMA Lightweight M2M protocol
in C |
BSD-3 |
C |
OMA-DM
libdmclient
 |
libdmclient implements the client-side of OMA DM 1.2 protocol |
ASL |
C |
SNMP
| SNMP4J |
SNMP4J is an enterprise class free open source and state-of-the-art
SNMP implementation for Java™ SE 1.4 or later |
ASL |
Java |
GoSNMP  |
A simple SNMP library written in Go |
BSD |
Go |
TR-069
netcwmp  |
A software client for enabling TR-069 in embedded devices |
ASLv2 |
C |
Robotics and Physical
computing
Artoo  |
Artoo is a micro-framework for robotics using Ruby. |
ASLv2 |
Ruby |
Cylon.js  |
Cylon.js is a JavaScript framework for robotics, physical computing,
and the Internet of Things. |
ASLv2 |
Node.js |
Gobot  |
Gobot is a framework using the Go programming language for robotics,
physical computing, and the Internet of Things. |
ASLv2 |
Go |
Security
DNS-SEC
Dnsruby  |
Dnsruby is a pure Ruby DNS client library which implements a stub
resolver and supports DNSSEC |
ASLv2 |
Ruby |
dnssecjava
 |
A DNSSEC validating stub resolver for Java. |
EPL |
Java |
DTLS
DTLS Go  |
DTLS 1.2 in Go |
MIT |
Go |
Eclipse Scandium
 |
The 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/EDL |
Java |
| Eclipse TinyDTLS |
tinydtls 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/EDL |
C |
| mbed TLS |
mbed TLS (previously PolarSSL) is an implementation of the TLS and
SSL protocols and the respective cryptographic algorithms and support
code required. |
ASLv2 |
C |
| OpenSSL |
OpenSSL 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/SSLeay |
C/Assembly |
PyDTLS  |
Datagram Transport Layer Security for Python |
ASLv2 |
Python |
TLS
| mbed TLS |
mbed TLS (previously PolarSSL) is an implementation of the TLS and
SSL protocols and the respective cryptographic algorithms and support
code required. |
ASLv2 |
C |
| OpenSSL |
OpenSSL 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/SSLeay |
C/Assembly |
Workflow management
Node-RED  |
A visual tool for wiring the Internet of Things. |
ASL |
Node.js |
huginn  |
Huginn is a system for building agents that perform automated tasks
for you online. |
MIT |
Ruby |
Nebula
|
A docker orchestrator designed to manage IoT devices |
GPL v3 |
Python |
Contributing
Contributions are very welcome! In order to be considered an Awesome
Open IoT project you need the following: * Valid OSI approved
license, * Proven record of regular commits, * Significant community
interest shown through GitHub stars, * Project is focused on solving
problems that are specific to IoT.
Please also have a look at this
contributing guide for some general guidelines.