From 6f1ea2a081f81c3867819a3a2a57010ce8a0c8ab Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Fri, 27 Jun 2025 05:07:18 +0000 Subject: [PATCH] chore: update docs --- CLAUDE.md | 2 +- docs/CLAUDE.md | 49 ++ docs/actors/actions.mdx | 18 +- docs/actors/authentication.mdx | 157 ----- docs/actors/communicating-between-actors.mdx | 244 +++++++ docs/actors/communicating-with-actors.mdx | 518 ++++++++++++++ docs/actors/connections.mdx | 128 ++-- docs/actors/events.mdx | 421 +++++++++--- docs/{concepts => actors}/external-sql.mdx | 4 +- docs/actors/{types.mdx => helper-types.mdx} | 5 +- docs/actors/lifecycle.mdx | 185 ++++- docs/actors/metadata.mdx | 2 +- docs/actors/overview.mdx | 338 ++++----- docs/actors/quickstart-backend.mdx | 434 ++++++++++++ docs/actors/quickstart-frontend.mdx | 140 ---- docs/actors/quickstart-react.mdx | 296 ++++++++ docs/actors/quickstart.mdx | 308 --------- docs/{concepts => actors}/scaling.mdx | 4 +- docs/actors/schedule.mdx | 2 +- docs/actors/state.mdx | 46 +- docs/clients/javascript.mdx | 12 +- docs/clients/python.mdx | 131 ---- docs/clients/react.mdx | 644 ++++++++++++++++++ docs/concepts/cors.mdx | 70 -- docs/concepts/interacting-with-workers.mdx | 614 ----------------- docs/concepts/overview.mdx | 257 ------- docs/docs.json | 164 +++-- .../{build.mdx => building-drivers.mdx} | 0 docs/drivers/cloudflare-workers.mdx | 37 - docs/drivers/file-system.mdx | 121 ---- docs/drivers/memory.mdx | 112 --- docs/drivers/overview.mdx | 38 +- docs/drivers/redis.mdx | 160 ----- docs/drivers/rivet.mdx | 38 -- docs/frameworks/react.mdx | 243 ------- .../topology.mdx => general/architecture.mdx} | 5 +- docs/general/authentication.mdx | 397 +++++++++++ docs/general/cors.mdx | 302 ++++++++ docs/{concepts => general}/edge.mdx | 6 +- docs/{concepts => general}/logging.mdx | 6 +- docs/general/registry.mdx | 293 ++++++++ docs/{concepts => general}/testing.mdx | 8 +- docs/general/webhooks.mdx | 1 + docs/images/integrations/elysia.svg | 11 + docs/images/integrations/express.svg | 1 + docs/images/integrations/trpc.svg | 5 + docs/integrations/better-auth.mdx | 579 +++++++++------- docs/integrations/elysia.mdx | 87 +++ docs/integrations/express.mdx | 109 +++ docs/integrations/hono.mdx | 245 ++----- docs/integrations/resend.mdx | 268 -------- docs/integrations/trpc.mdx | 152 +++++ docs/integrations/vitest.mdx | 6 + docs/introduction.mdx | 61 +- docs/llm/claude.mdx | 89 --- docs/llm/cursor.mdx | 104 --- docs/llm/docs-as-markdown.mdx | 30 - docs/llm/llms-full.mdx | 5 - docs/llm/llms.mdx | 5 - docs/llm/prompt.mdx | 170 ----- docs/llm/windsurf.mdx | 102 --- docs/media/.DS_Store | Bin 6148 -> 0 bytes docs/media/platforms/rivet/dash.png | Bin 543736 -> 0 bytes docs/media/platforms/rivet/service-token.png | Bin 339611 -> 0 bytes docs/platforms/bun.mdx | 77 --- docs/platforms/cloudflare-workers.mdx | 150 ---- docs/platforms/nodejs.mdx | 92 --- docs/platforms/rivet.mdx | 105 --- docs/scripts/faq.js | 50 -- docs/snippets/cloudflare-deploy.mdx | 36 - docs/snippets/create-actor-cli.mdx | 21 - docs/snippets/driver-note.mdx | 3 - .../integration-existing-projects.mdx | 3 - docs/snippets/landing-comparison-table.mdx | 561 --------------- docs/snippets/landing-manifesto.mdx | 21 - docs/snippets/landing-tech.mdx | 27 +- docs/snippets/mvp-warning.mdx | 3 - docs/snippets/platform-extra-notes.mdx | 10 - docs/snippets/setup-actor.mdx | 22 - docs/snippets/setup-next-steps.mdx | 9 - docs/snippets/setup-typescript.mdx | 23 - docs/snippets/step-define-actor.mdx | 25 - docs/snippets/step-deploy.mdx | 11 - docs/snippets/step-run-studio.mdx | 26 - docs/snippets/step-start-framework.mdx | 10 - docs/snippets/step-update-client.mdx | 21 - docs/support/enterprise.mdx | 14 - docs/workflows/overview.mdx | 8 - examples/better-auth-external-db/README.md | 22 +- .../2025-06-27T06-53-24.043Z.sql | 7 + examples/better-auth-external-db/package.json | 5 +- .../scripts/setup-db.ts | 66 -- examples/hono-react/README.md | 4 +- examples/react/README.md | 4 +- examples/starter/README.md | 2 +- packages/core/src/drivers/rivet/actor-meta.ts | 2 +- 96 files changed, 4842 insertions(+), 5587 deletions(-) create mode 100644 docs/CLAUDE.md delete mode 100644 docs/actors/authentication.mdx create mode 100644 docs/actors/communicating-between-actors.mdx create mode 100644 docs/actors/communicating-with-actors.mdx rename docs/{concepts => actors}/external-sql.mdx (98%) rename docs/actors/{types.mdx => helper-types.mdx} (92%) create mode 100644 docs/actors/quickstart-backend.mdx delete mode 100644 docs/actors/quickstart-frontend.mdx create mode 100644 docs/actors/quickstart-react.mdx delete mode 100644 docs/actors/quickstart.mdx rename docs/{concepts => actors}/scaling.mdx (91%) delete mode 100644 docs/clients/python.mdx create mode 100644 docs/clients/react.mdx delete mode 100644 docs/concepts/cors.mdx delete mode 100644 docs/concepts/interacting-with-workers.mdx delete mode 100644 docs/concepts/overview.mdx rename docs/drivers/{build.mdx => building-drivers.mdx} (100%) delete mode 100644 docs/frameworks/react.mdx rename docs/{concepts/topology.mdx => general/architecture.mdx} (97%) create mode 100644 docs/general/authentication.mdx create mode 100644 docs/general/cors.mdx rename docs/{concepts => general}/edge.mdx (78%) rename docs/{concepts => general}/logging.mdx (97%) create mode 100644 docs/general/registry.mdx rename docs/{concepts => general}/testing.mdx (97%) create mode 100644 docs/general/webhooks.mdx create mode 100644 docs/images/integrations/elysia.svg create mode 100644 docs/images/integrations/express.svg create mode 100644 docs/images/integrations/trpc.svg create mode 100644 docs/integrations/elysia.mdx create mode 100644 docs/integrations/express.mdx delete mode 100644 docs/integrations/resend.mdx create mode 100644 docs/integrations/trpc.mdx create mode 100644 docs/integrations/vitest.mdx delete mode 100644 docs/llm/claude.mdx delete mode 100644 docs/llm/cursor.mdx delete mode 100644 docs/llm/docs-as-markdown.mdx delete mode 100644 docs/llm/llms-full.mdx delete mode 100644 docs/llm/llms.mdx delete mode 100644 docs/llm/prompt.mdx delete mode 100644 docs/llm/windsurf.mdx delete mode 100644 docs/media/.DS_Store delete mode 100644 docs/media/platforms/rivet/dash.png delete mode 100644 docs/media/platforms/rivet/service-token.png delete mode 100644 docs/platforms/bun.mdx delete mode 100644 docs/platforms/cloudflare-workers.mdx delete mode 100644 docs/platforms/nodejs.mdx delete mode 100644 docs/platforms/rivet.mdx delete mode 100644 docs/scripts/faq.js delete mode 100644 docs/snippets/cloudflare-deploy.mdx delete mode 100644 docs/snippets/create-actor-cli.mdx delete mode 100644 docs/snippets/driver-note.mdx delete mode 100644 docs/snippets/integration-existing-projects.mdx delete mode 100644 docs/snippets/landing-comparison-table.mdx delete mode 100644 docs/snippets/landing-manifesto.mdx delete mode 100644 docs/snippets/mvp-warning.mdx delete mode 100644 docs/snippets/platform-extra-notes.mdx delete mode 100644 docs/snippets/setup-actor.mdx delete mode 100644 docs/snippets/setup-next-steps.mdx delete mode 100644 docs/snippets/setup-typescript.mdx delete mode 100644 docs/snippets/step-define-actor.mdx delete mode 100644 docs/snippets/step-deploy.mdx delete mode 100644 docs/snippets/step-run-studio.mdx delete mode 100644 docs/snippets/step-start-framework.mdx delete mode 100644 docs/snippets/step-update-client.mdx delete mode 100644 docs/support/enterprise.mdx delete mode 100644 docs/workflows/overview.mdx create mode 100644 examples/better-auth-external-db/better-auth_migrations/2025-06-27T06-53-24.043Z.sql delete mode 100644 examples/better-auth-external-db/scripts/setup-db.ts diff --git a/CLAUDE.md b/CLAUDE.md index 8fc96a485..35084db79 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ Always include a README.md for new packages. The `README.md` should always follow this structure: ```md - # RivetKit {subname, e.g. library: RivetKit Actors, driver and platform: RivetKit Redis Adapter, RivetKit Cloudflare Workers Adapter} + # RivetKit {subname, e.g. library: Rivet Actor, driver and platform: RivetKit Redis Adapter, RivetKit Cloudflare Workers Adapter} _Lightweight Libraries for Backends_ diff --git a/docs/CLAUDE.md b/docs/CLAUDE.md new file mode 100644 index 000000000..78c4a61c5 --- /dev/null +++ b/docs/CLAUDE.md @@ -0,0 +1,49 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Documentation Project + +This is the documentation site for RivetKit built with Mintlify. The documentation covers RivetKit's actor-based stateful serverless framework and related integrations. + +## Documentation Structure + +- **actors/**: Core actor system documentation (state, actions, events, scheduling) +- **clients/**: Client libraries for JavaScript/TypeScript, React, Rust +- **drivers/**: Storage drivers (Memory, File System, Redis, Cloudflare Workers, Rivet) +- **general/**: Architecture, authentication, testing, logging, CORS +- **integrations/**: Framework integrations (Hono, Express, Elysia, tRPC, Better Auth, Vitest) +- **snippets/**: Reusable content components for landing page + +## Key Documentation Files + +- `docs.json`: Mintlify configuration with navigation structure + +## Documentation Style Guide + +### File Structure +- Use `.mdx` extension for all documentation files +- Include frontmatter with `title`, `description`, and `sidebarTitle` +- Use `icon` field for navigation icons (from Font Awesome icon set) + +### Content Guidelines +- **Concise and Direct**: Keep explanations brief and actionable +- **Code-First**: Lead with practical examples, then explain concepts +- **Use Cases Focus**: Emphasize practical applications over theoretical details +- **Progressive Disclosure**: Start simple, link to detailed guides + +### Code Examples +- Use TypeScript for all code examples +- Show complete, runnable examples when possible +- Include both actor and client code where relevant +- Follow RivetKit naming conventions (`actor`, `c` for context, etc.) + +### Navigation +- Group related concepts under clear categories +- Use descriptive but short sidebar titles +- Maintain consistent icon usage for categories + +## Development Resources + +- Refer to ../packages/core/fixtures/driver-test-suite/*.ts for examples of working actor definitions +- Refer to ../examples/* for fully working projects. This is especially helpful when writing guides for integrations, etc. diff --git a/docs/actors/actions.mdx b/docs/actors/actions.mdx index 7a771fda4..26d58a04f 100644 --- a/docs/actors/actions.mdx +++ b/docs/actors/actions.mdx @@ -17,7 +17,7 @@ actor. Actions are defined in the `actions` object when creating a actor: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const mathUtils = actor({ state: {}, @@ -37,7 +37,7 @@ Each action receives a context object (commonly named `c`) as its first paramete You can define helper functions outside the actions object to keep your code organized. These functions cannot be called directly by clients: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Private helper function - not callable by clients const calculateFee = (amount) => { @@ -62,7 +62,7 @@ const paymentProcessor = actor({ ### Streaming Return Data -Actions have a single return value. To stream realtime data in response to an action, use [events](/concepts/events). +Actions have a single return value. To stream realtime data in response to an action, use [events](/actors/events). ## Calling Actions @@ -89,7 +89,7 @@ The actor client includes type safety out of the box. When you use `createClient ```typescript src/index.ts -import { setup } from "rivetkit"; +import { setup } from "@rivetkit/actor"; // Create simple counter const counter = actor({ @@ -140,7 +140,7 @@ For example: ```typescript actor.ts -import { actor, UserError } from "rivetkit"; +import { actor, UserError } from "@rivetkit/actor"; const user = actor({ state: { users: [] }, @@ -188,7 +188,7 @@ Data schemas are not validated by default. For production applications, use a li For example, to validate action parameters: ```typescript -import { actor, UserError } from "rivetkit"; +import { actor, UserError } from "@rivetkit/actor"; import { z } from "zod"; // Define schema for action parameters @@ -222,7 +222,7 @@ const counter = actor({ ## Authentication -By default, clients can call all actions on a actor without restriction. Make sure to implement authentication if needed. Documentation on authentication is available [here](/concepts/authentication). +By default, clients can call all actions on a actor without restriction. Make sure to implement authentication if needed. Documentation on authentication is available [here](/general/authentication). ## Using `ActionContext` Type Externally @@ -231,7 +231,7 @@ When writing complex logic for actions, you may want to extract parts of your im RivetKit provides the `ActionContextOf` utility type for exactly this purpose: ```typescript -import { actor, ActionContextOf } from "rivetkit"; +import { actor, ActionContextOf } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -250,4 +250,4 @@ function incrementCount(c: ActionContextOf) { } ``` -See [Helper Types](/concepts/types) for more details on using `ActionContextOf` and other type utilities. +See [Helper Types](/actors/helper-types) for more details on using `ActionContextOf` and other type utilities. diff --git a/docs/actors/authentication.mdx b/docs/actors/authentication.mdx deleted file mode 100644 index 83927b854..000000000 --- a/docs/actors/authentication.mdx +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Authentication -icon: fingerprint ---- - -Authentication can be handled through the `onBeforeConnect` or `createConnState` lifecycle hook, which acts as middleware before allowing clients to interact with your actor. - -## Using `onBeforeConnect` or `createConnState` - -The `onBeforeConnect` and `createConnState` hook is called whenever a new client attempts to connect to your actor. It receives a context object that contains the client's connection parameters. `createConnState` should return an object that will become the connection state. - -Throwing an error in `onBeforeConnect` or `createConnState` will abort the connection. - -Here's a basic example: - -```typescript -import { actor } from "rivetkit"; - -const exampleActor = actor({ - state: { - // Actor state... - }, - - createConnState: async (c, { params }) => { - // Verify the token with your authentication system - const userData = await myValidateAuthToken(params.authToken); - if (!userData) { - throw new Error('Invalid auth token'); - } - - // Return the user data to store with the connection - return { - userId: userData.id, - role: userData.role - }; - }, - - actions: { - // Actor actions... - } -}); -``` - -## Accessing Connection State - -After authentication, you can access the connection state in any action through the context object: - -```typescript -import { actor } from "rivetkit"; - -const authenticatedActor = actor({ - state: { - // Actor state... - }, - - createConnState: (c) => { - // Authentication logic... - return { - userId: "user_123", - role: "admin" - }; - }, - - actions: { - exampleAdminCommand: (c) => { - // Example of validating admin access - if (c.conn.state.role !== 'admin') { - throw new Error('User must be an admin'); - } - - // Admin-only functionality... - return { success: true }; - } - } -}); -``` - -## Integration Examples - -### With API Server Authentication - -```typescript -import { actor } from "rivetkit"; - -const apiAuthenticatedActor = actor({ - state: { - // Actor state... - }, - - createConnState: async (c, { params }) => { - // Validate API key with your server - const response = await fetch('https://api.yourserver.com/validate', { - method: 'POST', - headers: { - Authorization: `Bearer ${params.apiKey}` - } - }); - - if (!response.ok) { - throw new Error('Invalid API key'); - } - - const user = await response.json(); - - return { - userId: user.id - }; - }, - - actions: { - // Actor actions... - } -}); -``` - -When authentication fails, throwing an error in `createConnState` will prevent the connection from being established, and the client will receive the error message. - -### With JWT Authentication - -```typescript -import { actor } from "rivetkit"; -import jwt from "jsonwebtoken"; - -const JWT_SECRET = process.env.JWT_SECRET; - -const jwtAuthenticatedActor = actor({ - state: { - // Actor state... - }, - - createConnState: (c, { params }) => { - try { - // Verify JWT token - const decoded = jwt.verify(params.jwt, JWT_SECRET); - - return { - userId: decoded.sub, - permissions: decoded.permissions - }; - } catch (error) { - throw new Error('Invalid or expired JWT token'); - } - }, - - actions: { - secureAction: (c, data) => { - // Check permissions before proceeding - if (!c.conn.state.permissions.includes('write')) { - throw new Error('Permission denied: requires write access'); - } - - // Perform action with data... - return { success: true }; - } - } -}); -``` diff --git a/docs/actors/communicating-between-actors.mdx b/docs/actors/communicating-between-actors.mdx new file mode 100644 index 000000000..d7831f389 --- /dev/null +++ b/docs/actors/communicating-between-actors.mdx @@ -0,0 +1,244 @@ +--- +title: Communicating Between Actors +description: Learn how actors can call other actors and share data +icon: arrow-right-arrow-left +--- + +Actors can communicate with each other using the inline client, enabling complex workflows and data sharing between different actor instances. + + +This guide focuses on communication between actors within the same application. For connecting to actors from client applications, see [Communicating with Actors](/actors/communicating-with-actors). + + +## Using the Inline Client + +The inline client allows actors to call other actors within the same registry. Access it via `c.client()` in your actor actions: + +```typescript +import { actor } from "@rivetkit/actor"; +import type { registry } from "./registry"; + +export const orderProcessor = actor({ + state: { orders: [] as Order[] }, + + actions: { + processOrder: async (c, order: Order) => { + // Get the inline client with registry types + const client = c.client(); + + // Call another actor to check inventory + const inventory = client.inventory.getOrCreate([order.productId]); + const available = await inventory.checkStock(order.quantity); + + if (!available) { + throw new UserError("Insufficient stock"); + } + + // Reserve the stock + await inventory.reserveStock(order.quantity); + + // Process payment through payment actor + const payment = client.payment.getOrCreate([order.customerId]); + const result = await payment.processPayment(order.amount); + + // Update order state + c.state.orders.push({ + ...order, + status: "processed", + paymentId: result.paymentId, + }); + + return { success: true, orderId: order.id }; + } + } +}); +``` + +## Communication Patterns + +The inline client supports the same communication patterns as external clients. See [Communicating with Actors - Actor Handles](/actors/communicating-with-actors#actor-handles) for details on: + +- `getOrCreate()` for stateless request-response +- `.connect()` for real-time communication with events +- `get()` and `create()` for explicit actor lifecycle management + +## Error Handling + +Handle errors gracefully when calling other actors. Error handling works the same as with external clients - see [Communicating with Actors - Error Handling](/actors/communicating-with-actors#error-handling) for details. + +```typescript +export const orderActor = actor({ + state: { orders: [] }, + + actions: { + createOrder: async (c, orderData: CreateOrderData) => { + const client = c.client(); + + try { + const inventory = client.inventory.getOrCreate([orderData.productId]); + await inventory.validateOrder(orderData); + + const order = { id: generateId(), ...orderData, status: "validated" }; + c.state.orders.push(order); + return order; + + } catch (error) { + throw new UserError(`Order validation failed: ${error.message}`); + } + } + } +}); +``` + +## Use Cases and Patterns + +### Actor Orchestration + +Use a coordinator actor to manage complex workflows: + +```typescript +export const workflowActor = actor({ + state: { workflows: new Map() }, + + actions: { + executeUserOnboarding: async (c, userId: string) => { + const client = c.client(); + + // Coordinate multiple actors for complex workflow + const user = client.user.getOrCreate([userId]); + await user.createProfile(); + + const notification = client.notification.getOrCreate(["system"]); + await notification.sendWelcomeEmail(userId); + + const preferences = client.preferences.getOrCreate([userId]); + await preferences.setDefaults(); + + return { status: "completed" }; + } + } +}); +``` + +### Data Aggregation + +Collect data from multiple actors: + +```typescript +export const analyticsActor = actor({ + state: { reports: [] }, + + actions: { + generateUserReport: async (c, userId: string) => { + const client = c.client(); + + // Collect data from multiple sources in parallel + const [profile, orders, preferences] = await Promise.all([ + client.user.getOrCreate([userId]).getProfile(), + client.orders.getOrCreate([userId]).getHistory(), + client.preferences.getOrCreate([userId]).getAll(), + ]); + + return { profile, orders, preferences }; + } + } +}); +``` + +### Event-Driven Architecture + +Use connections to listen for events from other actors: + +```typescript +export const auditLogActor = actor({ + state: { logs: [] }, + + actions: { + startAuditing: async (c, userId: string) => { + const client = c.client(); + const user = client.user.getOrCreate([userId]); + const connection = user.connect(); + + // Listen for events from the user actor + connection.on("profileUpdated", (profile) => { + c.state.logs.push({ + type: "profile_update", + userId, + timestamp: Date.now(), + data: profile, + }); + }); + + return { status: "auditing_started" }; + } + } +}); +``` + +## Advanced Features + +### Type Safety + +The inline client maintains full type safety across actor boundaries: + +```typescript +export const typedActor = actor({ + actions: { + processData: async (c) => { + const client = c.client(); + + // TypeScript validates action signatures + const counter = client.counter.getOrCreate(["stats"]); + + const count: number = await counter.increment(1); // ✓  + const invalid = await counter.increment("1"); // ✗ Type error + + return count; + } + } +}); +``` + +### Performance Optimization + +**Batch Operations**: Process multiple items in parallel: + +```typescript +// Process items in parallel +const results = await Promise.all( + items.map(item => client.processor.getOrCreate([item.type]).process(item)) +); +``` + +**Connection Reuse**: Reuse connections for multiple operations: + +```typescript +const connection = client.targetActor.getOrCreate(["shared"]).connect(); +try { + for (const op of operations) { + await connection.performOperation(op); + } +} finally { + await connection.dispose(); +} +``` + +### Testing + +Mock the inline client for unit testing: + +```typescript +const mockClient = { + inventory: { + getOrCreate: jest.fn().mockReturnValue({ + checkStock: jest.fn().mockResolvedValue(true), + }), + }, +}; + +// Test with mocked dependencies +const result = await orderProcessor.processOrder.call( + { client: () => mockClient }, + orderData +); +``` diff --git a/docs/actors/communicating-with-actors.mdx b/docs/actors/communicating-with-actors.mdx new file mode 100644 index 000000000..38b9f9536 --- /dev/null +++ b/docs/actors/communicating-with-actors.mdx @@ -0,0 +1,518 @@ +--- +title: Communicating with Actors +description: Learn how to call actions and connect to actors from client applications +icon: arrow-right-arrow-left +--- + +This guide covers how to connect to and interact with actors from client applications using RivetKit's JavaScript/TypeScript client library. + +## Client Setup + +### Creating a Client + +There are several ways to create a client for communicating with actors: + + + + For frontend applications or external services connecting to your RivetKit backend: + + ```typescript + import { createClient } from "@rivetkit/actor/client"; + import type { registry } from "./registry"; + + const client = createClient("http://localhost:8080"); + ``` + + This client communicates over HTTP/WebSocket and requires authentication. + + + + From your backend server that hosts the registry: + + ```typescript + import { registry } from "./registry"; + + const { client } = registry.createServer(); + ``` + + This client bypasses network calls and doesn't require authentication. + + + + From within an actor to communicate with other actors: + + ```typescript + const myActor = actor({ + actions: { + callOtherActor: (c) => { + const client = c.client(); + return client.otherActor.getOrCreate(["id"]); + } + } + }); + ``` + + Read more about [communicating between actors](/actors/communicating-between-actors). + + + +### Client Configuration + +Configure the client with additional options: + +```typescript +const client = createClient("http://localhost:8080", { + // Data serialization format + encoding: "cbor", // or "json" + + // Network transports in order of preference + supportedTransports: ["websocket", "sse"] +}); +``` + +## Actor Handles + +### `get(tags, opts?)` - Find Existing Actor + +Returns a handle to an existing actor or `null` if it doesn't exist: + +```typescript +// Get existing actor by tags +const handle = client.myActor.get(["actor-id"]); + +if (handle) { + const result = await handle.someAction(); +} else { + console.log("Actor doesn't exist"); +} +``` + +### `getOrCreate(tags, input?, opts?)` - Find or Create Actor + +Returns a handle to an existing actor or creates a new one if it doesn't exist: + +```typescript +// Get or create actor (synchronous) +const counter = client.counter.getOrCreate(["my-counter"]); + +// With initialization input +const game = client.game.getOrCreate(["game-123"], { + gameMode: "tournament", + maxPlayers: 8, +}); + +// Call actions immediately +const count = await counter.increment(5); +``` + + +`get()` and `getOrCreate()` are synchronous and return immediately. The actor is created lazily when you first call an action. + + +### `create(tags, input?, opts?)` - Create New Actor + +Explicitly creates a new actor instance, failing if one already exists: + +```typescript +// Create new actor (async) +const newGame = await client.game.create(["game-456"], { + gameMode: "classic", + maxPlayers: 4, +}); + +// Actor is guaranteed to be newly created +await newGame.initialize(); +``` + +### `getWithId(id, opts?)` - Find by Internal ID + +Connect to an actor using its internal system ID: + +```typescript +// Connect by internal ID +const actorId = "55425f42-82f8-451f-82c1-6227c83c9372"; +const actor = client.myActor.getWithId(actorId); + +await actor.performAction(); +``` + + +Prefer using tags over internal IDs for actor discovery. IDs are primarily for debugging and advanced use cases. + + +## Actions + +### Calling Actions + +Once you have an actor handle, call actions directly. All action calls are async: + +```typescript +const counter = client.counter.getOrCreate(["my-counter"]); + +// Call action with no arguments +const currentCount = await counter.getCount(); + +// Call action with arguments +const newCount = await counter.increment(5); + +// Call action with object parameter +await counter.updateSettings({ + step: 2, + maximum: 100, +}); +``` + +### Action Parameters + +Actions receive parameters exactly as defined in the actor: + +```typescript +// Actor definition +const chatRoom = actor({ + actions: { + sendMessage: (c, userId: string, message: string, metadata?: object) => { + // Action implementation + } + } +}); + +// Client usage - parameters match exactly +await chatRoom.sendMessage("user-123", "Hello!", { priority: "high" }); +``` + +### Error Handling + +Handle action errors appropriately: + +```typescript +try { + const result = await counter.increment(5); +} catch (error) { + if (error.code === "RATE_LIMITED") { + console.log("Too many requests, try again later"); + } else { + console.error("Action failed:", error.message); + } +} +``` + +## Real-time Connections + +Real-time connections enable bidirectional communication between clients and actors through persistent connections. RivetKit automatically negotiates between WebSocket (preferred for full duplex) and Server-Sent Events (SSE) as a fallback for restrictive environments. + +### `connect(params?)` - Establish Stateful Connection + +For real-time communication with events, use `.connect()`: + +```typescript +const counter = client.counter.getOrCreate(["live-counter"]); +const connection = counter.connect(); + +// Listen for events +connection.on("countChanged", (newCount: number) => { + console.log("Count updated:", newCount); +}); + +// Call actions through the connection +const result = await connection.increment(1); + +// Clean up when done +await connection.dispose(); +``` + +### Events + +#### `on(eventName, callback)` - Listen for Events + +Listen for events from the actor: + +```typescript +// Listen for chat messages +connection.on("messageReceived", (message) => { + console.log(`${message.from}: ${message.text}`); +}); + +// Listen for game state updates +connection.on("gameStateChanged", (gameState) => { + updateUI(gameState); +}); + +// Listen for player events +connection.on("playerJoined", (player) => { + console.log(`${player.name} joined the game`); +}); +``` + +#### `once(eventName, callback)` - Listen Once + +Listen for an event only once: + +```typescript +// Wait for game to start +connection.once("gameStarted", () => { + console.log("Game has started!"); +}); +``` + +#### `off(eventName, callback?)` - Stop Listening + +Remove event listeners: + +```typescript +const messageHandler = (message) => console.log(message); + +// Add listener +connection.on("messageReceived", messageHandler); + +// Remove specific listener +connection.off("messageReceived", messageHandler); + +// Remove all listeners for event +connection.off("messageReceived"); +``` + +### `dispose()` - Clean Up Connection + +Always dispose of connections when finished to free up resources: + +```typescript +const connection = actor.connect(); + +try { + // Use the connection + connection.on("event", handler); + await connection.someAction(); +} finally { + // Clean up the connection + await connection.dispose(); +} + +// Or with automatic cleanup in React/frameworks +useEffect(() => { + const connection = actor.connect(); + + return () => { + connection.dispose(); + }; +}, []); +``` + +**Important:** Disposing a connection: +- Closes the underlying WebSocket or SSE connection +- Removes all event listeners +- Cancels any pending reconnection attempts +- Prevents memory leaks in long-running applications + +### Transports + +Connections automatically negotiate the best available transport: + +#### WebSocket Transport +- **Full duplex**: Client can send and receive +- **Low latency**: Immediate bidirectional communication +- **Preferred**: Used when available + +#### Server-Sent Events (SSE) +- **Server-to-client**: Events only, actions via HTTP +- **Fallback**: Used when WebSocket unavailable +- **Compatibility**: Works in restrictive environments + +### Reconnections + +Connections automatically handle network failures with robust reconnection logic: + +**Automatic Behavior:** +- **Exponential backoff**: Retry delays increase progressively to avoid overwhelming the server +- **Action queuing**: Actions called while disconnected are queued and sent once reconnected +- **Event resubscription**: Event listeners are automatically restored on reconnection +- **State synchronization**: Connection state is preserved and synchronized after reconnection + +## Authentication + +### Connection Parameters + +Pass authentication data when connecting to actors: + +```typescript +// With connection parameters +const chat = client.chatRoom.getOrCreate(["general"]); +const connection = chat.connect({ + authToken: "jwt-token-here", + userId: "user-123", + displayName: "Alice" +}); + +// Parameters available in actor via onAuth hook +// Or for action calls +const result = await chat.sendMessage("Hello world!", { + authToken: "jwt-token-here" +}); +``` + +### onAuth Hook Validation + +Actors can validate authentication using the `onAuth` hook: + +```typescript +import { actor, Forbidden } from "@rivetkit/actor"; + +const protectedActor = actor({ + onAuth: async (opts) => { + const { req, params } = opts; + + // Extract token from params or headers + const token = params.authToken || req.headers.get("Authorization"); + + if (!token) { + throw new Forbidden("Authentication required"); + } + + // Validate and return user data + const user = await validateJWT(token); + return { userId: user.id, role: user.role }; + }, + + actions: { + protectedAction: (c, data: string) => { + // Access auth data via c.conn.auth + const { userId, role } = c.conn.auth; + + if (role !== "admin") { + throw new Forbidden("Admin access required"); + } + + return `Hello admin ${userId}`; + } + } +}); +``` + +Learn more about [authentication patterns](/general/authentication). + +## Type Safety + +RivetKit provides end-to-end type safety between clients and actors: + +### Action Type Safety + +TypeScript validates action signatures and return types: + +```typescript +// TypeScript knows the action signatures +const counter = client.counter.getOrCreate(["my-counter"]); + +const count: number = await counter.increment(5); // ✓ Correct +const invalid = await counter.increment("5"); // ✗ Type error + +// IDE autocomplete shows available actions +counter./* */ +``` + +### Client Type Safety + +Import types from your registry for full type safety: + +```typescript +import type { registry } from "./registry"; + +// Client is fully typed +const client = createClient("http://localhost:8080"); + +// IDE provides autocomplete for all actors +client./* */ +``` + +## Best Practices + +### Actions vs Connections + +**Use Stateless Actions For:** +- Simple request-response operations +- One-off operations +- Server-side integration +- Minimal overhead required + +```typescript +// Good for simple operations +const result = await counter.increment(1); +const status = await server.getStatus(); +``` + +**Use Stateful Connections For:** +- Real-time updates needed +- Multiple related operations +- Event-driven interactions +- Long-lived client sessions + +```typescript +// Good for real-time features +const connection = chatRoom.connect(); +connection.on("messageReceived", updateUI); +await connection.sendMessage("Hello!"); +``` + +### Resource Management + +Always clean up connections when finished: + +```typescript +// Manual cleanup +const connection = actor.connect(); +try { + // Use connection + connection.on("event", handler); + await connection.action(); +} finally { + await connection.dispose(); +} + +// Automatic cleanup with lifecycle +connection.on("disconnected", () => { + console.log("Connection cleaned up"); +}); +``` + +### Error Handling + +Implement proper error handling for both actions and connections: + +```typescript +// Action error handling +try { + const result = await counter.increment(5); +} catch (error) { + if (error.code === "RATE_LIMITED") { + console.log("Rate limited, try again later"); + } else if (error.code === "UNAUTHORIZED") { + redirectToLogin(); + } else { + console.error("Action failed:", error.message); + } +} + +// Connection error handling +connection.on("error", (error) => { + console.error("Connection error:", error); + // Implement reconnection logic if needed +}); +``` + +### Performance Optimization + +Use appropriate patterns for optimal performance: + +```typescript +// Batch multiple operations through a connection +const connection = actor.connect(); +await Promise.all([ + connection.operation1(), + connection.operation2(), + connection.operation3(), +]); + +// Use getOrCreate for actors you expect to exist +const existing = client.counter.getOrCreate(["known-counter"]); + +// Use create only when you need a fresh instance +const fresh = await client.counter.create(["new-counter"]); +``` diff --git a/docs/actors/connections.mdx b/docs/actors/connections.mdx index 2246b49bb..71730a497 100644 --- a/docs/actors/connections.mdx +++ b/docs/actors/connections.mdx @@ -14,7 +14,7 @@ For example: ```typescript actor.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const gameRoom = actor({ state: {}, @@ -54,63 +54,67 @@ const gameRoom = await client.gameRoom.get({ There are two ways to define a actor's connection state: -### Method 1: `ConnState` constant - -```typescript -import { actor } from "rivetkit"; - -const chatRoom = actor({ - state: { messages: [] }, - - // Define default connection state as a constant - connState: { - role: "guest", - joinedAt: 0 - }, - - onConnect: (c) => { - // Update join timestamp when a client connects - c.conn.state.joinedAt = Date.now(); - }, - - actions: { - // ... - } -}); -``` - -### Method 2: `createConnState` function - -The data returned from `createConnState` is used as the initial state of the connection. The connection state can be accessed through `conn.state`. - -```typescript -import { actor } from "rivetkit"; - -const chatRoom = actor({ - state: { messages: [] }, - - // Create connection state dynamically - createConnState: (c) => { - // Validate any connection parameters - // ... - - // Return the connection state - return { - userId: generateUserId(), - role: "guest", - joinedAt: Date.now() - }; - }, - - actions: { - sendMessage: (c, message) => { - const username = c.conn.state.userId; - c.state.messages.push({ username, message }); - c.broadcast("newMessage", { username, message }); - } - } -}); -``` + + + Define connection state as a constant value: + + ```typescript + import { actor } from "@rivetkit/actor"; + + const chatRoom = actor({ + state: { messages: [] }, + + // Define default connection state as a constant + connState: { + role: "guest", + joinedAt: 0 + }, + + onConnect: (c) => { + // Update join timestamp when a client connects + c.conn.state.joinedAt = Date.now(); + }, + + actions: { + // ... + } + }); + ``` + + + + Create connection state dynamically with a function. The data returned is used as the initial state of the connection. The connection state can be accessed through `conn.state`. + + ```typescript + import { actor } from "@rivetkit/actor"; + + const chatRoom = actor({ + state: { messages: [] }, + + // Create connection state dynamically + createConnState: (c) => { + // Validate any connection parameters + // ... + + // Return the connection state + return { + userId: generateUserId(), + role: "guest", + joinedAt: Date.now() + }; + }, + + actions: { + sendMessage: (c, message) => { + const username = c.conn.state.userId; + c.state.messages.push({ username, message }); + c.broadcast("newMessage", { username, message }); + } + } + }); + ``` + + ## Lifecycle Hooks @@ -120,7 +124,7 @@ The connection lifecycle has several hooks: - `onConnect`: Called when a client successfully connects - `onDisconnect`: Called when a client disconnects -See the documentation on [Actor Lifecycle](/concepts/lifecycle) for more details. +See the documentation on [Actor Lifecycle](/actors/lifecycle) for more details. ## Connection List @@ -131,7 +135,7 @@ This is frequently used with `conn.send(name, event)` to send messages directly For example: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ state: { users: {} }, @@ -158,7 +162,7 @@ const chatRoom = actor({ Connections can be disconnected from within an action: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const secureRoom = actor({ state: {}, @@ -189,4 +193,4 @@ This ensures the underlying network connections close cleanly before continuing. ## Offline & Auto-Reconnection -See [Interacting with Actors](/concepts/interacting-with-actors#offline-and-auto-reconnection) for details on reconnection behavior. +See [client documentation](/actors/communicating-with-actors) for details on reconnection behavior. diff --git a/docs/actors/events.mdx b/docs/actors/events.mdx index ba35a543b..cc89a4a69 100644 --- a/docs/actors/events.mdx +++ b/docs/actors/events.mdx @@ -1,166 +1,393 @@ --- title: Events +description: Real-time communication between actors and clients icon: tower-broadcast --- -Events are used for clients to receive realtime data from actors. +Events enable real-time communication from actors to clients. While clients use actions to send data to actors, events allow actors to push updates to connected clients instantly. -Events are used for actors to publish updates to clients. Clients call actions to communicate with the actor. + +Events work through persistent connections (WebSocket or SSE). Clients establish connections using `.connect()` and then listen for events with `.on()`. + -## Publishing from actors +## Publishing Events from Actors -Actors can publish events to clients using `c.broadcast` and `conn.send`. +### Broadcasting to All Clients -### Broadcasting events +Use `c.broadcast(eventName, data)` to send events to all connected clients: -Actors can publish events to all connected clients with `c.broadcast(name, data)`. For example: - - - -```typescript chat_room.ts -import { actor } from "rivetkit"; +```typescript +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ - state: {}, + state: { + messages: [] as Array<{id: string, userId: string, text: string, timestamp: number}> + }, + actions: { - sendMessage: (c, message) => { - c.broadcast('newMessage', { message }); + sendMessage: (c, userId: string, text: string) => { + const message = { + id: crypto.randomUUID(), + userId, + text, + timestamp: Date.now() + }; + + c.state.messages.push(message); + + // Broadcast to all connected clients + c.broadcast('messageReceived', message); + + return message; + }, + + deleteMessage: (c, messageId: string) => { + const messageIndex = c.state.messages.findIndex(m => m.id === messageId); + if (messageIndex !== -1) { + c.state.messages.splice(messageIndex, 1); + + // Notify all clients about deletion + c.broadcast('messageDeleted', { messageId }); + } } } }); ``` -```typescript client.ts -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; +### Sending to Specific Connections -const client = createClient("http://localhost:8080"); -const chatRoom = await client.chatRoom.get(); -await chatRoom.sendMessage('Hello, world!'); -``` +Send events to individual connections using `conn.send(eventName, data)`: - +```typescript +import { actor } from "@rivetkit/actor"; -### Sending events to specific connections +const gameRoom = actor({ + state: { + players: {} as Record + }, + + createConnState: (c, { params }) => ({ + playerId: params.playerId, + role: params.role || "player" + }), + + actions: { + updatePlayerPosition: (c, position: {x: number, y: number}) => { + const playerId = c.conn.state.playerId; + + if (c.state.players[playerId]) { + c.state.players[playerId].position = position; + + // Send position update to all OTHER players + for (const conn of c.conns) { + if (conn.state.playerId !== playerId) { + conn.send('playerMoved', { playerId, position }); + } + } + } + }, + + sendPrivateMessage: (c, targetPlayerId: string, message: string) => { + // Find the target player's connection + const targetConn = c.conns.find(conn => + conn.state.playerId === targetPlayerId + ); + + if (targetConn) { + targetConn.send('privateMessage', { + from: c.conn.state.playerId, + message, + timestamp: Date.now() + }); + } else { + throw new Error("Player not found or not connected"); + } + } + } +}); +``` -Actors can send messages to specific client connections. All connections are available through the context object. For example: +### Event Filtering by Connection State - +Filter events based on connection properties: -```typescript chat_room.ts -import { actor } from "rivetkit"; +```typescript +import { actor } from "@rivetkit/actor"; -const chatRoom = actor({ - state: {}, +const newsRoom = actor({ + state: { + articles: [] as Array<{id: string, category: string, content: string, level: 'public' | 'premium'}> + }, + + createConnState: (c, { params }) => ({ + userId: params.userId, + subscription: params.subscription || 'free' // 'free', 'premium' + }), + actions: { - sendPrivateMessage: (c, connId, message) => { - const conn = c.conns.find(conn => conn.id === connId); - if (conn) { - conn.send('newMessage', { message }); + publishArticle: (c, article: {category: string, content: string, level: 'public' | 'premium'}) => { + const newArticle = { + id: crypto.randomUUID(), + ...article, + timestamp: Date.now() + }; + + c.state.articles.push(newArticle); + + // Send to appropriate subscribers only + for (const conn of c.conns) { + const canAccess = article.level === 'public' || + conn.state.subscription === 'premium'; + + if (canAccess) { + conn.send('newArticle', newArticle); + } } + + return newArticle; } } }); ``` -```typescript client.ts -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; +## Subscribing to Events from Clients -const client = createClient("http://localhost:8080"); -const chatRoom = await client.chatRoom.get(); -await chatRoom.sendPrivateMessage(123, 'Hello, world!'); -``` +Clients must establish a connection to receive events from actors. Use `.connect()` to create a persistent connection, then listen for events. + +### Basic Event Subscription + +Use `connection.on(eventName, callback)` to listen for events: - +```typescript +import { createClient } from "@rivetkit/actor/client"; +import type { registry } from "./registry"; -## Subscribing from clients +const client = createClient("http://localhost:8080"); -Clients can subscribe to events from actors using `on` and `once`. +// Get actor handle and establish connection +const chatRoom = client.chatRoom.getOrCreate(["general"]); +const connection = chatRoom.connect(); + +// Listen for events +connection.on('messageReceived', (message) => { + console.log(`${message.userId}: ${message.text}`); + displayMessage(message); +}); + +connection.on('messageDeleted', ({ messageId }) => { + console.log(`Message ${messageId} was deleted`); + removeMessageFromUI(messageId); +}); -### `on(eventName, callback)` +// Call actions through the connection +await connection.sendMessage("user-123", "Hello everyone!"); +``` -{/* [Documentation](https://jsr.io/@rivet-gg/actor-client/doc/~/ActorHandleRaw.prototype.on.html) */} +### One-time Event Listeners -Clients can subscribe to events that will happen repeatedly using `actor.on(name, callback)`. For example: +Use `connection.once(eventName, callback)` for events that should only trigger once: - +```typescript +const gameRoom = client.gameRoom.getOrCreate(["room-456"]); +const connection = gameRoom.connect({ + playerId: "player-789", + role: "player" +}); -```typescript client.ts -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; +// Listen for game start (only once) +connection.once('gameStarted', () => { + console.log('Game has started!'); + showGameInterface(); +}); -const client = createClient("http://localhost:8080"); -const chatRoom = await client.chatRoom.get(); +// Listen for game events continuously +connection.on('playerMoved', ({ playerId, position }) => { + updatePlayerPosition(playerId, position); +}); -chatRoom.on('newMessage', ({ message }) => { - console.log('Message', message); +connection.on('privateMessage', ({ from, message }) => { + showPrivateMessage(from, message); }); ``` -```typescript chat_room.ts -import { actor } from "rivetkit"; +### Removing Event Listeners -const chatRoom = actor({ - state: {}, - actions: { - sendMessage: (c, message) => { - c.broadcast('newMessage', { message }); - } - } +Use `connection.off()` to remove event listeners: + +```typescript +const messageHandler = (message) => { + console.log("Received:", message); +}; + +// Add listener +connection.on('messageReceived', messageHandler); + +// Remove specific listener +connection.off('messageReceived', messageHandler); + +// Remove all listeners for an event +connection.off('messageReceived'); + +// Remove all listeners +connection.off(); +``` + +### React Integration + +RivetKit's React hooks provide a convenient way to handle events in React components: + +```tsx +import { useActor } from "./rivetkit"; +import { useState } from "react"; + +function ChatRoom() { + const [messages, setMessages] = useState([]); + + const chatRoom = useActor({ + name: "chatRoom", + key: ["general"] + }); + + // Listen for new messages + chatRoom.useEvent("messageReceived", (message) => { + setMessages(prev => [...prev, message]); + }); + + // Listen for deleted messages + chatRoom.useEvent("messageDeleted", ({ messageId }) => { + setMessages(prev => prev.filter(m => m.id !== messageId)); + }); + + const sendMessage = async (text: string) => { + await chatRoom.connection?.sendMessage("user-123", text); + }; + + return ( +
+ {messages.map(message => ( +
+ {message.userId}: {message.text} +
+ ))} + +
+ ); +} +``` + +## Connection Lifecycle Events + +Connections emit lifecycle events you can listen to: + +```typescript +const connection = actor.connect(); + +connection.on('connected', () => { + console.log('Connected to actor'); + enableUI(); +}); + +connection.on('disconnected', () => { + console.log('Lost connection to actor'); + showReconnectingIndicator(); +}); + +connection.on('reconnected', () => { + console.log('Reconnected to actor'); + hideReconnectingIndicator(); +}); + +connection.on('error', (error) => { + console.error('Connection error:', error); + showErrorMessage(error.message); }); ``` -
+## Advanced Event Patterns -### `once(eventName, callback)` +### Event Buffering -{/* [Documentation](https://jsr.io/@rivet-gg/actor-client/doc/~/ActorHandleRaw.prototype.once.html) */} +Events are automatically buffered during disconnections and replayed on reconnection: -Clients can listen for an event only one time with `actor.once(name, callback)`. For example: +```typescript +const connection = actor.connect(); - +// Events sent while disconnected are queued +connection.on('importantUpdate', (data) => { + // This will still be called for events sent during disconnection + // once the connection is reestablished + handleImportantUpdate(data); +}); +``` -```typescript client.ts -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; +### Connection Parameters -const client = createClient("http://localhost:8080"); -const chatRoom = await client.chatRoom.get(); +Pass parameters when connecting to provide context to the actor: -chatRoom.once('joinRequestApproved', () => { - // This will only be called once - console.log('Join request accepted'); +```typescript +const gameRoom = client.gameRoom.getOrCreate(["competitive-room"]); +const connection = gameRoom.connect({ + playerId: getCurrentPlayerId(), + skillLevel: getUserSkillLevel(), + authToken: getAuthToken() }); -await chatRoom.requestJoin(); +// The actor can use these parameters in its onBeforeConnect hook +// or access them via c.conn.params in actions ``` -```typescript chat_room.ts -import { actor } from "rivetkit"; +### Conditional Event Handling -const chatRoom = actor({ - state: { - pendingJoinRequests: [] - }, - actions: { - requestJoin: (c) => { - // ...add to pending requests... - }, - approveJoinRequest: (c, connId) => { - const conn = c.conns.find(conn => conn.id === connId); - if (conn) { - conn.send('joinRequestApproved'); - } - } +Handle events conditionally based on connection state: + +```typescript +connection.on('playerMoved', ({ playerId, position }) => { + // Only update if it's not our own player + if (playerId !== getCurrentPlayerId()) { + updatePlayerPosition(playerId, position); + } +}); + +connection.on('newArticle', (article) => { + // Handle based on article level and user subscription + if (article.level === 'premium' && !hasSubscription()) { + showUpgradePrompt(); + } else { + displayArticle(article); } }); ``` - +## Error Handling + +Handle event-related errors gracefully: + +```typescript +try { + const connection = actor.connect(); + + connection.on('messageReceived', (message) => { + try { + validateMessage(message); + displayMessage(message); + } catch (error) { + console.error('Invalid message format:', error); + // Handle malformed event data + } + }); + +} catch (error) { + console.error('Failed to establish connection:', error); + showConnectionError(); +} +``` -## Connections +## Best Practices -Connections are used to communicate with clients from the actor. +1. **Always use connections for events**: Events only work through `.connect()`, not direct action calls +2. **Handle connection lifecycle**: Listen for connection, disconnection, and error events +3. **Clean up listeners**: Remove event listeners when components unmount +4. **Validate event data**: Don't assume event payloads are always correctly formatted +5. **Use React hooks**: For React apps, use `useActor` and `actor.useEvent` for automatic cleanup +6. **Buffer critical events**: Design actors to resend important events on reconnection if needed -Read more about connections [here](/concepts/connections). diff --git a/docs/concepts/external-sql.mdx b/docs/actors/external-sql.mdx similarity index 98% rename from docs/concepts/external-sql.mdx rename to docs/actors/external-sql.mdx index d30e88848..fa512e08d 100644 --- a/docs/concepts/external-sql.mdx +++ b/docs/actors/external-sql.mdx @@ -36,7 +36,7 @@ There are several options for places to host your SQL database: Here's a basic example of how you might set up a connection to a PostgreSQL database using the `pg` library: ```typescript actor.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; import { Pool } from "pg"; // Create a database connection pool @@ -106,7 +106,7 @@ export default databaseActor; Here's an example using Drizzle ORM for more type-safe database operations: ```typescript actor.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; import { drizzle } from "drizzle-orm/node-postgres"; import { pgTable, serial, text, timestamp } from "drizzle-orm/pg-core"; import { Pool } from "pg"; diff --git a/docs/actors/types.mdx b/docs/actors/helper-types.mdx similarity index 92% rename from docs/actors/types.mdx rename to docs/actors/helper-types.mdx index 95793a691..16764f4b3 100644 --- a/docs/actors/types.mdx +++ b/docs/actors/helper-types.mdx @@ -1,5 +1,6 @@ --- title: Helper Types +icon: code --- RivetKit provides several TypeScript helper types to make it easier to work with actors in a type-safe way. @@ -13,7 +14,7 @@ When working with actors, you often need to access the context object. RivetKit Extracts the full actor context type from a actor definition. This is the type of the context object (`c`) available in lifecycle hooks such as `onCreate`, `onStart`, etc. ```typescript -import { actor, ActorContextOf } from "rivetkit"; +import { actor, ActorContextOf } from "@rivetkit/actor"; const chatRoom = actor({ state: { messages: [] }, @@ -40,7 +41,7 @@ function processChatRoomContext(context: ChatRoomContext) { Extracts the action context type from a actor definition. This is the type of the context object (`c`) available in action handlers. ```typescript -import { actor, ActionContextOf } from "rivetkit"; +import { actor, ActionContextOf } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, diff --git a/docs/actors/lifecycle.mdx b/docs/actors/lifecycle.mdx index 6ae357535..41fe75944 100644 --- a/docs/actors/lifecycle.mdx +++ b/docs/actors/lifecycle.mdx @@ -1,8 +1,97 @@ --- title: Lifecycle +description: Understand actor lifecycle hooks and initialization patterns icon: rotate --- +Actors follow a well-defined lifecycle with hooks at each stage. Understanding these hooks is essential for proper initialization, state management, and cleanup. + +## Input Parameters + +Actors can receive input parameters when created, allowing for flexible initialization: + +### Defining Input Schema + +Use Zod to define a schema for input validation: + +```typescript +import { actor } from "@rivetkit/actor"; +import { z } from "zod"; + +const gameActor = actor({ + createState: (c, opts) => ({ + mode: opts.input?.gameMode ?? "classic", + maxPlayers: opts.input?.maxPlayers ?? 4, + difficulty: opts.input?.difficulty ?? "medium", + players: [], + status: "waiting", + }), + + actions: { + // Actions can access input via context + getGameConfig: (c) => ({ + mode: c.state.mode, + maxPlayers: c.state.maxPlayers, + difficulty: c.state.difficulty, + }), + }, +}); +``` + +### Passing Input to Actors + +Input is provided when creating actor instances: + +```typescript +// Client side - create with input +const game = await client.game.create(["game-123"], { + gameMode: "tournament", + maxPlayers: 8, + difficulty: "hard", +}); + +// getOrCreate can also accept input (used only if creating) +const gameHandle = client.game.getOrCreate(["game-456"], { + gameMode: "casual", + maxPlayers: 4, +}); +``` + +### Input in Lifecycle Hooks + +Input is available in lifecycle hooks via the `opts` parameter: + +```typescript +const chatRoom = actor({ + createState: (c, opts) => ({ + name: opts.input?.roomName ?? "Unnamed Room", + isPrivate: opts.input?.isPrivate ?? false, + maxUsers: opts.input?.maxUsers ?? 50, + users: {}, + messages: [], + }), + + onCreate: (c, opts) => { + console.log(`Creating room: ${opts.input?.roomName}`); + + // Setup external services based on input + if (opts.input?.isPrivate) { + setupPrivateRoomLogging(opts.input.roomName); + } + }, + + actions: { + // Input remains accessible in actions + getRoomInfo: (c) => ({ + name: c.state.name, + isPrivate: c.state.isPrivate, + maxUsers: c.state.maxUsers, + currentUsers: Object.keys(c.state.users).length, + }), + }, +}); +``` + ## Lifecycle Hooks Actor lifecycle hooks are defined as functions in the actor configuration. @@ -11,16 +100,16 @@ Actor lifecycle hooks are defined as functions in the actor configuration. {/* [Documentation](https://jsr.io/@rivet-gg/actor/doc/~/Actor.prototype._onInitialize) */} -The `createState` function or `state` constant defines the initial state of the actor (see [state documentation](/concepts/state)). The `createState` function is called only once when the actor is first created. +The `createState` function or `state` constant defines the initial state of the actor (see [state documentation](/actors/state)). The `createState` function is called only once when the actor is first created. ### `createVars` and `vars` -The `createVars` function or `vars` constant defines ephemeral variables for the actor (see [state documentation](/concepts/state)). These variables are not persisted and are useful for storing runtime-only objects or temporary data. +The `createVars` function or `vars` constant defines ephemeral variables for the actor (see [state documentation](/actors/state)). These variables are not persisted and are useful for storing runtime-only objects or temporary data. The `createVars` function can also receive driver-specific context as its second parameter, allowing access to driver capabilities like Rivet KV or Cloudflare Durable Object storage. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Using vars constant const counter1 = actor({ @@ -36,7 +125,7 @@ const counter2 = actor({ // Initialize with non-serializable objects return { lastAccessTime: Date.now(), - emitter: createNanoEvents() + emitter: new EventTarget() }; }, actions: { /* ... */ } @@ -46,13 +135,13 @@ const counter2 = actor({ const exampleActor = actor({ state: { count: 0 }, // Access driver context in createVars - createVars: (c, rivet) => ({ - ctx: rivet.ctx, + createVars: (c, driverCtx) => ({ + driverCtx, }), actions: { doSomething: (c) => { // Use driver-specific context - console.log(`Region: ${c.vars.rivet.metadata.region.name}`); + console.log("Driver context:", c.vars.driverCtx); } } }); @@ -63,7 +152,7 @@ const exampleActor = actor({ The `onCreate` hook is called at the same time as `createState`, but unlike `createState`, it doesn't return any value. Use this hook for initialization logic that doesn't affect the initial state. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Using state constant const counter1 = actor({ @@ -85,8 +174,10 @@ const counter3 = actor({ state: { count: 0 }, // Run initialization logic (logging, external service setup, etc.) - onCreate: (c) => { + onCreate: (c, opts) => { console.log("Counter actor initialized"); + // Access input parameters if provided + console.log("Input:", opts.input); // Can perform async operations or setup // No need to return anything }, @@ -106,10 +197,11 @@ This is called after the actor has been initialized but before any connections a Use this hook to set up any resources or start any background tasks, such as `setInterval`. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, + vars: { intervalId: null as NodeJS.Timeout | null }, onStart: (c) => { console.log('Actor started with count:', c.state.count); @@ -117,14 +209,22 @@ const counter = actor({ // Set up interval for automatic counting const intervalId = setInterval(() => { c.state.count++; + c.broadcast("countChanged", c.state.count); console.log('Auto-increment:', c.state.count); }, 10000); - // Store interval ID to clean up later if needed - c.custom.intervalId = intervalId; + // Store interval ID in vars to clean up later if needed + c.vars.intervalId = intervalId; }, - actions: { /* ... */ } + actions: { + stop: (c) => { + if (c.vars.intervalId) { + clearInterval(c.vars.intervalId); + c.vars.intervalId = null; + } + } + } }); ``` @@ -135,7 +235,7 @@ const counter = actor({ Called whenever the actor's state changes. This is often used to broadcast state updates. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -173,7 +273,7 @@ The `onBeforeConnect` hook is called whenever a new client connects to the actor The `onBeforeConnect` hook does NOT return connection state - it's used solely for validation. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ state: { messages: [] }, @@ -209,7 +309,7 @@ const chatRoom = actor({ }); ``` -Connections cannot interact with the actor until this method completes successfully. Throwing an error will abort the connection. This can be used for authentication - see [Authentication](/concepts/authentication) for details. +Connections cannot interact with the actor until this method completes successfully. Throwing an error will abort the connection. This can be used for authentication - see [Authentication](/general/authentication) for details. ### `onConnect` @@ -218,7 +318,7 @@ Connections cannot interact with the actor until this method completes successfu Executed after the client has successfully connected. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ state: { users: {}, messages: [] }, @@ -250,7 +350,7 @@ Messages will not be processed for this actor until this hook succeeds. Errors t Called when a client disconnects from the actor. Use this to clean up any connection-specific resources. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ state: { users: {}, messages: [] }, @@ -278,7 +378,7 @@ const chatRoom = actor({ Actors can be shut down gracefully with `c.shutdown()`. Clients will be gracefully disconnected. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const temporaryRoom = actor({ state: { @@ -328,7 +428,7 @@ This action is permanent and cannot be reverted. When extracting logic from lifecycle hooks or actions into external functions, you'll often need to define the type of the context parameter. RivetKit provides helper types that make it easy to extract and pass these context types to external functions. ```typescript -import { actor, ActorContextOf } from "rivetkit"; +import { actor, ActorContextOf } from "@rivetkit/actor"; const myActor = actor({ state: { count: 0 }, @@ -343,23 +443,26 @@ function logActorStarted(c: ActorContextOf) { } ``` -See [Helper Types](/concepts/types) for more details on using `ActorContextOf`. +See [Helper Types](/actors/helper-types) for more details on using `ActorContextOf`. ## Full Example ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; +import { z } from "zod"; const counter = actor({ - // Initialize state - createState: () => ({ - count: 0 + // Initialize state with input + createState: (c, opts) => ({ + count: opts.input?.initialCount ?? 0, + stepSize: opts.input?.stepSize ?? 1, + name: opts.input?.name ?? "Unnamed Counter", }), // Initialize actor (run setup that doesn't affect initial state) - onCreate: (c) => { - console.log('Counter actor initialized'); - // Set up external resources, etc. + onCreate: (c, opts) => { + console.log(`Counter "${opts.input?.name}" initialized`); + // Set up external resources, logging, etc. }, // Define default connection state @@ -381,11 +484,14 @@ const counter = actor({ // Lifecycle hooks onStart: (c) => { - console.log('Counter started with count:', c.state.count); + console.log(`Counter "${c.state.name}" started with count:`, c.state.count); }, onStateChange: (c, newState) => { - c.broadcast('countUpdated', { count: newState.count }); + c.broadcast('countUpdated', { + count: newState.count, + name: newState.name + }); }, onBeforeConnect: (c, { params }) => { @@ -406,29 +512,36 @@ const counter = actor({ }, onConnect: (c) => { - console.log(`User ${c.conn.state.userId} connected`); + console.log(`User ${c.conn.state.userId} connected to "${c.state.name}"`); }, onDisconnect: (c) => { - console.log(`User ${c.conn.state.userId} disconnected`); + console.log(`User ${c.conn.state.userId} disconnected from "${c.state.name}"`); }, // Define actions actions: { - increment: (c) => { - c.state.count++; + increment: (c, amount?: number) => { + const step = amount ?? c.state.stepSize; + c.state.count += step; return c.state.count; }, reset: (c) => { // Check if user has admin role - if (c.conns.state.role !== "admin") { + if (c.conn.state.role !== "admin") { throw new Error("Unauthorized: requires admin role"); } c.state.count = 0; return c.state.count; - } + }, + + getInfo: (c) => ({ + name: c.state.name, + count: c.state.count, + stepSize: c.state.stepSize, + }), } }); diff --git a/docs/actors/metadata.mdx b/docs/actors/metadata.mdx index 71342f51e..a687e1258 100644 --- a/docs/actors/metadata.mdx +++ b/docs/actors/metadata.mdx @@ -20,7 +20,7 @@ For example: ```typescript chat_room.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const chatRoom = actor({ state: { diff --git a/docs/actors/overview.mdx b/docs/actors/overview.mdx index a3a09eeda..82b37c3cb 100644 --- a/docs/actors/overview.mdx +++ b/docs/actors/overview.mdx @@ -1,285 +1,213 @@ --- -title: Rivet Actors +title: Actors Overview icon: square-info sidebarTitle: "Overview" -description: A library for building stateful, scalable, realtime backend applications. +description: Stateful serverless functions with persistence, real-time communication, and automatic scaling --- -import CreateActorCli from "/snippets/create-actor-cli.mdx"; +Actors are lightweight, stateful serverless functions that maintain persistent state and provide real-time communication. They're the core building blocks of RivetKit applications. -Actors combine compute and storage into unified entities for simplified architecture. Actors seamlessly integrate with your existing infrastructure or can serve as a complete standalone solution. +## Getting Started -## Quickstart - - - - + + + Set up actors with Node.js, Bun, and web frameworks + + + Build real-time React applications with actors + -## Concepts - -The core concepts that power Rivet Actor applications: - -- **State Is Automatically Persisted**: State automatically persists between restarts, upgrades, & crashes -- **State Is Stored In-Memory**: State is stored in memory for high-performance reads/writes while also automatically persisted -- **Isolated State Ownership**: Actors only manage their own state, which can only be modified by the actor itself -- **Communicates via Actions**: How clients and other actors interact with a actor -- **Actions Are Low-Latency**: Actions provide WebSocket-like performance for time-sensitive operations -- **Broadcast Updates With Events**: Actors can publish real-time updates to connected clients - -## Quickstart - -Run this to get started: - - - -## Code Example - -Here's a complete chat room actor that maintains state and handles messages. We'll explore each component in depth throughout this document: - -```typescript chat_room.ts -import { actor } from "rivetkit"; +## Key Features -// Define a chat room actor -const chatRoom = actor({ - // Initialize state when the actor is first created - createState: () => ({ - messages: [] - }), - - // Define actions clients can call - actions: { - // Action to send a message - sendMessage: (c, sender, text) => { - // Update state - c.state.messages.push({ sender, text }); - - // Broadcast to all connected clients - c.broadcast("newMessage", { sender, text }); - }, - - // Action to get chat history - getHistory: (c) => { - return c.state.messages; - } - } -}); - -export default chatRoom; -``` + + + Each unit of compute is like a tiny server that remembers things between requests – no need to reload data or worry about timeouts. Like AWS Lambda, but with memory and no timeouts. + + + State is stored on the same machine as your compute, so reads and writes are ultra-fast. No database round trips, no latency spikes. + + + Update state and broadcast changes in realtime. No external pub/sub systems, no polling – just built-in low-latency events. + + + Your state lives close to your users on the edge – not in a faraway data center – so every interaction feels instant. + + -## Using the App -To start using your actor, create an app and serve it: +## Use Cases -```typescript app.ts -import { setup, serve } from "rivetkit"; -import chatRoom from "./chat_room"; +Actors are perfect for applications that need persistent state and real-time updates: -// Create the application -const registry = setup({ - use: { chatRoom } -}); - -// Start serving on default port -serve(registry); -``` +### Real-time Communication +- **Chat rooms**: Real-time messaging with message history and user presence +- **Collaborative documents**: Multiple users editing documents simultaneously +- **Live events**: Broadcasting updates to many participants -## Key Actor Components +### AI & Automation +- **AI agents**: Stateful AI assistants with conversation history +- **Workflow automation**: Long-running business processes with state persistence +- **Stream processing**: Real-time data processing with persistent state -### State +### Data & Synchronization +- **Local-first sync**: Offline-first applications with server synchronization +- **Per-user databases**: Isolated data stores for each user or tenant +- **Per-tenant SaaS**: Multi-tenant applications with isolated state +- **CRDT collaboration**: Conflict-free replicated data types for real-time editing -Actors maintain state that's stored in memory and automatically persisted. State is defined either as a constant or via a `createState` function: +### Gaming & Interactive Applications +- **Multiplayer games**: Game state management with real-time updates +- **Rate limiting**: Distributed rate limiting with persistent counters -```typescript -import { actor } from "rivetkit"; +## State Management -// Method 1: State constant -const counter1 = actor({ - state: { count: 0 }, - actions: { - // ... - } -}); - -// Method 2: CreateState function -const counter2 = actor({ - createState: () => ({ count: 0 }), - actions: { - // ... - } -}); -``` - -Update state by modifying `c.state` in your actions: +Actors maintain persistent state that survives restarts, crashes, and deployments. State can be defined as a constant or created dynamically: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, + actions: { - // Example of state update in an action increment: (c) => { - c.state.count += 1; + c.state.count++; return c.state.count; - } + }, + + getCount: (c) => c.state.count, } }); ``` -These changes are durable and are automatically persisted across updates, restarts, and crashes. - -Learn more about [state management](/actor/state). +Learn more about [state management](/actors/state). -### Actions +## Actions -Actions are functions defined in your actor configuration that clients & other actors can call: +Actions are the primary way to interact with actors. They're type-safe functions that can modify state and communicate with clients: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; -const mathUtils = actor({ - state: {}, +const chatRoom = actor({ + state: { messages: [] as Array<{text: string, userId: string}> }, + actions: { - multiplyByTwo: (c, x) => { - return x * 2; - } + sendMessage: (c, userId: string, text: string) => { + const message = { text, userId }; + c.state.messages.push(message); + c.broadcast("newMessage", message); + return message; + }, + + getMessages: (c) => c.state.messages } }); ``` -Each action receives a context object (commonly named `c`) as its first parameter, which provides access to state, connections, and other utilities. +Actions can be called from your backend, your clients, or other actors: + +```typescript +const room = client.chatRoom.getOrCreate(["general"]); +const message = await room.sendMessage("user-123", "Hello everyone!"); +``` + +Learn more about [actions](/actors/actions) and [communicating with actors](/actors/communicating-with-actors). -Learn more about [actions](/actor/actions). +## Real-time Communication -### Events +Actors support real-time bidirectional communication through WebSocket and SSE connections. Clients can establish persistent connections to receive live updates. -Actors can broadcast events to connected clients: +For example, to send events to all connected clients: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; -const inventory = actor({ - createState: () => ({ - items: [] - }), +const liveAuction = actor({ + state: { currentBid: 0 }, actions: { - addItem: (c, item) => { - // Add to state - c.state.items.push(item); - - // Notify all clients about the new item - c.broadcast("itemAdded", { item }); + placeBid: (c, amount: number) => { + c.state.currentBid = amount; + c.broadcast("newBid", { amount }); + return amount; } } }); ``` -You can also send events to specific clients: +Clients connect and listen for real-time updates: ```typescript -import { actor } from "rivetkit"; +const auction = client.liveAuction.getOrCreate(["auction-123"]); +const connection = auction.connect(); -const messageService = actor({ - state: {}, - actions: { - sendPrivateMessage: (c, userId, text) => { - // Send to a specific connection - const conn = c.conns.find(conn => conn.params.userId === userId); - if (conn) { - conn.send("privateMessage", { text }); - } - } - } +connection.on("newBid", (data) => { + console.log(`New bid: $${data.amount}`); }); -``` - -Learn more about [events](/actor/events). - -## Actor Tags - -Tags are key-value pairs attached to actors that serve two purposes: - -1. **Actor Discovery**: Find specific actors using `client.get(tags)` -2. **Organization**: Group related actors for management purposes - -For example, you can query chat rooms by tag like: -```typescript client.ts -await client.chatRoom.get({ channel: "random" }); +await auction.placeBid(150); ``` -### Common Tag Patterns +Learn more about [events](/actors/events) and [client communication](/actors/communicating-with-actors). -```typescript -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; - -const client = createClient("http://localhost:8080"); +## Scheduling & Lifecycle -// Game room with ID parameter -const gameRoom = await client.gameRoom.get({ roomId: "ABC123" }); +Actors support scheduled tasks and lifecycle management: -// User profile with ID -const userProfile = await client.userProfile.get({ profileId: "1234" }); +```typescript +import { actor } from "@rivetkit/actor"; -// Document with multiple parameters -const document = await client.document.get({ - workspaceId: "team-alpha", - documentId: "budget-2024" +const reminder = actor({ + state: { message: "" }, + + actions: { + setReminder: (c, message: string, delayMs: number) => { + c.state.message = message; + c.schedule.after(delayMs, "sendReminder"); + }, + + sendReminder: (c) => { + c.broadcast("reminder", { message: c.state.message }); + } + } }); ``` -## Actor Lifecycle +Learn more about [actor lifecycle](/actors/lifecycle). -Actors are created automatically when needed and persist until explicitly shutdown. +## Type Safety -To shut down a actor, use `c.shutdown()` from within an action: +RivetKit provides end-to-end TypeScript safety between clients and actors: -```typescript -import { actor } from "rivetkit"; + -const chatRoom = actor({ - createState: () => ({ - messages: [] - }), +```typescript Actor +const userManager = actor({ + state: { users: {} as Record }, + actions: { - closeRoom: (c) => { - // Do any cleanup needed - c.broadcast("roomClosed"); - - // Shutdown the actor - c.shutdown(); - } + createUser: (c, name: string) => { + const userId = crypto.randomUUID(); + c.state.users[userId] = { name }; + return { userId, name }; + }, + + getUser: (c, userId: string) => c.state.users[userId] } }); ``` -Learn more about the [actor lifecycle](/actor/lifecycle). +```typescript Client +const manager = client.userManager.getOrCreate(["default"]); -## Documentation +const user = await manager.createUser("Alice"); +// Type: {userId: string, name: string} -Learn more about Rivet Actors: +const foundUser = await manager.getUser(user.userId); +// Type: {name: string} | undefined +``` + + - - - Get started with Rivet Actors in minutes - - - Understand how actor state is managed, persisted, and accessed. - - - Define and implement actor actions (RPCs) for client interaction. - - - Real-time communication with events and broadcasts. - - - Managing the creation, execution, and termination of actors. - - - Schedule tasks and alarms with actors for time-based operations. - - diff --git a/docs/actors/quickstart-backend.mdx b/docs/actors/quickstart-backend.mdx new file mode 100644 index 000000000..273ebb887 --- /dev/null +++ b/docs/actors/quickstart-backend.mdx @@ -0,0 +1,434 @@ +--- +title: Node.js & Bun Quickstart +sidebarTitle: Node.js & Bun +description: Get started with Rivet Actors in Node.js and Bun +icon: node-js +--- + + + + +```sh +npm install @rivetkit/actor +``` + + + + + +Create a simple counter actor: + +```ts registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + + + +Choose your preferred web framework: + + + +```ts Hono +import { registry } from "./registry"; +import { Hono } from "hono"; + +// Start RivetKit with memory driver (for development) +const { client, serve } = registry.createServer(); + +// Setup Hono app +const app = new Hono(); + +// Example API endpoint +app.post("/increment/:name", async (c) => { + const name = c.req.param("name"); + + // Get or create actor and call action + const counter = client.counter.getOrCreate(name); + const newCount = await counter.increment(1); + + return c.json({ count: newCount }); +}); + +// Start server with RivetKit +serve(app); +``` + +```ts Express.js +import { registry } from "./registry"; +import express from "express"; + +// Start RivetKit +const { client, handler } = registry.createServer(); + +// Setup Express app +const app = express(); +app.use(express.json()); + +// Mount RivetKit handler +app.use("/registry", handler); + +// Example API endpoints +app.post("/increment/:name", async (req, res) => { + const { name } = req.params; + + const counter = client.counter.getOrCreate(name); + const newCount = await counter.increment(1); + + res.json({ count: newCount }); +}); + +app.listen(8080, () => { + console.log("Server running at http://localhost:8080"); +}); +``` + +```ts Elysia +import { registry } from "./registry"; +import { Elysia } from "elysia"; + +// Start RivetKit +const { client, handler } = registry.createServer(); + +// Setup Elysia app +const app = new Elysia() + .mount("/registry", handler) + .post("/increment/:name", async ({ params, body }) => { + const { name } = params; + + const counter = client.counter.getOrCreate(name); + const newCount = await counter.increment(1); + + return { count: newCount }; + }) + .listen(8080); + +console.log("Server running at http://localhost:8080"); +``` + + + + +The `/registry` endpoint is automatically mounted by RivetKit and is required for client communication. When using `serve()` with Hono, this is handled automatically. + + + + + + + + +```sh Node.js +npx tsx --watch server.ts +``` + +```sh Bun +bun --watch server.ts +``` + + + +Your server is now running at `http://localhost:8080` + + + + + +Test your counter actor using HTTP requests: + + + +```ts JavaScript +// Increment counter +const response = await fetch("http://localhost:8080/increment/my-counter", { + method: "POST" +}); + +const result = await response.json(); +console.log("Count:", result.count); // 1 +``` + +```sh curl +# Increment counter +curl -X POST http://localhost:8080/increment/my-counter +``` + + + + + + + +By default, RivetKit stores actor state on the local file system and will not scale in production. + +The following providers let you deploy & scale RivetKit: + + + + + +[Rivet](https://rivet.gg) provides open-source infrastructure to deploy & scale RivetKit. To deploy to Rivet, provide this config: + +```json rivet.json +{ + "rivetkit": { + "registry": "src/registry.ts", + "server": "src/server.ts" + } +} +``` + +And deploy with: + +```sh +npx rivet-cli deploy +``` + +Your endpoint will be available at your Rivet project URL. + + + + + +Deploy to Cloudflare Workers, install the Cloudflare Workers driver: + +```sh +npm install @rivetkit/cloudflare-workers +``` + +Update your `server.ts` to support Cloudflare Workers: + + + + ```ts Hono + import { createServer } from "@rivetkit/cloudflare-workers"; + import { Hono } from "hono"; + import { registry } from "./registry"; + + const { client, createHandler } = createServer(registry); + + // Setup router + const app = new Hono(); + + // ... etc ... + + const { handler, ActorHandler } = createHandler(app); + + export { handler as default, ActorHandler }; + ``` + + ```ts No Router + import { createServerHandler } from "@rivetkit/cloudflare-workers"; + import { registry } from "./registry"; + + const { handler, ActorHandler } = createServerHandler(registry); + export { handler as default, ActorHandler }; + ``` + + + +Update your configuration file to support `ACTOR_DO` and `ACTOR_KV` bindings: + +```json wrangler.json +{ + "name": "my-rivetkit-app", + "main": "src/index.ts", + "compatibility_date": "2025-01-20", + "compatibility_flags": ["nodejs_compat"], + "migrations": [ + { + "tag": "v1", + "new_classes": ["ActorHandler"] + } + ], + "durable_objects": { + "bindings": [ + { + "name": "ACTOR_DO", + "class_name": "ActorHandler" + } + ] + }, + "kv_namespaces": [ + { + "binding": "ACTOR_KV", + "id": "your_namespace_id" + } + ] +} +``` + +Finally, deploy: + +```sh +wrangler deploy +``` + + + + + +For production with Redis storage, install the Redis driver: + +```sh +npm install @rivetkit/redis +``` + +Then configure the driver: + +```ts server.ts +import { registry } from "./registry"; + +const { client, serve } = registry.createServer({ + driver: createRedisDriver() +}); + +// ... rest of server setup ... +``` + +Your backend can now be deployed to your cloud provider of choice. + + + + + + + + + +## Configuration Options + +### Connect Frontend To The Rivet Actor + +Create a type-safe client to connect from your frontend: + + + + + +```ts +import { createClient } from "@rivetkit/actor/client"; +import type { registry } from "./registry"; + +// Create typed client +const client = createClient("http://localhost:8080"); + +// Use the counter actor directly +const counter = client.counter.getOrCreate(["my-counter"]); + +// Call actions +const count = await counter.increment(3); +console.log("New count:", count); + +// Get current state +const currentCount = await counter.getCount(); +console.log("Current count:", currentCount); + +// Listen to real-time events +const connection = counter.connect(); +connection.on("countChanged", (newCount) => { + console.log("Count changed:", newCount); +}); + +// Increment through connection +await connection.increment(1); +``` + +See the [JavaScript client documentation](/clients/javascript) for more information. + + + + + +```tsx +import { useState } from "react"; +import { createClient, createRivetKit } from "@rivetkit/react"; +import type { registry } from "./registry"; + +const client = createClient("http://localhost:8080"); +const { useActor } = createRivetKit(client); + +function Counter() { + const [count, setCount] = useState(0); + + const counter = useActor({ + name: "counter", + key: ["my-counter"] + }); + + counter.useEvent("countChanged", (newCount: number) => { + setCount(newCount); + }); + + const increment = async () => { + await counter.connection?.increment(1); + }; + + return ( +
+

Count: {count}

+ +
+ ); +} +``` + +See the [React documentation](/clients/react) for more information. + +
+ + + +```rust +use rivetkit_client::{Client, EncodingKind, GetOrCreateOptions, TransportKind}; +use serde_json::json; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = Client::new( + "http://localhost:8080", + TransportKind::Sse, + EncodingKind::Json + ); + + // Get or create counter actor + let options = GetOrCreateOptions::default(); + let counter = client.get("counter", ["my-counter"].into(), options)? + .connect(); + + // Subscribe to events + counter.on_event("countChanged", |args| { + let count = args[0].as_i64().unwrap(); + println!("Count updated: {}", count); + }).await; + + // Call increment action + let result = counter.action("increment", vec![json!(1)]).await?; + println!("New count: {}", result); + + Ok(()) +} +``` + +See the [Rust client documentation](/clients/rust) for more information. + + + +
diff --git a/docs/actors/quickstart-frontend.mdx b/docs/actors/quickstart-frontend.mdx deleted file mode 100644 index 1794e7ea2..000000000 --- a/docs/actors/quickstart-frontend.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: React -icon: react ---- - - - - -```sh -npm install rivetkit -``` - - - - -```ts registry.ts -import { actor, setup } from "rivetkit"; - -export const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - return c.state.count; - }, - }, -}); - -export const registry = setup({ - use: { counter }, -}); -``` - -TODO: important registry name - - - - - -```sh -npx rivet-cli dev src/registry.ts -``` - -TODO: If you want to set up a custom backend server, see other quickstart - - - - - -```tsx -import { useState } from "react"; -import { createClient, createRivetKit } from "@rivetkit/react"; -import type { Registry } from "../backend/registry"; - -const client = createClient(`http://localhost:8080/registry`); -const { useActor } = createRivetKit(client); - -function App() { - const [count, setCount] = useState(0); - const [counterName, setCounterName] = useState("test-counter"); - - const counter = useActor({ - name: "counter", - key: [counterName], - }); - - counter.useEvent("newCount", (x: number) => setCount(x)); - - const increment = async () => { - await counter.connection?.increment(1); - }; - - return ( -
-

Counter: {count}

- setCounterName(e.target.value)} - placeholder="Counter name" - /> - -
- ); -} - -export default App; -``` - -
- - - - - - - -```sh -npx rivet-cli deploy src/registry.ts --frontend -``` - -Your endpoint is now TODO - -Test it with TODO - - - - -TODO - - - - - - -
- -## Configuration options - -### Configure storage driver - -TODO: See backend - -### Add your own endpoints - -TODO: See backend & integrate with frontend - -### Run standalone server (no dev CLI) - -TODO: See backend - -## Next Steps - - - - - - - - diff --git a/docs/actors/quickstart-react.mdx b/docs/actors/quickstart-react.mdx new file mode 100644 index 000000000..16cb595a8 --- /dev/null +++ b/docs/actors/quickstart-react.mdx @@ -0,0 +1,296 @@ +--- +title: React Quickstart +sidebarTitle: React +description: Build real-time React applications with Rivet Actors +icon: react +--- + + + + +```sh +npm install @rivetkit/actor @rivetkit/react +``` + + + + + +Create your actor registry on the backend: + +```ts backend/registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + + + +Start a server to run your actors: + +```ts backend/server.ts +import { registry } from "./registry"; +registry.runServer(); +``` + + + + + +Set up your React application: + +```tsx frontend/App.tsx +import { useState } from "react"; +import { createClient, createRivetKit } from "@rivetkit/react"; +import type { registry } from "../backend/registry"; + +// Create typed client +const client = createClient("http://localhost:8080"); +const { useActor } = createRivetKit(client); + +function App() { + const [count, setCount] = useState(0); + const [counterName, setCounterName] = useState("my-counter"); + + // Connect to the counter actor + const counter = useActor({ + name: "counter", + key: [counterName], + }); + + // Listen for real-time count updates + counter.useEvent("countChanged", (newCount: number) => { + setCount(newCount); + }); + + const increment = async () => { + // Call actor action through the connection + await counter.connection?.increment(1); + }; + + const incrementBy = async (amount: number) => { + await counter.connection?.increment(amount); + }; + + return ( +
+

RivetKit Counter

+

Count: {count}

+ +
+ +
+ +
+ + + +
+ +
+

Connection Status: {counter.isConnected ? "Connected" : "Disconnected"}

+

Try opening multiple tabs to see real-time sync.

+
+
+ ); +} + +export default App; +``` + +
+ + + +Configure Vite for development: + +```ts vite.config.ts +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + server: { + port: 5173, + }, +}) +``` + + + + + +Start both the backend and frontend: + +**Terminal 1**: Start the backend + +```sh Backend +npx tsx --watch backend/server.ts +``` + +**Terminal 2**: Start the frontend + +```sh Frontend +npx vite +``` + +Open `http://localhost:5173` in your browser. Try opening multiple tabs to see real-time sync in action. + + + + + +By default, RivetKit stores actor state on the local file system and will not scale in production. + +The following providers let you deploy & scale RivetKit: + + + + + +[Rivet](https://rivet.gg) provides open-source infrastructure to deploy & scale RivetKit. To deploy to Rivet, provide this config: + +```json rivet.json +{ + "rivetkit": { + "registry": "src/registry.ts", + "server": "src/server.ts" + } +} +``` + +And deploy with: + +```sh +npx rivet-cli deploy +``` + +Your endpoint will be available at your Rivet project URL. + + + + + +Deploy to Cloudflare Workers, install the Cloudflare Workers driver: + +```sh +npm install @rivetkit/cloudflare-workers +``` + +Update your `server.ts` to support Cloudflare Workers: + + ```ts server.ts + import { createServerHandler } from "@rivetkit/cloudflare-workers"; + import { registry } from "./registry"; + + const { handler, ActorHandler } = createServerHandler(registry); + export { handler as default, ActorHandler }; + ``` + +Update your configuration file to support `ACTOR_DO` and `ACTOR_KV` bindings: + +```json wrangler.json +{ + "name": "my-rivetkit-app", + "main": "src/index.ts", + "compatibility_date": "2025-01-20", + "compatibility_flags": ["nodejs_compat"], + "migrations": [ + { + "tag": "v1", + "new_classes": ["ActorHandler"] + } + ], + "durable_objects": { + "bindings": [ + { + "name": "ACTOR_DO", + "class_name": "ActorHandler" + } + ] + }, + "kv_namespaces": [ + { + "binding": "ACTOR_KV", + "id": "your_namespace_id" + } + ] +} +``` + +Finally, deploy: + +```sh +wrangler deploy +``` + + + + + +For production with Redis storage, install the Redis driver: + +```sh +npm install @rivetkit/redis +``` + +Then configure the driver: + +```ts server.ts +import { registry } from "./registry"; + +const { client, serve } = registry.createServer({ + driver: createRedisDriver() +}); + +// ... rest of server setup ... +``` + +Your backend can now be deployed to your cloud provider of choice. + + + + + + + +
+ +## Configuration Options + +### Add Your Own Backend Endpoints + +Add custom HTTP endpoints alongside your actors to handle additional business logic, authentication, and integrations with external services. + +See [backend quickstart](/actors/quickstart-backend) for more information. + diff --git a/docs/actors/quickstart.mdx b/docs/actors/quickstart.mdx deleted file mode 100644 index 08a4c003a..000000000 --- a/docs/actors/quickstart.mdx +++ /dev/null @@ -1,308 +0,0 @@ ---- -title: Node.js & Bun -icon: node-js ---- - - - - -```sh -npm install @rivetkit/actor -``` - - - - -```ts registry.ts -import { actor, setup } from "@rivetkit/actor"; - -export const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - return c.state.count; - }, - }, -}); - -export const registry = setup({ - use: { counter }, -}); -``` - - - - - - - - -```ts Hono -import { registry } from "./registry"; -import { Hono } from "hono"; - -// Start RivetKit -// -// State is stored in memory, this can be configured later -const { client, serve } = registry.server(); - -// Setup server -const app = new Hono(); - -// Example endpoint -app.post("/increment/:name", async (c) => { - const name = c.req.param("name"); - - // Communicate with actor - const counter = client.counter.getOrCreate(name); - const newCount = await counter.increment(1); - - return c.text(`New Count: ${newCount}`); -}); - -// Start server -serve(app); -``` - - -```ts Express.js -TODO -``` - -```ts Elysia.js -TODO -``` - -TODO: How to serve without registry helper - -TODO: Why we need to use our own custom serve fn - - - - - TODO: Exporting `registry` and `app.fetch` (as `default`) is important. - - -_If you want to run without export fetch (i.e. standalone Node.js), see below._ - - - - - - - -```sh Node.js -npx tsx --watch src/server.ts -``` - -```sh Bun -bun run --watch src/server.ts -``` - - - - - - - - - -```ts fetch -const res = await fetch("http://localhost:8080/increment/foo", { - method: "POST" -}); -console.log("Output:", await res.text()); -``` - -```sh curl -curl -X POST localhost:8080/increment/foo -``` - - - - - - - - - - - - -```json rivet.json -{ - "rivetkit": { - "registry": "src/registry.ts", - "server": "src/server.ts" - } -} -``` - -```sh -npx rivet-cli deploy -``` - -Your endpoint is now TODO - -Test it with TODO - - - - -TODO - - - - -```sh -npm install @rivetkit/redis -``` - -```ts server.ts -import { registry } from "./registry"; -import { createRedisDriver } from "@rivetkit/redis"; - -// Start RivetKit -const { client, hono } = registry.run({ - driver: createRedisDriver({ - host: "127.0.0.1", - port: 6379, - }), -}); - -// ...rest of code... -``` - - - - - -```sh -npm install @rivetkit/file-system -``` - -```ts server.ts -import { registry } from "./registry"; -import { createFileSystemDriver } from "@rivetkit/file-system"; - -// Start RivetKit -const { client, hono } = registry.run({ - driver: createFileSystemDriver(), -}); - -// ...rest of code... -``` - - - - - - - - - -## Configuration Options - -### Connect your frontend to the Rivet Actor - -TODO: Quick summary of why you would want to connect your frontend - -Connect your frontend: - - - -```ts JavaScript -import { createClient } from "@rivetkit/actor/client"; -import type { registry } from "./registry.js"; - -const client = createClient("http://localhost:8080/registry"); - -const result = await client.myActor.getOrCreate().myAction("Hello, world!"); -``` - -```ts React -import { useState } from "react"; -import { createClient, createRivetKit } from "@@rivetkit/actor/react"; -import type { registry } from "./registry"; - -const client = createClient(`http://localhost:8080/registry`); -const { useActor } = createRivetKit(client); - -function App() { - const [count, setCount] = useState(0); - const [counterName, setCounterName] = useState("test-counter"); - - const counter = useActor({ - name: "counter", - key: [counterName], - }); - - counter.useEvent("newCount", (x: number) => setCount(x)); - - const increment = async () => { - await counter.connection?.increment(1); - }; - - return ( -
-

Counter: {count}

- setCounterName(e.target.value)} - placeholder="Counter name" - /> - -
- ); -} -``` - -
- -TODO: Learn more under the XXXX docs - - - TODO: Link to onAuth docs - - - - TODO: Note that `/registry` must be exposed - - -### Run as standalone server (no fetch handler) - -TODO: Intro - -```ts -import { registry } from "./registry"; -import { Hono } from "hono"; -import { serve } from "@hono/node-server"; - -// Start RivetKit -const { client, hono } = registry.run(); - -// Setup server -const app = new Hono(); - -// ...setup routes... - -serve({ fetch: app.fetch, port: 8080 }, (x) => - console.log("Listening at http://localhost:8080"), -); -``` - -IMPORTANT: You'll need to do special stuff to support deploying to Rivet or Cloudflare Workers - -## Next Steps - -TODO - - - - - - - - diff --git a/docs/concepts/scaling.mdx b/docs/actors/scaling.mdx similarity index 91% rename from docs/concepts/scaling.mdx rename to docs/actors/scaling.mdx index 9922803d1..28bdea081 100644 --- a/docs/concepts/scaling.mdx +++ b/docs/actors/scaling.mdx @@ -12,7 +12,7 @@ Actors scale by design through these key properties: | Property | Description | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Independent State** | Each actor manages its own private data separately from other actors, so they never conflict with each other when running at the same time (i.e. using locking mechanisms). | -| **Action- & Event-Based Communication** | Actors communicate through asynchronous [actions](/concepts/actions) or [events](/concepts/events), making it easy to distribute them across different machines. | +| **Action- & Event-Based Communication** | Actors communicate through asynchronous [actions](/actors/actions) or [events](/actors/events), making it easy to distribute them across different machines. | | **Location Transparency** | Unlike traditional servers, actors don't need to know which machine other actors are running on in order to communicate with each other. They can run on the same machine, across a network, and across the world. Actors handle the network routing for you under the hood. | | **Horizontal Scaling** | Actors distribute workload by splitting responsibilities into small, focused units. Since each actor handles a limited scope (like a single user, document, or chat room), the system automatically spreads load across many independent actors rather than concentrating it in a single place. | @@ -28,7 +28,7 @@ Here are key principles for architecting your actor system: **State Management** - Each actor owns and manages only its own state -- Use [actions](/concepts/actions) to request data from other actors +- Use [actions](/actors/actions) to request data from other actors - Keep state minimal and relevant to the actor's core responsibility **Granularity Guidelines** diff --git a/docs/actors/schedule.mdx b/docs/actors/schedule.mdx index 2f8c5ad60..026037308 100644 --- a/docs/actors/schedule.mdx +++ b/docs/actors/schedule.mdx @@ -38,7 +38,7 @@ Currently, scheduling can only trigger public actions. If the scheduled action i ## Full Example ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const reminderService = actor({ state: { diff --git a/docs/actors/state.mdx b/docs/actors/state.mdx index 7462c4764..bb32111b7 100644 --- a/docs/actors/state.mdx +++ b/docs/actors/state.mdx @@ -9,17 +9,19 @@ Actor state provides the best of both worlds: it's stored in-memory and persiste **Using External SQL Databases** Actors can also be used with external SQL databases. This can be useful to integrate actors with existing -applications or for storing relational data. Read more [here](/concepts/external-sql). +applications or for storing relational data. Read more [here](/actors/external-sql). ## Initializing State There are two ways to define a actor's initial state: -**Method 1: Static Initial State** + + + ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Simple state with a constant const counter = actor({ @@ -32,10 +34,12 @@ const counter = actor({ }); ``` -**Method 2: Dynamic Initial State** + + + ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // State with initialization logic const counter = actor({ @@ -50,14 +54,18 @@ const counter = actor({ }); ``` -The `createState` function is called once when the actor is first created. See [Lifecycle](/concepts/lifecycle) for more details. + + + + +The `createState` function is called once when the actor is first created. See [Lifecycle](/actors/lifecycle) for more details. ## Modifying State To update state, modify the `state` property on the context object (`c.state`) in your actions: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -89,7 +97,7 @@ Actors automatically handle persisting state transparently. This happens at the In the rare occasion you need to force a state change mid-action, you can use `c.saveState()`. This should only be used if your action makes an important state change that needs to be persisted before the action completes. ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const criticalProcess = actor({ state: { @@ -122,14 +130,14 @@ const criticalProcess = actor({ Each actor's state is completely isolated, meaning it cannot be accessed directly by other actors or clients. This allows actors to maintain a high level of security and data integrity, ensuring that state changes are controlled and predictable. -To interact with a actor's state, you must use [Actions](/concepts/actions). Actions provide a controlled way to read from and write to the state. +To interact with a actor's state, you must use [Actions](/actors/actions). Actions provide a controlled way to read from and write to the state. ## Sharing State Between Actors If you need a shared state between multiple actors, you have two options: 1. Create a actor that holds the shared state that other actors can make action calls to -2. Use an external database, see [External SQL Databases](/concepts/external-sql) +2. Use an external database, see [External SQL Databases](/actors/external-sql) ## Ephemeral Variables @@ -141,10 +149,12 @@ In addition to persisted state, RivetKit provides a way to store ephemeral data There are two ways to define a actor's initial vars: -**Method 1: Static Initial Variables** + + + ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Define vars as a constant const counter = actor({ @@ -166,10 +176,12 @@ const counter = actor({ When using static `vars`, all values must be compatible with `structuredClone()`. If you need to use non-serializable objects, use `createVars` instead, which allows you to create these objects on the fly. -**Method 2: Dynamic Initial Variables** + + + ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; // Define vars with initialization logic const counter = actor({ @@ -189,12 +201,16 @@ const counter = actor({ }); ``` + + + + ### Using Variables Vars can be accessed and modified through the context object with `c.vars`: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; import { createNanoEvents } from "nanoevents"; const counter = actor({ diff --git a/docs/clients/javascript.mdx b/docs/clients/javascript.mdx index 51efe3736..24b475d0e 100644 --- a/docs/clients/javascript.mdx +++ b/docs/clients/javascript.mdx @@ -54,19 +54,19 @@ The RivetKit JavaScript client allows you to connect to and interact with actors ```sh npm - npm install rivetkit + npm install @rivetkit/actor ``` ```sh pnpm - pnpm add rivetkit + pnpm add @rivetkit/actor ``` ```sh yarn - yarn add rivetkit + yarn add @rivetkit/actor ``` ```sh bun - bun add rivetkit + bun add @rivetkit/actor ``` @@ -77,7 +77,7 @@ The RivetKit JavaScript client allows you to connect to and interact with actors Create a file `src/client.ts` in your project to connect to your actor: ```typescript src/client.ts - import { createClient } from "rivetkit/client"; + import { createClient } from "@rivetkit/actor/client"; import type { App } from "../actors/app"; async function main() { @@ -139,5 +139,5 @@ The RivetKit JavaScript client allows you to connect to and interact with actors ## Next Steps -See the [Interacting with Actors](/concepts/interacting-with-actors) documentation for information on how to use the client. +For more information on communicating with actors, including event handling and RPC calls, see [Communicating with Actors](/actors/communicating-with-actors). diff --git a/docs/clients/python.mdx b/docs/clients/python.mdx deleted file mode 100644 index 829ee1560..000000000 --- a/docs/clients/python.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Python -icon: python ---- - -import MvpWarning from "/snippets/mvp-warning.mdx"; -import StepDefineActor from "/snippets/step-define-actor.mdx"; -import StepRunStudio from "/snippets/step-run-studio.mdx"; -import StepDeploy from "/snippets/step-deploy.mdx"; -import SetupNextSteps from "/snippets/setup-next-steps.mdx"; - -The RivetKit Python client provides a way to connect to and interact with actors from Python applications. - - - -## Quickstart - - - - Create a new directory for your project: - - ```sh - mkdir my-app - cd my-app - ``` - - It's recommended to create a virtual environment: - ```sh - python -m venv venv - source venv/bin/activate # On Windows use: venv\Scripts\activate - ``` - - - - Install the RivetKit client package: - - ```sh - pip install rivetkit-client - ``` - - - - - - Create a new file `main.py`: - - - ```python Async - import asyncio - from rivetkit_client import AsyncClient - - async def main(): - # Replace with your endpoint URL after deployment - client = AsyncClient("http://localhost:8080") - - # Get or create a actor instance - counter = await client.get("counter") - - # Subscribe to events using callback - def on_new_count(msg): - print(f"Event: {msg}") - - counter.on_event("newCount", on_new_count) - - # Call an action - result = await counter.action("increment", 5) - print(f"Action result: {result}") - - # Wait to receive events - await asyncio.sleep(1) - - # Clean up - await counter.disconnect() - - if __name__ == "__main__": - asyncio.run(main()) - ``` - - ```python Sync - from rivetkit_client import Client - - # Replace with your endpoint URL after deployment - client = Client("http://localhost:8080") - - # Get or create a actor instance - counter = client.get("counter") - - # Subscribe to events using callback - def on_new_count(msg): - print(f"Event: {msg}") - - # Clean up once we receive our event - counter.disconnect() - - counter.on_event("newCount", on_new_count) - - # Call an action - result = counter.action("increment", 5) - print(f"Action result: {result}") - - # Clean is handled on by on_new_count - ``` - - - In the code above, subscription is done with `on_event` callbacks, but you can also - subscribe directly with `receive()` calls, using the `SimpleClient` (and `AsyncSimpleClient`) - interfaces. See our [sample usage](https://github.com/rivet-gg/rivetkit/tree/main/clients/python/tests/test_e2e_simple_async.py) for more details. - - - - - - In a separate terminal, run your Python code: - - ```sh - python main.py - ``` - - You should see output like: - ``` - Event: 5 - Action result: 5 - ``` - - Run it again to see the state update. - - - - - - diff --git a/docs/clients/react.mdx b/docs/clients/react.mdx new file mode 100644 index 000000000..42ae30f8f --- /dev/null +++ b/docs/clients/react.mdx @@ -0,0 +1,644 @@ +--- +title: React +description: Build real-time React applications with Rivet Actors +icon: react +--- + +Learn how to create real-time, stateful React applications with RivetKit's actor model. The React integration provides intuitive hooks for managing actor connections and real-time updates. + +## Installation + +Install the RivetKit React package: + +```bash +npm install @rivetkit/actor @rivetkit/react +``` + +## Basic Usage + + + +First, set up your actor registry (typically in your backend): + +```typescript +// backend/registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + +Create a typed client and RivetKit hooks: + +```tsx +// src/rivetkit.ts +import { createClient, createRivetKit } from "@rivetkit/react"; +import type { registry } from "../backend/registry"; + +export const client = createClient("http://localhost:8080"); +export const { useActor } = createRivetKit(client); +``` + + + +Connect to actors and listen for real-time updates: + +```tsx +// src/App.tsx +import { useState } from "react"; +import { useActor } from "./rivetkit"; + +function App() { + const [count, setCount] = useState(0); + const [counterName, setCounterName] = useState("my-counter"); + + // Connect to the counter actor + const counter = useActor({ + name: "counter", + key: [counterName], + }); + + // Listen for real-time count updates + counter.useEvent("countChanged", (newCount: number) => { + setCount(newCount); + }); + + const increment = async () => { + await counter.connection?.increment(1); + }; + + return ( +
+

