#CoAP

2026-03-11

I've been trying to carve out time to work on #LoRA again and have revisited git.oit.cloud/morgan/esp_netif, my ESP-IDF IP over LoRa driver.

Today I got broadcast and multicast working, my test app, they just need to be put in the driver, with config options.

I've outlined a fix to allow for multiple interfaces if a device has more than one radio.

With multicast working, I think I can finally do #CoAP discovery!

kinda last major improvement for this to be useful is some sort of MTU enforcement.

2026-03-11

@nils I did have some reservations about using @ratatui_rs for embedded devices (mainly that they're natively pixel based, so why go through a typewriter interface when there's no legacy) -- but seeing how reasonable that looks in code already at this quick prototype makes me reconsider.

Don't hold your breath for a text based #CoAP web browser, but I'd love to build one.

2026-02-21
One specific number is gonna haunt me for a while now, and it's 65805.

Yes, I'm implementing #CoAP for #BIRD #Internet #Routing Daemon.
2026-01-29

The sign is a lie (and they knew that advance: train goes only to Köln), but still on my way to #FOSDEM.

Happy any time to talk about #CoAP, #CBOR, #DectNrPlus, IoT security and embedded Rust development, especially on @ariel and @RIOT_OS.

Railway station with ÖBB train arriving. Overhead sign says NJ486 to Bruxelles-Midi.
2026-01-09

RIOT Summit 2018 @ Amsterdam - Keynote by Jaime Jiménez (Ericsson)

makertube.net/w/3owgfnGMGoiVBV

2025-12-16

@reiver I think #CoAP is a good fit. It's easy enough to explain on a napkin, extensible, has the familiar REST semantics, and can be implemented on the smallest of devices.

Plus it has a well-vetted security mechanism that is lightweight enough to be implemented by a single person.

2025-12-12

We're gathering momentum for slipmux, a transport of #CoAP over serial ports. That specification allows #embedded developers on simple boards that just have a UART to use the same tools with it as for talking to devices across the Internet. This includes security: I guess I just sent the first encrypted request over slipmux ever, and its security setup was unmodified from #ArielOS's CoAP example.
Implementation is available in #RiotOS (#C), and WIP for Ariel (#RustLang) and #aiocoap (#Python).

Two overlaid terminal sessions:

$ aiocoap-client coap://ttyacm0.dev.alt/.well-known/core --credentials client.diag
# application/link-format content was re-formatted
<>; ct=0; title="Landing page",
</time>; ct=0; title=Clock,
</poem>; sz=1338,
</cbor>; ct=60,
</stdout>; if="tag:riot-os.org,2021:ser-out"
$

followed by a debug log that shows:

