Update, 15 October 2026: both shipped in Sipral 1.2 rather than 1.3; the package is on npm as sipral (the release).
Two items from the 1.3 roadmap landed on the main branch on 7 October.
A Node.js and TypeScript package
The new package in bindings/node loads the same library as every other language, through koffi, with no native addon to compile. Its lower layer is generated from the C ABI declaration, like the Swift, Kotlin, .NET, Python and Dart bindings, so a function cannot be missing from it without the build failing.
On top of that sits a TypeScript layer with the same reach as the others: UDP, TCP and TLS with the platform’s certificates, a private authority or a pinned certificate; device mode that opens the microphone and speaker; conferences; presence and messages; OAuth2 sign-in; the network test before a call; following a redirect. 60 tests cover it.
One thing we had to solve: koffi holds the audio engine’s thread until the main thread answers a callback. If the main thread is itself waiting on the audio engine, for example while closing the stack, both wait forever. Outgoing packets now pass through a small worker that never calls back into the library, so that cannot happen.
The package is not on npm yet. Until then it is used from a checkout of the repository.
SIP over WebSocket, end to end
RFC 7118 carries SIP inside a WebSocket. Sipral opens the connection itself, and an account can now name the resource and the Host the handshake asks for, instead of the fixed /ws. As the RFC recommends, an account on a WebSocket advertises a .invalid host in its Contact, since the server can only reach it back over the same connection.
The lab now runs it over WSS against Asterisk: register, call the echo extension, hear the audio back, hang up, and close the WebSocket from both sides. The testing chapter lists the flow.
Both ship with 1.3. The roadmap shows what is left in it.