RivetKit Counter

+

Count: {count}

+ +
+ +
+ + + +
+

Status: {counter.isConnected ? "Connected" : "Disconnected"}

+
+
+ ); +} + +export default App; +``` +
+
+ +## API Reference + +### `createRivetKit(client, options?)` + +Creates the RivetKit hooks for React integration. + +```tsx +import { createClient, createRivetKit } from "@rivetkit/react"; + +const client = createClient("http://localhost:8080"); +const { useActor } = createRivetKit(client); +``` + +#### Parameters + +- `client`: The RivetKit client created with `createClient` +- `options`: Optional configuration object + +#### Returns + +An object containing: +- `useActor`: Hook for connecting to actors + +### `useActor(options)` + +Hook that connects to an actor and manages the connection lifecycle. + +```tsx +const actor = useActor({ + name: "actorName", + key: ["actor-id"], + params: { userId: "123" }, + enabled: true +}); +``` + +#### Parameters + +- `options`: Object containing: + - `name`: The name of the actor type (string) + - `key`: Array of strings identifying the specific actor instance + - `params`: Optional parameters passed to the actor connection + - `enabled`: Optional boolean to conditionally enable/disable the connection (default: true) + +#### Returns + +Actor object with the following properties: +- `connection`: The actor connection for calling actions, or `null` if not connected +- `isConnected`: Boolean indicating if the actor is connected +- `state`: Current actor state (if available) +- `useEvent(eventName, handler)`: Method to subscribe to actor events + +### `actor.useEvent(eventName, handler)` + +Subscribe to events emitted by the actor. + +```tsx +const actor = useActor({ name: "counter", key: ["my-counter"] }); + +actor.useEvent("countChanged", (newCount: number) => { + console.log("Count changed:", newCount); +}); +``` + +#### Parameters + +- `eventName`: The name of the event to listen for (string) +- `handler`: Function called when the event is emitted + +#### Lifecycle + +The event subscription is automatically managed: +- Subscribes when the actor connects +- Cleans up when the component unmounts or actor disconnects +- Re-subscribes on reconnection + +## Advanced Patterns + +### Multiple Actors + +Connect to multiple actors in a single component: + +```tsx +function Dashboard() { + const userProfile = useActor({ + name: "userProfile", + key: ["user-123"] + }); + + const notifications = useActor({ + name: "notifications", + key: ["user-123"] + }); + + userProfile.useEvent("profileUpdated", (profile) => { + console.log("Profile updated:", profile); + }); + + notifications.useEvent("newNotification", (notification) => { + console.log("New notification:", notification); + }); + + return ( +
+ + +
+ ); +} +``` + +### Conditional Connections + +Control when actors connect using the `enabled` option: + +```tsx +function ConditionalActor() { + const [enabled, setEnabled] = useState(false); + + const counter = useActor({ + name: "counter", + key: ["conditional"], + enabled: enabled // Only connect when enabled + }); + + return ( +
+ + {enabled && counter.isConnected && ( +

Count: {counter.state?.count}

+ )} +
+ ); +} +``` + +### Authentication + +Pass authentication parameters to actors: + +```tsx +function AuthenticatedChat() { + const [authToken] = useAuthToken(); // Your auth hook + + const chatRoom = useActor({ + name: "chatRoom", + key: ["general"], + params: { + authToken, + userId: getCurrentUserId() + } + }); + + chatRoom.useEvent("messageReceived", (message) => { + console.log("New message:", message); + }); + + const sendMessage = async (text: string) => { + await chatRoom.connection?.sendMessage(text); + }; + + return ( +
+ {/* Chat UI */} +
+ ); +} +``` + +### Error Handling + +Handle connection errors gracefully: + +```tsx +function ResilientCounter() { + const [error, setError] = useState(null); + + const counter = useActor({ + name: "counter", + key: ["resilient"] + }); + + counter.useEvent("error", (err) => { + setError(err.message); + // Clear error after 5 seconds + setTimeout(() => setError(null), 5000); + }); + + counter.useEvent("connected", () => { + setError(null); + }); + + return ( +
+ {error && ( +
+ Error: {error} +
+ )} +
+ Status: {counter.isConnected ? "Connected" : "Disconnected"} +
+ {/* Rest of component */} +
+ ); +} +``` + +### Custom Hooks + +Create reusable custom hooks for common patterns: + +```tsx +// Custom hook for a counter with persistent state +function useCounter(counterId: string) { + const [count, setCount] = useState(0); + + const counter = useActor({ + name: "counter", + key: [counterId] + }); + + counter.useEvent("countChanged", setCount); + + const increment = useCallback(async (amount = 1) => { + await counter.connection?.increment(amount); + }, [counter.connection]); + + const reset = useCallback(async () => { + await counter.connection?.reset(); + }, [counter.connection]); + + return { + count, + increment, + reset, + isConnected: counter.isConnected + }; +} + +// Usage +function App() { + const { count, increment, reset, isConnected } = useCounter("my-counter"); + + return ( +
+

Count: {count}

+ + +
+ ); +} +``` + +### Real-time Collaboration + +Build collaborative features with multiple event listeners: + +```tsx +function CollaborativeEditor() { + const [content, setContent] = useState(""); + const [cursors, setCursors] = useState>({}); + + const document = useActor({ + name: "document", + key: ["doc-123"], + params: { userId: getCurrentUserId() } + }); + + // Listen for content changes + document.useEvent("contentChanged", (newContent) => { + setContent(newContent); + }); + + // Listen for cursor movements + document.useEvent("cursorMoved", ({ userId, position }) => { + setCursors(prev => ({ ...prev, [userId]: position })); + }); + + // Listen for user join/leave + document.useEvent("userJoined", ({ userId }) => { + console.log(`${userId} joined the document`); + }); + + document.useEvent("userLeft", ({ userId }) => { + setCursors(prev => { + const { [userId]: _, ...rest } = prev; + return rest; + }); + }); + + const updateContent = async (newContent: string) => { + await document.connection?.updateContent(newContent); + }; + + return ( +
+ +
+ ); +} +``` + +## Client Connection Options + +### Basic Client Setup + +Create a type-safe client to connect to your backend: + +```ts client.ts +import { createClient } from "@rivetkit/actor/client"; +import type { registry } from "./registry"; + +// Create typed client +const client = createClient("http://localhost:8080"); + +// Use the counter actor directly +const counter = client.counter.getOrCreate(["my-counter"]); + +// Call actions +const count = await counter.increment(3); +console.log("New count:", count); + +// Get current state +const currentCount = await counter.getCount(); +console.log("Current count:", currentCount); + +// Listen to real-time events +const connection = counter.connect(); +connection.on("countChanged", (newCount) => { + console.log("Count changed:", newCount); +}); + +// Increment through connection +await connection.increment(1); +``` + +### React Integration + +Use the React hooks for seamless integration: + +```tsx +import { useState } from "react"; +import { createClient, createRivetKit } from "@rivetkit/react"; +import type { registry } from "./registry"; + +const client = createClient("http://localhost:8080"); +const { useActor } = createRivetKit(client); + +function App() { + const [count, setCount] = useState(0); + const [counterName, setCounterName] = useState("test-counter"); + + const counter = useActor({ + name: "counter", + key: [counterName], + }); + + counter.useEvent("countChanged", (newCount: number) => setCount(newCount)); + + const increment = async () => { + await counter.connection?.increment(1); + }; + + return ( +
+

