Agile-IoT / awesome-open-iot

A curated list of awesome open source IoT frameworks, libraries and software.
631 stars 123 forks source link

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)

Name Description License Language
bluez Official Linux Bluetooth protocol stack GPL C
Gatt
[GitHub stars]()
Gatt is a Go package for building Bluetooth Low Energy peripherals BSD-3 Go
noble
[GitHub stars]()
A Node.js BLE (Bluetooth Low Energy) central module MIT Node.js

enOcean

Name Description License Language
EnJ
[GitHub stars]()
EnJ: EnOcean Java library ASL Java
Python EnOcean
[GitHub stars]()
A Python library for reading and controlling EnOcean devices MIT Python
serialport-enocean-parser
[GitHub stars]()
An EnOcean Serial Protocol 3 (ESP3) parser for node-serialport WTFPL Node.js

KNX

TBC

LoRa / LoRaWAN

Name Description License Language
LoRa packet forwarder
[GitHub stars]()
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
[GitHub stars]()
A complete LoRaWAN network stack (router, broker, message handler) MIT Go

NFC

Name Description License Language
libnfc
[GitHub stars]()
libnfc is a library which allows userspace application access to NFC devices. LGPL v3 C
Go NFC
[GitHub stars]()
Go bindings for libnfc LGPL v3 Go
Node NFC
[GitHub stars]()
Node.js bindings for libnfc MIT Node.js
Java NFC
[GitHub stars]()
nfctools library for Java ASL Java

RS-232 / Serial

Name Description License Language
Java Simple Serial Connector
[GitHub stars]()
Platform-independent serial port access for Java LGPL Java
rxtx
[GitHub stars]()
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

Name Description License Language
TinyCBOR
[GitHub stars]()
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

Name Description License Language
Offical libraries from Google
[GitHub stars]()
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

Name Description License Language
Offical libraries from Google
[GitHub stars]()
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
[GitHub stars]()
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

Name Description License Language
CrateDB
[GitHub stars]()
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

Name Description License Language
mdns
[GitHub stars]()
Simple mDNS client/server library in Golang MIT Go
bonjour
[GitHub stars]()
mDNS/DNS-SD (also known as Apple Bonjour) library for Go (in pure Go) MIT Go
node_mdns
[GitHub stars]()
mDNS/zeroconf/bonjour service discovery add-on for Node.js MIT Node.js
mdnsjava
[GitHub stars]()
Multicast DNS (mDNS) & DNS-Based Service Discovery (DNS-SD) in Java BSD Java

uPNP

Name Description License Language
goupnp
[GitHub stars]()
goupnp is a UPnP client library for Go BSD-2 Go
UpnpServer
[GitHub stars]()
Fast and light upnp server for Node.js GPLv2 Node.js
Cling Java/Android UPnP library and tools LGPL/CDDL-1.0 Java

Gateway

Name Description License Language
Eclipse Kura
[GitHub stars]()
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
[GitHub stars]()
UBOS is an Arch-derived Linux distro optimized for cost-efficient administration Personal Servers and Indie IoT Devices Linux many

Home Automation

Name Description License Language
Calaos
[GitHub stars]()
Calaos is a free software project (GPLv3) that lets you control and monitor your home. GPLv3 C++
Freedomotic
[GitHub stars]()
Freedomotic is an open source, flexible, secure Internet of Things (IoT) development framework, useful to build and manage modern smart spaces. GPLv2 Java
openHAB
[GitHub stars]()
The open Home Automation Bus (openHAB) project aims at providing a universal integration platform for all things around home automation EPL Java
Eclipse SmartHome
[GitHub stars]()
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
[GitHub stars]()
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

Name Description License Language
Californium
[GitHub stars]()
Californium is a Java CoAP implementation for IoT Cloud services. EPL/EDL Java
microcoap
[GitHub stars]()
A small CoAP implementation for microcontrollers MIT C (Arduino)
gocoap
[GitHub stars]()
Implementation of CoAP in go MIT Go
node-coap
[GitHub stars]()
node-coap is a Node.js client and server library for CoAP modelled after the http module. MIT Node.js

