Documentation
Build peer-to-peer web apps without signaling servers
Trystero gives JavaScript apps simple rooms, typed actions, request/response channels, binary transfer, and media streams on top of WebRTC.
Start with a room
A room groups peers together. Once users are in the same room, actions let them exchange JSON, strings, binary data, and typed arrays directly.
import {joinRoom} from 'trystero'
const room = joinRoom({appId: 'com.example.chat'}, 'lobby')
const chat = room.makeAction('chat')
chat.onMessage = (message, {peerId}) => {
addMessage(peerId, message)
}
sendButton.onclick = () => {
chat.send({text: messageInput.value})
}Getting started
Install Trystero, join a room, and send your first peer-to-peer message.
Actions
Use message actions for events and request actions for peer answers.
Media streams
Send camera, microphone, and screen-share streams between browsers.
Signaling strategies
Choose Nostr, MQTT, BitTorrent, Supabase, Firebase, IPFS, or your own relay.
WebRTC without a signaling server
Learn how Trystero handles discovery without a custom signaling backend.
WebRTC vs WebSockets
Pick the right realtime transport for your data, media, and server model.