Counter: {count}

+ setCounterName(e.target.value)} + placeholder="Counter name" + /> + +
+ ); +} +``` + +## Environment Configuration + +### Development vs Production + +Create environment-specific configurations: + +```ts config.ts +const isDev = process.env.NODE_ENV !== "production"; + +export const config = { + port: parseInt(process.env.PORT || "8080"), + rivetkit: { + driver: isDev + ? { + topology: "standalone" as const, + actor: { type: "memory" as const }, + manager: { type: "memory" as const }, + } + : { + topology: "partition" as const, + actor: { type: "redis" as const, url: process.env.REDIS_URL! }, + manager: { type: "redis" as const, url: process.env.REDIS_URL! }, + }, + }, +}; +``` + +### Backend Configuration + +Update your server to use environment-based configuration: + +```ts server.ts +import { registry } from "./registry"; +import { config } from "./config"; + +const { client, serve } = registry.createServer(config.rivetkit); + +// ... rest of server setup +``` + +### Frontend Environment Variables + +Configure your frontend for different environments: + +```ts .env.local +VITE_API_URL=http://localhost:8080 +VITE_WS_URL=ws://localhost:8080 +``` + +```ts config/client.ts +const API_URL = import.meta.env.VITE_API_URL || "http://localhost:8080"; + +export const client = createClient(API_URL); +``` + +## Authentication Integration + +### Protected Actors + +Add authentication to secure your actors: + +```ts registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const protectedCounter = actor({ + onAuth: async (opts) => { + const token = opts.params.authToken || opts.req.headers.get("Authorization"); + + if (!token) { + throw new Error("Authentication required"); + } + + // Validate token and return user data + const user = await validateJWT(token); + return { userId: user.id, role: user.role }; + }, + + state: { count: 0 }, + + actions: { + increment: (c, amount: number = 1) => { + // Access auth data via c.conn.auth + const { userId } = c.conn.auth; + + c.state.count += amount; + c.broadcast("countChanged", { count: c.state.count, userId }); + return c.state.count; + }, + }, +}); +``` + +### React Authentication + +Connect authenticated actors in React: + +```tsx +function AuthenticatedApp() { + const [authToken, setAuthToken] = useState(null); + + const counter = useActor({ + name: "protectedCounter", + key: ["user-counter"], + params: { + authToken: authToken + }, + enabled: !!authToken // Only connect when authenticated + }); + + const login = async () => { + const token = await authenticateUser(); + setAuthToken(token); + }; + + if (!authToken) { + return ; + } + + return ( +
+