Modbus

Name Description License Language
go modbus
[GitHub stars]()
Fault-tolerant implementation of modbus protocol in Go BSD-3 Go
j2mod
[GitHub stars]()
Enhanced Modbus library implemented in the Java programming language Apache Java
libmodbus
[GitHub stars]()
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
[GitHub stars]()
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
[GitHub stars]()
A StreamStack implementation of the MODBUS protocol, for NodeJS. MIT Node.js
pymodbus
[GitHub stars]()
A full modbus protocol written in Python BSD Python

MQTT

Name Description License Language
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
[GitHub stars]()
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
[GitHub stars]()
Moquette is a lightweight MQTT broker in Java ASLv2 Java
MQTT.js
[GitHub stars]()
MQTT.js is a client library for the MQTT protocol, written in JavaScript for node.js and the browser. MIT Javascript

MQTT-SN

Name Description License Language
mqtt-sn-tools
[GitHub stars]()
Command line tools written in C for the MQTT-SN (MQTT for Sensor Networks) protocol. MIT C

OPC-UA

Name Description License Language
Eclipse Milo
[GitHub stars]()
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
[GitHub stars]()
An implementation of a OPC UA stack fully written in Javascript and Node.js MIT Node.js
OPC UA .NET
[GitHub stars]()
The official OPC Foundation OPC UA .NET Stack and sample applications. GPLv2 .Net
open62541
[GitHub stars]()
An open source and free C (C99) OPC UA stack licensed MPLv2 C

Operating Systems

Name Description License Language
Contiki
[GitHub stars]()
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
[GitHub stars]()
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
[GitHub stars]()
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

Name Description License Language
Betwixt
[GitHub stars]()
Betwixt is a LWM2M Client and Server in Go ASL Go
Eclipse Leshan
[GitHub stars]()
Eclipse Leshan is a LWM2M implementation in Java EPL/EDL Java
lwm2m-node-lib
[GitHub stars]()
lwm2m-node-lib is a library for building LWM2M applications (client and server) in Javascript AGPL Node.js
Eclipse Wakaama
[GitHub stars]()
Eclipse Wakaama is a LWM2M implementation in C EPL/EDL C
AwaLWM2M
[GitHub stars]()
Awa LWM2M is an implementation of the OMA Lightweight M2M protocol in C BSD-3 C

OMA-DM

Name Description License Language
libdmclient
[GitHub stars]()
libdmclient implements the client-side of OMA DM 1.2 protocol ASL C

SNMP

Name Description License Language
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
[GitHub stars]()
A simple SNMP library written in Go BSD Go

TR-069

Name Description License Language
netcwmp
[GitHub stars]()
A software client for enabling TR-069 in embedded devices ASLv2 C

Robotics and Physical computing

Name Description License Language
Artoo
[GitHub stars]()
Artoo is a micro-framework for robotics using Ruby. ASLv2 Ruby
Cylon.js
[GitHub stars]()
Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things. ASLv2 Node.js
Gobot
[GitHub stars]()
Gobot is a framework using the Go programming language for robotics, physical computing, and the Internet of Things. ASLv2 Go

Security

DNS-SEC

Name Description License Language
Dnsruby
[GitHub stars]()
Dnsruby is a pure Ruby DNS client library which implements a stub resolver and supports DNSSEC ASLv2 Ruby
dnssecjava
[GitHub stars]()
A DNSSEC validating stub resolver for Java. EPL Java

DTLS

Name Description License Language
DTLS Go
[GitHub stars]()
DTLS 1.2 in Go MIT Go
Eclipse Scandium
[GitHub stars]()
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
[GitHub stars]()
Datagram Transport Layer Security for Python ASLv2 Python

TLS

Name Description License Language
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

Name Description License Language
Node-RED
[GitHub stars]()
A visual tool for wiring the Internet of Things. ASL Node.js
huginn
[GitHub stars]()
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:

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