CoAP is simple enough to implement from scratch for a simple application.
For applications where that is not desirable, generic implementations are becoming available for a variety of platforms. Many of these implementations stay private, but some are published with liberal open-source licenses such as the Apache 2.0 or the MIT license.
Implementations for constrained devices are typically written in C.
Contiki is a widely used operating system for constrained nodes, being employed for research and product development. Erbium is a full-fledged REST Engine and CoAP Implementation for Contiki.
A C implementation of CoAP that can be used both on constrained devices (running operating systems such as Contiki or LWIP) and on a larger POSIX system. Moreover, the library has been ported to TinyOS and RIOT.
To enable CoAP's security on a tiny device, a tiny implementation of DTLS for Class 1 devices:
A small-but-capable C-based CoAP stack suitable for embedded environments. It supports observing, asynchronous responses to requests, and more. Features that aren't used can be removed to lower the footprint.
A C implementation that can be compiled for both Arduino and POSIX environments:
A C implementation that focuses on decoding and encoding, leaving the actual protocol to the application. “The user is expected to deal with retransmissions, timeouts, and message ID matching themselves. This isn’t as arduous as it sounds and makes a lot more sense on a constrained device.”
An MIT-licensed C implementation for constrained devices that covers base CoAP, Observe, and Block, with demos for ESP8266 and ZWIR4512 (Cortex M3).
The Wakaama project covers the LWM2M Protocol, CoAP, and DTLS layers of the LWM2M protocol stack for all three logical components: LWM2M Client, LWM2M Server and LWM2M Bootstrap Server. An application using Wakaama can fill any LWM2M roles or all of them at once. The CoAP and DTLS layers may be provided by external components.
CoAP is not only used between constrained devices, but also between them and more powerful systems such as cloud servers, home centrals, smartphones:
One significant Java-based implementation of CoAP is Californium.
nCoAP is a Java implementation of the CoAP protocol using the Netty NIO client server framework:
Several of the constrained-device implementations, such as libcoap, can also be used on the server side.
CoAP.NET is an implementation in C# providing CoAP-based services to .NET applications.
gen_coap is a pure Erlang implementation of a generic CoAP client and server:
node-coap is a client and server library for
CoAP modelled after the http module. Install with
CoAP-CLI is a command line interface for CoAP, built on node.js and node-coap.
npm install coap-cli -g.
txThings is a CoAP library based on Python's Twisted framework:
aiocoap implements CoAP natively on Python 3.4's asyncio mechanisms, and provides command line tools for resource fetching and proxying:
CoAPthon is a python library for the CoAP protocol, with a branch available that uses the Twisted framework.
Install a client library with:
gem install coap
Based on this, a Rack-based server implementation provides
compatibility with Rails, Sinatra, and other popular Web
gem install david
Copper is an extension for Firefox to enable direct access to CoAP resources from a browser. View details »
Some implementations are specifically targeting mobile devices such as smartphones and tablets. These tend to differ between platforms:
A simple iOS client implementation has been written by Wojtek Kordylewski in Objective-C.
CoAP client and server libraries are also available in Swift:
Aneska is a simple CoAP browser based on txThings, installable from Google Play.
A CoAP-based implementation is available with the mbed OS. The “mbed client” implementation (which contains a CoAP server) implements the OMA LWM2M protocol:
The InterDigital oneMPOWER platform is a cloud based solution for IoT service providers. It implements the complete oneM2M Service Layer running on the CoAP and HTTP web transfer protocols.
thethings.iO is an IoT platform that stores data from Things and offers tools to analyze it.