Authenticated Counter

+ {/* ... rest of authenticated UI */} +
+ ); +} +``` + +Learn more about [authentication](/general/authentication). + +## Best Practices + +1. **Use Custom Hooks**: Extract actor logic into reusable custom hooks +2. **Handle Loading States**: Always account for the initial loading state +3. **Error Boundaries**: Implement error boundaries around actor components +4. **Conditional Connections**: Use the `enabled` prop to control when actors connect +5. **Event Cleanup**: Event listeners are automatically cleaned up, but be mindful of heavy operations in handlers +6. **State Management**: Combine with React state for local UI state that doesn't need to be shared + diff --git a/docs/concepts/cors.mdx b/docs/concepts/cors.mdx deleted file mode 100644 index 4b4f0b3e4..000000000 --- a/docs/concepts/cors.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Cross-Origin Resource Sharing -sidebarTitle: CORS -icon: share-nodes ---- - -Cross-Origin Resource Sharing (CORS) is a security mechanism that allows a web application running at one origin to access resources from a different origin. Without CORS, browsers block cross-origin HTTP requests by default as a security measure. - -You'll need to configure CORS when: - -- **Local Development**: You're developing locally and your client runs on a different port than your actor service -- **Different Domain**: Your frontend application is hosted on a different domain than your actor service - -## Example - -```ts -import { setup } from "rivetkit"; -import counter from "./counter"; - -const registry = setup({ - use: { counter }, - // Change this to match your frontend's origin - cors: { origin: "https://yourdomain.com" } -}); -``` - -## Options - -### `origin` - -`string | string[] | (origin:string, c:Context) => string` (optional) - -Specifies which domains can access your resources. Options: -- Single domain: `"https://example.com"` -- Multiple domains: `["https://app.com", "https://admin.com"]` -- Dynamic validation: `(origin) => origin.endsWith('.example.com') ? origin : null` -- All domains (not recommended for production): `"*"` (default) - -### `allowMethods` - -`string[]` (optional) - -HTTP methods clients are allowed to use when accessing your resources. Default includes all standard methods: `['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']`. - -### `allowHeaders` - -`string[]` (optional) - -Custom HTTP headers clients can send in requests. Empty by default `[]`. Common examples: -- `["Content-Type", "Authorization", "X-API-Key"]` - -### `maxAge` - -`number` (optional) - -How long browsers should cache CORS response (in seconds). Higher values improve performance by reducing preflight requests. - -### `credentials` - -`boolean` (optional) - -Whether requests can include user credentials like cookies or HTTP authentication. Must specify exact origins when enabled (cannot use with `origin: "*"`). - -### `exposeHeaders` - -`string[]` (optional) - -Server headers that browsers are allowed to access. Empty by default `[]`. Example: -- `["Content-Length", "X-Request-Id"]` - diff --git a/docs/concepts/interacting-with-workers.mdx b/docs/concepts/interacting-with-workers.mdx deleted file mode 100644 index ab6809eb5..000000000 --- a/docs/concepts/interacting-with-workers.mdx +++ /dev/null @@ -1,614 +0,0 @@ ---- -title: Interacting with Actors -icon: square-code ---- - -This guide covers how to connect to and interact with actors from client applications. - -## Setting Up the Client - -The first step is to create a client that will connect to your actor service: - - -```typescript TypeScript -import { createClient } from "rivetkit/client"; -import type { App } from "../src/index"; - -// Create a client with the connection address and app type -const client = createClient(/* CONNECTION ADDRESS */); -``` - -```rust Rust -use rivetkit_client::{Client, EncodingKind, GetOrCreateOptions, TransportKind}; - -// Create a client with connection address and configuration -let client = Client::new( - "http://localhost:8080", // Connection address - TransportKind::WebSocket, // Transport (WebSocket or SSE) - EncodingKind::Cbor, // Encoding (Json or Cbor) -); -``` - -```python Python -from rivetkit_client import AsyncClient as ActorClient - -# Create a client with the connection address -client = ActorClient("http://localhost:8080") -``` - - -See the setup guide for your platform for details on how to get the connection address. - -## Finding & Connecting to Actors - -RivetKit provides several methods to connect to actors: - -### `get(tags, opts)` - Find or Create - -The most common way to connect is with `get()`, which finds an existing actor matching the provided tags or creates a new one: - - -```typescript TypeScript -// Connect to a chat room for the "general" channel -const room = await client.chatRoom.get({ - name: "chat_room", - channel: "general" -}); - -// Now you can call methods on the actor -await room.sendMessage("Alice", "Hello everyone!"); -``` - -```rust Rust -use rivetkit_client::GetOrCreateOptions; -use serde_json::json; - -// Connect to a chat room for the "general" channel -let tags = vec![ - ("name".to_string(), "chat_room".to_string()), - ("channel".to_string(), "general".to_string()), -]; - -let mut options = GetOrCreateOptions { - tags: Some(tags), - ..Default::default() -}; - -let room = client.get("chatRoom", options)? - .connect(); - -// Now you can call methods on the actor -room.action("sendMessage", vec![json!("Alice"), json!("Hello everyone!")]) - .await - .expect("Failed to send message"); -``` - -```python Python -# Connect to a chat room for the "general" channel -room = await client.get("chatRoom", tags=[ - ("name", "chat_room"), - ("channel", "general") -]) - -# Now you can call methods on the actor -await room.action("sendMessage", ["Alice", "Hello everyone!"]) -``` - - -### `create(opts)` - Explicitly Create New - -When you specifically want to create a new actor instance: - - -```typescript TypeScript -// Create a new document actor -const doc = await client.myDocument.create({ - create: { - tags: { - name: "my_document", - docId: "123" - } - } -}); - -await doc.initializeDocument("My New Document"); -``` - -```rust Rust -use rivetkit_client::CreateOptions; -use rivetkit_client::client::CreateRequestMetadata; -use serde_json::json; - -// Create a new document actor -let tags = vec![ - ("name".to_string(), "my_document".to_string()), - ("docId".to_string(), "123".to_string()), -]; - -let create_options = CreateOptions::default(); - -let doc = client.create("myDocument", ["tags-or-keys"].into(), create_options) - .expect("Failed to create document") - .connect(); - -// Initialize the document -doc.action("initializeDocument", vec![json!("My New Document")]) - .await - .expect("Failed to initialize document"); -``` - -```python Python -# Create a new document actor -doc = await client.get("myDocument", tags=[ - ("name", "my_document"), - ("docId", "123") -]) - -await doc.action("initializeDocument", ["My New Document"]) -``` - - -### `getWithId(id, opts)` - Connect by ID - -Connect to an actor using its internal ID: - - -```typescript TypeScript -// Connect to a specific actor by its ID -const myActorId = "55425f42-82f8-451f-82c1-6227c83c9372"; -const doc = await client.myDocument.getWithId(myActorId); - -await doc.updateContent("Updated content"); -``` - -```rust Rust -use rivetkit_client::GetWithIdOptions; - -// Connect to a specific actor by its ID -let my_actor_id = "55425f42-82f8-451f-82c1-6227c83c9372"; -let options = GetWithIdOptions::default(); -let doc = client.get_with_id(my_actor_id, [].into(), options) - .expect("Failed to get document") - .connect(); - -// Update content -doc.action("updateContent", vec![json!("Updated content")]) - .await - .expect("Failed to update document"); -``` - -```python Python -# Connect to a specific actor by its ID -my_actor_id = "55425f42-82f8-451f-82c1-6227c83c9372" -doc = await client.get_with_id(my_actor_id) - -await doc.action("updateContent", ["Updated content"]) -``` - - - -It's usually better to use tags for discovery rather than directly using actor IDs. - - -## Calling Actions - -Once connected, calling actor actions are straightforward: - - -```typescript TypeScript -// Call an action -const result = await mathUtils.multiplyByTwo(5); -console.log(result); // 10 - -// Call an action with multiple parameters -await chatRoom.sendMessage("Alice", "Hello everyone!"); - -// Call an action with an object parameter -await gameRoom.updateSettings({ - maxPlayers: 10, - timeLimit: 300, - gameMode: "capture-the-flag" -}); -``` - -```rust Rust -use serde_json::json; - -// Call an action -let result = math_utils.action("multiplyByTwo", vec![json!(5)]) - .await - .expect("Failed to call multiplyByTwo"); -println!("Result: {}", result.as_i64().unwrap()); // 10 - -// Call an action with multiple parameters -chat_room.action("sendMessage", vec![json!("Alice"), json!("Hello everyone!")]) - .await - .expect("Failed to send message"); - -// Call an action with an object parameter -let settings = json!({ - "maxPlayers": 10, - "timeLimit": 300, - "gameMode": "capture-the-flag" -}); -game_room.action("updateSettings", vec![settings]) - .await - .expect("Failed to update settings"); -``` - -```python Python -# Call an action -result = await math_utils.action("multiplyByTwo", [5]) -print(result) # 10 - -# Call an action with multiple parameters -await chat_room.action("sendMessage", ["Alice", "Hello everyone!"]) - -# Call an action with an object parameter -await game_room.action("updateSettings", [{ - "maxPlayers": 10, - "timeLimit": 300, - "gameMode": "capture-the-flag" -}]) -``` - - - -All actor action calls are asynchronous and require `await`, even if the actor's action is not async. - - -## Listening for Events - -Actors can send realtime updates to clients using events: - -### `on(eventName, callback)` - Continuous Listening - -To listen for events that will happen repeatedly: - - -```typescript TypeScript -// Listen for new chat messages -chatRoom.on("newMessage", ({ sender, text, timestamp }) => { - console.log(`${sender}: ${text}`); - updateChatUI(sender, text, timestamp); -}); - -// Listen for game state updates -gameRoom.on("stateUpdate", (gameState) => { - updateGameUI(gameState); -}); -``` - -```rust Rust -use std::sync::Arc; - -// Listen for new chat messages -chat_room.on_event("newMessage", move |args| { - let message = &args[0]; - let sender = message["sender"].as_str().unwrap(); - let text = message["text"].as_str().unwrap(); - println!("{}: {}", sender, text); - // Update UI with message data -}).await; - -// Listen for game state updates -let game_ui = Arc::new(GameUI::new()); -let game_ui_clone = game_ui.clone(); -game_room.on_event("stateUpdate", move |args| { - let game_state = &args[0]; - game_ui_clone.update(game_state); -}).await; -``` - -```python Python -# Listen for new chat messages -def handle_message(message): - sender = message["sender"] - text = message["text"] - print(f"{sender}: {text}") - # Update UI with message data - -chat_room.on_event("newMessage", handle_message) - -# Listen for game state updates -def handle_state_update(game_state): - # Update UI with new game state - update_game_ui(game_state) - -game_room.on_event("stateUpdate", handle_state_update) -``` - - -### `once(eventName, callback)` - One-time Listening - -For events you only need to hear once: - - -```typescript TypeScript -// Listen for when a request is approved -actor.once("requestApproved", () => { - showApprovalNotification(); - unlockFeatures(); -}); -``` - -```rust Rust -// `once` is not implemented in Rust -``` - -```python Python -# Listen for when a request is approved -def handle_approval(): - show_approval_notification() - unlock_features() - -actor.on_event("requestApproved", handle_approval) -``` - - -## Connection Options - -### Authentication and Connection Parameters - -Pass information with your connection using the `params` option: - - -```typescript TypeScript -const chatRoom = await client.chatRoom.get({ channel: "super-secret" }, { - params: { - userId: "1234", - authToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", - displayName: "Alice" - } -}); -``` - -```rust Rust -use serde_json::json; -use rivetkit_client::GetOptions; - -let key = vec![ - "super-secret-channel".to_string(), -]; - -let params = json!({ - "userId": "1234", - "authToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", - "displayName": "Alice" -}); - -let options = GetOptions { - params: Some(params), -}; - -let chat_room = client.get("chatRoom", key, options) - .expect("Failed to get chat room") - .connect(); -``` - -```python Python -chat_room = await client.get( - "chatRoom", - tags=[("channel", "super-secret")], - params={ - "userId": "1234", - "authToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", - "displayName": "Alice" - } -) -``` - - -The actor can access these parameters in the `onBeforeConnect` or `createConnState` hook: - -```typescript -import { actor } from "rivetkit"; - -const chatRoom = actor({ - state: { messages: [] }, - - createConnState: (c, { params }) => { - // Validate authentication token - const { userId, authToken, displayName } = params; - if (!validateToken(userId, authToken)) { - throw new Error("Invalid authentication"); - } - - // Return connection state - return { userId, displayName }; - }, - - actions: { - // ... - } -}); -``` - -Read more about [connection parameters](/concepts/connections). - -### Additional Options - -#### `opts.noCreate` - -Connect only if an actor exists, without creating a new one: - -```typescript -try { - const doc = await client.document.get({ documentId: "doc-123" }, { noCreate: true }); - await doc.doSomething(); -} catch (error) { - console.log("Document doesn't exist"); -} -``` - -## Client Options - - -```typescript TypeScript -// Example with all client options -const client = createClient( - "https://actors.example.com", - { - // Data serialization format - encoding: "cbor", // or "json" - - // Network transports in order of preference - supportedTransports: ["websocket", "sse"] - } -); -``` - -```rust Rust -use rivetkit_client::{Client, EncodingKind, GetOrCreateOptions, TransportKind}; - -// Create client with specific options -let client = Client::new( - "https://actors.example.com", - TransportKind::WebSocket, // or TransportKind::Sse - EncodingKind::Cbor, // or EncodingKind::Json -); - -// Rust does not support accepting multiple transports -``` - -```python Python -from rivetkit_client import AsyncClient as ActorClient - -# Example with all client options -client = ActorClient( - "https://actors.example.com", - "websocket" # or "sse" - "cbor", # or "json" -) - -# Python does not support accepting multiple transports -``` - - -### `encoding` - -`"cbor" | "json"` (optional) - -Specifies the data encoding format used for communication: - -- `"cbor"` (default): Binary format that's more efficient for data transfer -- `"json"`: Text-based format with wider compatibility across environments - -### `supportedTransports` - -`("websocket" | "sse")[]` (optional) - -Configures which network transport mechanisms the client will use to communicate with actors, sorted by priority: - -- `"websocket"`: Real-time bidirectional communication, best for most applications -- `"sse"` (Server-Sent Events): Works in more restricted environments where WebSockets may be blocked - -Default is `["websocket", "sse"]`, which automatically negotiates the best available option. - -## Error Handling - -RivetKit provides specific error types to help you handle different failure scenarios: - -### Action Errors - -When an action fails, it throws an error with details about the failure: - -```typescript -try { - await actor.someAction(); -} catch (error) { - console.error(`Action failed: ${error.code} - ${error.message}`); - // Handle specific error codes - if (error.code === "permission_denied") { - // Handle permission errors - } -} -``` - -These errors can be thrown from within the actor with `UserError`: - -```typescript -import { actor, UserError } from "rivetkit"; - -const documentActor = actor({ - state: { content: "" }, - - actions: { - editDocument: (c, userId, newContent) => { - // Check if user has permission to edit - if (!hasPermission(userId, "edit")) { - throw new UserError("You don't have permission to edit this document", { - code: "permission_denied", - meta: { userId } - }); - } - - c.state.content = newContent; - } - } -}); -``` - -RivetKit doesn't expose internal errors to clients for security, helping to prevent the exposure of sensitive information or internal implementation details. - -### Other Errors - -Other common errors you might encounter: - -- `InternalError`: Error from your actor that's not a subclass of `UserError` -- `ManagerError`: Issues when connecting to or communicating with the actor manager - -## Disconnecting and Cleanup - -The client connection is automatically cleaned up when it goes out of scope. - -If you need to explicitly disconnect: - - -```typescript TypeScript -// Disconnect from the actor -await actor.dispose(); - -// Disconnect the entire client -await client.dispose(); -``` - -```rust Rust -// Disconnect from the actor -actor.disconnect().await; - -// The client will be cleaned up automatically when it goes out of scope -// Or explicitly drop it with: -drop(client); -``` - -```python Python -# Disconnect from the actor -await actor.disconnect() -``` - - -## Offline and Auto-Reconnection - -Clients automatically attempt to reconnect (with [exponential backoff](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/retry-backoff.html)) when disconnected. Actions made while disconnected are queued. - -On reconnection, event subscriptions are reestablished & queued actions are executed. - -This makes your applications resilient to temporary network failures without any extra code. - -## Next Steps - - - - Learn how state works in actors - - - Learn more about actor events - - - Add security to your actors - - - Manage client connections - - diff --git a/docs/concepts/overview.mdx b/docs/concepts/overview.mdx deleted file mode 100644 index cc6e746a4..000000000 --- a/docs/concepts/overview.mdx +++ /dev/null @@ -1,257 +0,0 @@ ---- -title: Introduction -icon: square-info ---- - -import CreateActorCli from "/snippets/create-actor-cli.mdx"; - -Actors combine compute and storage into unified entities for simplified architecture. Actors seamlessly integrate with your existing infrastructure or can serve as a complete standalone solution. - -## Quickstart - -Run this to get started: - - - -## Code Example - -Here's a complete chat room actor that maintains state and handles messages. We'll explore each component in depth throughout this document: - -```typescript chat_room.ts -import { actor } from "rivetkit"; - -// Define a chat room actor -const chatRoom = actor({ - // Initialize state when the actor is first created - createState: () => ({ - messages: [] - }), - - // Define actions clients can call - actions: { - // Action to send a message - sendMessage: (c, sender, text) => { - // Update state - c.state.messages.push({ sender, text }); - - // Broadcast to all connected clients - c.broadcast("newMessage", { sender, text }); - }, - - // Action to get chat history - getHistory: (c) => { - return c.state.messages; - } - } -}); - -export default chatRoom; -``` - -## Using the App - -To start using your actor, create an app and serve it: - -```typescript app.ts -import { setup, serve } from "rivetkit"; -import chatRoom from "./chat_room"; - -// Create the application -const registry = setup({ - use: { chatRoom } -}); - -// Start serving on default port -serve(registry); -``` - -## Key Actor Components - -### State - -Actors maintain state that's stored in memory and automatically persisted. State is defined either as a constant or via a `createState` function: - -```typescript -import { actor } from "rivetkit"; - -// Method 1: State constant -const counter1 = actor({ - state: { count: 0 }, - actions: { - // ... - } -}); - -// Method 2: CreateState function -const counter2 = actor({ - createState: () => ({ count: 0 }), - actions: { - // ... - } -}); -``` - -Update state by modifying `c.state` in your actions: - -```typescript -import { actor } from "rivetkit"; - -const counter = actor({ - state: { count: 0 }, - actions: { - // Example of state update in an action - increment: (c) => { - c.state.count += 1; - return c.state.count; - } - } -}); -``` - -These changes are durable and are automatically persisted across updates, restarts, and crashes. - -Learn more about [state management](/concepts/state). - -### Actions - -Actions are functions defined in your actor configuration that clients & other actors can call: - -```typescript -import { actor } from "rivetkit"; - -const mathUtils = actor({ - state: {}, - actions: { - multiplyByTwo: (c, x) => { - return x * 2; - } - } -}); -``` - -Each action receives a context object (commonly named `c`) as its first parameter, which provides access to state, connections, and other utilities. - -Learn more about [actions](/concepts/actions). - -### Events - -Actors can broadcast events to connected clients: - -```typescript -import { actor } from "rivetkit"; - -const inventory = actor({ - createState: () => ({ - items: [] - }), - - actions: { - addItem: (c, item) => { - // Add to state - c.state.items.push(item); - - // Notify all clients about the new item - c.broadcast("itemAdded", { item }); - } - } -}); -``` - -You can also send events to specific clients: - -```typescript -import { actor } from "rivetkit"; - -const messageService = actor({ - state: {}, - actions: { - sendPrivateMessage: (c, userId, text) => { - // Send to a specific connection - const conn = c.conns.find(conn => conn.params.userId === userId); - if (conn) { - conn.send("privateMessage", { text }); - } - } - } -}); -``` - -Learn more about [events](/concepts/events). - -## Actor Tags - -Tags are key-value pairs attached to actors that serve two purposes: - -1. **Actor Discovery**: Find specific actors using `client.get(tags)` -2. **Organization**: Group related actors for management purposes - -For example, you can query chat rooms by tag like: - -```typescript client.ts -await client.chatRoom.get({ channel: "random" }); -``` - -### Common Tag Patterns - -```typescript -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; - -const client = createClient("http://localhost:8080"); - -// Game room with ID parameter -const gameRoom = await client.gameRoom.get({ roomId: "ABC123" }); - -// User profile with ID -const userProfile = await client.userProfile.get({ profileId: "1234" }); - -// Document with multiple parameters -const document = await client.document.get({ - workspaceId: "team-alpha", - documentId: "budget-2024" -}); -``` - -## Actor Lifecycle - -Actors are created automatically when needed and persist until explicitly shutdown. - -To shut down a actor, use `c.shutdown()` from within an action: - -```typescript -import { actor } from "rivetkit"; - -const chatRoom = actor({ - createState: () => ({ - messages: [] - }), - actions: { - closeRoom: (c) => { - // Do any cleanup needed - c.broadcast("roomClosed"); - - // Shutdown the actor - c.shutdown(); - } - } -}); -``` - -Learn more about the [actor lifecycle](/concepts/lifecycle). - -## Next Steps - - - - Learn how to connect to actors from clients - - - Deep dive into actor state management - - - Learn more about actor actions - - - Learn more about realtime events - - diff --git a/docs/docs.json b/docs/docs.json index 362ac3e6d..7829c3d97 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -41,136 +41,124 @@ "groups": [ { "group": "Getting Started", - "pages": [ - "introduction" - ] + "pages": ["introduction"] }, { "group": "Actors", + "icon": "shapes", "pages": [ -"actors/overview", -{ -"group": "Quickstart", -"icon": "forward", -"pages": [ -"actors/quickstart", -"actors/quickstart-frontend" -] -}, -"actors/state", -"actors/actions", -"actors/events", + "actors/overview", + { + "group": "Quickstart", + "icon": "forward", + "pages": [ + "actors/quickstart-backend", + "actors/quickstart-react" + ] + }, + "actors/state", + "actors/actions", + "actors/events", + "actors/schedule", { "group": "More", "pages": [ -"actors/schedule", - -"actors/lifecycle", -"actors/connections", -"actors/authentication", - { - "group": "Advanced", - "pages": [ -"actors/metadata", -"actors/types" - - ] - } + "actors/communicating-with-actors", + "actors/communicating-between-actors", + "actors/connections", + "actors/lifecycle", + "actors/metadata", + "actors/helper-types", + "actors/external-sql", + "actors/scaling" ] } ] }, - { - "group": "Workflows", - "pages": [ - "workflows/overview" - ] - }, { "group": "Integrations", "pages": [ - "integrations/better-auth", { - "group": "Frameworks", + "group": "Frontend & Clients", + "icon": "code", "pages": [ - "frameworks/react", "clients/javascript", - "clients/rust", - "clients/python" + "clients/react", + "clients/rust" ] }, { - "group": "Deploy", + "group": "Frontend", + "pages": [] + }, + { + "group": "Backend", + "icon": "server", "pages": [ - "platforms/rivet", - "platforms/cloudflare-workers", - "platforms/bun", - "platforms/nodejs" + "integrations/hono", + "integrations/express", + "integrations/elysia", + "integrations/trpc" ] }, { - "group": "Libraries & Services", + "group": "Auth", + "icon": "lock", "pages": [ - "integrations/hono", - "integrations/resend" + "integrations/better-auth" ] }, { - "group": "Drivers", + "group": "Misc", "pages": [ - "drivers/overview", - "drivers/file-system", - "drivers/memory", - "drivers/redis", - "drivers/rivet", - "drivers/cloudflare-workers", - "drivers/build" + "integrations/vitest" ] } ] }, + { + "group": "Reference", + "pages": [ + "general/authentication", + "general/testing", { - "group": "Reference", + "group": "More", "pages": [ - { - "group": "Common Concepts", - "pages": [ - "concepts/cors", - "concepts/external-sql", - "concepts/interacting-with-actors", - "concepts/logging", - "concepts/overview", - "concepts/scaling", - "concepts/testing", - "concepts/edge", - "concepts/topology" - ] - }, - { - "group": "LLM Prompts", - "pages": [ - "llm/cursor", - "llm/windsurf", - "llm/claude", - "llm/docs-as-markdown", - "llm/prompt", - "llm/llms", - "llm/llms-full" - ] - }, + "general/edge", + "general/cors", + "general/logging" + ] + }, { - "group": "API", + "group": "HTTP API", "openapi": { "source": "./openapi.json", - "directory": "api" + "directory": "reference/api" } - }, - "support/enterprise" - ] } + ] + } ] }, - "contextual": { + "_temp": [ + "general/architecture", + "general/registry", + "general/webhooks", + { + "group": "Drivers", + "icon": "database", + "pages": [ + "drivers/overview", + "drivers/rivet", + "drivers/cloudflare-workers", + "drivers/file-system", + "drivers/memory", + "drivers/redis", + "drivers/building-drivers" + ] + } + ], + "contextual": { "options": [ "copy", "view", diff --git a/docs/drivers/build.mdx b/docs/drivers/building-drivers.mdx similarity index 100% rename from docs/drivers/build.mdx rename to docs/drivers/building-drivers.mdx diff --git a/docs/drivers/cloudflare-workers.mdx b/docs/drivers/cloudflare-workers.mdx index c1e522fd8..e69de29bb 100644 --- a/docs/drivers/cloudflare-workers.mdx +++ b/docs/drivers/cloudflare-workers.mdx @@ -1,37 +0,0 @@ ---- -title: Cloudflare Workers (Durable Objects) -sidebarTitle: Durable Objects ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -The Cloudflare Workers Driver is an implementation that uses Cloudflare's Durable Objects for actor state persistence and coordination. It leverages Cloudflare's global network for low-latency, distributed actor systems that can scale automatically. - - - -## Compatibility - -| Platforms | Topologies | -| --------- | ---------- | -| Node.js | Standalone | -| Bun | Coordinate | -| Cloudflare Workers | Partition | -| Rivet | | - -## Usage - -There's no need to explicitly configure drivers when using RivetKit with Cloudflare Workers. The platform package automatically sets up the appropriate drivers. - -See the [Cloudflare Workers Platform](/platforms/cloudflare-workers) documentation for complete setup instructions. - -## Limitations - -The Cloudflare Workers driver has several limitations to be aware of: - -- **Storage Limits**: Storage is limited to Cloudflare's Durable Objects size limits -- **Cost**: Requires Cloudflare Workers Paid plan for Durable Objects usage -- **Platform Lock-in**: Your implementation will be specific to the Cloudflare Workers platform - - - For a platform-agnostic approach with similar global distribution capabilities, consider using [Rivet](/platforms/rivet) instead. - diff --git a/docs/drivers/file-system.mdx b/docs/drivers/file-system.mdx index cd2143994..e69de29bb 100644 --- a/docs/drivers/file-system.mdx +++ b/docs/drivers/file-system.mdx @@ -1,121 +0,0 @@ ---- -title: File System ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -The File System Driver is a simple file-based implementation designed for development and testing environments. It stores all actor state in local files, providing persistence between application restarts. - - - - - The File System Driver is primarily intended for development and testing. For production environments, consider more robust options like Rivet or Cloudflare Workers. - - -## Compatibility - -| Platforms | Topologies | -| --------- | ---------- | -| Node.js | Standalone | -| Bun | Partition | -| Cloudflare Workers | Coordinate | -| Rivet | | - -## Installation - - - - Install the required packages: - - - - ```bash - npm install rivetkit/file-system rivetkit/nodejs - ``` - - - ```bash - yarn add rivetkit/file-system rivetkit/nodejs - ``` - - - ```bash - pnpm add rivetkit/file-system rivetkit/nodejs - ``` - - - ```bash - bun add rivetkit/file-system rivetkit/nodejs - ``` - - - - - - Create a simple server using the File System driver: - - ```typescript src/index.ts - import { serve } from "@rivetkit/nodejs" - import { FileSystemManagerDriver, FileSystemActorDriver, FileSystemGlobalState } from "@rivetkit/file-system"; - - const fsState = new FileSystemGlobalState(); - serve(app, { - topology: "standalone", - drivers: { - manager: new FileSystemManagerDriver(app, fsState), - actor: new FileSystemActorDriver(fsState), - }, - }); - ``` - - - - Start your server: - - - - ```bash - npm run dev - ``` - - - ```bash - yarn dev - ``` - - - ```bash - pnpm dev - ``` - - - ```bash - bun dev - ``` - - - - - -## Features - -The File System driver provides several benefits for development: - -- **Persistence**: Actor state is stored in files and persists between application restarts -- **Durability**: Data is written to disk, providing protection against process crashes -- **Visibility**: State files can be inspected for debugging purposes -- **No External Dependencies**: Doesn't require additional services like Redis - -## Limitations - -The File System driver has several limitations to be aware of: - -- **Single Machine**: Only works within a single machine - not suitable for distributed environments -- **Scalability**: Limited scalability beyond a single instance -- **Coordination**: Limited support for coordinated topology -- **Performance**: File I/O operations may be slower than in-memory alternatives - - - For production environments or applications requiring distributed capabilities, consider using the [Rivet](/platforms/rivet) or [Cloudflare Workers](/platforms/cloudflare-workers) instead. - - diff --git a/docs/drivers/memory.mdx b/docs/drivers/memory.mdx index 7d15b7a80..e69de29bb 100644 --- a/docs/drivers/memory.mdx +++ b/docs/drivers/memory.mdx @@ -1,112 +0,0 @@ ---- -title: Memory ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -The Memory Driver is a simple in-memory implementation designed for development and testing environments. It stores all actor state in memory, which means data is not persisted between application restarts. - - - - - The Memory Driver is not recommended for production environments as it doesn't provide persistence or distributed capabilities. - - -## Compatibility - -| Platforms | Topologies | -| --------- | ---------- | -| Node.js | Standalone | -| Bun | Partition | -| Cloudflare Workers | Coordinate | -| Rivet | | - -## Installation - - - - Install the required packages: - - - - ```bash - npm install rivetkit/memory rivetkit/nodejs - ``` - - - ```bash - yarn add rivetkit/memory rivetkit/nodejs - ``` - - - ```bash - pnpm add rivetkit/memory rivetkit/nodejs - ``` - - - ```bash - bun add rivetkit/memory rivetkit/nodejs - ``` - - - - - - Create a simple server using the Memory driver: - - ```typescript src/index.ts - import { serve } from "@rivetkit/nodejs" - import { MemoryManagerDriver, MemoryActorDriver, MemoryGlobalState } from "@rivetkit/memory"; - - const memoryState = new MemoryGlobalState(); - serve(app, { - topology: "standalone", - drivers: { - manager: new MemoryManagerDriver(app, memoryState), - actor: new MemoryActorDriver(memoryState), - }, - }); - ``` - - - - Start your server: - - - - ```bash - npm run dev - ``` - - - ```bash - yarn dev - ``` - - - ```bash - pnpm dev - ``` - - - ```bash - bun dev - ``` - - - - - -## Limitations - -The Memory driver has several limitations to be aware of: - -- **No Persistence**: All data is stored in memory and lost when the application restarts -- **Single Process**: Only works within a single process - not suitable for distributed environments -- **Scalability**: Cannot scale beyond a single instance -- **Coordination**: Limited support for coordinated topology, as actors can only communicate within the same process - - - For production environments or applications requiring persistence and distributed capabilities, consider using the [Rivet](/platforms/rivet) or [Cloudflare Workers](/platforms/cloudflare-workers) instead. - - diff --git a/docs/drivers/overview.mdx b/docs/drivers/overview.mdx index 622da8e42..a9f572fd1 100644 --- a/docs/drivers/overview.mdx +++ b/docs/drivers/overview.mdx @@ -1,37 +1 @@ ---- -title: Drivers -sidebarTitle: Overview ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -Drivers in RivetKit the infrastructure layer between your actor code and the underlying systems. - - - -## Accessing Driver Context - -Drivers expose a custom driver context for functionality specific to the given driver. This can be accessed as a parameter to `createVars` then later accessed with `c.vars`. Read more about the [`createVars` lifecycle hook](/concepts/lifecycle). - -## Available Drivers - -Choose a driver based on your deployment needs - [Memory](/drivers/memory) for development, [Rivet](/drivers/rivet) or [Cloudflare Workers](/drivers/cloudflare-workers) for production environments, and [Redis](/drivers/redis) for specialized self-hosted scenarios. - - - - Local file system driver for development and testing with persistent storage. Stores actor state in files for durability between restarts. - - - In-memory driver for development and testing. Simple and lightweight with no external dependencies. - - - Self-hosted option for custom deployments where you need fine-grained control over your infrastructure. Suitable for specialized deployment scenarios. - - - Fully-managed cloud platform with built-in scaling, deployment, and monitoring. Recommended for production deployments. - - - Edge computing platform for global distribution and low latency. Recommended for production deployments. - - - +TODO: Comparison diff --git a/docs/drivers/redis.mdx b/docs/drivers/redis.mdx index 9d191d95b..e69de29bb 100644 --- a/docs/drivers/redis.mdx +++ b/docs/drivers/redis.mdx @@ -1,160 +0,0 @@ ---- -title: Redis ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -The Redis Driver is a production-ready implementation that uses Redis for actor state persistence, coordination, and communication. It supports distributed actor systems and enables horizontal scaling across multiple instances. - - - - - RivetKit requires AOF (Append Only File) persistence to be enabled on your Redis server. See the [Redis Persistence Documentation](https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/#append-only-file) for setup instructions. - - -## Compatibility - -| Platforms | Topologies | -| --------- | ---------- | -| Node.js | Standalone | -| Bun | Coordinate | -| Cloudflare Workers | Partition | -| Rivet | | - -## Installation - - - - Install the required packages: - - - - ```bash - npm install rivetkit/redis rivetkit/nodejs ioredis - ``` - - - ```bash - yarn add rivetkit/redis rivetkit/nodejs ioredis - ``` - - - ```bash - pnpm add rivetkit/redis rivetkit/nodejs ioredis - ``` - - - ```bash - bun add rivetkit/redis rivetkit/nodejs ioredis - ``` - - - - - - Create a Redis connection and set up your server: - - ```typescript src/index.ts - import { serve } from "@rivetkit/nodejs" - import { RedisManagerDriver } from "@rivetkit/redis/manager"; - import { RedisActorDriver } from "@rivetkit/redis/actor"; - import { RedisCoordinateDriver } from "@rivetkit/redis/coordinate"; - import Redis from "ioredis"; - - // Create a Redis connection - const redis = new Redis(); - - serve(app, { - topology: "coordinate", // Can be "standalone" or "coordinate" - drivers: { - manager: new RedisManagerDriver(redis), - actor: new RedisActorDriver(redis), - coordinate: new RedisCoordinateDriver(redis), - }, - }); - ``` - - - - Start your server: - - - - ```bash - npm run dev - ``` - - - ```bash - yarn dev - ``` - - - ```bash - pnpm dev - ``` - - - ```bash - bun dev - ``` - - - - - -## Redis Configuration - -The Redis driver requires an [ioredis](https://github.com/redis/ioredis) connection instance when creating the drivers. Custom configuration parameters can be passed like: - -```typescript -import Redis from "ioredis"; -import { RedisManagerDriver } from "@rivetkit/redis/manager"; -import { RedisActorDriver } from "@rivetkit/redis/actor"; -import { RedisCoordinateDriver } from "@rivetkit/redis/coordinate"; - -// Create a Redis connection -const redis = new Redis({ - host: "localhost", - port: 6379, - password: "foobar", -}); - -// Create the Redis drivers -const managerDriver = new RedisManagerDriver(redis); -const actorDriver = new RedisActorDriver(redis); -const coordinateDriver = new RedisCoordinateDriver(redis); -``` - - - See the [ioredis documentation](https://github.com/redis/ioredis#connect-to-redis) for more connection configuration options. - - -## Hosted Redis Providers - -For production deployments, consider using these managed Redis providers: - -- [Amazon ElastiCache](https://aws.amazon.com/elasticache/) - AWS managed Redis service -- [Azure Cache for Redis](https://azure.microsoft.com/en-us/products/cache) - Microsoft Azure managed Redis service -- [Google Cloud Memorystore](https://cloud.google.com/memorystore) - Google Cloud managed Redis service -- [Upstash](https://upstash.com/) - Serverless Redis with pay-per-use pricing -- [Redis Cloud](https://redis.com/redis-enterprise-cloud/overview/) - Official Redis offering with enterprise features -- [Dragonfly](https://www.dragonflydb.io/) - Redis-compatible database with higher performance - - - For local development where persistence isn't required, the [Memory Driver](/drivers/memory) offers a simpler setup with no external dependencies. - - -## Limitations - -The Redis driver has several limitations to be aware of: - -- **Very Limited Storage**: Storage is limited to the available memory of your Redis server -- **Single Region Support**: Only supports deployment within a single region, not globally distributed -- **Performance Bottleneck**: All operations go through Redis, which can become a bottleneck under high load -- **Single Point of Failure**: Redis becomes a single point of failure if not configured with proper failover mechanisms - - - For multi-region support, built-in redundancy, and unlimited storage capacity, consider using [Rivet](/platforms/rivet) or [Cloudflare Workers](/platforms/cloudflare-workers) instead. - - diff --git a/docs/drivers/rivet.mdx b/docs/drivers/rivet.mdx index 84542ff77..e69de29bb 100644 --- a/docs/drivers/rivet.mdx +++ b/docs/drivers/rivet.mdx @@ -1,38 +0,0 @@ ---- -title: Rivet ---- - -import DriverNote from '/snippets/driver-note.mdx'; - -The Rivet Driver is a production-ready implementation that uses Rivet's managed infrastructure for actor state persistence, coordination, and communication. It provides a fully managed environment for RivetKit with built-in scaling, monitoring, and global distribution. - - - -## Compatibility - -| Platforms | Topologies | -| --------- | ---------- | -| Node.js | Standalone | -| Bun | Coordinate | -| Cloudflare Workers | Partition | -| Rivet | | - -## Usage - -There's no need to explicitly configure drivers when using RivetKit with Rivet. The platform package automatically sets up the appropriate drivers based on your project configuration. - -See the [Rivet Platform](/platforms/rivet) documentation for complete setup instructions. - -## Benefits - -The Rivet driver offers several advantages: - -- **Fully Managed**: No infrastructure to provision or maintain -- **Global Distribution**: Deploy actors globally with automatic region selection -- **Monitoring**: Built-in observability and performance metrics -- **Cost Efficiency**: Pay only for what you use with no upfront costs -- **Partition Topology Support**: Optimized for the Partition topology for efficient scaling - - - Rivet is a great choice for production deployments, offering enterprise-grade reliability without the operational overhead. - diff --git a/docs/frameworks/react.mdx b/docs/frameworks/react.mdx deleted file mode 100644 index df00004a6..000000000 --- a/docs/frameworks/react.mdx +++ /dev/null @@ -1,243 +0,0 @@ ---- -title: React -icon: react ---- - -import MvpWarning from "/snippets/mvp-warning.mdx"; -import StepDefineActor from "/snippets/step-define-actor.mdx"; -import StepRunStudio from "/snippets/step-run-studio.mdx"; -import StepDeploy from "/snippets/step-deploy.mdx"; -import SetupNextSteps from "/snippets/setup-next-steps.mdx"; - -Learn how to create realtime, stateful React applications with RivetKit's actor model. - - - -## Quickstart - - - - Create a new React project with TypeScript support: - - - ```sh npm - npm create vite@latest my-app -- --template react-ts - ``` - - ```sh pnpm - pnpm create vite@latest my-app --template react-ts - ``` - - ```sh yarn - yarn create vite my-app --template react-ts - ``` - - ```sh bun - bunx create-vite@latest my-app --template react-ts - ``` - - - - - Navigate to your React project and install the RivetKit client and React packages: - - - ```sh npm - cd my-app - npm install rivetkit rivetkit/react - ``` - - ```sh pnpm - cd my-app - pnpm add rivetkit rivetkit/react - ``` - - ```sh yarn - cd my-app - yarn add rivetkit rivetkit/react - ``` - - ```sh bun - cd my-app - bun add rivetkit rivetkit/react - ``` - - - - - - - Now modify your `src/App.tsx` file to connect to your RivetKit backend: - - ```tsx src/App.tsx - import { createClient } from "rivetkit/client"; - import { createReactRivetKit } from "@rivetkit/react"; - import type { App } from "../actors/app"; - import React, { useState } from "react"; - - // Replace with your endpoint URL after deployment - const client = createClient("http://localhost:8080"); - const { useActor, useActorEvent } = createReactRivetKit(client); - - function App() { - // Connect to counter actor - const [{ actor }] = useActor("counter"); - const [count, setCount] = useState(0); - - // Listen to count updates - useActorEvent({ actor, event: "newCount" }, (newCount) => { - setCount(newCount); - }); - - return ( -
-

Count: {count}

- -
- ); - } - - // For Vite + React 18 - import { createRoot } from 'react-dom/client'; - const root = createRoot(document.getElementById('root')!); - root.render(); - ``` -
- - - - - In a separate terminal, start your React app: - - - ```sh npm - cd my-app - npm run dev - ``` - - ```sh pnpm - cd my-app - pnpm run dev - ``` - - ```sh yarn - cd my-app - yarn dev - ``` - - ```sh bun - cd my-app - bun run dev - ``` - - - Your React app should now be running and connected to your RivetKit backend. Open your browser to the URL shown in the terminal (typically http://localhost:5173) to see your application. - - -
- -## API Reference - -The React integration leverages React's hooks system to provide an idiomatic way to interact with RivetKit in React applications. - -### `createReactRivetKit` - -The main function that creates React hooks for interacting with RivetKit. It takes a client instance and returns hook functions. - -```tsx -const { useActor, useActorEvent } = createReactRivetKit(client); -``` - -#### Parameters - -- `client`: The RivetKit client created with `createClient`. - -#### Returns - -An object containing React hooks: -- `useActor`: Hook for connecting to actors -- `useActorEvent`: Hook for subscribing to actor events - -### `useActor` - -Hook that connects to a actor, creating it if necessary. It manages the actor connection and returns the actor handle. - -```tsx -const [{ actor, error, isLoading, state }] = useActor(actorName, options); -``` - -#### Parameters - -- `actorName`: The name of the actor to connect to (string). -- `options`: Optional connection options (same options as `client.actorName.get()`). - - `id`: String identifier for the actor instance. - - `tags`: Key-value pairs for actor identification. - - `params`: Parameters to pass during connection. - - `noCreate`: Boolean to prevent actor creation if it doesn't exist. - -#### Returns - -Returns an array with a single object containing: -- `actor`: The actor handle if connected, or `undefined` if still connecting. -- `error`: Any error that occurred during connection. -- `isLoading`: Boolean indicating if the connection is in progress. -- `state`: String representing the internal connection state ("init", "creating", "created", or "error"). - -### `useActorEvent` - -Hook that subscribes to events from a actor. - -```tsx -useActorEvent({ actor, event }, cb); -``` - -#### Parameters - -- `opts`: Object containing: - - `actor`: The actor handle from `useActor`, or undefined. - - `event`: The name of the event to subscribe to. -- `cb`: Function called when the event is fired. The arguments passed to this function depend on the event type. - -#### Returns - -This hook doesn't return a value. The subscription is automatically managed by the hook lifecycle. - -## Example Usage - -### Simple Counter - -```tsx -import { createClient } from "rivetkit/client"; -import { createReactRivetKit } from "@rivetkit/react"; -import type { App } from "../actors/app"; -import { useState } from "react"; - -// Connect to RivetKit -const client = createClient("http://localhost:8080"); -const { useActor, useActorEvent } = createReactRivetKit(client); - -function Counter() { - // Get actor and track count - const [{ actor }] = useActor("counter"); - const [count, setCount] = useState(0); - - // Listen for count updates - useActorEvent({ actor, event: "newCount" }, setCount); - - return ( -
-

Count: {count}

- -
- ); -} -``` - - diff --git a/docs/concepts/topology.mdx b/docs/general/architecture.mdx similarity index 97% rename from docs/concepts/topology.mdx rename to docs/general/architecture.mdx index 95ce856b7..7210e41b4 100644 --- a/docs/concepts/topology.mdx +++ b/docs/general/architecture.mdx @@ -1,7 +1,4 @@ ---- -title: Topologies -icon: list-tree ---- +TODO: Architecture RivetKit supports three topologies that define how actors are distributed and scale. diff --git a/docs/general/authentication.mdx b/docs/general/authentication.mdx new file mode 100644 index 000000000..b65738e71 --- /dev/null +++ b/docs/general/authentication.mdx @@ -0,0 +1,397 @@ +--- +title: Authentication +description: Secure your actors with authentication and authorization +icon: fingerprint +--- + +RivetKit provides multiple authentication methods to secure your actors. Use `onAuth` for server-side validation or `onBeforeConnect` for actor-level authentication. + +## Authentication Methods + +### onAuth Hook (Recommended) + +The `onAuth` hook runs on the HTTP server before clients can access actors. This is the preferred method for most authentication scenarios. + +```typescript +import { actor, UserError } from "@rivetkit/actor"; + +const chatRoom = actor({ + onAuth: async (opts) => { + const { req, params, intents } = opts; + + // Extract token from params or headers + const token = params.authToken || req.headers.get("Authorization"); + + if (!token) { + throw new UserError("Authentication required"); + } + + // Validate token and return user data + const user = await validateJWT(token); + return { + userId: user.id, + role: user.role, + permissions: user.permissions + }; + }, + + state: { messages: [] }, + + actions: { + sendMessage: (c, text: string) => { + // Access auth data via c.conn.auth + const { userId, role } = c.conn.auth; + + if (role !== "member") { + throw new UserError("Insufficient permissions"); + } + + const message = { + id: crypto.randomUUID(), + userId, + text, + timestamp: Date.now(), + }; + + c.state.messages.push(message); + c.broadcast("newMessage", message); + return message; + } + } +}); +``` + +### `onBeforeConnect` Hook + +Use `onBeforeConnect` when you need access to actor state for authentication: + +```typescript +const userProfileActor = actor({ + // Empty onAuth allows all requests to reach the actor + onAuth: () => ({}), + + state: { + ownerId: null as string | null, + isPrivate: false + }, + + onBeforeConnect: async (c, opts) => { + const { params } = opts; + const userId = await validateUser(params.token); + + // Check if user can access this profile + if (c.state.isPrivate && c.state.ownerId !== userId) { + throw new UserError("Access denied to private profile"); + } + }, + + createConnState: (c, opts) => { + return { userId: opts.params.userId }; + }, + + actions: { + updateProfile: (c, data) => { + // Check ownership + if (c.state.ownerId !== c.conn.state.userId) { + throw new UserError("Only owner can update profile"); + } + + // Update profile... + } + } +}); +``` + + +Prefer `onAuth` over `onBeforeConnect` when possible, as `onAuth` runs on the HTTP server and uses fewer actor resources. + + +## Connection Parameters + +Pass authentication data when connecting: + +```typescript +// Client side +const chat = client.chatRoom.getOrCreate(["general"]); +const connection = chat.connect({ + authToken: "jwt-token-here", + userId: "user-123" +}); + +// Or with action calls +const counter = client.counter.getOrCreate(["user-counter"], { + authToken: "jwt-token-here" +}); +``` + +## Intent-Based Authentication (Experimental) + +The `onAuth` hook receives an `intents` parameter indicating what the client wants to do: + +```typescript +const secureActor = actor({ + onAuth: async (opts) => { + const { intents, params } = opts; + + // Different validation based on intent + if (intents.has("action")) { + // Requires higher privileges for actions + return await validateAdminToken(params.token); + } else if (intents.has("connect")) { + // Lower privileges for connections/events + return await validateUserToken(params.token); + } + + throw new UserError("Unknown intent"); + }, + + actions: { + adminAction: (c) => { + // Only accessible with admin token + return "Admin action performed"; + } + } +}); +``` + +## Error Handling + +### Authentication Errors + +Use specific error types for different authentication failures: + +```typescript +import { UserError, Unauthorized, Forbidden } from "@rivetkit/actor/errors"; + +const protectedActor = actor({ + onAuth: async (opts) => { + const token = opts.params.authToken; + + if (!token) { + throw new Unauthorized("Authentication token required"); + } + + try { + const user = await validateToken(token); + return user; + } catch (error) { + if (error.name === "TokenExpired") { + throw new Unauthorized("Token has expired"); + } + throw new Unauthorized("Invalid authentication token"); + } + }, + + actions: { + adminOnly: (c) => { + if (c.conn.auth.role !== "admin") { + throw new Forbidden("Admin access required"); + } + return "Admin content"; + } + } +}); +``` + +### Client Error Handling + +Handle authentication errors on the client: + +```typescript +try { + const result = await protectedActor.adminOnly(); +} catch (error) { + if (error.code === "UNAUTHORIZED") { + // Redirect to login + window.location.href = "/login"; + } else if (error.code === "FORBIDDEN") { + // Show permission denied message + showError("You don't have permission for this action"); + } +} +``` + +## Integration with Auth Providers + +### Better Auth Integration + + + + Complete integration guide for Better Auth + + + +### JWT Authentication + +```typescript +import { actor, UserError } from "@rivetkit/actor"; +import jwt from "jsonwebtoken"; + +const jwtActor = actor({ + onAuth: async (opts) => { + const token = opts.params.jwt || + opts.req.headers.get("Authorization")?.replace("Bearer ", ""); + + if (!token) { + throw new UserError("JWT token required"); + } + + try { + const payload = jwt.verify(token, process.env.JWT_SECRET!); + return { + userId: payload.sub, + role: payload.role, + permissions: payload.permissions || [] + }; + } catch (error) { + throw new UserError("Invalid or expired JWT token"); + } + }, + + actions: { + protectedAction: (c, data) => { + const { permissions } = c.conn.auth; + + if (!permissions.includes("write")) { + throw new UserError("Write permission required"); + } + + // Perform action... + return { success: true }; + } + } +}); +``` + +### API Key Authentication + +```typescript +const apiActor = actor({ + onAuth: async (opts) => { + const apiKey = opts.params.apiKey || + opts.req.headers.get("X-API-Key"); + + if (!apiKey) { + throw new UserError("API key required"); + } + + // Validate with your API service + const response = await fetch(`${process.env.AUTH_SERVICE}/validate`, { + method: "POST", + headers: { "X-API-Key": apiKey } + }); + + if (!response.ok) { + throw new UserError("Invalid API key"); + } + + const user = await response.json(); + return { + userId: user.id, + tier: user.tier, + rateLimit: user.rateLimit + }; + }, + + actions: { + premiumAction: (c) => { + if (c.conn.auth.tier !== "premium") { + throw new UserError("Premium subscription required"); + } + + return "Premium content"; + } + } +}); +``` + +## Role-Based Access Control + +Implement RBAC with helper functions: + +```typescript +// auth-helpers.ts +export function requireRole(requiredRole: string) { + return (c: any) => { + const userRole = c.conn.auth.role; + const roleHierarchy = { "user": 1, "moderator": 2, "admin": 3 }; + + if (roleHierarchy[userRole] < roleHierarchy[requiredRole]) { + throw new UserError(`${requiredRole} role required`); + } + }; +} + +export function requirePermission(permission: string) { + return (c: any) => { + const permissions = c.conn.auth.permissions || []; + if (!permissions.includes(permission)) { + throw new UserError(`Permission '${permission}' required`); + } + }; +} + +// usage in actor +const forumActor = actor({ + onAuth: async (opts) => { + // ... authenticate and return user with role/permissions + }, + + actions: { + deletePost: (c, postId: string) => { + requireRole("moderator")(c); + // Delete post logic... + }, + + editPost: (c, postId: string, content: string) => { + requirePermission("edit_posts")(c); + // Edit post logic... + } + } +}); +``` + +## Testing Authentication + +Mock authentication for testing: + +```typescript +// test helpers +export function createMockAuth(userData: any) { + return { + onAuth: async () => userData + }; +} + +// in tests +describe("Protected Actor", () => { + it("allows admin actions", async () => { + const mockActor = { + ...protectedActor, + ...createMockAuth({ role: "admin", userId: "123" }) + }; + + const result = await mockActor.adminOnly(); + expect(result).toBe("Admin content"); + }); + + it("denies non-admin actions", async () => { + const mockActor = { + ...protectedActor, + ...createMockAuth({ role: "user", userId: "123" }) + }; + + await expect(mockActor.adminOnly()).rejects.toThrow("Admin access required"); + }); +}); +``` + +## Best Practices + +1. **Use onAuth**: Prefer `onAuth` over `onBeforeConnect` for most authentication +2. **Validate Early**: Authenticate at the HTTP server level when possible +3. **Specific Errors**: Use appropriate error types (Unauthorized, Forbidden) +4. **Rate Limiting**: Consider rate limiting in your authentication logic +5. **Token Refresh**: Handle token expiration gracefully on the client +6. **Audit Logging**: Log authentication events for security monitoring +7. **Least Privilege**: Only grant the minimum permissions needed diff --git a/docs/general/cors.mdx b/docs/general/cors.mdx new file mode 100644 index 000000000..ee3899e30 --- /dev/null +++ b/docs/general/cors.mdx @@ -0,0 +1,302 @@ +--- +title: Cross-Origin Resource Sharing +sidebarTitle: CORS +icon: share-nodes +--- + +Cross-Origin Resource Sharing (CORS) is a security mechanism that allows a web application running at one origin to access resources from a different origin. Without CORS, browsers block cross-origin HTTP requests by default as a security measure. + +You'll need to configure CORS when: + +- **Local Development**: You're developing locally and your client runs on a different port than your actor service +- **Different Domain**: Your frontend application is hosted on a different domain than your actor service + +## Registry-Level CORS + +Configure CORS directly in your registry setup for simple cases: + +```typescript +import { setup } from "@rivetkit/actor"; +import counter from "./counter"; + +const registry = setup({ + use: { counter }, + cors: { + origin: "https://yourdomain.com", + credentials: true + } +}); +``` + +This approach works well for basic setups but has limitations for complex scenarios. + +## Router-Level CORS (Recommended) + +For production applications, configure CORS at the router level for maximum control: + +```typescript +import { registry } from "./registry"; +import { Hono } from "hono"; +import { cors } from "hono/cors"; +import { ALLOWED_PUBLIC_HEADERS } from "@rivetkit/actor"; + +const { serve } = registry.createServer(); +const app = new Hono(); + +app.use("*", cors({ + origin: ["http://localhost:3000", "https://myapp.com"], + allowHeaders: [ + "Authorization", + "Content-Type", + ...ALLOWED_PUBLIC_HEADERS + ], + allowMethods: ["POST", "GET", "OPTIONS"], + exposeHeaders: ["Content-Length"], + maxAge: 600, + credentials: true, +})); + +serve(app); +``` + +### Required Headers for RivetKit + +RivetKit requires specific headers for communication. Always include `ALLOWED_PUBLIC_HEADERS`: + +```typescript +import { ALLOWED_PUBLIC_HEADERS } from "@rivetkit/actor"; + +// ALLOWED_PUBLIC_HEADERS includes: +// - "Content-Type" +// - "User-Agent" +// - "X-RivetKit-Query" +// - "X-RivetKit-Encoding" +// - "X-RivetKit-Conn-Params" +// - "X-RivetKit-Actor" +// - "X-RivetKit-Conn" +// - "X-RivetKit-Conn-Token" + +const corsConfig = { + allowHeaders: [ + "Authorization", // For your auth tokens + ...ALLOWED_PUBLIC_HEADERS // Required RivetKit headers + ] +}; +``` + + +Without `ALLOWED_PUBLIC_HEADERS`, RivetKit clients won't be able to communicate with your actors from the browser. + + +## Framework-Specific Examples + +### Express.js + +```typescript +import express from "express"; +import cors from "cors"; +import { ALLOWED_PUBLIC_HEADERS } from "@rivetkit/actor"; +import { registry } from "./registry"; + +const { handler } = registry.createServer(); +const app = express(); + +app.use(cors({ + origin: ["http://localhost:3000", "https://myapp.com"], + allowedHeaders: [ + "Authorization", + "Content-Type", + ...ALLOWED_PUBLIC_HEADERS + ], + credentials: true, +})); + +app.use("/registry", handler); +app.listen(8080); +``` + +### Elysia + +```typescript +import { Elysia } from "elysia"; +import { cors } from "@elysiajs/cors"; +import { ALLOWED_PUBLIC_HEADERS } from "@rivetkit/actor"; +import { registry } from "./registry"; + +const { handler } = registry.createServer(); + +const app = new Elysia() + .use(cors({ + origin: ["http://localhost:3000", "https://myapp.com"], + allowedHeaders: [ + "Authorization", + "Content-Type", + ...ALLOWED_PUBLIC_HEADERS + ], + credentials: true, + })) + .mount("/registry", handler) + .listen(8080); +``` + +## Configuration Options + +### `origin` + +`string | string[] | (origin: string) => boolean | string` + +Specifies which domains can access your resources: + +```typescript +// Single domain +origin: "https://example.com" + +// Multiple domains +origin: ["https://app.com", "https://admin.com"] + +// Dynamic validation +origin: (origin) => { + return origin?.endsWith('.example.com') ? origin : false; +} + +// All domains (not recommended for production) +origin: "*" +``` + +### `allowMethods` + +`string[]` + +HTTP methods clients are allowed to use: + +```typescript +allowMethods: ["GET", "POST", "OPTIONS"] // Common for RivetKit +``` + +### `allowHeaders` + +`string[]` + +Headers that clients can send in requests: + +```typescript +allowHeaders: [ + "Authorization", // Your auth headers + "Content-Type", // Standard content type + "X-API-Key", // Custom API key header + ...ALLOWED_PUBLIC_HEADERS // Required RivetKit headers +] +``` + +### `credentials` + +`boolean` + +Whether to allow credentials (cookies, auth headers): + +```typescript +credentials: true // Required for authentication +``` + + +When `credentials: true`, you cannot use `origin: "*"`. Specify exact origins instead. + + +### `maxAge` + +`number` + +How long browsers cache CORS preflight responses (in seconds): + +```typescript +maxAge: 600 // Cache for 10 minutes +``` + +### `exposeHeaders` + +`string[]` + +Server headers that browsers can access: + +```typescript +exposeHeaders: ["Content-Length", "X-Request-Id"] +``` + +## Development vs Production + +### Development Setup + +For local development, allow localhost origins: + +```typescript +const isDev = process.env.NODE_ENV !== "production"; + +const corsConfig = { + origin: isDev + ? ["http://localhost:3000", "http://localhost:5173"] + : ["https://myapp.com"], + allowHeaders: ["Authorization", ...ALLOWED_PUBLIC_HEADERS], + credentials: true, +}; +``` + +### Production Setup + +For production, be restrictive with origins: + +```typescript +const corsConfig = { + origin: [ + "https://myapp.com", + "https://www.myapp.com", + "https://admin.myapp.com" + ], + allowHeaders: ["Authorization", ...ALLOWED_PUBLIC_HEADERS], + credentials: true, + maxAge: 3600, // Cache for 1 hour +}; +``` + +## Troubleshooting + +### Common CORS Errors + +**"Access to fetch blocked by CORS policy"** +- Add your frontend's origin to the `origin` list +- Ensure `ALLOWED_PUBLIC_HEADERS` are included in `allowHeaders` + +**"Request header not allowed"** +- Add the missing header to `allowHeaders` +- Include `ALLOWED_PUBLIC_HEADERS` in your configuration + +**"Credentials mode mismatch"** +- Set `credentials: true` in CORS config +- Cannot use `origin: "*"` with credentials + +### Debug CORS Issues + +Enable CORS logging to debug issues: + +```typescript +// Log CORS requests in development +if (process.env.NODE_ENV === "development") { + app.use("*", async (c, next) => { + console.log("CORS request:", { + origin: c.req.header("Origin"), + method: c.req.method, + headers: Object.fromEntries(c.req.headers.entries()) + }); + await next(); + }); +} +``` + +## Best Practices + +1. **Use Router-Level CORS**: More flexible than registry-level configuration +2. **Include ALLOWED_PUBLIC_HEADERS**: Required for RivetKit communication +3. **Specify Exact Origins**: Avoid wildcards in production +4. **Enable Credentials**: Needed for authentication +5. **Cache Preflight Requests**: Use appropriate `maxAge` values +6. **Environment-Specific Config**: Different settings for dev/prod + diff --git a/docs/concepts/edge.mdx b/docs/general/edge.mdx similarity index 78% rename from docs/concepts/edge.mdx rename to docs/general/edge.mdx index 535133a97..9efb0c71f 100644 --- a/docs/concepts/edge.mdx +++ b/docs/general/edge.mdx @@ -35,16 +35,16 @@ const actor = await client.example.get({ }); ``` -See [Create & Manage Actors](/docs/manage) for more information. +See [Create & Manage Actors](/actors/communicating-with-actors) for more information. ## Available regions -See available regions [here](/docs/regions). +See available regions [here](/general/edge.mdx). ### Fetching region list It's common to need to display a list of available regions in your application. -To fetch a full list of regions, you can use the `GET https://api.rivet.gg/regions` HTTP endpoint. See API documentation [here](/docs/api/actor/regions/list). +When deployed to Rivet, you can fetch a full list of regions with the `GET https://api.rivet.gg/regions` HTTP endpoint. See API documentation [here](https://rivet.gg/docs/api/actor/regions/list). We don't recommend hard-coding the region list. This allows you to develop your application with a local development cluster. diff --git a/docs/concepts/logging.mdx b/docs/general/logging.mdx similarity index 97% rename from docs/concepts/logging.mdx rename to docs/general/logging.mdx index ce10feb15..c31856863 100644 --- a/docs/concepts/logging.mdx +++ b/docs/general/logging.mdx @@ -46,7 +46,7 @@ Consider this example: ```typescript structured_logging.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -64,7 +64,7 @@ const counter = actor({ ``` ```typescript unstructured_logging.ts -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -92,7 +92,7 @@ Additionally, structured logs can be parsed and queried at scale using tools lik The logger is available in all lifecycle hooks: ```typescript -import { actor } from "rivetkit"; +import { actor } from "@rivetkit/actor"; const loggingExample = actor({ state: { events: [] }, diff --git a/docs/general/registry.mdx b/docs/general/registry.mdx new file mode 100644 index 000000000..1636f8b81 --- /dev/null +++ b/docs/general/registry.mdx @@ -0,0 +1,293 @@ +--- +title: Registry +description: Configure and manage your actor registry +icon: list +--- + +The registry is the central configuration hub for your RivetKit application. It defines which actors are available and how your application runs. + +## Basic Setup + +Create a registry by importing your actors and using the `setup` function: + +```typescript +import { setup } from "@rivetkit/actor"; +import { counterActor } from "./actors/counter"; +import { chatRoomActor } from "./actors/chat-room"; + +export const registry = setup({ + use: { + counter: counterActor, + chatRoom: chatRoomActor, + }, +}); +``` + +## Creating Servers + +### Development Server + +For development, create and run a server directly: + +```typescript +import { registry } from "./registry"; + +// Start a development server +registry.runServer({ + driver: { + topology: "standalone", + actor: { type: "memory" }, + manager: { type: "memory" }, + }, +}); +``` + +### Production Setup + +For production, get the handler and integrate with your framework: + +```typescript +import { registry } from "./registry"; +import { Hono } from "hono"; + +// Create server components +const { client, hono, handler, serve } = registry.createServer({ + driver: { + topology: "partition", + actor: { type: "redis", url: "redis://localhost:6379" }, + manager: { type: "redis", url: "redis://localhost:6379" }, + }, +}); + +// Use with Hono +const app = new Hono(); +app.route("/registry", hono); + +// Or use the handler directly +app.all("/registry/*", handler); + +// Start the server +serve(app); +``` + +## Configuration Options + +### Driver Configuration + +The driver configuration determines how actors are stored and managed: + +```typescript +const { client } = registry.createServer({ + driver: { + // Topology: how actors are distributed + topology: "standalone", // "standalone" | "partition" | "coordinate" + + // Actor storage + actor: { + type: "memory", // "memory" | "file-system" | "redis" | "rivet" + // Additional driver-specific options + }, + + // Manager coordination + manager: { + type: "memory", // "memory" | "redis" | "rivet" + // Additional driver-specific options + }, + }, +}); +``` + +### Topology Options + +- **`standalone`**: Single process, good for development +- **`partition`**: Distributed actors, good for production scaling +- **`coordinate`**: Peer-to-peer coordination, good for high availability + +### Storage Drivers + +- **`memory`**: In-memory storage, data lost on restart +- **`file-system`**: Persistent file-based storage +- **`redis`**: Redis-backed persistence and coordination +- **`rivet`**: Rivet platform integration + +### CORS Configuration + +Configure CORS for browser clients: + +```typescript +registry.runServer({ + cors: { + origin: ["https://myapp.com", "https://staging.myapp.com"], + credentials: true, + }, +}); +``` + +### Request Limits + +Configure request size limits: + +```typescript +registry.runServer({ + maxIncomingMessageSize: 1024 * 1024, // 1MB limit +}); +``` + +## Worker Mode + +For distributed topologies, you can create worker instances: + +```typescript +// Manager instance (handles routing) +const { hono: managerHono } = registry.createServer({ + driver: { topology: "partition", /* ... */ }, +}); + +// Worker instance (runs actors) +const { hono: workerHono } = registry.createWorker({ + driver: { topology: "partition", /* ... */ }, +}); +``` + +## Type Safety + +The registry provides full type safety for your client: + +```typescript +// TypeScript knows about your actors +const counter = client.counter.getOrCreate(["my-counter"]); +const chatRoom = client.chatRoom.getOrCreate(["general"]); + +// Action calls are type-checked +const count: number = await counter.increment(5); +``` + +## Testing Configuration + +Use memory drivers for testing: + +```typescript +// test-registry.ts +export const testRegistry = setup({ + use: { + counter: counterActor, + chatRoom: chatRoomActor, + }, +}); + +// In your tests +const { client } = testRegistry.createServer({ + driver: { + topology: "standalone", + actor: { type: "memory" }, + manager: { type: "memory" }, + }, +}); +``` + +## Environment-Specific Configuration + +Use environment variables to configure different environments: + +```typescript +const isProd = process.env.NODE_ENV === "production"; +const redisUrl = process.env.REDIS_URL || "redis://localhost:6379"; + +export const registry = setup({ + use: { + counter: counterActor, + chatRoom: chatRoomActor, + }, +}); + +// Environment-specific server creation +export function createAppServer() { + return registry.createServer({ + driver: isProd + ? { + topology: "partition", + actor: { type: "redis", url: redisUrl }, + manager: { type: "redis", url: redisUrl }, + } + : { + topology: "standalone", + actor: { type: "memory" }, + manager: { type: "memory" }, + }, + cors: { + origin: isProd ? "https://myapp.com" : "*", + }, + }); +} +``` + +## Best Practices + +### Registry Organization + +Keep your registry clean and organized: + +```typescript +// actors/index.ts - Export all actors +export { counterActor } from "./counter"; +export { chatRoomActor } from "./chat-room"; +export { gameActor } from "./game"; + +// registry.ts - Import and configure +import { setup } from "@rivetkit/actor"; +import * as actors from "./actors"; + +export const registry = setup({ + use: actors, +}); +``` + +### Actor Naming + +Use consistent naming conventions: + +```typescript +export const registry = setup({ + use: { + // Use camelCase for actor names + counter: counterActor, + chatRoom: chatRoomActor, + userProfile: userProfileActor, + + // Group related actors with prefixes + gameSession: gameSessionActor, + gameLobby: gameLobbyActor, + }, +}); +``` + +### Configuration Management + +Separate configuration from registry definition: + +```typescript +// config.ts +export const appConfig = { + redis: { + url: process.env.REDIS_URL || "redis://localhost:6379", + }, + cors: { + origin: process.env.ALLOWED_ORIGINS?.split(",") || ["*"], + }, +}; + +// server.ts +import { registry } from "./registry"; +import { appConfig } from "./config"; + +const { serve } = registry.createServer({ + driver: { + topology: "partition", + actor: { type: "redis", url: appConfig.redis.url }, + manager: { type: "redis", url: appConfig.redis.url }, + }, + cors: appConfig.cors, +}); + +serve(); +``` diff --git a/docs/concepts/testing.mdx b/docs/general/testing.mdx similarity index 97% rename from docs/concepts/testing.mdx rename to docs/general/testing.mdx index f398d51b6..2b098df8b 100644 --- a/docs/concepts/testing.mdx +++ b/docs/general/testing.mdx @@ -43,7 +43,7 @@ test("my actor test", async (test) => { ``` ```ts src/index.ts -import { actor, setup } from "rivetkit"; +import { actor, setup } from "@rivetkit/actor"; const myActor = actor({ state: { value: "initial" }, @@ -90,7 +90,7 @@ test("actor should persist state", async (test) => { ``` ```ts src/index.ts -import { setup } from "rivetkit"; +import { setup } from "@rivetkit/actor"; const counter = actor({ state: { count: 0 }, @@ -141,7 +141,7 @@ test("actor should emit events", async (test) => { ``` ```ts src/index.ts -import { actor, setup } from "rivetkit"; +import { actor, setup } from "@rivetkit/actor"; export const chatRoom = actor({ state: { @@ -192,7 +192,7 @@ test("scheduled tasks should execute", async (test) => { ``` ```ts src/index.ts -import { actor, setup } from "rivetkit"; +import { actor, setup } from "@rivetkit/actor"; const scheduler = actor({ state: { diff --git a/docs/general/webhooks.mdx b/docs/general/webhooks.mdx new file mode 100644 index 000000000..1333ed77b --- /dev/null +++ b/docs/general/webhooks.mdx @@ -0,0 +1 @@ +TODO diff --git a/docs/images/integrations/elysia.svg b/docs/images/integrations/elysia.svg new file mode 100644 index 000000000..db27a0ebf --- /dev/null +++ b/docs/images/integrations/elysia.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/images/integrations/express.svg b/docs/images/integrations/express.svg new file mode 100644 index 000000000..8e4296838 --- /dev/null +++ b/docs/images/integrations/express.svg @@ -0,0 +1 @@ + diff --git a/docs/images/integrations/trpc.svg b/docs/images/integrations/trpc.svg new file mode 100644 index 000000000..103966bc0 --- /dev/null +++ b/docs/images/integrations/trpc.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/integrations/better-auth.mdx b/docs/integrations/better-auth.mdx index 0c256867e..295190b53 100644 --- a/docs/integrations/better-auth.mdx +++ b/docs/integrations/better-auth.mdx @@ -1,303 +1,406 @@ --- title: Better Auth +description: Integrate RivetKit with Better Auth for authentication --- - - - -```sh -npm install better-auth -``` +Better Auth provides a comprehensive authentication solution that integrates seamlessly with Rivet Actors using the `onAuth` hook. - + + Check out the complete example + - +## Installation - - -```ts Hono -import { registry } from "./registry"; -import { Hono } from "hono"; +Install Better Auth alongside RivetKit: -// Start RivetKit -// -// State is stored in memory, this can be configured later -const { client, hono } = registry.run(); +```bash +npm install better-auth better-sqlite3 +npm install -D @types/better-sqlite3 -// Setup server -const app = new Hono(); - -// Expose RivetKit to the frontend (optional) -app.route("/registry", hono); +# For React integration +npm install @rivetkit/react +``` -app.post("/increment/:name", async (c) => { - const name = c.req.param("name"); + + This example uses SQLite to keep the example. In production, replace this with a database like Postgres. Read more about [configuring your database in Better Auth](https://www.better-auth.com/docs/installation#configure-database). + - // Communicate with actor - const counter = client.counter.getOrCreate(name); - const newCount = await counter.increment(1); +## Backend Setup - return c.text(`New Count: ${newCount}`); + + +Create your authentication configuration: + +```typescript auth.ts +import { betterAuth } from "better-auth"; +import Database from "better-sqlite3"; + +export const auth = betterAuth({ + database: new Database("/tmp/auth.sqlite"), + trustedOrigins: ["http://localhost:5173"], + emailAndPassword: { + enabled: true, + }, }); - -// app.fetch will be used to run the server -export { registry, default: app.fetch }; -``` - -```ts Express.js -TODO ``` + -```ts Elysia.js -TODO -``` - - - - - TODO: Exporting `registry` and `app.fetch` (as `default`) is important. - + +Create and apply the database schema: -_If you want to run without export fetch (i.e. standalone Node.js), see below._ +```bash +# Generate migration files +pnpm dlx @better-auth/cli@latest generate --config auth.ts +# Apply migrations to create the database tables +pnpm dlx @better-auth/cli@latest migrate --config auth.ts -y +``` - - - + +Use the `onAuth` hook to validate sessions: -```ts Actor +```typescript registry.ts import { actor, setup } from "@rivetkit/actor"; - -export const counter = actor({ - onAuth: () => { ... }, - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - return c.state.count; - }, - }, +import { Unauthorized } from "@rivetkit/actor/errors"; +import { auth } from "./auth"; + +export const chatRoom = actor({ + // Validate authentication before actor access + onAuth: async (opts) => { + const { req } = opts; + + // Use Better Auth to validate the session + const authResult = await auth.api.getSession({ + headers: req.headers, + }); + if (!authResult) throw new Unauthorized(); + + // Return user data to be available in actor + return { + user: authResult.user, + session: authResult.session, + }; + }, + + state: { + messages: [] as Array<{ + id: string; + userId: string; + username: string; + message: string; + timestamp: number; + }>, + }, + + actions: { + sendMessage: (c, message: string) => { + // Access authenticated user data + const { user } = c.conn.auth; + + const newMessage = { + id: crypto.randomUUID(), + userId: user.id, + username: user.name, + message, + timestamp: Date.now(), + }; + + c.state.messages.push(newMessage); + c.broadcast("newMessage", newMessage); + + return newMessage; + }, + + getMessages: (c) => c.state.messages, + }, }); export const registry = setup({ - use: { counter }, + use: { chatRoom }, }); ``` - -```ts Workflow -``` - - - - - - + +Configure your server to handle Better Auth routes and RivetKit: -```sh Node.js -npx serve-fetch src/server.ts -``` - -```sh Bun -bun serve src/server.ts -``` - - - - - - +```typescript +// server.ts +import { registry } from "./registry"; +import { auth } from "./auth"; +import { Hono } from "hono"; +import { cors } from "hono/cors"; +import { ALLOWED_PUBLIC_HEADERS } from "@rivetkit/actor"; - +const { serve } = registry.createServer(); +const app = new Hono(); -```ts fetch -const res = await fetch("http://localhost:8080/increment/foo", { - method: "POST" -}); -console.log("Output:", await res.text()); -``` +// Configure CORS for Better Auth + RivetKit +app.use("*", cors({ + // Where your frontend is running + origin: ["http://localhost:5173"], + // ALLOWED_PUBLIC_HEADERS are headers required for RivetKit to operate + allowHeaders: ["Authorization", ...ALLOWED_PUBLIC_HEADERS], + allowMethods: ["POST", "GET", "OPTIONS"], + exposeHeaders: ["Content-Length"], + maxAge: 600, + credentials: true, +})); + +// Mount Better Auth routes +app.on(["GET", "POST"], "/api/auth/**", (c) => + auth.handler(c.req.raw) +); -```sh curl -curl -X POST localhost:8080/increment/foo +// Start RivetKit server +serve(app); ``` - - - - + - - - - - - -```sh -npx rivet-cli deploy src/server.ts -``` - -Your endpoint is now TODO - -Test it with TODO - - - - -TODO - +## Frontend Integration - + + +Create a Better Auth client for your frontend: -```sh -npm install @rivetkit/redis -``` +```typescript +// auth-client.ts +import { createAuthClient } from "better-auth/react"; -```ts server.ts -import { registry } from "./registry"; -import { createRedisDriver } from "@rivetkit/redis"; - -// Start RivetKit -const { client, hono } = registry.run({ - driver: createRedisDriver({ - host: "127.0.0.1", - port: 6379, - }), +export const authClient = createAuthClient({ + baseURL: "http://localhost:8080", }); - -// ...rest of code... ``` + - - - - -```sh -npm install @rivetkit/file-system + +Create login/signup forms: + +```tsx +// AuthForm.tsx +import React, { useState } from "react"; +import { authClient } from "./auth-client"; + +export function AuthForm() { + const [isLogin, setIsLogin] = useState(true); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [name, setName] = useState(""); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + if (isLogin) { + await authClient.signIn.email({ email, password }); + } else { + await authClient.signUp.email({ email, password, name }); + } + } catch (error) { + console.error("Auth error:", error); + } + }; + + return ( +
+

{isLogin ? "Sign In" : "Sign Up"}

+ + {!isLogin && ( + setName(e.target.value)} + required + /> + )} + + setEmail(e.target.value)} + required + /> + + setPassword(e.target.value)} + required + /> + + + + +
+ ); +} ``` +
-```ts server.ts -import { registry } from "./registry"; -import { createFileSystemDriver } from "@rivetkit/file-system"; - -// Start RivetKit -const { client, hono } = registry.run({ - driver: createFileSystemDriver(), -}); + +Use authenticated sessions with RivetKit: -// ...rest of code... -``` +```tsx +// ChatRoom.tsx +import React, { useState } from "react"; +import { createClient } from "@rivetkit/client"; +import { createRivetKit } from "@rivetkit/react"; +import { authClient } from "./auth-client"; +import type { registry } from "../backend/registry"; -
+const client = createClient("http://localhost:8080"); +const { useActor } = createRivetKit(client); -
+interface ChatRoomProps { + session: { user: { id: string; name: string } }; + roomId: string; +} +export function ChatRoom({ session, roomId }: ChatRoomProps) { + const [newMessage, setNewMessage] = useState(""); + + const chatRoom = useActor({ + name: "chatRoom", + key: [roomId], + }); + + const sendMessage = async () => { + if (!newMessage.trim()) return; + + await chatRoom.sendMessage(newMessage); + setNewMessage(""); + }; + + return ( +
+
+ Welcome, {session.user.name}! + +
+ +
+ {chatRoom.state.messages.map(msg => ( +
+ {msg.username}: {msg.message} +
+ ))} +
+ +
+ setNewMessage(e.target.value)} + onKeyPress={(e) => e.key === "Enter" && sendMessage()} + placeholder="Type a message..." + /> + +
+
+ ); +} +```
- -## Configuration Options - -### Connect your frontend to the Rivet Actor - -TODO: Quick summary of why you would want to connect your frontend - -Connect your frontend: - - - -```ts JavaScript -import { createClient } from "@rivetkit/actor/client"; -import type { registry } from "./registry.js"; - -const client = createClient("http://localhost:8080/registry"); - -const result = await client.myActor.getOrCreate().myAction("Hello, world!"); +## Advanced Features + +### Role-Based Access + +Add role checking to your actors: + +```typescript +export const adminActor = actor({ + onAuth: async (opts) => { + const authResult = await auth.api.getSession({ + headers: opts.req.headers, + }); + if (!authResult) throw new Unauthorized(); + + return { user: authResult.user }; + }, + + actions: { + deleteUser: (c, userId: string) => { + // Check user role (assuming you store roles in user data) + const { user } = c.conn.auth; + if (user.role !== "admin") { + throw new Unauthorized("Admin access required"); + } + + // Admin-only action + // ... implementation + }, + }, +}); ``` -```ts React -import { useState } from "react"; -import { createClient, createRivetKit } from "@@rivetkit/actor/react"; -import type { registry } from "./registry"; - -const client = createClient(`http://localhost:8080/registry`); -const { useActor } = createRivetKit(client); - -function App() { - const [count, setCount] = useState(0); - const [counterName, setCounterName] = useState("test-counter"); - - const counter = useActor({ - name: "counter", - key: [counterName], - }); - - counter.useEvent("newCount", (x: number) => setCount(x)); - - const increment = async () => { - await counter.connection?.increment(1); - }; - - return ( -
-

