Back to Rivet

Deploying to Cloudflare Workers

website/src/content/docs/connect/cloudflare-workers.mdx

2.2.14.5 KB
Original Source

import { faGithub } from "@rivet-gg/icons";

Deploy your Cloudflare Workers + RivetKit app to Cloudflare Workers.

<CardGroup> <Card title="Cloudflare Workers" href="https://github.com/rivet-dev/rivet/tree/main/examples/cloudflare-workers" target="_blank" icon={faGithub}> Minimal Cloudflare Workers + RivetKit example. </Card> <Card title="Cloudflare Workers + Hono" href="https://github.com/rivet-dev/rivet/tree/main/examples/cloudflare-workers-hono" target="_blank" icon={faGithub}> Cloudflare Workers with Hono router. </Card> <Card title="Cloudflare Workers + Inline Client" href="https://github.com/rivet-dev/rivet/tree/main/examples/cloudflare-workers-inline-client" target="_blank" icon={faGithub}> Advanced setup using createInlineClient. </Card> </CardGroup>

Steps

<Steps> <Step title="Prerequisites"> </Step> <Step title="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. </Step> <Step title="Deploy to Cloudflare Workers">

Deploy to Cloudflare's global network:

sh
wrangler deploy

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.

</Step> <Step title="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.

</Step> </Steps>

Advanced

Accessing Environment Bindings

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

typescript
import { env } from "cloudflare:workers";
import { actor } from "rivetkit";

// 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);
      }
    }
  }
});

Driver Context

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

typescript
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)
    },
  }
});

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

typescript
interface DriverContext {
  state: DurableObjectState;
}
<Warning> 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. </Warning>