172 KiB
172 KiB
awesome-open-iot !Awesome (https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg) (https://github.com/sindresorhus/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 (https://github.com/sindresorhus/awesome) catalog for more references in his/her programming language or technical
field of choice.
- Awesome Open IoT (#awesome-open-iot)
⟡ Connectivity (#connectivity)
+ **Bluetooth 4.0, Bluetooth Smart (BLE)** (#bluetooth-40-bluetooth-smart-ble)
+ **enOcean** (#enocean)
+ **KNX** (#knx)
+ **LoRa / LoRaWAN** (#lora--lorawan)
+ **NFC** (#nfc)
+ **RS-232 / Serial** (#rs-232--serial)
+ **RS-485** (#rs-485)
+ **ZigBee** (#zigbee)
+ **Z-Wave** (#z-wave)
⟡ Data Encoding (#data-encoding)
+ **CBOR** (#cbor)
+ **FlatBuffers** (#flatbuffers)
+ **Protocol Buffers** (#protocol-buffers)
⟡ Data Visualization (#data-visualization)
⟡ Data Storage (#data-storage)
⟡ Device Discovery (#device-discovery)
+ **mDNS / Bonjour** (#mdns--bonjour)
+ **uPNP** (#upnp)
⟡ Gateway (#gateway)
⟡ Home Automation (#home-automation)
⟡ Messaging (#messaging)
+ **CoAP** (#coap)
+ **Modbus** (#modbus)
+ **MQTT** (#mqtt)
+ **MQTT-SN** (#mqtt-sn)
+ **OPC-UA** (#opc-ua)
⟡ Operating Systems (#operating-systems)
⟡ Remote Management (#remote-management)
+ **LWM2M** (#lwm2m)
+ **OMA-DM** (#oma-dm)
+ **SNMP** (#snmp)
+ **TR-069** (#tr-069)
⟡ Robotics and Physical computing (#robotics-and-physical-computing)
⟡ Security (#security)
+ **DNS-SEC** (#dns-sec)
+ **DTLS** (#dtls)
+ **TLS** (#tls)
⟡ Workflow management (#workflow-management)
- Contributing (#contributing)
Connectivity
Bluetooth 4.0, Bluetooth Smart (BLE)
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼───────┼────────┤
│bluez (http://www.bluez.org/) │Official Linux Bluetooth protocol stack │GPL │C │
│Gatt (https://github.com/paypal/gatt) !GitHub stars │Gatt is a Go package for building Bluetooth Low Energy peripherals│BSD-3 │Go │
│(https://img.shields.io/github/stars/paypal/gatt.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│noble (https://github.com/sandeepmistry/noble) !GitHub stars │A Node.js BLE (Bluetooth Low Energy) central module │MIT │Node.js │
│(https://img.shields.io/github/stars/sandeepmistry/noble.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
enOcean
│ Name │ Description │Licen│Languag│
│ │ │ se │ e │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────┼─────┼───────┤
│EnJ (https://github.com/dog-gateway/enj-library) !GitHub stars │EnJ: EnOcean Java library │ASL │Java │
│(https://img.shields.io/github/stars/dog-gateway/enj-library.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Python EnOcean (https://github.com/kipe/enocean) !GitHub stars │A Python library for reading and │MIT │Python │
│(https://img.shields.io/github/stars/kipe/enocean.svg?style=social&label=Star&maxAge=2592000) () │controlling EnOcean devices │ │ │
│serialport-enocean-parser (https://github.com/RafaelKa/node-serialport-enocean-parser) !GitHub stars │An EnOcean Serial Protocol 3 (ESP3) │WTFPL│Node.js│
│(https://img.shields.io/github/stars/RafaelKa/node-serialport-enocean-parser.svg?style=social&label=Star&maxAge=2592000) () │parser for node-serialport │ │ │
KNX
TBC
LoRa / LoRaWAN
│ Name │ Description │Licen│Lang│
│ │ │ se │uage│
├──────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────┼─────┼────┤
│LoRa packet forwarder (https://github.com/Lora-net/packet_forwarder) !GitHub stars │A program running on the host of a Lora Gateway that forward RF packets receive by the │BSD-3│C │
│(https://img.shields.io/github/stars/Lora-net/packet_forwarder.svg?style=social&label=Star│concentrator to a server through a IP/UDP link, and emits RF packets that are sent by │ │ │
│&maxAge=2592000) () │the server. │ │ │
│The Things Network (https://github.com/TheThingsNetwork/ttn) !GitHub stars │A complete LoRaWAN network stack (router, broker, message handler) │MIT │Go │
│(https://img.shields.io/github/stars/TheThingsNetwork/ttn.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
NFC
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────┼───────┼────────┤
│libnfc (https://github.com/nfc-tools/libnfc) !GitHub stars │libnfc is a library which allows userspace│LGPL v3│C │
│(https://img.shields.io/github/stars/nfc-tools/libnfc.svg?style=social&label=Star&maxAge=2592000) () │application access to NFC devices. │ │ │
│Go NFC (https://github.com/fuzxxl/nfc) !GitHub stars │Go bindings for libnfc │LGPL v3│Go │
│(https://img.shields.io/github/stars/fuzxxl/nfc.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Node NFC (https://github.com/camme/node-nfc) !GitHub stars │Node.js bindings for libnfc │MIT │Node.js │
│(https://img.shields.io/github/stars/camme/node-nfc.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Java NFC (https://github.com/grundid/nfctools) !GitHub stars │nfctools library for Java │ASL │Java │
│(https://img.shields.io/github/stars/grundid/nfctools.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
RS-232 / Serial
│ Name │ Description │ License │Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼──────────────────────┼────────┤
│Java Simple Serial Connector (https://github.com/Fazecast/jSerialComm) !GitHub stars │Platform-independent serial port access for Java │LGPL │Java │
│(https://img.shields.io/github/stars/Fazecast/jSerialComm.svg?style=social&label=Star&maxAge=259200│ │ │ │
│0) () │ │ │ │
│rxtx (https://github.com/rxtx/rxtx) !GitHub stars │A Java cross platform wrapper library for the serial port│LGPL │Java/C │
│(https://img.shields.io/github/stars/rxtx/rxtx.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│OpenJDK Device/IO (http://openjdk.java.net/projects/dio/) │The Device I/O Project provides a Java-level API for │GPL w/ classpath │Java/C │
│ │accessing generic device peripherals on embedded devices.│exception │ │
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
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│TinyCBOR (https://github.com/01org/tinycbor) !GitHub stars │TinyCBOR is Intel's industrial strength C/C++ implementation of CBOR, as used in the │MIT │C │
│(https://img.shields.io/github/stars/01org/tinycbor.svg?style=social&label=Star&m│IoTivity framework. │ │ │
│axAge=2592000) () │ │ │ │
More at: http://cbor.io/impls.html
FlatBuffers
│ Name │ Description │Licens│ Language │
│ │ │ e │ │
├─────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┼──────┼───────────────────────────┤
│Offical libraries from Google (https://github.com/google/flatbuffers) !GitHub stars │FlatBuffers is an efficient cross platform serialization │ASLv2 │C++, C#, C, Go, Java, │
│(https://img.shields.io/github/stars/google/flatbuffers.svg?style=social&label=Star&maxAge=25│library for games and other memory constrained apps. │ │JavaScript, PHP, Python │
│92000) () │ │ │ │
Protocol Buffers
│ Name │ Description │Licen│ Language │
│ │ │ se │ │
├─────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼─────┼─────────────────┤
│Offical libraries from Google (https://github.com/google/protobuf) !GitHub stars │Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, │BSD-3│C++, Java, │
│(https://img.shields.io/github/stars/google/protobuf.svg?style=social&label=Star&maxA│platform-neutral, extensible mechanism for serializing structured data. │ │Python, │
│ge=2592000) () │ │ │Objective-C, C#, │
│ │ │ │JavaScript, Ruby,│
│ │ │ │Go │
│nanopb (https://github.com/nanopb/nanopb) !GitHub stars │Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is │BSD-3│C │
│(https://img.shields.io/github/stars/nanopb/nanopb.svg?style=social&label=Star&maxAge│especially suitable for use in microcontrollers, but fits any memory restricted│ │ │
│=2592000) () │system. │ │ │
│ │ │ │ │
Data Visualization
See awesome-dataviz (https://github.com/fasouto/awesome-dataviz).
Data Storage
│ Name │ Description │ License │Language│
├──────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────┼──────────┼────────┤
│CrateDB (https://github.com/crate/crate) !GitHub stars │CrateDB is a distributed SQL database that makes it simple to store and analyze massive │Apache 2.0│Java │
│(https://img.shields.io/github/stars/crate/crate.svg?style=social&label=Star&m│amounts of machine data in real-time. │ │ │
│axAge=2592000) () │ │ │ │
Device Discovery
mDNS / Bonjour
│ Name │ Description │Lice│Langu│
│ │ │nse │ age │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────┼────┼─────┤
│mdns (https://github.com/hashicorp/mdns) !GitHub stars │Simple mDNS client/server library in Golang │MIT │Go │
│(https://img.shields.io/github/stars/hashicorp/mdns.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│bonjour (https://github.com/oleksandr/bonjour) !GitHub stars │mDNS/DNS-SD (also known as Apple Bonjour) library │MIT │Go │
│(https://img.shields.io/github/stars/oleksandr/bonjour.svg?style=social&label=Star&maxAge=2592000) () │for Go (in pure Go) │ │ │
│node_mdns (http://agnat.github.io/node_mdns) !GitHub stars │mDNS/zeroconf/bonjour service discovery add-on for│MIT │Node.│
│(https://img.shields.io/github/stars/agnat/node_mdns.svg?style=social&label=Star&maxAge=2592000) () │Node.js │ │js │
│mdnsjava (https://github.com/posicks/mdnsjava) !GitHub stars │Multicast DNS (mDNS) & DNS-Based Service Discovery│BSD │Java │
│(https://img.shields.io/github/stars/posicks/mdnsjava.svg?style=social&label=Star&maxAge=2592000) () │(DNS-SD) in Java │ │ │
uPNP
│ Name │ Description │ License │Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────┼─────────────┼────────┤
│goupnp (https://github.com/huin/goupnp) !GitHub stars │goupnp is a UPnP client library for Go│BSD-2 │Go │
│(https://img.shields.io/github/stars/huin/goupnp.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│UpnpServer (https://github.com/oeuillot/upnpserver) !GitHub stars │Fast and light upnp server for Node.js│GPLv2 │Node.js │
│(https://img.shields.io/github/stars/oeuillot/upnpserver.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Cling (http://4thline.org/projects/cling/) │Java/Android UPnP library and tools │LGPL/CDDL-1.0│Java │
Gateway
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│Eclipse Kura (https://eclipse.org/kura) !GitHub stars │Eclipse Kura is a Java/OSGi-based framework for IoT gateways │ │Java │
│(https://img.shields.io/github/stars/eclipse/kura.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
│OpenWrt (https://openwrt.org/) │OpenWrt is an embedded operating system based on the Linux kernel, primarily used on │GPLv2 │C, Lua │
│ │embedded devices to route network traffic │ │ │
│UBOS (http://ubos.net) !GitHub stars │UBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal│Linux │many │
│(https://img.shields.io/github/stars/uboslinux/ubos-admin.svg?style=social&label=S│Servers and Indie IoT Devices │ │ │
│tar&maxAge=2592000) () │ │ │ │
Home Automation
│ Name │ Description │Licens│Langua│
│ │ │ e │ ge │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────┼──────┼──────┤
│Calaos (https://calaos.fr/en/) !GitHub stars │Calaos is a free software project │GPLv3 │C++ │
│(https://img.shields.io/github/stars/calaos/calaos_base.svg?style=social&label=Star&maxAge=2592000) () │(GPLv3) that lets you control and │ │ │
│ │monitor your home. │ │ │
│Freedomotic (http://www.freedomotic.com) !GitHub stars │Freedomotic is an open source, │GPLv2 │Java │
│(https://img.shields.io/github/stars/freedomotic/freedomotic.svg?style=social&label=Star&maxAge=2592000) () │flexible, secure Internet of Things │ │ │
│ │(IoT) development framework, useful to │ │ │
│ │build and manage modern smart spaces. │ │ │
│openHAB (https://github.com/openhab/openhab) !GitHub stars │The open Home Automation Bus (openHAB) │EPL │Java │
│(https://img.shields.io/github/stars/openhab/openhab.svg?style=social&label=Star&maxAge=2592000) () │project aims at providing a universal │ │ │
│ │integration platform for all things │ │ │
│ │around home automation │ │ │
│Eclipse SmartHome (http://eclipse.org/smarthome) !GitHub stars │The Eclipse SmartHome project is a │EPL │Java │
│(https://img.shields.io/github/stars/eclipse/smarthome.svg?style=social&label=Star&maxAge=2592000) () │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. │ │ │
│Home Assistant (https://home-assistant.io) !GitHub stars │Home Assistant is a home automation │Apache│Python│
│(https://img.shields.io/github/stars/home-assistant/home-assistant.svg?style=social&label=Star&maxAge=2592000) () │platform running on Python 3. It is │2.0 │3 │
│ │able to track and control all devices │ │ │
│ │at home and offer a platform for │ │ │
│ │automating control. │ │ │
Messaging
CoAP
│ Name │ Description │Licen│Languag│
│ │ │ se │ e │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────┼─────┼───────┤
│Californium (http://www.eclipse.org/californium) !GitHub stars │Californium is a Java CoAP implementation for IoT│EPL/E│Java │
│(https://img.shields.io/github/stars/eclipse/californium.svg?style=social&label=Star&maxAge=2592000) () │Cloud services. │DL │ │
│microcoap (https://github.com/1248/microcoap) !GitHub stars │A small CoAP implementation for microcontrollers │MIT │C │
│(https://img.shields.io/github/stars/1248/microcoap.svg?style=social&label=Star&maxAge=2592000) () │ │ │(Arduin│
│ │ │ │o) │
│gocoap (https://github.com/dustin/go-coap) !GitHub stars │Implementation of CoAP in go │MIT │Go │
│(https://img.shields.io/github/stars/dustin/go-coap.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│node-coap (https://github.com/mcollina/node-coap) !GitHub stars │node-coap is a Node.js client and server library │MIT │Node.js│
│(https://img.shields.io/github/stars/mcollina/node-coap.svg?style=social&label=Star&maxAge=2592000) () │for CoAP modelled after the http module. │ │ │
Modbus
│ Name │ Description │Licens│Langu│
│ │ │ e │ age │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────┼──────┼─────┤
│go modbus (https://github.com/goburrow/modbus) !GitHub stars │Fault-tolerant │BSD-3 │Go │
│(https://img.shields.io/github/stars/goburrow/modbus.svg?style=social&label=Star&maxAge=2592000) () │implementation of modbus │ │ │
│ │protocol in Go │ │ │
│j2mod (https://github.com/steveohara/j2mod) !GitHub stars │Enhanced Modbus library │Apache│Java │
│(https://img.shields.io/github/stars/steveohara/j2mod.svg?style=social&label=Star&maxAge=2592000) () │implemented in the Java │ │ │
│ │programming language │ │ │
│libmodbus (https://github.com/stephane/libmodbus) !GitHub stars │libmodbus is a free │LGPL │C │
│(https://img.shields.io/github/stars/stephane/libmodbus.svg?style=social&label=Star&maxAge=2592000) () │software library to │v2.1 │ │
│ │send/receive data with a │ │ │
│ │device which respects the │ │ │
│ │Modbus protocol. This │ │ │
│ │library can use a serial │ │ │
│ │port or an Ethernet │ │ │
│ │connection. │ │ │
│modbus4j (https://github.com/infiniteautomation/modbus4j) !GitHub stars │A high-performance and │GPL v3│Java │
│(https://img.shields.io/github/stars/infiniteautomation/modbus4j.svg?style=social&label=Star&maxAge=2592000) () │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. │ │ │
│node-modbus-stack (https://github.com/TooTallNate/node-modbus-stack) !GitHub stars │A StreamStack │MIT │Node.│
│(https://img.shields.io/github/stars/TooTallNate/node-modbus-stack.svg?style=social&label=Star&maxAge=2592000) () │implementation of the │ │js │
│ │MODBUS protocol, for │ │ │
│ │NodeJS. │ │ │
│pymodbus (https://github.com/bashwork/pymodbus) !GitHub stars │A full modbus protocol │BSD │Pytho│
│(https://img.shields.io/github/stars/bashwork/pymodbus.svg?style=social&label=Star&maxAge=2592000) () │written in Python │ │n │
MQTT
│ Name │ Description │Licen│ Language │
│ │ │ se │ │
├───────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼─────┼───────────────┤
│Eclipse Paho (http://www.eclipse.org/paho/) │The Eclipse Paho project provides open-source client implementations of MQTT │EPL/E│Java, Python, │
│ │ │DL │Javascript, Go,│
│ │ │ │C, .Net (C#), │
│ │ │ │Embedded C/C++ │
│Eclipse Mosquitto (https://mosquitto.org) !GitHub stars │Eclipse Mosquitto is an open source message broker that implements the MQTT │EPL/E│C, Python │
│(https://img.shields.io/github/stars/eclipse/mosquitto.svg?style=social&label=Star&maxA│protocol versions 3.1 and 3.1.1. ... This makes it suitable for "Internet of │DL │ │
│ge=2592000) () │Things" messaging such as with low power sensors or mobile devices such as │ │ │
│ │phones, embedded computers or microcontrollers like the Arduino. │ │ │
│Moquette (https://github.com/andsel/moquette) !GitHub stars │Moquette is a lightweight MQTT broker in Java │ASLv2│Java │
│(https://img.shields.io/github/stars/andsel/moquette.svg?style=social&label=Star&maxAge│ │ │ │
│=2592000) () │ │ │ │
│MQTT.js (https://github.com/mqttjs/MQTT.js) !GitHub stars │MQTT.js is a client library for the MQTT protocol, written in JavaScript for │MIT │Javascript │
│(https://img.shields.io/github/stars/mqttjs/MQTT.js.svg?style=social&label=Star&maxAge=│node.js and the browser. │ │ │
│2592000) () │ │ │ │
│ │ │ │ │
MQTT-SN
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│mqtt-sn-tools (https://github.com/njh/mqtt-sn-tools) !GitHub stars │Command line tools written in C for the MQTT-SN (MQTT for Sensor Networks) protocol.│MIT │C │
│(https://img.shields.io/github/stars/njh/mqtt-sn-tools.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
OPC-UA
│ Name │ Description │Licens│Langu│
│ │ │ e │ age │
├───────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────┼──────┼─────┤
│Eclipse Milo (https://eclipse.org/milo) !GitHub stars │Eclipse Milo provides all the tools necessary to implement OPC Unified │EPL/ED│Java │
│(https://img.shields.io/github/stars/eclipse/milo.svg?style=social&label=Star&maxAge=2592000) () │Architecture (UA) client and/or server functionality in any JVM-based │L │ │
│ │project. │ │ │
│node-opcua (http://node-opcua.github.io/) !GitHub stars │An implementation of a OPC UA stack fully written in Javascript and │MIT │Node.│
│(https://img.shields.io/github/stars/node-opcua/node-opcua.svg?style=social&label=Star&maxAge=2592000) │Node.js │ │js │
│() │ │ │ │
│OPC UA .NET (http://opcfoundation.github.io/UA-.NET/) !GitHub stars │The official OPC Foundation OPC UA .NET Stack and sample applications. │GPLv2 │.Net │
│(https://img.shields.io/github/stars/OPCFoundation/UA-.NET.svg?style=social&label=Star&maxAge=2592000) │ │ │ │
│() │ │ │ │
│open62541 (http://open62541.org/) !GitHub stars │An open source and free C (C99) OPC UA stack licensed │MPLv2 │C │
│(https://img.shields.io/github/stars/open62541/open62541.svg?style=social&label=Star&maxAge=2592000) ()│ │ │ │
Operating Systems
│ Name │ Description │Licens│Lang│
│ │ │ e │uage│
├───────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┼──────┼────┤
│Contiki (https://github.com/contiki-os/contiki) !GitHub stars │Contiki is an open source operating system for the Internet of Things. Contiki connects tiny │BSD-3 │C │
│(https://img.shields.io/github/stars/contiki-os/contiki.svg?style=social&label=│low-cost, low-power microcontrollers to the Internet. │ │ │
│Star&maxAge=2592000) () │ │ │ │
│FreeRTOS (http://www.freertos.org/) │A cross-platform real-time operating system │GPL-li│C │
│ │ │ke │ │
│mbed OS (https://www.mbed.com/en/development/software/mbed-os/) │ARM® mbed™ OS is an open source embedded operating system designed specifically for the "things" │ASLv2 │C/C+│
│ │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 │ │ │
│OpenWrt (https://openwrt.org/) │OpenWrt is an embedded operating system based on the Linux kernel, primarily used on embedded │GPLv2 │C, │
│ │devices to route network traffic │ │Lua │
│RIOT-OS (https://github.com/RIOT-OS/RIOT) !GitHub stars │RIOT OS is an operating system for Internet of Things (IoT) devices. It is based on a microkernel│LGPL │C │
│(https://img.shields.io/github/stars/RIOT-OS/RIOT.svg?style=social&label=Star&m│and designed for energy efficiency, hardware independent development and a high degree of │ │ │
│axAge=2592000) () │modularity │ │ │
│UBOS (http://ubos.net) !GitHub stars │UBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal Servers│Linux │many│
│(https://img.shields.io/github/stars/uboslinux/ubos-admin.svg?style=social&labe│and Indie IoT Devices │ │ │
│l=Star&maxAge=2592000) () │ │ │ │
│Zephyr (https://www.zephyrproject.org/) │Zephyr Project is a small, scalable real-time operating system for use on resource-constrained │ASLv2 │C │
│ │systems supporting multiple architectures. │ │ │
Remote Management
Libraries that can be used to implement remote management of IoT devices
LWM2M
│ Name │ Description │Licens│Lang│
│ │ │ e │uage│
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────┼──────┼────┤
│Betwixt (https://github.com/zubairhamed/betwixt) !GitHub stars │Betwixt is a LWM2M Client and Server in Go │ASL │Go │
│(https://img.shields.io/github/stars/zubairhamed/betwixt.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Eclipse Leshan (https://eclipse.org/leshan) !GitHub stars │Eclipse Leshan is a LWM2M implementation in Java │EPL/ED│Java│
│(https://img.shields.io/github/stars/eclipse/leshan.svg?style=social&label=Star&maxAge=2592000) () │ │L │ │
│lwm2m-node-lib (https://github.com/telefonicaid/lwm2m-node-lib) !GitHub stars │lwm2m-node-lib is a library for building LWM2M │AGPL │Node│
│(https://img.shields.io/github/stars/telefonicaid/lwm2m-node-lib.svg?style=social&label=Star&maxAge=2592000) () │applications (client and server) in Javascript │ │.js │
│Eclipse Wakaama (https://eclipse.org/wakaama) !GitHub stars │Eclipse Wakaama is a LWM2M implementation in C │EPL/ED│C │
│(https://img.shields.io/github/stars/eclipse/wakaama.svg?style=social&label=Star&maxAge=2592000) () │ │L │ │
│AwaLWM2M (https://github.com/FlowM2M/AwaLWM2M) !GitHub stars │Awa LWM2M is an implementation of the OMA │BSD-3 │C │
│(https://img.shields.io/github/stars/flowm2m/awalwm2m.svg?style=social&label=Star&maxAge=2592000) () │Lightweight M2M protocol in C │ │ │
OMA-DM
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────┼───────┼────────┤
│libdmclient (https://github.com/01org/libdmclient) !GitHub stars │libdmclient implements the client-side of OMA DM 1.2 protocol│ASL │C │
│(https://img.shields.io/github/stars/01org/libdmclient.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
SNMP
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│SNMP4J (http://www.snmp4j.org/) │SNMP4J is an enterprise class free open source and state-of-the-art SNMP implementation for Java™ SE 1.4 or │ASL │Java │
│ │later │ │ │
│GoSNMP (https://github.com/alouca/gosnmp) !GitHub stars │A simple SNMP library written in Go │BSD │Go │
│(https://img.shields.io/github/stars/alouca/gosnmp.svg?style=so│ │ │ │
│cial&label=Star&maxAge=2592000) () │ │ │ │
TR-069
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼───────┼────────┤
│netcwmp (https://github.com/netcwmp/netcwmp) !GitHub stars │A software client for enabling TR-069 in embedded devices│ASLv2 │C │
│(https://img.shields.io/github/stars/netcwmp/netcwmp.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
Robotics and Physical computing
│ Name │ Description │Licens│Langua│
│ │ │ e │ ge │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────┼──────┼──────┤
│Artoo (https://github.com/hybridgroup/artoo) !GitHub stars │Artoo is a micro-framework for robotics using Ruby. │ASLv2 │Ruby │
│(https://img.shields.io/github/stars/hybridgroup/artoo.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Cylon.js (https://github.com/hybridgroup/cylon) !GitHub stars │Cylon.js is a JavaScript framework for robotics, physical computing, │ASLv2 │Node.j│
│(https://img.shields.io/github/stars/hybridgroup/cylon.svg?style=social&label=Star&maxAge=2592000) () │and the Internet of Things. │ │s │
│Gobot (https://github.com/hybridgroup/gobot) !GitHub stars │Gobot is a framework using the Go programming language for robotics, │ASLv2 │Go │
│(https://img.shields.io/github/stars/hybridgroup/gobot.svg?style=social&label=Star&maxAge=2592000) () │physical computing, and the Internet of Things. │ │ │
Security
DNS-SEC
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┼───────┼────────┤
│Dnsruby (https://github.com/alexdalitz/dnsruby) !GitHub stars │Dnsruby is a pure Ruby DNS client library which │ASLv2 │Ruby │
│(https://img.shields.io/github/stars/alexdalitz/dnsruby.svg?style=social&label=Star&maxAge=2592000) () │implements a stub resolver and supports DNSSEC │ │ │
│dnssecjava (https://github.com/ibauersachs/dnssecjava) !GitHub stars │A DNSSEC validating stub resolver for Java. │EPL │Java │
│(https://img.shields.io/github/stars/ibauersachs/dnssecjava.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
DTLS
│ Name │ Description │License│Langu│
│ │ │ │ age │
├───────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────┼───────┼─────┤
│DTLS Go (https://github.com/cfromknecht/dtls) !GitHub stars │DTLS 1.2 in Go │MIT │Go │
│(https://img.shields.io/github/stars/cfromknecht/dtls.svg?style=social&label=Star&maxAg│ │ │ │
│e=2592000) () │ │ │ │
│Eclipse Scandium ( http://www.eclipse.org/californium) !GitHub stars │The Scandium (Sc) sub-project within Californium implements DTLS 1.2 to secure your │EPL/EDL│Java │
│(https://img.shields.io/github/stars/eclipse/californium.svg?style=social&label=Star&ma│application through ECC with pre-shared keys, certificates, or raw public keys. │ │ │
│xAge=2592000) () │ │ │ │
│Eclipse TinyDTLS ( http://www.eclipse.org/tinydtls) │tinydtls is a library for Datagram Transport Layer Security (DTLS) covering both the │EPL/EDL│C │
│ │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. │ │ │
│mbed TLS (https://tls.mbed.org/) │mbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and │ASLv2 │C │
│ │the respective cryptographic algorithms and support code required. │ │ │
│OpenSSL (https://www.openssl.org/) │OpenSSL is an open source project that provides a robust, commercial-grade, and │OpenSSL│C/Ass│
│ │full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer │/SSLeay│embly│
│ │(SSL) protocols. │ │ │
│PyDTLS (https://github.com/rbit/pydtls) !GitHub stars │Datagram Transport Layer Security for Python │ASLv2 │Pytho│
│(https://img.shields.io/github/stars/rbit/pydtls.svg?style=social&label=Star&maxAge=259│ │ │n │
│2000) () │ │ │ │
TLS
│ Name │ Description │ License │ Language │
├──────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────┼──────────┤
│mbed TLS (https://tls.mbed.org/) │mbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and the respective cryptographic algorithms and│ASLv2 │C │
│ │support code required. │ │ │
│OpenSSL (https://www.openssl.org/)│OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer │OpenSSL/SSLeay│C/Assembly│
│ │Security (TLS) and Secure Sockets Layer (SSL) protocols. │ │ │
Workflow management
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│Node-RED (https://github.com/node-red/node-red) !GitHub stars │A visual tool for wiring the Internet of Things. │ASL │Node.js │
│(https://img.shields.io/github/stars/node-red/node-red.svg?style=social&label=Star&maxAge=2│ │ │ │
│592000) () │ │ │ │
│huginn (https://github.com/cantino/huginn) !GitHub stars │Huginn is a system for building agents that perform automated tasks for you │MIT │Ruby │
│(https://img.shields.io/github/stars/cantino/huginn.svg?style=social&label=Star&maxAge=2592│online. │ │ │
│000) () │ │ │ │
│Nebula (http://nebula.readthedocs.io) │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 (https://opensource.org/licenses/alphabetical),
⟡ 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 (https://github.com/akullpp/awesome-java/blob/master/CONTRIBUTING.md) for some general guidelines.
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 (https://github.com/sindresorhus/awesome) catalog for more references in his/her programming language or technical
field of choice.
- Awesome Open IoT (#awesome-open-iot)
⟡ Connectivity (#connectivity)
+ **Bluetooth 4.0, Bluetooth Smart (BLE)** (#bluetooth-40-bluetooth-smart-ble)
+ **enOcean** (#enocean)
+ **KNX** (#knx)
+ **LoRa / LoRaWAN** (#lora--lorawan)
+ **NFC** (#nfc)
+ **RS-232 / Serial** (#rs-232--serial)
+ **RS-485** (#rs-485)
+ **ZigBee** (#zigbee)
+ **Z-Wave** (#z-wave)
⟡ Data Encoding (#data-encoding)
+ **CBOR** (#cbor)
+ **FlatBuffers** (#flatbuffers)
+ **Protocol Buffers** (#protocol-buffers)
⟡ Data Visualization (#data-visualization)
⟡ Data Storage (#data-storage)
⟡ Device Discovery (#device-discovery)
+ **mDNS / Bonjour** (#mdns--bonjour)
+ **uPNP** (#upnp)
⟡ Gateway (#gateway)
⟡ Home Automation (#home-automation)
⟡ Messaging (#messaging)
+ **CoAP** (#coap)
+ **Modbus** (#modbus)
+ **MQTT** (#mqtt)
+ **MQTT-SN** (#mqtt-sn)
+ **OPC-UA** (#opc-ua)
⟡ Operating Systems (#operating-systems)
⟡ Remote Management (#remote-management)
+ **LWM2M** (#lwm2m)
+ **OMA-DM** (#oma-dm)
+ **SNMP** (#snmp)
+ **TR-069** (#tr-069)
⟡ Robotics and Physical computing (#robotics-and-physical-computing)
⟡ Security (#security)
+ **DNS-SEC** (#dns-sec)
+ **DTLS** (#dtls)
+ **TLS** (#tls)
⟡ Workflow management (#workflow-management)
- Contributing (#contributing)
Connectivity
Bluetooth 4.0, Bluetooth Smart (BLE)
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼───────┼────────┤
│bluez (http://www.bluez.org/) │Official Linux Bluetooth protocol stack │GPL │C │
│Gatt (https://github.com/paypal/gatt) !GitHub stars │Gatt is a Go package for building Bluetooth Low Energy peripherals│BSD-3 │Go │
│(https://img.shields.io/github/stars/paypal/gatt.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│noble (https://github.com/sandeepmistry/noble) !GitHub stars │A Node.js BLE (Bluetooth Low Energy) central module │MIT │Node.js │
│(https://img.shields.io/github/stars/sandeepmistry/noble.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
enOcean
│ Name │ Description │Licen│Languag│
│ │ │ se │ e │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────┼─────┼───────┤
│EnJ (https://github.com/dog-gateway/enj-library) !GitHub stars │EnJ: EnOcean Java library │ASL │Java │
│(https://img.shields.io/github/stars/dog-gateway/enj-library.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Python EnOcean (https://github.com/kipe/enocean) !GitHub stars │A Python library for reading and │MIT │Python │
│(https://img.shields.io/github/stars/kipe/enocean.svg?style=social&label=Star&maxAge=2592000) () │controlling EnOcean devices │ │ │
│serialport-enocean-parser (https://github.com/RafaelKa/node-serialport-enocean-parser) !GitHub stars │An EnOcean Serial Protocol 3 (ESP3) │WTFPL│Node.js│
│(https://img.shields.io/github/stars/RafaelKa/node-serialport-enocean-parser.svg?style=social&label=Star&maxAge=2592000) () │parser for node-serialport │ │ │
KNX
TBC
LoRa / LoRaWAN
│ Name │ Description │Licen│Lang│
│ │ │ se │uage│
├──────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────┼─────┼────┤
│LoRa packet forwarder (https://github.com/Lora-net/packet_forwarder) !GitHub stars │A program running on the host of a Lora Gateway that forward RF packets receive by the │BSD-3│C │
│(https://img.shields.io/github/stars/Lora-net/packet_forwarder.svg?style=social&label=Star│concentrator to a server through a IP/UDP link, and emits RF packets that are sent by │ │ │
│&maxAge=2592000) () │the server. │ │ │
│The Things Network (https://github.com/TheThingsNetwork/ttn) !GitHub stars │A complete LoRaWAN network stack (router, broker, message handler) │MIT │Go │
│(https://img.shields.io/github/stars/TheThingsNetwork/ttn.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
NFC
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────┼───────┼────────┤
│libnfc (https://github.com/nfc-tools/libnfc) !GitHub stars │libnfc is a library which allows userspace│LGPL v3│C │
│(https://img.shields.io/github/stars/nfc-tools/libnfc.svg?style=social&label=Star&maxAge=2592000) () │application access to NFC devices. │ │ │
│Go NFC (https://github.com/fuzxxl/nfc) !GitHub stars │Go bindings for libnfc │LGPL v3│Go │
│(https://img.shields.io/github/stars/fuzxxl/nfc.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Node NFC (https://github.com/camme/node-nfc) !GitHub stars │Node.js bindings for libnfc │MIT │Node.js │
│(https://img.shields.io/github/stars/camme/node-nfc.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Java NFC (https://github.com/grundid/nfctools) !GitHub stars │nfctools library for Java │ASL │Java │
│(https://img.shields.io/github/stars/grundid/nfctools.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
RS-232 / Serial
│ Name │ Description │ License │Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼──────────────────────┼────────┤
│Java Simple Serial Connector (https://github.com/Fazecast/jSerialComm) !GitHub stars │Platform-independent serial port access for Java │LGPL │Java │
│(https://img.shields.io/github/stars/Fazecast/jSerialComm.svg?style=social&label=Star&maxAge=259200│ │ │ │
│0) () │ │ │ │
│rxtx (https://github.com/rxtx/rxtx) !GitHub stars │A Java cross platform wrapper library for the serial port│LGPL │Java/C │
│(https://img.shields.io/github/stars/rxtx/rxtx.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│OpenJDK Device/IO (http://openjdk.java.net/projects/dio/) │The Device I/O Project provides a Java-level API for │GPL w/ classpath │Java/C │
│ │accessing generic device peripherals on embedded devices.│exception │ │
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
│ Name │ Description │License│Language│
├─────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│TinyCBOR (https://github.com/01org/tinycbor) !GitHub stars │TinyCBOR is Intel's industrial strength C/C++ implementation of CBOR, as used in the │MIT │C │
│(https://img.shields.io/github/stars/01org/tinycbor.svg?style=social&label=Star&m│IoTivity framework. │ │ │
│axAge=2592000) () │ │ │ │
More at: http://cbor.io/impls.html
FlatBuffers
│ Name │ Description │Licens│ Language │
│ │ │ e │ │
├─────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┼──────┼───────────────────────────┤
│Offical libraries from Google (https://github.com/google/flatbuffers) !GitHub stars │FlatBuffers is an efficient cross platform serialization │ASLv2 │C++, C#, C, Go, Java, │
│(https://img.shields.io/github/stars/google/flatbuffers.svg?style=social&label=Star&maxAge=25│library for games and other memory constrained apps. │ │JavaScript, PHP, Python │
│92000) () │ │ │ │
Protocol Buffers
│ Name │ Description │Licen│ Language │
│ │ │ se │ │
├─────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼─────┼─────────────────┤
│Offical libraries from Google (https://github.com/google/protobuf) !GitHub stars │Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, │BSD-3│C++, Java, │
│(https://img.shields.io/github/stars/google/protobuf.svg?style=social&label=Star&maxA│platform-neutral, extensible mechanism for serializing structured data. │ │Python, │
│ge=2592000) () │ │ │Objective-C, C#, │
│ │ │ │JavaScript, Ruby,│
│ │ │ │Go │
│nanopb (https://github.com/nanopb/nanopb) !GitHub stars │Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is │BSD-3│C │
│(https://img.shields.io/github/stars/nanopb/nanopb.svg?style=social&label=Star&maxAge│especially suitable for use in microcontrollers, but fits any memory restricted│ │ │
│=2592000) () │system. │ │ │
│ │ │ │ │
Data Visualization
See awesome-dataviz (https://github.com/fasouto/awesome-dataviz).
Data Storage
│ Name │ Description │ License │Language│
├──────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────┼──────────┼────────┤
│CrateDB (https://github.com/crate/crate) !GitHub stars │CrateDB is a distributed SQL database that makes it simple to store and analyze massive │Apache 2.0│Java │
│(https://img.shields.io/github/stars/crate/crate.svg?style=social&label=Star&m│amounts of machine data in real-time. │ │ │
│axAge=2592000) () │ │ │ │
Device Discovery
mDNS / Bonjour
│ Name │ Description │Lice│Langu│
│ │ │nse │ age │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────┼────┼─────┤
│mdns (https://github.com/hashicorp/mdns) !GitHub stars │Simple mDNS client/server library in Golang │MIT │Go │
│(https://img.shields.io/github/stars/hashicorp/mdns.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│bonjour (https://github.com/oleksandr/bonjour) !GitHub stars │mDNS/DNS-SD (also known as Apple Bonjour) library │MIT │Go │
│(https://img.shields.io/github/stars/oleksandr/bonjour.svg?style=social&label=Star&maxAge=2592000) () │for Go (in pure Go) │ │ │
│node_mdns (http://agnat.github.io/node_mdns) !GitHub stars │mDNS/zeroconf/bonjour service discovery add-on for│MIT │Node.│
│(https://img.shields.io/github/stars/agnat/node_mdns.svg?style=social&label=Star&maxAge=2592000) () │Node.js │ │js │
│mdnsjava (https://github.com/posicks/mdnsjava) !GitHub stars │Multicast DNS (mDNS) & DNS-Based Service Discovery│BSD │Java │
│(https://img.shields.io/github/stars/posicks/mdnsjava.svg?style=social&label=Star&maxAge=2592000) () │(DNS-SD) in Java │ │ │
uPNP
│ Name │ Description │ License │Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────┼─────────────┼────────┤
│goupnp (https://github.com/huin/goupnp) !GitHub stars │goupnp is a UPnP client library for Go│BSD-2 │Go │
│(https://img.shields.io/github/stars/huin/goupnp.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│UpnpServer (https://github.com/oeuillot/upnpserver) !GitHub stars │Fast and light upnp server for Node.js│GPLv2 │Node.js │
│(https://img.shields.io/github/stars/oeuillot/upnpserver.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Cling (http://4thline.org/projects/cling/) │Java/Android UPnP library and tools │LGPL/CDDL-1.0│Java │
Gateway
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│Eclipse Kura (https://eclipse.org/kura) !GitHub stars │Eclipse Kura is a Java/OSGi-based framework for IoT gateways │ │Java │
│(https://img.shields.io/github/stars/eclipse/kura.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
│OpenWrt (https://openwrt.org/) │OpenWrt is an embedded operating system based on the Linux kernel, primarily used on │GPLv2 │C, Lua │
│ │embedded devices to route network traffic │ │ │
│UBOS (http://ubos.net) !GitHub stars │UBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal│Linux │many │
│(https://img.shields.io/github/stars/uboslinux/ubos-admin.svg?style=social&label=S│Servers and Indie IoT Devices │ │ │
│tar&maxAge=2592000) () │ │ │ │
Home Automation
│ Name │ Description │Licens│Langua│
│ │ │ e │ ge │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────┼──────┼──────┤
│Calaos (https://calaos.fr/en/) !GitHub stars │Calaos is a free software project │GPLv3 │C++ │
│(https://img.shields.io/github/stars/calaos/calaos_base.svg?style=social&label=Star&maxAge=2592000) () │(GPLv3) that lets you control and │ │ │
│ │monitor your home. │ │ │
│Freedomotic (http://www.freedomotic.com) !GitHub stars │Freedomotic is an open source, │GPLv2 │Java │
│(https://img.shields.io/github/stars/freedomotic/freedomotic.svg?style=social&label=Star&maxAge=2592000) () │flexible, secure Internet of Things │ │ │
│ │(IoT) development framework, useful to │ │ │
│ │build and manage modern smart spaces. │ │ │
│openHAB (https://github.com/openhab/openhab) !GitHub stars │The open Home Automation Bus (openHAB) │EPL │Java │
│(https://img.shields.io/github/stars/openhab/openhab.svg?style=social&label=Star&maxAge=2592000) () │project aims at providing a universal │ │ │
│ │integration platform for all things │ │ │
│ │around home automation │ │ │
│Eclipse SmartHome (http://eclipse.org/smarthome) !GitHub stars │The Eclipse SmartHome project is a │EPL │Java │
│(https://img.shields.io/github/stars/eclipse/smarthome.svg?style=social&label=Star&maxAge=2592000) () │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. │ │ │
│Home Assistant (https://home-assistant.io) !GitHub stars │Home Assistant is a home automation │Apache│Python│
│(https://img.shields.io/github/stars/home-assistant/home-assistant.svg?style=social&label=Star&maxAge=2592000) () │platform running on Python 3. It is │2.0 │3 │
│ │able to track and control all devices │ │ │
│ │at home and offer a platform for │ │ │
│ │automating control. │ │ │
Messaging
CoAP
│ Name │ Description │Licen│Languag│
│ │ │ se │ e │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────┼─────┼───────┤
│Californium (http://www.eclipse.org/californium) !GitHub stars │Californium is a Java CoAP implementation for IoT│EPL/E│Java │
│(https://img.shields.io/github/stars/eclipse/californium.svg?style=social&label=Star&maxAge=2592000) () │Cloud services. │DL │ │
│microcoap (https://github.com/1248/microcoap) !GitHub stars │A small CoAP implementation for microcontrollers │MIT │C │
│(https://img.shields.io/github/stars/1248/microcoap.svg?style=social&label=Star&maxAge=2592000) () │ │ │(Arduin│
│ │ │ │o) │
│gocoap (https://github.com/dustin/go-coap) !GitHub stars │Implementation of CoAP in go │MIT │Go │
│(https://img.shields.io/github/stars/dustin/go-coap.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│node-coap (https://github.com/mcollina/node-coap) !GitHub stars │node-coap is a Node.js client and server library │MIT │Node.js│
│(https://img.shields.io/github/stars/mcollina/node-coap.svg?style=social&label=Star&maxAge=2592000) () │for CoAP modelled after the http module. │ │ │
Modbus
│ Name │ Description │Licens│Langu│
│ │ │ e │ age │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────┼──────┼─────┤
│go modbus (https://github.com/goburrow/modbus) !GitHub stars │Fault-tolerant │BSD-3 │Go │
│(https://img.shields.io/github/stars/goburrow/modbus.svg?style=social&label=Star&maxAge=2592000) () │implementation of modbus │ │ │
│ │protocol in Go │ │ │
│j2mod (https://github.com/steveohara/j2mod) !GitHub stars │Enhanced Modbus library │Apache│Java │
│(https://img.shields.io/github/stars/steveohara/j2mod.svg?style=social&label=Star&maxAge=2592000) () │implemented in the Java │ │ │
│ │programming language │ │ │
│libmodbus (https://github.com/stephane/libmodbus) !GitHub stars │libmodbus is a free │LGPL │C │
│(https://img.shields.io/github/stars/stephane/libmodbus.svg?style=social&label=Star&maxAge=2592000) () │software library to │v2.1 │ │
│ │send/receive data with a │ │ │
│ │device which respects the │ │ │
│ │Modbus protocol. This │ │ │
│ │library can use a serial │ │ │
│ │port or an Ethernet │ │ │
│ │connection. │ │ │
│modbus4j (https://github.com/infiniteautomation/modbus4j) !GitHub stars │A high-performance and │GPL v3│Java │
│(https://img.shields.io/github/stars/infiniteautomation/modbus4j.svg?style=social&label=Star&maxAge=2592000) () │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. │ │ │
│node-modbus-stack (https://github.com/TooTallNate/node-modbus-stack) !GitHub stars │A StreamStack │MIT │Node.│
│(https://img.shields.io/github/stars/TooTallNate/node-modbus-stack.svg?style=social&label=Star&maxAge=2592000) () │implementation of the │ │js │
│ │MODBUS protocol, for │ │ │
│ │NodeJS. │ │ │
│pymodbus (https://github.com/bashwork/pymodbus) !GitHub stars │A full modbus protocol │BSD │Pytho│
│(https://img.shields.io/github/stars/bashwork/pymodbus.svg?style=social&label=Star&maxAge=2592000) () │written in Python │ │n │
MQTT
│ Name │ Description │Licen│ Language │
│ │ │ se │ │
├───────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┼─────┼───────────────┤
│Eclipse Paho (http://www.eclipse.org/paho/) │The Eclipse Paho project provides open-source client implementations of MQTT │EPL/E│Java, Python, │
│ │ │DL │Javascript, Go,│
│ │ │ │C, .Net (C#), │
│ │ │ │Embedded C/C++ │
│Eclipse Mosquitto (https://mosquitto.org) !GitHub stars │Eclipse Mosquitto is an open source message broker that implements the MQTT │EPL/E│C, Python │
│(https://img.shields.io/github/stars/eclipse/mosquitto.svg?style=social&label=Star&maxA│protocol versions 3.1 and 3.1.1. ... This makes it suitable for "Internet of │DL │ │
│ge=2592000) () │Things" messaging such as with low power sensors or mobile devices such as │ │ │
│ │phones, embedded computers or microcontrollers like the Arduino. │ │ │
│Moquette (https://github.com/andsel/moquette) !GitHub stars │Moquette is a lightweight MQTT broker in Java │ASLv2│Java │
│(https://img.shields.io/github/stars/andsel/moquette.svg?style=social&label=Star&maxAge│ │ │ │
│=2592000) () │ │ │ │
│MQTT.js (https://github.com/mqttjs/MQTT.js) !GitHub stars │MQTT.js is a client library for the MQTT protocol, written in JavaScript for │MIT │Javascript │
│(https://img.shields.io/github/stars/mqttjs/MQTT.js.svg?style=social&label=Star&maxAge=│node.js and the browser. │ │ │
│2592000) () │ │ │ │
│ │ │ │ │
MQTT-SN
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│mqtt-sn-tools (https://github.com/njh/mqtt-sn-tools) !GitHub stars │Command line tools written in C for the MQTT-SN (MQTT for Sensor Networks) protocol.│MIT │C │
│(https://img.shields.io/github/stars/njh/mqtt-sn-tools.svg?style=social&label=Star&maxA│ │ │ │
│ge=2592000) () │ │ │ │
OPC-UA
│ Name │ Description │Licens│Langu│
│ │ │ e │ age │
├───────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────┼──────┼─────┤
│Eclipse Milo (https://eclipse.org/milo) !GitHub stars │Eclipse Milo provides all the tools necessary to implement OPC Unified │EPL/ED│Java │
│(https://img.shields.io/github/stars/eclipse/milo.svg?style=social&label=Star&maxAge=2592000) () │Architecture (UA) client and/or server functionality in any JVM-based │L │ │
│ │project. │ │ │
│node-opcua (http://node-opcua.github.io/) !GitHub stars │An implementation of a OPC UA stack fully written in Javascript and │MIT │Node.│
│(https://img.shields.io/github/stars/node-opcua/node-opcua.svg?style=social&label=Star&maxAge=2592000) │Node.js │ │js │
│() │ │ │ │
│OPC UA .NET (http://opcfoundation.github.io/UA-.NET/) !GitHub stars │The official OPC Foundation OPC UA .NET Stack and sample applications. │GPLv2 │.Net │
│(https://img.shields.io/github/stars/OPCFoundation/UA-.NET.svg?style=social&label=Star&maxAge=2592000) │ │ │ │
│() │ │ │ │
│open62541 (http://open62541.org/) !GitHub stars │An open source and free C (C99) OPC UA stack licensed │MPLv2 │C │
│(https://img.shields.io/github/stars/open62541/open62541.svg?style=social&label=Star&maxAge=2592000) ()│ │ │ │
Operating Systems
│ Name │ Description │Licens│Lang│
│ │ │ e │uage│
├───────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┼──────┼────┤
│Contiki (https://github.com/contiki-os/contiki) !GitHub stars │Contiki is an open source operating system for the Internet of Things. Contiki connects tiny │BSD-3 │C │
│(https://img.shields.io/github/stars/contiki-os/contiki.svg?style=social&label=│low-cost, low-power microcontrollers to the Internet. │ │ │
│Star&maxAge=2592000) () │ │ │ │
│FreeRTOS (http://www.freertos.org/) │A cross-platform real-time operating system │GPL-li│C │
│ │ │ke │ │
│mbed OS (https://www.mbed.com/en/development/software/mbed-os/) │ARM® mbed™ OS is an open source embedded operating system designed specifically for the "things" │ASLv2 │C/C+│
│ │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 │ │ │
│OpenWrt (https://openwrt.org/) │OpenWrt is an embedded operating system based on the Linux kernel, primarily used on embedded │GPLv2 │C, │
│ │devices to route network traffic │ │Lua │
│RIOT-OS (https://github.com/RIOT-OS/RIOT) !GitHub stars │RIOT OS is an operating system for Internet of Things (IoT) devices. It is based on a microkernel│LGPL │C │
│(https://img.shields.io/github/stars/RIOT-OS/RIOT.svg?style=social&label=Star&m│and designed for energy efficiency, hardware independent development and a high degree of │ │ │
│axAge=2592000) () │modularity │ │ │
│UBOS (http://ubos.net) !GitHub stars │UBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal Servers│Linux │many│
│(https://img.shields.io/github/stars/uboslinux/ubos-admin.svg?style=social&labe│and Indie IoT Devices │ │ │
│l=Star&maxAge=2592000) () │ │ │ │
│Zephyr (https://www.zephyrproject.org/) │Zephyr Project is a small, scalable real-time operating system for use on resource-constrained │ASLv2 │C │
│ │systems supporting multiple architectures. │ │ │
Remote Management
Libraries that can be used to implement remote management of IoT devices
LWM2M
│ Name │ Description │Licens│Lang│
│ │ │ e │uage│
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────┼──────┼────┤
│Betwixt (https://github.com/zubairhamed/betwixt) !GitHub stars │Betwixt is a LWM2M Client and Server in Go │ASL │Go │
│(https://img.shields.io/github/stars/zubairhamed/betwixt.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Eclipse Leshan (https://eclipse.org/leshan) !GitHub stars │Eclipse Leshan is a LWM2M implementation in Java │EPL/ED│Java│
│(https://img.shields.io/github/stars/eclipse/leshan.svg?style=social&label=Star&maxAge=2592000) () │ │L │ │
│lwm2m-node-lib (https://github.com/telefonicaid/lwm2m-node-lib) !GitHub stars │lwm2m-node-lib is a library for building LWM2M │AGPL │Node│
│(https://img.shields.io/github/stars/telefonicaid/lwm2m-node-lib.svg?style=social&label=Star&maxAge=2592000) () │applications (client and server) in Javascript │ │.js │
│Eclipse Wakaama (https://eclipse.org/wakaama) !GitHub stars │Eclipse Wakaama is a LWM2M implementation in C │EPL/ED│C │
│(https://img.shields.io/github/stars/eclipse/wakaama.svg?style=social&label=Star&maxAge=2592000) () │ │L │ │
│AwaLWM2M (https://github.com/FlowM2M/AwaLWM2M) !GitHub stars │Awa LWM2M is an implementation of the OMA │BSD-3 │C │
│(https://img.shields.io/github/stars/flowm2m/awalwm2m.svg?style=social&label=Star&maxAge=2592000) () │Lightweight M2M protocol in C │ │ │
OMA-DM
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────┼───────┼────────┤
│libdmclient (https://github.com/01org/libdmclient) !GitHub stars │libdmclient implements the client-side of OMA DM 1.2 protocol│ASL │C │
│(https://img.shields.io/github/stars/01org/libdmclient.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
SNMP
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│SNMP4J (http://www.snmp4j.org/) │SNMP4J is an enterprise class free open source and state-of-the-art SNMP implementation for Java™ SE 1.4 or │ASL │Java │
│ │later │ │ │
│GoSNMP (https://github.com/alouca/gosnmp) !GitHub stars │A simple SNMP library written in Go │BSD │Go │
│(https://img.shields.io/github/stars/alouca/gosnmp.svg?style=so│ │ │ │
│cial&label=Star&maxAge=2592000) () │ │ │ │
TR-069
│ Name │ Description │License│Language│
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼───────┼────────┤
│netcwmp (https://github.com/netcwmp/netcwmp) !GitHub stars │A software client for enabling TR-069 in embedded devices│ASLv2 │C │
│(https://img.shields.io/github/stars/netcwmp/netcwmp.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
Robotics and Physical computing
│ Name │ Description │Licens│Langua│
│ │ │ e │ ge │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────┼──────┼──────┤
│Artoo (https://github.com/hybridgroup/artoo) !GitHub stars │Artoo is a micro-framework for robotics using Ruby. │ASLv2 │Ruby │
│(https://img.shields.io/github/stars/hybridgroup/artoo.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
│Cylon.js (https://github.com/hybridgroup/cylon) !GitHub stars │Cylon.js is a JavaScript framework for robotics, physical computing, │ASLv2 │Node.j│
│(https://img.shields.io/github/stars/hybridgroup/cylon.svg?style=social&label=Star&maxAge=2592000) () │and the Internet of Things. │ │s │
│Gobot (https://github.com/hybridgroup/gobot) !GitHub stars │Gobot is a framework using the Go programming language for robotics, │ASLv2 │Go │
│(https://img.shields.io/github/stars/hybridgroup/gobot.svg?style=social&label=Star&maxAge=2592000) () │physical computing, and the Internet of Things. │ │ │
Security
DNS-SEC
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┼───────┼────────┤
│Dnsruby (https://github.com/alexdalitz/dnsruby) !GitHub stars │Dnsruby is a pure Ruby DNS client library which │ASLv2 │Ruby │
│(https://img.shields.io/github/stars/alexdalitz/dnsruby.svg?style=social&label=Star&maxAge=2592000) () │implements a stub resolver and supports DNSSEC │ │ │
│dnssecjava (https://github.com/ibauersachs/dnssecjava) !GitHub stars │A DNSSEC validating stub resolver for Java. │EPL │Java │
│(https://img.shields.io/github/stars/ibauersachs/dnssecjava.svg?style=social&label=Star&maxAge=2592000) () │ │ │ │
DTLS
│ Name │ Description │License│Langu│
│ │ │ │ age │
├───────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────┼───────┼─────┤
│DTLS Go (https://github.com/cfromknecht/dtls) !GitHub stars │DTLS 1.2 in Go │MIT │Go │
│(https://img.shields.io/github/stars/cfromknecht/dtls.svg?style=social&label=Star&maxAg│ │ │ │
│e=2592000) () │ │ │ │
│Eclipse Scandium ( http://www.eclipse.org/californium) !GitHub stars │The Scandium (Sc) sub-project within Californium implements DTLS 1.2 to secure your │EPL/EDL│Java │
│(https://img.shields.io/github/stars/eclipse/californium.svg?style=social&label=Star&ma│application through ECC with pre-shared keys, certificates, or raw public keys. │ │ │
│xAge=2592000) () │ │ │ │
│Eclipse TinyDTLS ( http://www.eclipse.org/tinydtls) │tinydtls is a library for Datagram Transport Layer Security (DTLS) covering both the │EPL/EDL│C │
│ │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. │ │ │
│mbed TLS (https://tls.mbed.org/) │mbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and │ASLv2 │C │
│ │the respective cryptographic algorithms and support code required. │ │ │
│OpenSSL (https://www.openssl.org/) │OpenSSL is an open source project that provides a robust, commercial-grade, and │OpenSSL│C/Ass│
│ │full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer │/SSLeay│embly│
│ │(SSL) protocols. │ │ │
│PyDTLS (https://github.com/rbit/pydtls) !GitHub stars │Datagram Transport Layer Security for Python │ASLv2 │Pytho│
│(https://img.shields.io/github/stars/rbit/pydtls.svg?style=social&label=Star&maxAge=259│ │ │n │
│2000) () │ │ │ │
TLS
│ Name │ Description │ License │ Language │
├──────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────┼──────────┤
│mbed TLS (https://tls.mbed.org/) │mbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and the respective cryptographic algorithms and│ASLv2 │C │
│ │support code required. │ │ │
│OpenSSL (https://www.openssl.org/)│OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer │OpenSSL/SSLeay│C/Assembly│
│ │Security (TLS) and Secure Sockets Layer (SSL) protocols. │ │ │
Workflow management
│ Name │ Description │License│Language│
├───────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┼───────┼────────┤
│Node-RED (https://github.com/node-red/node-red) !GitHub stars │A visual tool for wiring the Internet of Things. │ASL │Node.js │
│(https://img.shields.io/github/stars/node-red/node-red.svg?style=social&label=Star&maxAge=2│ │ │ │
│592000) () │ │ │ │
│huginn (https://github.com/cantino/huginn) !GitHub stars │Huginn is a system for building agents that perform automated tasks for you │MIT │Ruby │
│(https://img.shields.io/github/stars/cantino/huginn.svg?style=social&label=Star&maxAge=2592│online. │ │ │
│000) () │ │ │ │
│Nebula (http://nebula.readthedocs.io) │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 (https://opensource.org/licenses/alphabetical),
⟡ 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 (https://github.com/akullpp/awesome-java/blob/master/CONTRIBUTING.md) for some general guidelines.