Counter: {count}

- setCounterName(e.target.value)} - placeholder="Counter name" - /> - -
- ); +### Session Management + +Handle session expiration gracefully: + +```tsx +// hooks/useAuth.ts +import { authClient } from "./auth-client"; +import { useEffect } from "react"; + +export function useAuthWithRefresh() { + const { data: session, error } = authClient.useSession(); + + useEffect(() => { + if (error?.message?.includes("session")) { + // Redirect to login on session expiration + window.location.href = "/login"; + } + }, [error]); + + return session; } ``` -
+## Production Deployment -TODO: Learn more under the XXXX docs +For production, you'll need a database from a provider like [Neon](https://neon.tech/), [PlanetScale](https://planetscale.com/), [AWS RDS](https://aws.amazon.com/rds/), or [Google Cloud SQL](https://cloud.google.com/sql). - - TODO: Link to onAuth docs - +Configure your production database connection: - - TODO: Note that `/registry` must be exposed - +```typescript +// auth.ts +import { betterAuth } from "better-auth"; +import { Pool } from "pg"; -### Run as standalone server (no fetch handler) - -TODO: Intro - -```ts -import { registry } from "./registry"; -import { Hono } from "hono"; -import { serve } from "@hono/node-server"; - -// Start RivetKit -const { client, hono } = registry.run(); - -// Setup server -const app = new Hono(); - -// ...setup routes... - -serve({ fetch: app.fetch, port: 8080 }, (x) => - console.log("Listening at http://localhost:8080"), -); +export const auth = betterAuth({ + database: new Pool({ + connectionString: process.env.DATABASE_URL, + }), + trustedOrigins: [process.env.FRONTEND_URL], + emailAndPassword: { enabled: true }, +}); ``` -IMPORTANT: You'll need to do special stuff to support deploying to Rivet or Cloudflare Workers +Set the following environment variables for production: -## Next Steps +```bash +DATABASE_URL=postgresql://username:password@localhost:5432/myapp +FRONTEND_URL=https://myapp.com +BETTER_AUTH_SECRET=your-secure-secret-key +BETTER_AUTH_URL=https://api.myapp.com +``` -TODO +Read more about [configuring Postgres with Better Auth](https://www.better-auth.com/docs/adapters/postgresql). - - - - - - + + Don't forget to re-generate & re-apply your database migrations if you change the database in your Better Auth config. + diff --git a/docs/integrations/elysia.mdx b/docs/integrations/elysia.mdx new file mode 100644 index 000000000..7576bc808 --- /dev/null +++ b/docs/integrations/elysia.mdx @@ -0,0 +1,87 @@ +--- +title: Elysia +description: Integrate RivetKit with Elysia for fast TypeScript web applications +--- + +Elysia is a fast and type-safe web framework for Bun. RivetKit integrates seamlessly with Elysia using the `.mount()` method. + + + Check out the complete example + + +## Installation + +Install Elysia alongside RivetKit: + +```bash +npm install elysia +# or with bun +bun add elysia +``` + +## Basic Setup + + + +Set up your Rivet Actors: + +```typescript +// registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + +Mount RivetKit into your Elysia application: + +```typescript +// server.ts +import { registry } from "./registry"; +import { Elysia } from "elysia"; + +const { client, handler } = registry.createServer(); + +// Setup Elysia app +const app = new Elysia() + // Mount RivetKit handler + .mount("/registry", handler) + // Add your API routes + .post("/increment/:name", async ({ params }) => { + const name = params.name; + + const counter = client.counter.getOrCreate([name]); + const newCount = await counter.increment(1); + + return `New Count: ${newCount}`; + }) + .get("/count/:name", async ({ params }) => { + const name = params.name; + + const counter = client.counter.getOrCreate([name]); + const count = await counter.getCount(); + + return { count }; + }) + .listen(8080); + +console.log("Server running at http://localhost:8080"); +``` + + + diff --git a/docs/integrations/express.mdx b/docs/integrations/express.mdx new file mode 100644 index 000000000..865883e18 --- /dev/null +++ b/docs/integrations/express.mdx @@ -0,0 +1,109 @@ +--- +title: Express +description: Integrate RivetKit with Express.js for Node.js web applications +--- + +Express.js is a popular Node.js web framework. RivetKit integrates seamlessly with Express using middleware mounting. + + + Check out the complete example + + +## Installation + +Install Express alongside RivetKit: + +```bash +npm install express +npm install -D @types/express +``` + +## Basic Setup + + + +Set up your Rivet Actor: + +```typescript +// registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + +Mount RivetKit into your Express application: + +```typescript +// server.ts +import { registry } from "./registry"; +import express from "express"; + +// Start RivetKit +const { client, handler } = registry.createServer(); + +// Setup Express app +const app = express(); + +// Enable JSON parsing +app.use(express.json()); + +// Mount RivetKit handler +app.use("/registry", handler); + +// Add your API routes +app.post("/increment/:name", async (req, res) => { + const name = req.params.name; + const { amount = 1 } = req.body; + + try { + const counter = client.counter.getOrCreate([name]); + const newCount = await counter.increment(amount); + + res.json({ success: true, count: newCount }); + } catch (error) { + res.status(500).json({ + success: false, + error: error.message + }); + } +}); + +app.get("/count/:name", async (req, res) => { + const name = req.params.name; + + try { + const counter = client.counter.getOrCreate([name]); + const count = await counter.getCount(); + + res.json({ name, count }); + } catch (error) { + res.status(500).json({ + success: false, + error: error.message + }); + } +}); + +app.listen(8080, () => { + console.log("Server running at http://localhost:8080"); +}); +``` + + + diff --git a/docs/integrations/hono.mdx b/docs/integrations/hono.mdx index 26c292867..9c3199622 100644 --- a/docs/integrations/hono.mdx +++ b/docs/integrations/hono.mdx @@ -1,199 +1,102 @@ --- title: Hono +description: Integrate RivetKit with Hono for ultra-fast web applications --- -[Hono](https://hono.dev/) is a lightweight web framework that works well with RivetKit across multiple deployment platforms. This guide explains how to integrate RivetKit with Hono on different platforms. +Hono is an ultra-fast web framework that works on any runtime. RivetKit integrates seamlessly with Hono through the `serve()` method. -## Mounting The RivetKit Router + + Check out the complete example + -When mounting the RivetKit router at a custom path, you **must** specify the same path in the router configuration using `basePath`: +## Installation -```typescript -// Setup the RivetKit app -const registry = setup({ - use: { counter }, - // IMPORTANT: Must specify the same basePath where your router is mounted - basePath: "/my-path" -}); - -// Create a router from the app -const { router: actorRouter } = createRouter(app); +Install Hono alongside RivetKit: -// Mount at the same path specified in basePath -honoApp.route("/my-path", actorRouter); +```bash +npm install hono ``` -This ensures that WebSocket connections and other functionality work correctly when accessing your actors through the custom path. - -## Platform-Specific Examples - -Each platform has specific requirements for integrating Hono with RivetKit. - -### Cloudflare Workers - -```typescript -import { createRouter } from "@rivetkit/cloudflare-workers"; -import { setup } from "rivetkit"; -import { Hono } from "hono"; -import counter from "./counter"; - -// Create your Hono app inside the fetch handler -const honoApp = new Hono(); - -// Add your custom routes -honoApp.get("/", (c) => c.text("Welcome to my app!")); -honoApp.get("/hello", (c) => c.text("Hello, world!")); - -// Setup the RivetKit app -const registry = setup({ - use: { counter }, - // IMPORTANT: Must specify the same basePath where your router is mounted - basePath: "/my-path" -}); +## Basic Setup -// Create a router and handler from the app -const { router: actorRouter, ActorHandler } = createRouter(app); - -// Mount the RivetKit router at /my-path -honoApp.route("/my-path", actorRouter); - -// IMPORTANT: Must export `ActorHandler` as this exact name -export { honoApp as default, ActorHandler }; -``` - -Make sure to update your client connection URL to include the custom path: + + +Set up your Rivet Actor: ```typescript -// If you mounted RivetKit at /my-path -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; - -const client = createClient("https://your-actor.actors.dev/my-path"); -``` - -For this to work with Cloudflare Workers, your `wrangler.json` **must** include specific Durable Object and KV namespace bindings with the exact names expected by RivetKit: - -```json -{ - "name": "counter", - "main": "src/index.ts", - "compatibility_date": "2025-01-29", - "migrations": [ - { - "new_classes": ["ActorHandler"], - "tag": "v1" - } - ], - "durable_objects": { - "bindings": [ - { - "class_name": "ActorHandler", // Must match exported class - "name": "ACTOR_DO" // Must use this exact name - } - ] +// registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, }, - "kv_namespaces": [ - { - "binding": "ACTOR_KV", // Must use this exact name - "id": "YOUR_KV_NAMESPACE_ID" // Replace with your KV ID - } - ] -} -``` - - -### Node.js - -```typescript -import { serve } from "@hono/node-server"; -import { Hono } from "hono"; -import { setup, createRouter } from "@rivetkit/nodejs"; -import counter from "./counter"; - -// Create your Hono app -const honoApp = new Hono(); - -// Add your custom routes -honoApp.get("/", (c) => c.text("Welcome to my app!")); -honoApp.get("/hello", (c) => c.text("Hello, world!")); - -// Setup the RivetKit app -const registry = setup({ - use: { counter }, - // IMPORTANT: Must specify the same basePath where your router is mounted - basePath: "/my-path" }); -// Create a router from the app -const { router: actorRouter, injectWebSocket } = createRouter(app); - -// Mount the RivetKit router at /my-path -honoApp.route("/my-path", actorRouter); - -// Create server with the combined app -const server = serve({ - fetch: honoApp.fetch, - port: 8080, +export const registry = setup({ + use: { counter }, }); - -// IMPORTANT: Inject the websocket handler into the server -injectWebSocket(server); - -console.log("Server running at http://localhost:8080"); ``` + -Make sure to update your client connection URL to include the custom path: - -```typescript -// If you mounted RivetKit at /my-path -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; - -const client = createClient("http://localhost:8080/my-path"); -``` - -### Bun + +Use RivetKit's `serve()` method with your Hono app: ```typescript +// server.ts +import { registry } from "./registry"; import { Hono } from "hono"; -import { setup, createRouter } from "@rivetkit/bun"; -import counter from "./counter"; -// Create your Hono app -const honoApp = new Hono(); - -// Add your custom routes -honoApp.get("/", (c) => c.text("Welcome to my app!")); -honoApp.get("/hello", (c) => c.text("Hello, world!")); - -// Setup the RivetKit app -const registry = setup({ - use: { counter }, - // IMPORTANT: Must specify the same basePath where your router is mounted - basePath: "/my-path" +// Start RivetKit +const { client, serve } = registry.createServer(); + +// Setup Hono app +const app = new Hono(); + +// Add your API routes +app.post("/increment/:name", async (c) => { + const name = c.req.param("name"); + const body = await c.req.json().catch(() => ({})); + const amount = body.amount || 1; + + try { + const counter = client.counter.getOrCreate([name]); + const newCount = await counter.increment(amount); + + return c.json({ success: true, count: newCount }); + } catch (error) { + return c.json({ + success: false, + error: error.message + }, 500); + } }); -// Create a router from the app -const { router: actorRouter, webSocketHandler } = createRouter(app); - -// Mount the RivetKit router at /my-path -honoApp.route("/my-path", actorRouter); +app.get("/count/:name", async (c) => { + const name = c.req.param("name"); + + try { + const counter = client.counter.getOrCreate([name]); + const count = await counter.getCount(); + + return c.json({ name, count }); + } catch (error) { + return c.json({ + success: false, + error: error.message + }, 500); + } +}); -// Create and start the server -export default { - port: 8080, - fetch: honoApp.fetch, - // IMPORTANT: Pass the webSocketHandler to Bun - websocket: webSocketHandler, -}; +// Start server with RivetKit integration +serve(app); ``` + + -Make sure to update your client connection URL to include the custom path: - -```typescript -// If you mounted RivetKit at /my-path -import { createClient } from "rivetkit/client"; -import type { App } from "./src/index"; - -const client = createClient("http://localhost:8080/my-path"); -``` diff --git a/docs/integrations/resend.mdx b/docs/integrations/resend.mdx deleted file mode 100644 index 49fdb6cbc..000000000 --- a/docs/integrations/resend.mdx +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: Resend ---- - -[Resend](https://resend.com) is an email API service that works seamlessly with RivetKit for handling emails and notifications. - -## Example - -See how RivetKit and Resend can power engagement with daily streak notifications. - -View on GitHub - -## Quickstart - - - -```bash -npm install resend -``` - - - -```typescript actors.ts -import { actor, setup } from "rivetkit"; -import { Resend } from "resend"; - -const resend = new Resend(process.env.RESEND_API_KEY); - -const user = actor({ - state: { - email: null as string | null, - }, - - actions: { - // Example: Somehow acquire the user's email - register: async (c, email: string) => { - c.state.email = email; - }, - - // Example: Send an email - sendExampleEmail: async (c) => { - if (!c.state.email) throw new Error("No email registered"); - - await resend.emails.send({ - from: "updates@yourdomain.com", - to: c.state.email, - subject: "Hello, world!", - html: "