[DEBUG] Peer indicated use of the one preconfigured key by KID. (coapcore coapcore/src/seccfg.rs:382)
[DEBUG] Processing 19 bytes at start of message into new EDHOC Message 3. (coapcore coapcore/src/seccontext.rs:703)
[DEBUG] Taking out of CoAP stack: [ …and a lot of hex data
2025-11-02

… and it was a success: We implemented runtime updates over #CoAP, and with our stack's access control, restricting changes to the VM code to authorized users is just a matter of four lines of config.

#IETFHackathon

Command line interactions:

$ aiocoap-client coap://10.42.0.28/vm/example
This resource exists inside a capsule

$ aiocoap-client coap://10.42.0.28/vm-control -m PUT --payload @./payload.cwasm
4.01 Unauthorized

$ aiocoap-client coap://10.42.0.28/vm-control -m PUT --payload @./payload.cwasm --credentials client.diag

$ aiocoap-client coap://10.42.0.28/vm/example
This resource was updated inside a capsule

Non-console text says "Apologies for the legacy addresses: We're fixing our stack."
2025-09-29

Development of aiocoap, my Python CoAP library, is approaching its next breaking release.

If there's anything about its usability as a library that has been bugging you, especially if it would require breaking changes: Let me know soon, either here or on the issue tracker at github.com/chrysn/aiocoap/issu

#aiocoap #Python #CoAP

2025-09-22

@khalid Now that toot makes me kind'a feel bad about wanting to introduce coap:// to that list of #smolweb protocols.

Then again, #CoAP excels at proxying (and was carefully designed to facilitate it even across protocols), so a client could go through a CoAP proxy to access any of the others (unless it happens to implement any of the others as well).

2025-09-18

Thanks to @pyodide and @ProjectJupyter, using #CoAP is becoming more accessible: The latest version of the #aiocoap documentation has examples that can be run directly from the documentation, and access CoAP peers through a WebSocket-to-UDP cross proxy:

<aiocoap.codeberg.page/aiocoap/>

#Python

Martine (she/they)miri64@ohai.social
2025-09-17
2025-09-10

I'm fixing #aiocoap's memory leak tests to finally run as async functions: the original tests employed mechanisms from the age of tulip (back when asyncio was developed out-of-tree), and Python 3.14 dropping some obsolete mechanisms.

Good riddance, but also tough work fixing subtle possible leaks that are suddenly easier to discover.

#Python #CoAP

2025-08-14

… and #IETF is not far behind, with datatracker.ietf.org/doc/draft almost ready to assign algorithm identifiers so this can be used in #OSCORE for #CoAP.

2025-07-24

Discussions during the current #IETF meeting led me to write a new draft on a compact CoAP URI expression, Short Paths In CoAP (ShoPinC, following the trade tradition of contrived acronyms).

As not all of the #CoAP crowd is reading the IETF lists, I'm soliciting opinions or feedback from here as well.

chrysn.github.io/shopinc/draft

Stéphane Bortzmeyerbortzmeyer@mastodon.gougere.fr
2025-07-20

#DNS over #CoAP because you can always run X over Y at an IETF hackathon.

#IETF123

2025-07-15

I hope that by the end of the year, I can use this in my favorite embedded OSes, @RIOT_OS and @ariel, as well as on bare metal systems, for firmware updates or encrypted #CoAP communication.

2025-06-25

@chris_gammell You might want to join this year's @RIOT_OS summit: Rumor has it that there will be a presentation on the tools we use there to bridge the gaps between actual shell use (like, bidirectional character streams) and #CoAP based RPC.
(I didn't plan anything yet, but I do have an implementation of SSH-/mosh-like access to stdin/-out, so maybe I should file a talk too?)

2025-06-23

Just released v0.3.1 of my slipmux implementation on crates.io! This releases prominent feature is support for usage in !no_std environments. Check it out at crates.io/crates/slipmux

#Slipmux #Rust #Coap #Embedded

Stuart Longland (VK4MSL)stuartl@longlandclan.id.au
2025-05-18

As for multicast Block1 (block-wise PUT/POST request)… I think the block-size would have to be negotiated up front via a separate custom option.

Call it MCBlock1 (option 65000), unsigned integer consisting of:
- bits 0-3: SZX - Size exponent
- bit 4: P - Proposal
- bit 5: S - Master selection
- bit 6: C - Master cancellation

When a node wishes to send a blockwise file to a multicast group (via PUT or POST request payload) steps would be:

1. it sends a payload-less NON message to the group with the MCBlock1 option: SZX=its proposed block size exponent, P=1 (this is a proposal), S=0 & C=0 (no selections made)
2. The nodes that hear it, reply NON unicast, with their MCBlock1 responses; SZX=receiver's preferred SZX (same or less than sender), P=1, S=0 & C=0.
3. The sender picks one respondent, sends a UNICAST CON to that node with MCBlock1 with chosen SZX, P=0 (this is now the negotiated block size), S=1 ("I choose you") and C=0.
4. Respondent ACKs that CON message with Block1 set with a matching SZX (and block 0)… it has agreed.
5. Sender now sends to the group a NON message with MCBlock1 to the group: chosen SZX, P=0, S=0 and C=0.
6. The group nodes reply with a NON echoing the options as an acknowledgement.
7. Transfer begins using CON message Block1 with the agreed SZX … the chosen node ONLY sends the ACKs.

If the chosen node stops responding: sender sends a NON MCBlock1 C=1 unicast to that node, then goes back to step 3 to select another node… at step 4 the node responds with Block1 specifying the starting point, and the transfer resumes at step 7.

#CoAP #BlockwiseTransfer #RFC7959

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst