transport-io
v0.13.1
Published
Real-time apps over WebTransport. Two lanes, one contract, one fallback.
Maintainers
Readme
Real-time apps over WebTransport. Socket.IO's shape, on a transport with multiple streams and datagrams. Two lanes, one contract, one fallback.
Framing, length prefixes, buffer accumulation and stream lifecycle are handled for you. An
event declares reliable or unreliable in the contract, so "this message may be dropped"
is visible in the type system. The reliable lane is carried on QUIC streams, the unreliable
lane on QUIC datagrams.
A request answers with a value or with a sequence. call() awaits one result. stream()
returns an async iterable, and leaving the loop resets the QUIC stream so the server
generator's finally runs.
Read KNOWN-ISSUES.md before you start. It lists what this library will not do. Full documentation is in the repository README. The short version:
- WebTransport first. The WebSocket fallback carries emits only, where the contract declares it; calls and streams need WebTransport. The fallback guide has it end to end.
- Chrome and Firefox over WebTransport. Safari cannot talk to a quiche-backed server; the fallback reaches it after 5 seconds.
- The server needs a separate native install, and its Linux prebuild needs glibc 2.38 -
no default Node
-slimimage has it, and Alpine has no prebuild at all. That package, the fourteen-day ECDSA rule for a pinned certificate, and the Safari gap are the same for Socket.IO's WebTransport transport: properties of the stack, not of this library. - The protocol is v0 and unstable. Both sides currently require an exact match.
npm install transport-ioA git install does not work - the repository root is a private monorepo package.
To see what a session is doing, frames, streams and drops, mount
@transport-io/devtools in the page.
To put a server on a platform, read
Deploying first.
MIT © #V0ID