Lorem ipsum

", - }); - }, - }, -}); - -export const registry = setup({ use: { user } }); -``` -
- - -```typescript client.ts -import { createClient } from "rivetkit"; -import { App } from "./actors/app.ts"; - -const client = createClient("http://localhost:8787"); -const userActor = await client.user.get({ tags: { user: "user123" } }); - -await userActor.register("user@example.com"); -await userActor.sendExampleEmail(); -``` - -
- -## Use Cases - -### Scheduling Emails - -RivetKit's scheduling capabilities with Resend make it easy to send emails at specific times: - - -```typescript actors.ts -const emailScheduler = actor({ - state: { - email: null as string | null, - }, - - actions: { - scheduleEmail: async (c, email: string, delayMs: number = 86400000) => { - c.state.email = email; - await c.schedule.at(Date.now() + delayMs, "sendEmail"); - }, - - sendEmail: async (c) => { - if (!c.state.email) return; - - await resend.emails.send({ - from: "updates@yourdomain.com", - to: c.state.email, - subject: "Your scheduled message", - html: "

This email was scheduled earlier!

", - }); - }, - }, -}); -``` - -```typescript client.ts -const client = createClient({ url: "http://localhost:3000" }); -const scheduler = await client.emailScheduler.get({ id: "user123" }); -await scheduler.scheduleEmail("user@example.com", 60000); // 1 minute -``` -
- -### Daily Reminders - -Send daily reminders to users based on their activity: - - -```typescript actors.ts -const reminder = actor({ - state: { - email: null as string | null, - lastActive: null as number | null, - }, - - actions: { - trackActivity: async (c, email: string) => { - c.state.email = email; - c.state.lastActive = Date.now(); - - // Schedule check for tomorrow - await c.schedule.at(Date.now() + 24 * 60 * 60 * 1000, "checkActivity"); - }, - - checkActivity: async (c) => { - if (!c.state.email) return; - - // If inactive for 24+ hours, send reminder - if (Date.now() - (c.state.lastActive || 0) >= 24 * 60 * 60 * 1000) { - await resend.emails.send({ - from: "reminders@yourdomain.com", - to: c.state.email, - subject: "We miss you!", - html: "

