puter.peer.serve()

Websites Puter Apps Node.js Workers

Creates a peer server and returns a PuterPeerServer instance. The server will generate an invite code that other clients can use to connect.

On websites, Puter.js may prompt the user to authenticate before creating the peer server.

Syntax

const server = await puter.peer.serve();
const server = await puter.peer.serve(options);

Parameters

options (optional)

options is an object with the following properties:

  • iceServers (RTCIceServer[]) Custom ICE servers (STUN/TURN) to use instead of the Puter-managed relays.
  • forceRelay (boolean) Whether to force connections to route through a relay instead of attempting peer-to-peer (default). Metering charges will increase.
  • anonToken (String) Host without a Puter session. Any uuid; no sign-in prompt is shown. An anonymous host has no account to attribute relay usage to, so it cannot issue guest grants and gets no relays of its own.
  • recoveryTimeout (Number) How long, in milliseconds, each connection keeps trying to restore a broken link before it closes, counted from when the link first showed trouble. Defaults to 60000.

To let people join your session without accounts of their own, keep hosting authenticated and give them a grant — see puter.peer.createGuestGrant().

Return value

A Promise that resolves to a PuterPeerServer instance, which carries the inviteCode to share, the connections map of connected clients, and a connection event fired as each client joins.

Example

<html>
<body>
    <script src="https://js.puter.com/v2/"></script>
    <script>
        (async () => {
            const server = await puter.peer.serve();
            puter.print(`Invite code: ${server.inviteCode}`);

            server.addEventListener('connection', (event) => {
                const conn = event.conn;
                conn.addEventListener('open', () => {
                    conn.send('Hello from the server!');
                });
                conn.addEventListener('message', (msg) => {
                    puter.print('Client says:', msg.data);
                });
            });
        })();
    </script>
</body>
</html>