Node.js

pluv.io supports building real-time APIs with Node.js.

Using with Node.js

Let's step through how we'd put together a real-time API for Node.js.

Install dependencies

1# For the server
2npm install @pluv/io @pluv/platform-node
3# Server peer-dependencies
4npm install ws yjs zod

Create PluvIO instance

Define an io (websocket client) instance on the server codebase:

1// backend/io.ts
2
3import { createIO } from "@pluv/io";
4import { platformNode } from "@pluv/platform-node";
5
6export const io = createIO({ platform: platformNode() });
7
8// Export the websocket client io type, instead of the client itself
9export type AppPluvIO = typeof io;

Integrate PluvIO with ws

Integrate with ws on your Node.js server.

1// backend/server.ts
2
3import express from "express";
4import Http from "http";
5import WebSocket from "ws";
6import { io } from "./io";
7
8const PORT = 3000;
9
10const app = express();
11const server = Http.createServer();
12const wsServer = new WebSocket.Server({ server });
13
14const parseRoomId = (url: string): string => {
15 /* get room from req.url */
16};
17
18wsServer.on("connection", async (ws, req) => {
19 const roomId = parseRoomId(req.url);
20 const room = io.getRoom(roomId);
21
22 await room.register(ws);
23});
24
25server.listen(PORT, () => {
26 console.log(`Server is listening on port: ${port}`);
27});

From this point on, you can integrate your frontend with @pluv/react as you would normally.