Don't forget to check in today.

", - }); - } - - // Reschedule for tomorrow - await c.schedule.at(Date.now() + 24 * 60 * 60 * 1000, "checkActivity"); - }, - }, -}); -``` - -```typescript client.ts -const client = createClient({ url: "http://localhost:3000" }); -const userReminder = await client.reminder.get({ id: "user123" }); -await userReminder.trackActivity("user@example.com"); -``` -
- -### Alerting Systems - -Monitor your systems and send alerts when issues are detected: - - -```typescript actors.ts -const monitor = actor({ - state: { - alertEmail: null as string | null, - isHealthy: true, - }, - - actions: { - configure: async (c, email: string) => { - c.state.alertEmail = email; - await c.schedule.at(Date.now() + 60000, "checkHealth"); - }, - - checkHealth: async (c) => { - // Simple mock health check - const wasHealthy = c.state.isHealthy; - c.state.isHealthy = await mockHealthCheck(); - - // Alert on status change to unhealthy - if (wasHealthy && !c.state.isHealthy && c.state.alertEmail) { - await resend.emails.send({ - from: "alerts@yourdomain.com", - to: c.state.alertEmail, - subject: "⚠️ System Alert", - html: "

The system is experiencing issues.

", - }); - } - - // Reschedule next check - await c.schedule.at(Date.now() + 60000, "checkHealth"); - }, - }, -}); - -// Mock function -async function mockHealthCheck() { - return Math.random() > 0.1; // 90% chance of being healthy -} -``` - -```typescript client.ts -const client = createClient({ url: "http://localhost:3000" }); -const systemMonitor = await client.monitor.get({ id: "api-service" }); -await systemMonitor.configure("admin@example.com"); -``` -
- -## Testing - -When testing actors that use Resend, you should mock the Resend API to avoid sending real emails during tests. RivetKit's testing utilities combined with Vitest make this straightforward: - -```typescript -import { test, expect, vi, beforeEach } from "vitest"; -import { setupTest } from "rivetkit/test"; -import { app } from "../actors/app"; - -// Create mock for send method -const mockSendEmail = vi.fn().mockResolvedValue({ success: true }); - -beforeEach(() => { - process.env.RESEND_API_KEY = "test_mock_api_key_12345"; - - vi.mock("resend", () => { - return { - Resend: vi.fn().mockImplementation(() => { - return { - emails: { - send: mockSendEmail - } - }; - }) - }; - }); - - mockSendEmail.mockClear(); -}); - -test("email is sent when action is called", async (t) => { - const { client } = await setupTest(t, app); - const actor = await client.user.get(); - - // Call the action that should send an email - await actor.someActionThatSendsEmail("user@example.com"); - - // Verify the email was sent with the right parameters - expect(mockSendEmail).toHaveBeenCalledWith( - expect.objectContaining({ - to: "user@example.com", - subject: "Expected Subject", - }), - ); -}); -``` - -Using `vi.advanceTimersByTimeAsync()` is particularly useful for testing scheduled emails: - -```typescript -// Fast forward time to test scheduled emails -await vi.advanceTimersByTimeAsync(24 * 60 * 60 * 1000); // Advance 24 hours - -// Test that the scheduled email was sent -expect(mockSendEmail).toHaveBeenCalledTimes(2); -``` - diff --git a/docs/integrations/trpc.mdx b/docs/integrations/trpc.mdx new file mode 100644 index 000000000..0c8242bc7 --- /dev/null +++ b/docs/integrations/trpc.mdx @@ -0,0 +1,152 @@ +--- +title: tRPC +description: Integrate RivetKit with tRPC for end-to-end type-safe APIs +--- + +tRPC provides end-to-end type safety for your APIs. RivetKit integrates seamlessly with tRPC, allowing you to create type-safe procedures that call Rivet Actors. + + + Check out the complete example + + +## Installation + +Install tRPC alongside RivetKit: + +```bash +npm install @trpc/server @trpc/client zod +npm install -D @trpc/next # if using Next.js +``` + +## Basic Setup + + + +Set up your Rivet Actors: + +```typescript +// registry.ts +import { actor, setup } from "@rivetkit/actor"; + +export const counter = actor({ + state: { count: 0 }, + actions: { + increment: (c, amount: number = 1) => { + c.state.count += amount; + c.broadcast("countChanged", c.state.count); + return c.state.count; + }, + getCount: (c) => c.state.count, + reset: (c) => { + c.state.count = 0; + c.broadcast("countChanged", 0); + return 0; + }, + }, +}); + +export const registry = setup({ + use: { counter }, +}); +``` + + + +Create your tRPC router that uses RivetKit: + +```typescript +// server.ts +import { registry } from "./registry"; +import { initTRPC } from "@trpc/server"; +import { createHTTPServer } from "@trpc/server/adapters/standalone"; +import { z } from "zod"; + +// Start RivetKit +const { client } = registry.createServer(); + +// Initialize tRPC +const t = initTRPC.create(); + +// Create tRPC router with RivetKit integration +const appRouter = t.router({ + // Counter procedures + counter: t.router({ + increment: t.procedure + .input(z.object({ + name: z.string(), + amount: z.number().optional().default(1) + })) + .mutation(async ({ input }) => { + const counter = client.counter.getOrCreate([input.name]); + const newCount = await counter.increment(input.amount); + return { name: input.name, count: newCount }; + }), + + get: t.procedure + .input(z.object({ name: z.string() })) + .query(async ({ input }) => { + const counter = client.counter.getOrCreate([input.name]); + const count = await counter.getCount(); + return { name: input.name, count }; + }), + + reset: t.procedure + .input(z.object({ name: z.string() })) + .mutation(async ({ input }) => { + const counter = client.counter.getOrCreate([input.name]); + const count = await counter.reset(); + return { name: input.name, count }; + }), + }), +}); + +// Export type for client +export type AppRouter = typeof appRouter; + +// Create HTTP server +const server = createHTTPServer({ + router: appRouter, +}); + +server.listen(3001); +console.log("tRPC server listening at http://localhost:3001"); +``` + + + +Create a type-safe tRPC client: + +```typescript +// client.ts +import { createTRPCProxyClient, httpBatchLink } from "@trpc/client"; +import type { AppRouter } from "./server"; + +export const trpc = createTRPCProxyClient({ + links: [ + httpBatchLink({ + url: "http://localhost:3001", + }), + ], +}); + +// Usage examples +async function examples() { + // Increment counter + const result = await trpc.counter.increment.mutate({ + name: "my-counter", + amount: 5 + }); + console.log(result); // { name: "my-counter", count: 5 } + + // Get counter value + const value = await trpc.counter.get.query({ name: "my-counter" }); + console.log(value); // { name: "my-counter", count: 5 } + + // Reset counter + const reset = await trpc.counter.reset.mutate({ name: "my-counter" }); + console.log(reset); // { name: "my-counter", count: 0 } +} +``` + + + diff --git a/docs/integrations/vitest.mdx b/docs/integrations/vitest.mdx new file mode 100644 index 000000000..6637fb6f7 --- /dev/null +++ b/docs/integrations/vitest.mdx @@ -0,0 +1,6 @@ +--- +title: Vitest +--- + +See [Testing](/general/testing) documentation. + diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 7a251d3bc..7ae36d7ad 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -5,11 +5,9 @@ sidebarTitle: Welcome mode: custom --- -import ComparisonTable from "/snippets/landing-comparison-table.mdx"; import Snippets from "/snippets/landing-snippets.mdx"; import Tech from "/snippets/landing-tech.mdx"; import Quotes from "/snippets/landing-quotes.mdx"; -import Manifesto from "/snippets/landing-manifesto.mdx"; import FAQ from "/snippets/landing-faq.mdx"; {/*
*/} @@ -55,11 +53,11 @@ import FAQ from "/snippets/landing-faq.mdx"; */} -
- +
+
-
+

Actors

@@ -69,7 +67,7 @@ import FAQ from "/snippets/landing-faq.mdx";
- +
@@ -82,7 +80,7 @@ import FAQ from "/snippets/landing-faq.mdx";
- +
@@ -95,7 +93,7 @@ import FAQ from "/snippets/landing-faq.mdx";
- {/* + {/*
@@ -165,21 +163,21 @@ import FAQ from "/snippets/landing-faq.mdx";
Supports
{/* Platforms (all-in-one) */} - + Rivet Platform
Rivet
- + Cloudflare Workers
Cloudflare Workers
{/* Compute */} - + Node.js
Node.js
- + Bun
Bun
@@ -203,15 +201,11 @@ import FAQ from "/snippets/landing-faq.mdx"; TypeScript
TypeScript
- - Python -
Python (Client)
-
Rust
Rust (Client)
- + React
React
@@ -221,7 +215,19 @@ import FAQ from "/snippets/landing-faq.mdx"; Hono
Hono
- + + Express +
Express
+
+ + Express +
Elysia
+
+ + tRPC +
tRPC
+
+ Vitest
Vitest
@@ -238,19 +244,6 @@ import FAQ from "/snippets/landing-faq.mdx";
- {/* -
- -
-

Less Complexity, More Functionality

-

RivetKit provides a solid foundation with the features you'd expect for modern apps.

- -
- - -
- */} -
@@ -328,12 +321,6 @@ import FAQ from "/snippets/landing-faq.mdx";
*/} - {/*
- -
- -
*/} -
diff --git a/docs/llm/claude.mdx b/docs/llm/claude.mdx deleted file mode 100644 index 7e80ed611..000000000 --- a/docs/llm/claude.mdx +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: "Using Claude Code with RivetKit" -sidebarTitle: "Claude Code" ---- - -[Claude Code](https://claude.ai/code) is a powerful CLI tool from Anthropic that integrates Claude directly into your development workflow. When working with RivetKit, you can enhance Claude's understanding of the codebase by providing project-specific context. - -## Setting Up CLAUDE.md for RivetKit - -The `CLAUDE.md` file serves as a memory file for Claude Code, containing important information about your project that persists between sessions. - -To set up an effective `CLAUDE.md` file for RivetKit: - - - - Copy the RivetKit [prompt.txt](/llm/prompt) - - - Create a `CLAUDE.md` file in your project root - - - Paste the template into `CLAUDE.md` - - - Run Claude Code and ask a simple question like `What lifecycle hook is used when a actor is first created?` to confirm it's reading your CLAUDE.md file correctly - - - -## Example Commands for RivetKit - -Here are some useful ways to leverage Claude Code with RivetKit: - -### Understand the Codebase - -```bash -# Get an overview of RivetKit's architecture -claude "explain the architecture of RivetKit and how the different topologies work" - -# Understand how actors communicate -claude "explain how actors communicate with each other in the coordinate topology" - -# Learn about specific concepts -claude "explain the lifecycle hooks for actors and when each one is called" -``` - -### Find Relevant Code - -```bash -# Find implementations of specific components -claude "find the files that implement the Redis driver" - -# Locate examples of specific patterns -claude "show me examples of RPC methods in the codebase" - -# Understand actor state management -claude "explain how actor state is persisted between restarts" -``` - -### Add New Features - -```bash -# Create a new actor implementation -claude "help me create a new actor for managing user sessions" - -# Add authentication to a actor -claude "show me how to add authentication to my actor's _onBeforeConnect method" - -# Implement error handling -claude "help me implement proper error handling for my actor's RPC methods" -``` - -### Debug Issues - -```bash -# Diagnose connection problems -claude "my actor connections are dropping, help me debug why" - -# Fix state persistence issues -claude "my actor state isn't persisting between restarts, what could be wrong?" - -# Address scaling problems -claude "my actors are using too much memory, how can I optimize them?" -``` - -## Additional Resources - -- [Claude Code Documentation](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) -- [Claude Code Tutorials](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/tutorials) - diff --git a/docs/llm/cursor.mdx b/docs/llm/cursor.mdx deleted file mode 100644 index 7779627ea..000000000 --- a/docs/llm/cursor.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: "Using Cursor with RivetKit" -sidebarTitle: "Cursor" ---- - -This guide shows how to integrate RivetKit with Cursor to enhance your developer experience through AI-assisted coding. - -## Setting Up Cursor Rules for RivetKit - -Cursor rules allow you to customize how the AI assistant behaves when working with RivetKit code. By providing project-specific context, you'll get more accurate and relevant suggestions. - -### Project Rules (Recommended) - -Project rules are stored in the `.cursor/rules` directory and apply to specific files or folders in your project. - - -Open your RivetKit project in Cursor - - Press `Cmd + Shift + P` (Mac) or `Ctrl + Shift + P` (Windows/Linux). - - Select `New Cursor Rule` and name it `RivetKit-development-guide`. - - - Set `Auto Attach` to `**/*.ts`. - - Paste [prompt.txt](/llm/prompt) into the rule. - - - -### Global Rules - -If you frequently work with RivetKit across multiple projects, you can add RivetKit-specific rules globally: - - - - Open Cursor and go to `Cursor Settings` > `Rules` > `User Rules` - - - Paste [prompt.txt](/llm/prompt) into the textbox - - - -Global rules will apply to all of your projects when using Cursor. - -## Example Queries for RivetKit - -Here are some useful prompts to try with Cursor when working with RivetKit: - -### Understand the Codebase - -``` -# Get an overview of RivetKit's architecture -Explain the architecture of RivetKit and how the different topologies work - -# Understand how actors communicate -Explain how actors communicate with each other in the coordinate topology - -# Learn about specific concepts -Explain the lifecycle hooks for actors and when each one is called -``` - -### Find Relevant Code - -``` -# Find implementations of specific components -Find the files that implement the Redis driver - -# Locate examples of specific patterns -Show me examples of RPC methods in the codebase - -# Understand actor state management -Explain how actor state is persisted between restarts -``` - -### Add New Features - -``` -# Create a new actor implementation -Help me create a new actor for managing user sessions - -# Add authentication to a actor -Show me how to add authentication to my actor's _onBeforeConnect method - -# Implement error handling -Help me implement proper error handling for my actor's RPC methods -``` - -### Debug Issues - -``` -# Diagnose connection problems -My actor connections are dropping, help me debug why - -# Fix state persistence issues -My actor state isn't persisting between restarts, what could be wrong? - -# Address scaling problems -My actors are using too much memory, how can I optimize them? -``` - -## Additional Resources - -- [Cursor Rules Documentation](https://docs.cursor.com/context/rules-for-ai) - diff --git a/docs/llm/docs-as-markdown.mdx b/docs/llm/docs-as-markdown.mdx deleted file mode 100644 index 02bd9ed3b..000000000 --- a/docs/llm/docs-as-markdown.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Docs As Markdown for LLMs -sidebarTitle: Docs as Markdown ---- - -RivetKit documentation is designed to be easily accessible for Large Language Models (LLMs). All documentation pages are automatically available as plain Markdown files by simply appending `.md` to the URL. - -## How to Access - -To access any RivetKit documentation page as Markdown: - -1. Navigate to the regular documentation URL (e.g., `https://RivetKit.org/concepts/state`) -2. Append `.md` to the URL (e.g., `https://RivetKit.org/concepts/state.md`) - -This will return the raw Markdown content of the documentation page. - -## Use Cases - -This feature enables seamless integration with AI tools by providing documentation in clean Markdown format. Key uses include: - -- **Context for LLM chats**: Importing relevant docs into LLM chat sessions for specific context -- **Web crawling**: Enabling efficient crawling of documentation content -- **AI agents**: Building AI agents with access to RivetKit documentation - -## Additional Resources - -- [prompt.txt](/llm/prompt) -- [llms.txt](/llm/llms) -- [llms-full.txt](/llm/llms-full) - diff --git a/docs/llm/llms-full.mdx b/docs/llm/llms-full.mdx deleted file mode 100644 index d524fc4ef..000000000 --- a/docs/llm/llms-full.mdx +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "llms-full.txt" -url: "/llms-full.txt" ---- - diff --git a/docs/llm/llms.mdx b/docs/llm/llms.mdx deleted file mode 100644 index c7390ea94..000000000 --- a/docs/llm/llms.mdx +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "llms.txt" -url: "/llms.txt" ---- - diff --git a/docs/llm/prompt.mdx b/docs/llm/prompt.mdx deleted file mode 100644 index 6a7a1aabd..000000000 --- a/docs/llm/prompt.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: "prompt.txt" ---- - -## Using `prompt.txt` for RivetKit - -The `prompt.txt` file provides LLMs with comprehensive information about RivetKit's conventions, terminology, and best practices. To use it: - -1. Copy the contents below to your clipboard -2. Paste it into your preferred AI assistant (Claude, ChatGPT, Cursor rules, Windsurf Rules, etc.) -3. Ask your RivetKit development questions after the prompt - -This structured information helps AI tools provide more accurate and contextually relevant guidance for your RivetKit development tasks. - -## AI Editor Guides - -Read the integration guide for your editor of choice: - - - - - - - -## `prompt.txt` - -````markdown prompt.txt -# RivetKit Development Guide - -This guide contains essential information for working with the RivetKit project. - -## Project Naming and Terminology - -- Use `RivetKit` when referring to the project in documentation and plain English -- Use `rivetkit` (kebab-case) when referring to the project in code, package names, and imports - -### Core Concepts - -- **Actor**: A stateful, long-lived entity that processes messages and maintains state -- **Manager**: Component responsible for creating, routing, and managing actor instances -- **Action**: Method for a actor to expose callable functions to clients -- **Event**: Asynchronous message sent from a actor to connected clients -- **Alarm**: Scheduled callback that triggers at a specific time - -## Build Commands - -- **Type Check:** `yarn check-types` - Verify TypeScript types -- **Check specific package:** `yarn check-types -F rivetkit` - Check only specified package -- **Build:** `yarn build` - Production build using Turbopack -- **Build specific package:** `yarn build -F rivetkit` - Build only specified package -- **Format:** `yarn fmt` - Format code with Biome - -## Driver Implementations - -Available driver implementations: - -- **Memory**: In-memory implementation for development and testing -- **Redis**: Production-ready implementation using Redis for persistence and pub/sub -- **Cloudflare Workers**: Uses Durable Objects for actor state persistence -- **Rivet**: Fully-managed cloud platform with built-in scaling and monitoring - -## Platform Support - -RivetKit supports multiple runtime environments: - -- **NodeJS**: Standard Node.js server environment -- **Cloudflare Workers**: Edge computing environment -- **Bun**: Fast JavaScript runtime alternative to Node.js -- **Rivet**: Cloud platform with built-in scaling and management - -## Package Import Resolution - -When importing from workspace packages, always check the package's `package.json` file under the `exports` field to determine the correct import paths: - -1. Locate the package's `package.json` file -2. Find the `exports` object which maps subpath patterns to their file locations -3. Use these defined subpaths in your imports rather than direct file paths - -## Code Style Guidelines - -- **Formatting:** Uses Biome for consistent formatting -- **Imports:** Organized imports enforced, unused imports warned -- **TypeScript:** Strict mode enabled, target ESNext -- **Naming:** - - camelCase for variables, functions - - PascalCase for classes, interfaces, types - - UPPER_CASE for constants -- **Error Handling:** - - Use `UserError` for client-safe errors - - Use `InternalError` for internal errors - -## Project Structure - -- Monorepo with Yarn workspaces and Turborepo -- Core code in `packages/rivetkit/` -- Platform implementations in `packages/platforms/` -- Driver implementations in `packages/drivers/` - -## State Management - -- Each actor owns and manages its own isolated state via `c.state` -- State is automatically persisted between action calls -- State is initialized via `createState` function or `state` constant -- Only JSON-serializable types can be stored in state -- Use `onStateChange` to react to state changes - -## Authentication and Security - -- Authentication is handled through the `onBeforeConnect` lifecycle hook -- Connection state is accessed with `c.conn.state` -- Access control should be implemented for each action -- Throwing an error in `onBeforeConnect` will abort the connection -- Use `UserError` for safe error messages to clients -- Use data validation libraries like zod for input validation - -## Actions and Events - -- **Actions**: Used for clients to call actor functions -- **Events**: For actors to publish updates to clients -- Actions are defined in the `actions` object of the actor configuration -- Helper functions outside the `actions` object are not callable by clients -- Broadcasting is done via `c.broadcast(name, data)` -- Specific client messaging uses `conn.send(name, data)` -- Clients subscribe to events with `actor.on(eventName, callback)` - -## Lifecycle Hooks - -- `createState()`: Function that returns initial actor state -- `onStart(c)`: Called any time actor is started (after restart/upgrade) -- `onStateChange(c, newState)`: Called when actor state changes -- `onBeforeConnect(c)`: Called when new client connects -- `onConnect(c)`: Executed after client connection succeeds -- `onDisconnect(c)`: Called when client disconnects - -## Actor Management - -- App is configured with actors using `setup({ use: { actorName }})` followed by `serve(registry)` -- Actors are accessed by client using `client.actorName.get()` -- Actors can pass an ID parameter or object with `client.actorName.get(id)` or `client.actorName.get({key: value})` -- Actors can be shut down with `c.shutdown()` from within the actor - -## Scaling and Architecture Guidelines - -- Each actor should have a single responsibility -- Keep state minimal and relevant to the actor's core function -- Use separate actors for different entity types (users, rooms, documents) -- Avoid too many cross-actor communications -- Use appropriate topology based on your scaling needs - -## Scheduling - -- Schedule future events with `c.after(duration, fn, ...args)` -- Schedule events for specific time with `c.at(timestamp, fn, ...args)` -- Scheduled events persist across actor restarts - -## CORS Configuration - -- Configure CORS to allow cross-origin requests in production -- Set allowed origins, methods, headers, and credentials -- For development, use `cors: { origin: "http://localhost:3000" }` - -## Development Best Practices - -- Prefer functional actor pattern with `actor({ ... })` syntax -- Use zod for runtime type validation -- Use `assertUnreachable(x: never)` for exhaustive type checking -- Add proper JSDoc comments for public APIs -- Run `yarn check-types` regularly during development -- Use `tsx` CLI to execute TypeScript scripts directly -```` diff --git a/docs/llm/windsurf.mdx b/docs/llm/windsurf.mdx deleted file mode 100644 index fe234e624..000000000 --- a/docs/llm/windsurf.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: "Using Windsurf with RivetKit" -sidebarTitle: "Windsurf" ---- - -This guide shows how to integrate RivetKit with Windsurf to enhance your developer experience through AI-assisted coding. - -## Setting Up Windsurf Rules for RivetKit - -Windsurf rules allow you to customize how the AI assistant (Cascade) behaves when working with RivetKit code. By providing project-specific context, you'll get more accurate and relevant suggestions. - -### Workspace Rules (Recommended) - -Workspace rules are stored in the `.windsurfrules` file in your project root and apply to your local workspace. - - -Open your RivetKit project in Windsurf - - Navigate to "Windsurf - Settings" (at the bottom right) > "Settings" > "Cascade" > "Set Workspace AI Rules" and click "Edit Rules." - - This will create a `.windsurfrules` file in your project root. - - - Paste [prompt.txt](/llm/prompt) into the `.windsurfrules` file. - - - -### Global Rules - -If you frequently work with RivetKit across multiple projects, you can add RivetKit-specific rules globally: - - - - Navigate to "Windsurf - Settings" (at the bottom right) > "Settings" > "Cascade" > "Set Global AI Rules" and click "Edit Rules." - - - Paste [prompt.txt](/llm/prompt) into the `global_rules.md` file. - - - -Global rules will apply to all of your projects when using Windsurf. - -## Example Queries for RivetKit - -Here are some useful prompts to try with Windsurf when working with RivetKit: - -### Understand the Codebase - -``` -# Get an overview of RivetKit's architecture -Explain the architecture of RivetKit and how the different topologies work - -# Understand how actors communicate -Explain how actors communicate with each other in the coordinate topology - -# Learn about specific concepts -Explain the lifecycle hooks for actors and when each one is called -``` - -### Find Relevant Code - -``` -# Find implementations of specific components -Find the files that implement the Redis driver - -# Locate examples of specific patterns -Show me examples of RPC methods in the codebase - -# Understand actor state management -Explain how actor state is persisted between restarts -``` - -### Add New Features - -``` -# Create a new actor implementation -Help me create a new actor for managing user sessions - -# Add authentication to a actor -Show me how to add authentication to my actor's _onBeforeConnect method - -# Implement error handling -Help me implement proper error handling for my actor's RPC methods -``` - -### Debug Issues - -``` -# Diagnose connection problems -My actor connections are dropping, help me debug why - -# Fix state persistence issues -My actor state isn't persisting between restarts, what could be wrong? - -# Address scaling problems -My actors are using too much memory, how can I optimize them? -``` - -## Additional Resources - -- [Windsurf Rules Documentation](https://docs.codeium.com/windsurf/memories#windsurfrules) - diff --git a/docs/media/.DS_Store b/docs/media/.DS_Store deleted file mode 100644 index 84026c6cb4f5df773f384728d122470fb84cd5ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5EDE3>-s>Aexkvdj)Q=ijouL0w5u1LV^OMepSxJ(HMV(h+fh}qCsQHo?WkJ zpWYPD&j4)x`E(D=08HtQICvPFpSzFjsxn5T^Nwe1vBN9g_p4F$>4bA{@P;)W@$s9# z+pM>nm%RBjRaq$@1*Cu!kOETR0tLMH(x$hGic&xdNP!;({QJ=8j=gY5j86wci~z(5 z(_vi4EJ19ZAoju`kr|pLm6%kk5yO(se5<-%I3y+=R>OzYldUEci>LGc7Ui&>s3--b zz_9|?xt)3cU((Oa|HmZlq<|FoR|?o#Iw%a$j)~EZ hx$$;<7e!gue9iM-I3xz0`JfZ^GvK<&q`+S*@C}*p6}bQa diff --git a/docs/media/platforms/rivet/dash.png b/docs/media/platforms/rivet/dash.png deleted file mode 100644 index e54d1479f933399ceb5881cb07cce2598f73c7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543736 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

PG-L$%FJ9Bli&iY|*IJ_A0 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

AO}!>ZVhg!~Z@U|B;>@0f^9ys%in5n3ec1 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 ycI_~~Cc5)Z_me3w? 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

