Skip to main content

Peer SDK

@vaultys/peer-sdk connects VaultysID identities directly to each other. Every peer is a did:vaultys. Two peers prove who they are to each other before anything is exchanged, and everything after that is end-to-end encrypted.

const peer = await createPeer({ identity, transport: peerjsTransport() });

await peer.send(bobDid, { text: "Hello, Bob" });
peer.on("message", ({ from, body }) => console.log(from, body));
Version 2

This documentation covers v2, a rewrite that isn't compatible with v1. If you're upgrading, see Migrating from v1. v2 is a pre-release (2.0.0-alpha) and isn't published to npm yet.

What you get​

Verified peersA mutual VaultysID handshake runs before any data flows. A message's from is the DID the sender proved, not one it claimed.
End-to-end encryptionEach session uses a key only the two identities can derive. The relay that introduces peers can't read or alter traffic.
Durable messagingsend() stores the message, delivers it when the recipient is reachable, retries, and reports delivery.
Your own protocolsTyped channels for anything else (cursors, presence, signaling), multiplexed over the same sessions.
CollaborationA Yjs provider for shared documents, canvases and presence.
Small and pluggableThe transport, storage and collaboration layers are separate entry points. The core has one dependency (msgpack).

How it fits together​

your app ── createPeer() ─ contacts · durable messages · protocols · events
│
Session ──── one authenticated, encrypted link per DID
│
handshake ─── mutual VaultysID proof + key agreement
│
Transport ── moves raw frames: PeerJS/WebRTC, in-memory, your own

Each layer only depends on the one below it. You'll usually only touch createPeer() and choose a transport.

Packages and entry points​

ImportContainsNeeds
@vaultys/peer-sdkcreatePeer, stores, memoryNetwork, errors@vaultys/id
@vaultys/peer-sdk/peerjspeerjsTransport (WebRTC through a PeerJS relay)peerjs
@vaultys/peer-sdk/yjsYjsProvider, ownedByyjs, y-protocols, lib0
@vaultys/peer-sdk/nodefileStore, installWebRTCNode.js

Next steps​