The Python CoAP library
Pull request Compare This branch is 446 commits ahead, 25 commits behind mwasilak:master.
Latest commit 4689bb0 Jan 25, 2017 @chrysn doc: Recommend using pip3 over pip
Closes: #57


aiocoap -- The Python CoAP library

The aiocoap package is a Python implementation of CoAP, the Constrained Application Protocol (RFC 7252, more info at

It uses the Python 3's asynchronous I/O to facilitate concurrent operations while maintaining a simple to use interface and not depending on anything outside the standard library.

aiocoap is originally based on txThings. If you want to use CoAP in your existing twisted application, or can not migrate to Python 3 yet, that is probably more useful to you than aiocoap.


For how to use the aiocoap library, have a look at the guidedtour, or at the examples and tools provided. All the details are in the aiocoap module documentation.

All examples can be run directly from a source code copy. If you prefer to install it, the usual Python mechanisms apply (see installation).

Features / Standards

This library supports the following standards in full or partially:

  • RFC7252 (CoAP): missing are a caching and cross proxy implementation, proper multicast (support is incomplete), and DTLS.
  • RFC7641 (Observe): Reordering, re-registration, and active cancellation are missing.
  • RFC7959 (Blockwise): Multicast exceptions missing.
  • draft-ietf-core-etch-04: Only registry entries added, but that should be all that's neede on the library side.
  • draft-ietf-core-resource-directory-09: A standalone resource directory server is provided. It lacks support for groups, PATCHes to endpoint locations, DNS-SD mapping and security considerations, and is generally rather experimental.

If something described by one of the standards but not implemented, it is considered a bug; please file at the github issue tracker. (If it's not on the list or in the excluded items, file a wishlist item at the same location).


The core aiocoap functionality works out of the box with Python 3.4; with the additional asyncio module, it works with version 3.3 as well. The examples require Python 3.5 or newer.

When application/link-format typed resources (RFC 6690) are supposed to be used, the link_header module is required as well. When the respective code paths are used without the module, an ImportError will be raised, or a 5.00 status code will be returned. Python modules that implement servers or use discovery with aiocoap should declare a dependency on 'aiocoap[linkheader]' instead of 'aiocoap'.


aiocoap tries to stay close to PEP8 recommendations and general best practice, and should thus be easy to contribute to. Unit tests are implemented in the ./tests/ directory and easiest run using ./ test; complete test coverage is aimed for, but not yet complete (and might never be, as the error handling for pathological network partners is hard to trigger with a library designed not to misbehave).

Documentation is built using sphinx with ./ build_sphinx; hacks used there are described in ./doc/README.doc.

Bugs (ranging from "design goal" and "wishlist" to typos) are currently tracked in the github issue tracker.

Relevant URLs


aiocoap is published under the MIT License, see LICENSE for details.

When using aiocoap for a publication, please cite it according to the output of ./ cite [--bibtex].

Copyright (c) 2012-2014 Maciej Wasilak <>,
2013-2014 Christian Amsüss <>