I was involved in an #XMPP OMEMO sprint this weekend with devs from Dino, Conversations and Gajim.
We decided to focus on modifying the various libsignal libraries used by the clients to make them compatible with the latest OMEMO version (which AFAIK no client yet fully supports).
I forked libsignal-protocol-javascript into libomemo.js
https://github.com/conversejs/libomemo.js
A lot of time was spent updating ancient dependencies and getting tests to run. I then started making changes for OMEMO compat.
The crypto primitives are compiled from C via emscripten.
One cool thing is that emscripten now compiles to WASM which is much faster than normal JS.