Skip to content

Slokr

Server class for @briklab/slokr.

Constructor

new Slokr(mode: Slokr.ValidMode, port = 3000, host = "0.0.0.0")

Creates and starts a server binding in the selected mode.

ParamTypeDescription
modeSlokr.ValidMode"WebSocket", "WebTransport", or "Hybrid".
portnumberListening port.
hoststringListening host/interface.

Properties

bindings: Bindings

Internal binding instance (not part of the public package exports, but available on class instances).

connected: Promise<"connected">

Resolves when the configured transport(s) are fully ready.

stats

Runtime stats object:

ts
{
  online: number;
  activeProtocols: Slokr.FLAGS;
  ready: boolean;
}

Methods

on(eventName: string, callback: Slokr.EVENT)

Attach event listeners.

Special event names:

  • "any"
  • "connection"
  • "close"

listen(eventName: string, callback: Slokr.EVENT)

Alias for on.

receive(eventName: string, timeout = 0): Promise<any>

Wait until the given event is emitted. If timeout > 0, rejects on timeout.

broadcast(eventName: string, data: any): Promise<void>

Send an event to every connected client across enabled transport(s).

send(eventName: string, data: any): Promise<void>

Alias for broadcast.

sendTo(client: Slokr.Client, name: string, data: any)

Reply directly to one client.

for(client: Slokr.Client)

Returns per-client helpers:

  • .send(name, data)
  • .join(room)
  • .leave(room)
  • .broadcast(room, name, data)

rooms(...rooms)

Room-targeting chain API.

Accepted forms:

  • rooms("room-a", "room-b")
  • rooms(["room-a", "room-b"])
  • rooms("all")

Chain methods:

  • .except(...rooms)
  • .broadcast(name, data)
  • .on(eventName, callback)

close()

Shuts down active server resources (WebSocket, HTTP/HTTPS, WebTransport).

Example

ts
import { Slokr } from "@briklab/slokr";

const server = new Slokr(Slokr.WebSocket, 3000);

await server.connected;

server.on("connection", (_, client) => {
  server.for(client).join("global");
});

server.rooms("global").on("chat", (data) => {
  console.log("global room message", data);
});