Serverless

Deploying to Cloudflare Workers

Deploy your Cloudflare Workers + RivetKit app to Cloudflare Workers.

Guide

Prerequisites

Verify RivetKit integration with Cloudflare Workers

Your project should have the following files:

  • src/index.ts (or similar entry point with createHandler)
  • src/registry.ts (or similar actor registry file)
  • wrangler.json with proper Durable Objects and KV namespace configuration

If your project is not integrated with RivetKit yet, follow the Cloudflare Workers quickstart guide or see the Cloudflare Workers example.

Deploy to Cloudflare Workers

Deploy to Cloudflare's global network:

wrangler deploy
Command Line

Your worker will be deployed and you'll receive a URL like https://my-rivetkit-worker.workers.dev.

More information on deployments is available in Cloudflare's docs.

Connect and Verify

After running wrangler deploy, note the URL printed in the output (e.g., https://my-rivetkit-worker.workers.dev).

Your RivetKit endpoint will be available at this URL with /rivet appended:

  • Example: https://my-rivetkit-worker.workers.dev/rivet

Use this endpoint URL when configuring your RivetKit client or connecting from the Rivet dashboard.

Advanced

Accessing Environment Bindings

You can access Cloudflare Workers environment bindings directly using the importable env:

import { env } from "cloudflare:workers";

// Access environment variables and secrets in top-level scope
const API_KEY = env.API_KEY;
const LOG_LEVEL = env.LOG_LEVEL || "info";

// Use bindings in your actor
const myActor = actor({
  state: { count: 0 },
  
  actions: {
    // Access KV, D1, or other bindings during request handling
    getFromKV: async (c, key: string) => {
      // Access additional KV namespaces defined in wrangler.json
      if (env.MY_CACHE_KV) {
        return await env.MY_CACHE_KV.get(key);
      }
    }
  }
});
TypeScript

Driver Context

The Cloudflare Workers driver provides access to the Durable Object state and environment through the driver context in createVars.

import { actor, CreateVarsContext } from "rivetkit";
import type { DriverContext } from "@rivetkit/cloudflare-workers";

const myActor = actor({
  state: { count: 0 },

  // Save the Cloudflare driver context
  createVars: (ctx: CreateVarsContext, driver: DriverContext) => ({
    state: driver.state,
  }),
  
  actions: {
    // Example: Access Durable Object info (not recommended in practice)
    kvGet: (c, key: string) => {
      const doState = c.vars.state;
	  return await doState.storage.get(key)
    },
  }
});
TypeScript

The Cloudflare Workers driver context type is exported as DriverContext from @rivetkit/cloudflare-workers:

interface DriverContext {
  state: DurableObjectState;
}
TypeScript

While you have access to the Durable Object state, be cautious when directly modifying KV storage or alarms, as this may interfere with RivetKit's internal operations and potentially break actor functionality.

Suggest changes to this page