DFK!-sGvm^HV~>f&IIPK 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�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

  • L5F?E^(QW^pE|-6b_; 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 diff --git a/docs/media/platforms/rivet/service-token.png b/docs/media/platforms/rivet/service-token.png deleted file mode 100644 index b516b7b0df4b118bebbb5866ae66c33d4cf69b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339611 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 Fm)!H=*-S$r)x?azsoyE-l^9b@9b^l~OA| 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

    7Svj24F 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 - -## Deploy - - - - - - Install the Bun platform package: - - ```sh - bun add rivetkit/bun - ``` - - - - Create a file `src/index.ts` to start your RivetKit server: - - ```typescript src/index.ts - import { serve } from "@rivetkit/bun"; - import { app } from "../actors/app"; - - // Start the server with file-system driver (default) - serve(registry); - ``` - - - - Build and run your production server: - - ```sh - bun build ./src/index.ts --outdir ./dist - bun ./dist/index.js - ``` - - Deploy to any cloud provider of your choice. - - - - - - - -## Using Different Drivers - -By default, RivetKit for Bun uses the file-system driver, which persists state between restarts. - -For simple deployments, you can switch between drivers with: - -```typescript -serve(app, { - mode: "in-memory", // Switch to in-memory (file-system is default) -}); -``` - -For production, consider using an alternative driver like [Redis](/drivers/redis). - -## Available Regions - -Bun typically runs in a single region at a time. For multi-region deployments, consider: - -- [Rivet](/platforms/rivet) - Managed cloud service with global deployment -- [Cloudflare Workers](/platforms/cloudflare-workers) - Edge computing with global distribution - - diff --git a/docs/platforms/cloudflare-workers.mdx b/docs/platforms/cloudflare-workers.mdx deleted file mode 100644 index 760d4954a..000000000 --- a/docs/platforms/cloudflare-workers.mdx +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Cloudflare Workers (Durable Objects) -sidebarTitle: Durable Objects ---- - -import SetupNextSteps from '/snippets/setup-next-steps.mdx'; -import MvpWarning from '/snippets/mvp-warning.mdx'; -import ExtraNotes from "/snippets/platform-extra-notes.mdx"; -import StepStartFramework from "/snippets/step-start-framework.mdx"; -import StepUpdateClient from "/snippets/step-update-client.mdx"; - -The Cloudflare Workers platform with Durable Objects provides a robust environment for running RivetKit at the edge. - - - -## Deploy - - - - - - Install the Cloudflare Workers platform package: - - - ```sh npm - npm install rivetkit/cloudflare-workers - ``` - - ```sh pnpm - pnpm add rivetkit/cloudflare-workers - ``` - - ```sh yarn - yarn add rivetkit/cloudflare-workers - ``` - - ```sh bun - bun add rivetkit/cloudflare-workers - ``` - - - - - Create a file `src/index.ts` to handle Cloudflare Workers integration: - - ```typescript src/index.ts - import { createHandler } from "@rivetkit/cloudflare-workers"; - import { app } from "../actors/app"; - - // Create handlers for Cloudflare Workers - const { handler, ActorHandler } = createHandler(app); - - // Export the handlers for Cloudflare - export { handler as default, ActorHandler }; - ``` - - - - Create a KV namespace for your actors: - - ```sh - npx wrangler kv:namespace create ACTOR_KV - ``` - - Take note of the KV namespace ID from the output, as you'll need it in the next step. - - - - Create a `wrangler.jsonc` configuration and add your KV namespace ID from the previous step: - - ```json wrangler.jsonc - { - "$schema": "node_modules/wrangler/config-schema.json", - "name": "my-app", - "main": "src/index.ts", - "compatibility_date": "2025-04-04", - "observability": { - "enabled": true - }, - "migrations": [ - { - "tag": "v1", - "new_classes": ["ActorHandler"] - } - ], - "durable_objects": { - "bindings": [ - { - "name": "ACTOR_DO", - "class_name": "ActorHandler" - } - ] - }, - "kv_namespaces": [ - { - "binding": "ACTOR_KV", - "id": "your-namespace-id-here" // Replace with your actual ID - } - ] - } - ``` - - - - Deploy your project to Cloudflare Workers: - - ```sh - npx wrangler deploy - ``` - - Your RivetKit application will be available at your Cloudflare Workers URL. - - - - - - - -## Accessing Cloudflare Context And Bindings - -You can access Cloudflare-specific features like the [DurableObjectState](https://developers.cloudflare.com/durable-objects/api/state/) and environment bindings from your actor: - -```typescript -import { actor } from "rivetkit"; - -const myActor = actor({ - // Load Cloudflare-specific variables - createVars: (c, cloudflare) => ({ - ctx: cloudflare.ctx, - env: cloudflare.env, - }), - actions: { - foo: async (c) => { - // Access DurableObjectState - await c.vars.ctx.storage.get("foo"); - - // Access bindings - await c.vars.env.MY_BUCKET.put(key, "foo"); - }, - } -}); -``` - -## Available Regions - -See available regions [here](https://developers.cloudflare.com/durable-objects/reference/data-location/#supported-locations-1). - -Cloudflare does not guarantee your code will run in the requested region. - - diff --git a/docs/platforms/nodejs.mdx b/docs/platforms/nodejs.mdx deleted file mode 100644 index 9dc10a784..000000000 --- a/docs/platforms/nodejs.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Node.js ---- - -import SetupNextSteps from "/snippets/setup-next-steps.mdx"; -import MvpWarning from "/snippets/mvp-warning.mdx"; -import ExtraNotes from "/snippets/platform-extra-notes.mdx"; -import StepStartFramework from "/snippets/step-start-framework.mdx"; -import StepUpdateClient from "/snippets/step-update-client.mdx"; - -Node.js provides a robust environment for running RivetKit, ideal for development and production deployments. - - - -## Deploy - - - - - - Install the Node.js platform package: - - - ```sh npm - npm install rivetkit/nodejs - ``` - - ```sh pnpm - pnpm add rivetkit/nodejs - ``` - - ```sh yarn - yarn add rivetkit/nodejs - ``` - - ```sh bun - bun add rivetkit/nodejs - ``` - - - - - Create a file `src/index.ts` to start your RivetKit server: - - ```typescript src/index.ts - import { serve } from "@rivetkit/nodejs"; - import { app } from "../actors/app"; - - // Start the server with file-system driver (default) - serve(registry); - ``` - - - - Compile your TypeScript code and run the server: - - ```sh - npx -p typescript tsc - node dist/index.js - ``` - - Deploy to any cloud provider of your choice. - - - - - - - - -## Using Different Drivers - -By default, RivetKit for Node.js uses the file-system driver, which persists state between restarts. - -For simple deployments, you can switch between drivers with: - -```typescript -serve(app, { - mode: "in-memory", // Switch to in-memory (file-system is default) -}); -``` - -For production, consider using an alternative driver like [Redis](/drivers/redis). - -## Available Regions - -Node.js typically runs in a single region at a time. For multi-region deployments, consider: - -- [Rivet](/platforms/rivet) - Managed cloud service with global deployment -- [Cloudflare Workers](/platforms/cloudflare-workers) - Edge computing with global distribution - - diff --git a/docs/platforms/rivet.mdx b/docs/platforms/rivet.mdx deleted file mode 100644 index 47afaeaed..000000000 --- a/docs/platforms/rivet.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Rivet ---- - -import MvpWarning from "/snippets/mvp-warning.mdx"; -import StepStartFramework from "/snippets/step-start-framework.mdx"; -import StepUpdateClient from "/snippets/step-update-client.mdx"; -import ExtraNotes from "/snippets/platform-extra-notes.mdx"; -import SetupNextSteps from "/snippets/setup-next-steps.mdx"; - -Rivet provides a fully managed cloud service for running RivetKit, with automatic scaling, global deployment, and built-in monitoring. - - - -## Deploy - - - - - - Install the Rivet platform package: - - - ```sh npm - npm install rivetkit/rivet - ``` - - ```sh pnpm - pnpm add rivetkit/rivet - ``` - - ```sh yarn - yarn add rivetkit/rivet - ``` - - ```sh bun - bun add rivetkit/rivet - ``` - - - - - Deploy your RivetKit application to Rivet: - - - ```sh npm - npx rivetkit/cli@latest deploy rivet actors/app.ts - ``` - - ```sh pnpm - pnpm exec rivetkit/cli@latest deploy rivet actors/app.ts - ``` - - ```sh yarn - yarn rivetkit/cli@latest deploy rivet actors/app.ts - ``` - - ```sh bun - bunx rivetkit/cli@latest deploy rivet actors/app.ts - ``` - - - This will: - 1. Prompt you to log in to Rivet if needed - 2. Ask you to select or create a Rivet project - 3. Build and deploy your application - 4. Provide you with your new endpoint - - Update your client code with the new endpoint URL and test your deployed application. - - - - - - - -## Accessing Rivet Context - -[Rivet's `ActorContext`](https://rivet.gg/docs/javascript-runtime#the-actor-context-object) can be accessed from `createVars`. - -```typescript -import { actor } from "rivetkit"; - -const myActor = actor({ - // Load Rivet-specific variables - createVars: (c, rivet) => ({ - rivet: rivet.ctx, - }), - actions: { - foo: async (c) => { - // Access ActorContext - c.log.info(`Region: ${c.vars.rivet.metadata.region.name}`); - await c.vars.rivet.kv.get("foo"); - }, - } -}); -``` - -## Available Regions - -Rivet supports deploying your actors to multiple regions automatically. You can specify region preferences in your Rivet project settings in the Rivet Hub. - -See available regions [here](https://rivet.gg/docs/regions). - - diff --git a/docs/scripts/faq.js b/docs/scripts/faq.js deleted file mode 100644 index 3e86410f6..000000000 --- a/docs/scripts/faq.js +++ /dev/null @@ -1,50 +0,0 @@ -function initializeFAQ() { - // Find all FAQ sections that need initialization - document.querySelectorAll('.faq-section:not([data-faq-initialized])').forEach(faqSection => { - // Skip if already initialized - if (faqSection.hasAttribute('data-faq-initialized')) return; - - console.log("[Initialize] FAQ", faqSection?.id || "all"); - - // Mark as initialized - faqSection.setAttribute('data-faq-initialized', 'true'); - - // Find all accordions in this section - const accordions = faqSection.querySelectorAll('.faq-accordion'); - if (!accordions.length) return; - - accordions.forEach(accordion => { - // Skip if already initialized - if (accordion.hasAttribute('data-initialized')) return; - - const button = accordion.querySelector('.faq-question'); - const answer = accordion.querySelector('.faq-answer'); - - if (!button || !answer) return; - - // Mark as initialized to prevent duplicate listeners - accordion.setAttribute('data-initialized', 'true'); - - button.addEventListener('click', () => { - const isOpen = accordion.getAttribute('data-state') === 'open'; - - // Close all other accordions in this section - accordions.forEach(otherAccordion => { - if (otherAccordion !== accordion) { - otherAccordion.setAttribute('data-state', 'closed'); - } - }); - - // Toggle current accordion - accordion.setAttribute('data-state', isOpen ? 'closed' : 'open'); - }); - }); - }); -} - -// Initial run on DOM ready -if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", initializeFAQ); -} else { - initializeFAQ(); -} \ No newline at end of file diff --git a/docs/snippets/cloudflare-deploy.mdx b/docs/snippets/cloudflare-deploy.mdx deleted file mode 100644 index 04820035e..000000000 --- a/docs/snippets/cloudflare-deploy.mdx +++ /dev/null @@ -1,36 +0,0 @@ -1. Create a new KV namespace with: - - ```sh - npx wrangler kv namespace create ACTOR_KV - ``` - -2. After creating the KV namespace, you will receive an ID. Update your `wrangler.json` file by replacing the placeholder in the `kv_namespaces` section with this ID. It should look like this: - - ```json - { - "kv_namespaces": [ - { - "binding": "ACTOR_KV", - "id": "your-namespace-id-here" // Replace with your actual ID - } - ] - // ...etc... - } - ``` - -3. Deploy your project to Cloudflare Workers by running: - - ```sh - npx wrangler deploy - ``` - -4. Update `tests/client.ts` (or wherever your client lives) to use the deployed endpoint. Replace the local endpoint in `client.ts` with your Cloudflare Workers URL: - - ```typescript - import { createClient } from "rivetkit/client"; - import type { App } from "../src/index"; - - const client = createClient("https://your-actor-subdomain.actors.dev"); - ``` - - Ensure you replace `your-actor-subdomain` with the actual subdomain assigned to your actor. diff --git a/docs/snippets/create-actor-cli.mdx b/docs/snippets/create-actor-cli.mdx deleted file mode 100644 index 65366ec96..000000000 --- a/docs/snippets/create-actor-cli.mdx +++ /dev/null @@ -1,21 +0,0 @@ - -```sh npx -npx create-actor@latest -``` - -```sh npm -npm create actor@latest -``` - -```sh pnpm -pnpm create actor@latest -``` - -```sh yarn -yarn create actor@latest -``` - -```sh bun -bun create actor@latest -``` - diff --git a/docs/snippets/driver-note.mdx b/docs/snippets/driver-note.mdx deleted file mode 100644 index 210b212f8..000000000 --- a/docs/snippets/driver-note.mdx +++ /dev/null @@ -1,3 +0,0 @@ - - You rarely need to manually configure drivers. The platform package you're using will configure the appropriate drivers for you. See the documentation for your platform for details. - diff --git a/docs/snippets/integration-existing-projects.mdx b/docs/snippets/integration-existing-projects.mdx deleted file mode 100644 index c8baf0b03..000000000 --- a/docs/snippets/integration-existing-projects.mdx +++ /dev/null @@ -1,3 +0,0 @@ - - If you already have an existing application and want to mount RivetKit on a subpath, see our [Hono integration guide](/integrations/hono). Remember to specify the same path in `config.basePath` as where you mount the router. - diff --git a/docs/snippets/landing-comparison-table.mdx b/docs/snippets/landing-comparison-table.mdx deleted file mode 100644 index 4cac8baf8..000000000 --- a/docs/snippets/landing-comparison-table.mdx +++ /dev/null @@ -1,561 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Feature - RivetKit - RivetKit - - Durable Objects - Durable Objects - - Socket.io - Socket.io - - Redis - Redis - - AWS Lambda - AWS Lambda -
    -
    -
    -
    - - In-Memory State -
    -
    -
    - Fast access to in-memory data without complex caching -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - -
    - Socket.io -
    -
    -
    - -
    - Redis -
    -
    -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - Persisted State -
    -
    -
    - Built-in persistence that survives crashes and restarts -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - Socket.io -
    -
    -
    - Redis -
    -
    -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - Actions -
    -
    -
    - Define and call functions that interact with your actors -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - -
    - Socket.io -
    -
    -
    - Redis -
    -
    -
    - -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - Events (Pub/Sub) -
    -
    -
    - Real-time messaging with publish/subscribe patterns -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - -
    - Socket.io -
    -
    -
    - -
    - Redis -
    -
    -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - Scheduling -
    -
    -
    - Run tasks in the future without external schedulers -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - Socket.io -
    -
    -
    - Redis -
    -
    -
    - -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - Edge Computing -
    -
    -
    - Deploy globally for low-latency access from anywhere -
    -
    -
    -
    - -
    - ¹ -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    - RivetKit ¹ -
    -
    -
    - -
    - Durable Objects -
    -
    -
    - Socket.io -
    -
    -
    - Redis -
    -
    -
    - -
    - AWS Lambda -
    -
    -
    -
    -
    -
    - - No Vendor Lock -
    -
    -
    - Run on multiple platforms without rewriting your app -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    - RivetKit -
    -
    -
    - Durable Objects -
    -
    -
    - -
    - Socket.io -
    -
    -
    - -
    - Redis -
    -
    -
    - AWS Lambda -
    -
    -
    - -

    diff --git a/docs/snippets/landing-manifesto.mdx b/docs/snippets/landing-manifesto.mdx deleted file mode 100644 index 68ba9d51b..000000000 --- a/docs/snippets/landing-manifesto.mdx +++ /dev/null @@ -1,21 +0,0 @@ -
    -

    Why We Created RivetKit

    -

    - Stateful serverless is the future of how applications will be architected. -

    -

    - Startups increasingly build on stateful serverless to ship faster, achieve better performance, and outscale databases like Postgres. The actor model – closely related to stateful serverless – has an established history in frameworks like Elixir, Orleans, and Akka, though these typically involve steep learning curves and complex infrastructure. Cloudflare demonstrates the power of this approach, having built their entire infrastructure – including R2, Workflows, and Queues – on their stateful serverless engine called Durable Objects. -

    -

    - With years of experience in gaming infrastructure, we've seen firsthand how the stateful serverless model excels. After building numerous systems like matchmaking, chat, presence, and social networks using stateful serverless, we're convinced it's hands down the best way to build applications. However, the ecosystem lacks accessibility and resources. -

    -

    - To popularize stateful serverless, we decided to build something that works for everyone. No vendor lock-in, no steep learning curve, and a community-driven approach that brings the best ideas from different ecosystems together. -

    -

    - At Rivet, we maintain an open-source runtime to run stateful serverless workloads – including RivetKit. We see maintaining RivetKit as a rising tide: more people will build applications this way, and we hope to provide the best deployment, monitoring, and collaboration solution for this architecture. -

    -
    - Nathan Flurry, Nicholas Kissel, and the Rivet Team -
    -
    \ No newline at end of file diff --git a/docs/snippets/landing-tech.mdx b/docs/snippets/landing-tech.mdx index cdf1da552..0a6e6be99 100644 --- a/docs/snippets/landing-tech.mdx +++ b/docs/snippets/landing-tech.mdx @@ -3,18 +3,18 @@

    Runs Anywhere

    Deploy RivetKit anywhere - from serverless platforms to your own infrastructure with RivetKit's flexible runtime options.

    -

    Don't see the runtime you want? Add your own.

    +

    Don't see the runtime you want? Add your own.

    All-In-One

    - + Rivet Rivet - + Cloudflare Cloudflare @@ -39,11 +39,11 @@ Supabase Help Wanted - + Bun Bun - + Node.js Node.js @@ -88,7 +88,7 @@

    Frameworks

    - + React React @@ -130,18 +130,21 @@ Hono Hono - + + Express + Express + + + Elysia + Elysia + + Vitest Vitest - - Resend - Resend - Better Auth Better Auth - On The Roadmap AI SDK diff --git a/docs/snippets/mvp-warning.mdx b/docs/snippets/mvp-warning.mdx deleted file mode 100644 index f5570703e..000000000 --- a/docs/snippets/mvp-warning.mdx +++ /dev/null @@ -1,3 +0,0 @@ - - RivetKit is still pre-v1.0. Please help us by report bugs on [GitHub Issues](https://github.com/rivet-gg/rivetkit/issues)! - diff --git a/docs/snippets/platform-extra-notes.mdx b/docs/snippets/platform-extra-notes.mdx deleted file mode 100644 index b88267b20..000000000 --- a/docs/snippets/platform-extra-notes.mdx +++ /dev/null @@ -1,10 +0,0 @@ -## CORS Configuration - -For security reasons, you should configure proper CORS settings in production. In the example above, we used `cors: { origin: "*" }` which allows requests from any domain. - -For production deployments, specify the exact domains that should be allowed to connect to your actors. Learn more in the [CORS documentation](/concepts/cors). - -## Integration with Existing Projects - -If you already have an existing application and want to mount RivetKit on a subpath, see our [Hono integration guide](/integrations/hono). Remember to specify the same path in `config.basePath` as where you mount the router. - diff --git a/docs/snippets/setup-actor.mdx b/docs/snippets/setup-actor.mdx deleted file mode 100644 index 750c04edb..000000000 --- a/docs/snippets/setup-actor.mdx +++ /dev/null @@ -1,22 +0,0 @@ -```typescript src/app.ts -import { actor, setup } from "rivetkit"; - -// Create actor -const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - c.broadcast("newCount", c.state.count); - return c.state.count; - } - } -}); - -// Create the application -export const registry = setup({ - use: { counter }, - cors: { origin: "http://localhost:8080" } -}); -``` - diff --git a/docs/snippets/setup-next-steps.mdx b/docs/snippets/setup-next-steps.mdx deleted file mode 100644 index 03229781a..000000000 --- a/docs/snippets/setup-next-steps.mdx +++ /dev/null @@ -1,9 +0,0 @@ -## Next Steps - - - - - - - - diff --git a/docs/snippets/setup-typescript.mdx b/docs/snippets/setup-typescript.mdx deleted file mode 100644 index 1d4b97c5e..000000000 --- a/docs/snippets/setup-typescript.mdx +++ /dev/null @@ -1,23 +0,0 @@ -Set up TypeScript: - - -```sh npm -npm install typescript @types/node tsx --save-dev -npx tsc --init --target es2022 --module nodenext --moduleResolution nodenext --outDir dist -``` - -```sh pnpm -pnpm add -D typescript @types/node tsx -pnpm exec tsc --init --target es2022 --module nodenext --moduleResolution nodenext --outDir dist -``` - -```sh yarn -yarn add -D typescript @types/node tsx -yarn tsc --init --target es2022 --module nodenext --moduleResolution nodenext --outDir dist -``` - -```sh bun -bun add -D typescript @types/node tsx -bun tsc --init --target es2022 --module nodenext --moduleResolution nodenext --outDir dist -``` - diff --git a/docs/snippets/step-define-actor.mdx b/docs/snippets/step-define-actor.mdx deleted file mode 100644 index ca7aba0b3..000000000 --- a/docs/snippets/step-define-actor.mdx +++ /dev/null @@ -1,25 +0,0 @@ - - Create a file `actors/app.ts` in your project with your actor definition: - - ```typescript actors/app.ts - import { actor, setup } from "rivetkit"; - - // Create actor - const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - c.broadcast("newCount", c.state.count); - return c.state.count; - } - } - }); - - // Create the application - export const registry = setup({ - use: { counter }, - cors: { origin: "*" } // Configure CORS for your production domains in production - }); - ``` - diff --git a/docs/snippets/step-deploy.mdx b/docs/snippets/step-deploy.mdx deleted file mode 100644 index 8ae946791..000000000 --- a/docs/snippets/step-deploy.mdx +++ /dev/null @@ -1,11 +0,0 @@ - - Now that you have your project running, deploy your application to one of these platforms: - - - - - - - - - diff --git a/docs/snippets/step-run-studio.mdx b/docs/snippets/step-run-studio.mdx deleted file mode 100644 index 38efd0d78..000000000 --- a/docs/snippets/step-run-studio.mdx +++ /dev/null @@ -1,26 +0,0 @@ - - Launch the development server with: - - - ```sh npm - npx rivetkit/cli@latest dev actors/app.ts - ``` - - ```sh pnpm - pnpm exec rivetkit/cli@latest dev actors/app.ts - ``` - - ```sh yarn - yarn rivetkit/cli@latest dev actors/app.ts - ``` - - ```sh bun - bunx rivetkit/cli@latest dev actors/app.ts - ``` - - - This will automatically start your app and open the studio in your browser. The studio supports hot-reloading, state inspection, visual RPC testing, and more debugging tools. - - ![RivetKit Studio](/images/screenshots/studio/simple.png) - - diff --git a/docs/snippets/step-start-framework.mdx b/docs/snippets/step-start-framework.mdx deleted file mode 100644 index 5ab7fb7e3..000000000 --- a/docs/snippets/step-start-framework.mdx +++ /dev/null @@ -1,10 +0,0 @@ - - Start with your framework of choice: - - - - - - - - diff --git a/docs/snippets/step-update-client.mdx b/docs/snippets/step-update-client.mdx deleted file mode 100644 index 091c5463b..000000000 --- a/docs/snippets/step-update-client.mdx +++ /dev/null @@ -1,21 +0,0 @@ - - Update your client to connect to your deployed app: - - - - ```typescript TypeScript - const client = createClient(/* FILL ME IN */); - ``` - - ```rust Rust - let client = Client::new(/* FILL ME IN */, TransportKind::WebSocket, EncodingKind::Cbor); - ``` - - ```python Python - client = ActorClient( - # FILL ME IN - ) - ``` - - - diff --git a/docs/support/enterprise.mdx b/docs/support/enterprise.mdx deleted file mode 100644 index 1291bee15..000000000 --- a/docs/support/enterprise.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Enterprise" ---- - -RivetKit is developed and maintained by [Rivet](https://rivet.gg), offering comprehensive enterprise support and deployment solutions tailored to your organization's needs. - -Our enterprise services include: - -- Dedicated technical support -- Custom deployment configurations -- Training and implementation assistance - -For enterprise inquiries, please contact our solutions team at [rivet.gg/sales](https://rivet.gg/sales). - diff --git a/docs/workflows/overview.mdx b/docs/workflows/overview.mdx deleted file mode 100644 index ec51d8b17..000000000 --- a/docs/workflows/overview.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Rivet Workflows -icon: square-info -sidebarTitle: "Overview" -description: TODO ---- - -TODO diff --git a/examples/better-auth-external-db/README.md b/examples/better-auth-external-db/README.md index 936e59286..a7acac3e8 100644 --- a/examples/better-auth-external-db/README.md +++ b/examples/better-auth-external-db/README.md @@ -21,46 +21,38 @@ cd rivetkit/examples/better-auth-external-db npm install ``` -### Database Setup - -Initialize the SQLite database with Better Auth tables: - -```sh -npm run db:setup -``` - -This will create the `auth.sqlite` database file with the required tables for user authentication. - ### Development ```sh npm run dev ``` -Open your browser to `http://localhost:5173` to see the frontend and the backend will be running on `http://localhost:8080`. +The database migrations will run automatically on startup. Open your browser to `http://localhost:5173` to see the frontend and the backend will be running on `http://localhost:8080`. ## Features - **Authentication**: Email/password authentication using Better Auth -- **Protected Actors**: RivetKit actors with authentication via `onAuth` hook +- **Protected Actors**: Rivet Actors with authentication via `onAuth` hook - **Real-time Chat**: Authenticated chat room with real-time messaging - **External Database**: Shows how to configure Better Auth with external database (SQLite example) ## How It Works -1. **Better Auth Setup**: Configured with SQLite database for persistent user storage +1. **Better Auth Setup**: Configured with SQLite database for persistent user storage (auto-migrated in development) 2. **Protected Actor**: The `chatRoom` actor uses the `onAuth` hook to verify user sessions 3. **Frontend Integration**: React components handle authentication flow and chat interface 4. **Session Management**: Better Auth handles session creation, validation, and cleanup +5. **Auto-Migration**: Database schema is automatically migrated when starting the development server ## Database Commands -- `npm run db:setup` - Initialize SQLite database with Better Auth tables +- `npm run db:generate` - Generate migration files for database schema changes +- `npm run db:migrate` - Apply migrations to the database (used in production) ## Key Files - `src/backend/auth.ts` - Better Auth configuration with SQLite database -- `src/backend/registry.ts` - RivetKit actor with authentication +- `src/backend/registry.ts` - Rivet Actor with authentication - `src/frontend/components/AuthForm.tsx` - Login/signup form - `src/frontend/components/ChatRoom.tsx` - Authenticated chat interface - `auth.sqlite` - SQLite database file (auto-created) diff --git a/examples/better-auth-external-db/better-auth_migrations/2025-06-27T06-53-24.043Z.sql b/examples/better-auth-external-db/better-auth_migrations/2025-06-27T06-53-24.043Z.sql new file mode 100644 index 000000000..13b82ff1d --- /dev/null +++ b/examples/better-auth-external-db/better-auth_migrations/2025-06-27T06-53-24.043Z.sql @@ -0,0 +1,7 @@ +create table "user" ("id" text not null primary key, "name" text not null, "email" text not null unique, "emailVerified" integer not null, "image" text, "createdAt" date not null, "updatedAt" date not null); + +create table "session" ("id" text not null primary key, "expiresAt" date not null, "token" text not null unique, "createdAt" date not null, "updatedAt" date not null, "ipAddress" text, "userAgent" text, "userId" text not null references "user" ("id")); + +create table "account" ("id" text not null primary key, "accountId" text not null, "providerId" text not null, "userId" text not null references "user" ("id"), "accessToken" text, "refreshToken" text, "idToken" text, "accessTokenExpiresAt" date, "refreshTokenExpiresAt" date, "scope" text, "password" text, "createdAt" date not null, "updatedAt" date not null); + +create table "verification" ("id" text not null primary key, "identifier" text not null, "value" text not null, "expiresAt" date not null, "createdAt" date, "updatedAt" date); \ No newline at end of file diff --git a/examples/better-auth-external-db/package.json b/examples/better-auth-external-db/package.json index 5c4cc3ab1..45c2950a3 100644 --- a/examples/better-auth-external-db/package.json +++ b/examples/better-auth-external-db/package.json @@ -4,13 +4,14 @@ "private": true, "type": "module", "scripts": { - "dev": "concurrently \"npm run dev:backend\" \"npm run dev:frontend\"", + "dev": "pnpm db:migrate && concurrently \"npm run dev:backend\" \"npm run dev:frontend\"", "dev:backend": "tsx --watch src/backend/server.ts", "dev:frontend": "vite", "build": "vite build", "check-types": "tsc --noEmit", "test": "vitest run", - "db:setup": "tsx scripts/setup-db.ts" + "db:generate": "pnpm dlx @better-auth/cli@latest generate --config src/backend/auth.ts", + "db:migrate": "pnpm dlx @better-auth/cli@latest migrate --config src/backend/auth.ts -y" }, "devDependencies": { "@rivetkit/actor": "workspace:*", diff --git a/examples/better-auth-external-db/scripts/setup-db.ts b/examples/better-auth-external-db/scripts/setup-db.ts deleted file mode 100644 index 48b99b0eb..000000000 --- a/examples/better-auth-external-db/scripts/setup-db.ts +++ /dev/null @@ -1,66 +0,0 @@ -import Database from "better-sqlite3"; - -// Create SQLite database and tables for Better Auth -const db = new Database("/tmp/auth.sqlite"); - -// Create user table -db.exec(` - CREATE TABLE IF NOT EXISTS user ( - id TEXT PRIMARY KEY, - email TEXT UNIQUE NOT NULL, - emailVerified BOOLEAN NOT NULL DEFAULT FALSE, - name TEXT NOT NULL, - createdAt INTEGER NOT NULL, - updatedAt INTEGER NOT NULL - ); -`); - -// Create session table -db.exec(` - CREATE TABLE IF NOT EXISTS session ( - id TEXT PRIMARY KEY, - userId TEXT NOT NULL, - expiresAt INTEGER NOT NULL, - token TEXT UNIQUE NOT NULL, - createdAt INTEGER NOT NULL, - updatedAt INTEGER NOT NULL, - ipAddress TEXT, - userAgent TEXT, - FOREIGN KEY (userId) REFERENCES user(id) ON DELETE CASCADE - ); -`); - -// Create account table -db.exec(` - CREATE TABLE IF NOT EXISTS account ( - id TEXT PRIMARY KEY, - userId TEXT NOT NULL, - accountId TEXT NOT NULL, - providerId TEXT NOT NULL, - accessToken TEXT, - refreshToken TEXT, - idToken TEXT, - accessTokenExpiresAt INTEGER, - refreshTokenExpiresAt INTEGER, - scope TEXT, - password TEXT, - createdAt INTEGER NOT NULL, - updatedAt INTEGER NOT NULL, - FOREIGN KEY (userId) REFERENCES user(id) ON DELETE CASCADE - ); -`); - -// Create verification table -db.exec(` - CREATE TABLE IF NOT EXISTS verification ( - id TEXT PRIMARY KEY, - identifier TEXT NOT NULL, - value TEXT NOT NULL, - expiresAt INTEGER NOT NULL, - createdAt INTEGER NOT NULL, - updatedAt INTEGER NOT NULL - ); -`); - -console.log("Database tables created successfully!"); -db.close(); diff --git a/examples/hono-react/README.md b/examples/hono-react/README.md index 2accebca7..ea7078c88 100644 --- a/examples/hono-react/README.md +++ b/examples/hono-react/README.md @@ -26,8 +26,8 @@ npm install npm run dev ``` -This will start both the Hono backend server and Vite React frontend. Open your browser to http://localhost:5173 to see the React app connected to RivetKit actors. +This will start both the Hono backend server and Vite React frontend. Open your browser to http://localhost:5173 to see the React app connected to Rivet Actors. ## License -Apache 2.0 \ No newline at end of file +Apache 2.0 diff --git a/examples/react/README.md b/examples/react/README.md index 2accebca7..ea7078c88 100644 --- a/examples/react/README.md +++ b/examples/react/README.md @@ -26,8 +26,8 @@ npm install npm run dev ``` -This will start both the Hono backend server and Vite React frontend. Open your browser to http://localhost:5173 to see the React app connected to RivetKit actors. +This will start both the Hono backend server and Vite React frontend. Open your browser to http://localhost:5173 to see the React app connected to Rivet Actors. ## License -Apache 2.0 \ No newline at end of file +Apache 2.0 diff --git a/examples/starter/README.md b/examples/starter/README.md index 72a1e4b7d..80edf99b0 100644 --- a/examples/starter/README.md +++ b/examples/starter/README.md @@ -57,7 +57,7 @@ Deploy to Rivet Cloud: rivet deploy ``` -Your RivetKit actors will be deployed as Rivet actors with automatic scaling and management. +Your Rivet Actors will be deployed as Rivet actors with automatic scaling and management. ## License diff --git a/packages/core/src/drivers/rivet/actor-meta.ts b/packages/core/src/drivers/rivet/actor-meta.ts index d0167fe18..3daf11da1 100644 --- a/packages/core/src/drivers/rivet/actor-meta.ts +++ b/packages/core/src/drivers/rivet/actor-meta.ts @@ -195,7 +195,7 @@ function convertActorToMeta(actor: RivetActor): ActorMeta | undefined { throw new Error(`Actor ${actor.id} does not have a actor role.`); } if (actor.tags.framework !== "rivetkit") { - throw new Error(`Actor ${actor.id} is not an RivetKit actor.`); + throw new Error(`Actor ${actor.id} is not an Rivet Actor.`); } return {

    C$TEa#&`$xUH*ysgOIxX6V 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%0AJehh$!0eVNlViUjIyi&J}IV_ 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