rivetkit-client-javascript

JavaScript-Client zum Verbinden mit Rivet Actors über zustandslose oder zustandsbehaftete Verbindungen. Unterstützt Browser-, Node.js- und Bun-Umgebungen mit automatischer Endpunkt-Erkennung über Umgebungsvariablen oder explizite Konfiguration. Bietet zwei Interaktionsmodi: zustandslose Aktionsaufrufe für unabhängige Anfragen und zustandsbehaftete Verbindungen mit Echtzeit-Ereignisabonnements. Enthält Low-Level-HTTP- und WebSocket-Zugriff für Actors, die onRequest- oder onWebSocket-Handler implementieren. Bietet zusammengesetzte arraybasierte...

npx skills add https://github.com/rivet-dev/skills --skill rivetkit-client-javascript

RivetKit JavaScript Client

Use this skill when building JavaScript clients (browser, Node.js, or Bun) that connect to Rivet Actors with rivetkit/client.

First Steps

  1. Install the client (latest: 2.3.3-rc.2)
    npm install rivetkit@2.3.3-rc.2
    
  2. Create a client with createClient() and call actor actions.

Error Handling Policy

  • Prefer fail-fast behavior by default.
  • Avoid try/catch unless absolutely needed.
  • If a catch is used, handle the error explicitly, at minimum by logging it.

Getting Started

See the backend quickstart guide for getting started.

Minimal Client

Stateless vs Stateful

Getting Actors

Connection Parameters

Use params for static connection parameters. Use getParams when the value can change between connection attempts, such as refreshing a JWT before each .connect() or reconnect.

Subscribing to Events

Connection Lifecycle

Low-Level HTTP & WebSocket

For actors that implement onRequest or onWebSocket, call them directly:

import { createClient } from "rivetkit/client";

const client = createClient();
const handle = client.chatRoom.getOrCreate(["general"]);

const response = await handle.fetch("history");
const history = await response.json();

const ws = await handle.webSocket("stream");
ws.addEventListener("message", (event) => {
  console.log("message:", event.data);
});
ws.send("hello");

Calling from Backend

Error Handling

Concepts

Keys

Keys uniquely identify actor instances. Use compound keys (arrays) for hierarchical addressing:

Don't build keys with string interpolation like "org:${userId}" when userId contains user data. Use arrays instead to prevent key injection attacks.

Environment Variables

createClient() automatically reads:

  • RIVET_ENDPOINT (endpoint)
  • RIVET_NAMESPACE
  • RIVET_TOKEN
  • RIVET_RUNNER

Defaults to http://localhost:6420 when unset. RivetKit runs on port 6420 by default.

Endpoint Format

Endpoints support URL auth syntax:

https://namespace:token@api.rivet.dev

You can also pass the endpoint without auth and provide RIVET_NAMESPACE and RIVET_TOKEN separately. For serverless deployments, use your app's /api/rivet URL. See Endpoints for details.

Advanced

Skip Ready Wait

Requests are normally held at the gateway until the actor is ready to accept traffic. An actor is not ready while it's still starting (before onWake finishes) or while it's in the sleep grace period (running onSleep, waitUntil, and pending disconnects).

Pass skipReadyWait: true on the low-level HTTP and WebSocket APIs to deliver immediately and reach the actor's onRequest / onWebSocket handler in either window:

import { createClient } from "rivetkit/client";

const client = createClient();
const handle = client.chatRoom.getOrCreate(["general"]);

const response = await handle.fetch("/healthz", {
  skipReadyWait: true,
});

const ws = await handle.webSocket("probe", undefined, {
  skipReadyWait: true,
});

Requests can still return transient lifecycle or gateway errors. Retry once the actor is available again.

  • actor.stopping: the actor has fully stopped, i.e. the sleep grace period has ended but it has not yet restarted.
  • guard.actor_stopped_while_waiting: the request reached the actor tunnel, but the actor stopped before the gateway received a response.
  • guard.tunnel_request_aborted: the actor tunnel aborted the request before a response started.
  • guard.tunnel_message_timeout: the gateway dropped the in-flight tunnel request after its tunnel message timeout.
  • guard.tunnel_response_closed: the actor tunnel closed before sending a response.
  • guard.gateway_response_start_timeout: the gateway timed out waiting for the actor response to start.

API Reference

Package: rivetkit

See the RivetKit client overview.

Need More Than the Client?

If you need more about Rivet Actors, registries, or server-side RivetKit, add the main skill:

npx skills add rivet-dev/skills

Then use the rivetkit skill for backend guidance.

Mehr Skills von rivet-dev

ai-agent
rivet-dev
Build an AI agent backend with persistent memory: one Rivet Actor per conversation, queued message handling, and streaming LLM responses as realtime events.
official
ai-agent-workspace
rivet-dev
Give every AI agent its own computer: a persistent workspace with a filesystem, processes, shells, networking, and agent sessions on a lightweight in-process…
official
chat-room
rivet-dev
Erstelle ein Echtzeit-Chatroom-Backend mit Rivet Actors: ein Actor pro Raum, SQLite-gestützter Nachrichtenverlauf und WebSocket-Broadcast an jeden verbundenen Client.
official
collaborative-text-editor
rivet-dev
Baue ein kollaboratives Texteditor-Backend mit Yjs-CRDTs und Rivet-Actors: Pro-Dokument-Actors leiten Sync- und Awareness-Updates weiter und speichern Snapshots.
official
cron-jobs
rivet-dev
Langlebige Cron-Jobs mit Rivet Actors: schedule.after- und schedule.at-Timer überleben Neustarts und Abstürze, plus erneutes Aktivieren wiederkehrender Jobs und idempotente Handler.
official
live-cursors
rivet-dev
Live-Cursor und Multiplayer-Präsenz mit Rivet Actors: verbindungsspezifischer Cursor-Zustand, Echtzeit-Updates über Events oder rohe WebSockets sowie Drosselung.
official
per-tenant-database
rivet-dev
Multi-tenant data isolation with one Rivet Actor per tenant: the actor key is the tenant id, so each tenant gets its own isolated dataset and migrations.
official
rivetkit-client-react
rivet-dev
React-Client zur Verbindung mit Rivet Actors mittels Hooks und Echtzeit-Zustandsverwaltung. Erstelle typisierte Hooks mit createRivetKit() und verbinde dich mit Actor-Instanzen über useActor() mit Schlüsseln und optionalen Parametern. Abonniere Actor-Ereignisse mit useEvent() und überwache den Verbindungslebenszyklus über connStatus und error-Zustände. Verwende createClient() für zustandslose Einzelaufrufe, Actor-Erkennungsmethoden (get, getOrCreate, create, getForId) sowie Low-Level-HTTP/WebSocket-Zugriff. Unterstützt zusammengesetzte Array-Schlüssel...
official