Anjay is a C library that aims to be the reference implementation of the OMA Lightweight Machine-to-Machine (LwM2M) device management protocol. It eases development of fully-featured LwM2M client applications by taking care of protocol details, allowing the user to focus on device-specific aspects.
The project has been created and is actively maintained by AVSystem.
- 
LwM2M Bootstrap Interface:
- Request
 - Finish
 - Write
 - Delete
 - Discover
 
 - 
LwM2M Client Registration Interface:
- Register
 - Update
 - De-register
 
 - 
LwM2M Device Management and Service Enablement Interface:
- Read
 - Discover
 - Write
 - Write-Attributes
 - Execute
 - Create
 - Delete
 
 - 
LwM2M Information Reporting Interface:
- Observe
 - Notify
 - Cancel Observation
 
 - 
LwM2M Security modes:
- DTLS with Certificates (if supported by backend TLS library)
 - DTLS with PSK (if supported by backend TLS library)
 - NoSec mode
 
 - 
Supported TLS backends:
- mbed TLS
 - OpenSSL
 - tinydtls
 
 - 
CoAP data formats:
- TLV
 - Opaque
 - Plain Text (including base64 encoding of opaque data)
 
 - 
CoAP BLOCK transfers (for transferring data that does not fit in a single UDP packet):
- Block1 (sending / receiving requests)
 - Block2 (sending responses)
 
 - 
Pre-implemented LwM2M Objects:
- Access Control
 - Security
 - Server
 
 - 
Stream-oriented persistence API
 
OMA LwM2M is a remote device management and telemetry protocol designed to conserve network resources. It is especially suitable for constrained wireless devices, where network communication is a major factor affecting battery life. LwM2M features secure (DTLS-encrypted) methods of remote bootstrapping, configuration and notifications over UDP or SMS.
More details about OMA LwM2M: Brief introduction to LwM2M
- C compiler with C99 support,
 - CMake 2.8.11+,
 - avs_commons - included in the repository as a subproject,
 - If DTLS support is enabled, at least one of:
 - Optional dependencies (required for tests):
- C++ compiler with C++11 support,
 - Python 3.5+,
 - boost::python.
 
 
To install everything on Ubuntu 16.04 LTS:
sudo apt-get install git build-essential cmake libmbedtls-dev wget
# Optionally for tests:
sudo apt-get install libboost-python-dev libpython3-dev libssl-dev python3Or on macOS Sierra with Homebrew:
brew install cmake mbedtls wget
# Optionally for tests:
brew install python3 && brew install boost-python --with-python3To compile Anjay demo client and connect it to a local LwM2M server listening on default 5683 port:
git clone https://github.com/AVSystem/Anjay.git \
    && cd Anjay \
    && git submodule update --init \
    && cmake . \
    && make -j \
    && ./output/bin/demo --server-uri coap://127.0.0.1:5683First, make sure all necessary submodules are downloaded and up-to-date:
git submodule update --initTo compile the library and demo application:
cmake . && make -jCompiled executables, including demo client, can be found in output/bin subdirectory.
For a detailed guide on configuring and compiling the project (including cross-compiling), see Compiling client applications.
To start the demo client:
# uses plain CoAP
./output/bin/demo --server-uri coap://127.0.0.1:5683
# uses DTLS in PSK mode, with PSK identity "foo" and secret key "bar" (hex-encoded)
./output/bin/demo --server-uri coaps://127.0.0.1:5684 --security-mode psk --identity 666f6f --key 626172NOTE: When establishing a DTLS connection, the URI MUST use "coaps://". In NoSec mode (default), the URI MUST use "coap://".
Running tests:
./devconfig && make checkSee LICENSE file.
Anjay LwM2M library comes with the option of full commercial support, provided by AVSystem.
Contributions are welcome! See our contributing guide.