Universal implementation of the CoAP networking protocol


Keywords
wasm, no_std, iot, coap, networking, coap-client, coap-server, embedded, fast, no-os, rust, safe, udp
Licenses
MIT/Apache-2.0

Documentation

A CoAP implementation that strives to power client- and server-side CoAP in any language & any environment.

CoAP?

CoAP is an application-level network protocol that copies the semantics of HTTP to an environment conducive to constrained devices. (weak hardware, small battery capacity, etc.)

This means that you can write and run two-way RESTful communication between devices very similarly to the networking semantics you are most likely very familiar with.

CoAP vs HTTP

CoAP provides a high performance + low latency alternative to HTTP that uses much of the same terminology and semantics.

In CoAP, you'll find familiar things like verbs (GET, POST, PUT, DELETE), headers (aka. Options) and status code (4.04 NOT FOUND) but you also have access to some extra levers that let you customize behavior of requests and responses, such as "I don't need to know that you received this message."

The library

Contributing

  • There are examples provided in each library that demo some high (or low) level use-cases that this library aims to cover
  • The issues are a good place to start if you're interested in contributing directly. At this stage, the project issues are a living backlog of work-to-be-done before stabilizing and promoting the repo.
  • You (contributor) should just make sure tests pass (cargo make test). I'll get the other CI steps to pass to make your contribution experience painless.
  • TODO: document architecture at a high level

Setup

  • install the rust language
  • clone this repo git clone git@github.com:toad-lib/toad
  • install cargo-make cargo install cargo-make
  • try running an example cd toad; cargo run --example server

How we define success

  • toad is significantly faster and lower latency than comparable HTTP libraries
  • toad answers questions like "what is coap?" and "why should i care?"
  • toad has frontends available in major ecosystems (Android, iOS, Node)
  • toad is fully usable on constrained bare metal devices in both server & client roles