[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-rivet-vpc-air-gapped":3,"mdc--bpgiok-key":41,"related-repo-rivet-vpc-air-gapped":2332,"related-org-rivet-vpc-air-gapped":2457},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":30,"repoUrl":31,"updatedAt":32,"license":33,"forks":34,"topics":35,"repo":36,"sourceUrl":39,"mdContent":40},"vpc-air-gapped","deploy Rivet in air-gapped environments","Run Rivet entirely inside your own perimeter: single-binary or Docker Compose install, file system storage with no database infrastructure, and no outbound telemetry by default.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"rivet","Rivet","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Frivet.png","rivet-dev",[13,17,18,21,24,27],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"Deployment","deployment",{"name":22,"slug":23,"type":16},"Docker","docker",{"name":25,"slug":26,"type":16},"Infrastructure","infrastructure",{"name":28,"slug":29,"type":16},"Privacy","privacy",17,"https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Fskills","2026-07-21T05:37:50.417907",null,7,[],{"repoUrl":31,"stars":30,"forks":34,"topics":37,"description":38},[],"Generated skill files for Rivet AI integrations","https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Fskills\u002Ftree\u002FHEAD\u002Fvpc-air-gapped","---\nname: \"vpc-air-gapped\"\ndescription: \"Run Rivet entirely inside your own perimeter: single-binary or Docker Compose install, file system storage with no database infrastructure, and no outbound telemetry by default.\"\n---\n\n# Deploying Rivet in a VPC or Air-Gapped Network\n\n**IMPORTANT: Before doing anything, you MUST read `BASE_SKILL.md` in this skill's directory. It contains essential guidance on debugging, error handling, state management, deployment, and project setup. Those rules and patterns apply to all RivetKit work. Everything below assumes you have already read and understood it.**\n\nPatterns for running self-hosted Rivet inside a private network: a VPC without internet egress, an on-premises rack, or a fully air-gapped environment. The engine is one service, the recommended single-node storage backend is the local file system, and the engine makes no outbound connections by default. Self-hosting is the only Rivet deployment model that supports air-gapped networks; see the [Self-Hosting Overview](\u002Fdocs\u002Fself-hosting) for the full comparison with BYOC.\n\n## What Runs Inside the Perimeter\n\nA self-hosted deployment has three components, all of which live inside your network:\n\n| Component | Role | Inside the perimeter |\n| --- | --- | --- |\n| Your backend | Your application server, including the runner that executes actor code | Yes |\n| Rivet Engine | Orchestration service that manages actor lifecycle, routes messages, and serves the dashboard and APIs | Yes |\n| Storage | Persistence for actor state. Local file system for single-node, PostgreSQL or FoundationDB for multi-node | Yes |\n\nThere is no license server, no Rivet Cloud account, and no callback to `rivet.dev`. Clients inside the perimeter reach actors through the engine's gateway over your private network. See [Architecture](\u002Fdocs\u002Fself-hosting#architecture).\n\n## Single-Binary Install\n\nThe engine compiles to a single `rivet-engine` binary. Build it from source outside the perimeter, then copy the binary across the boundary:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Frivet.git\ncd rivet\ncargo build --release -p rivet-engine\n# Copy target\u002Frelease\u002Frivet-engine into the perimeter.\n```\n\nPrebuilt binaries are coming soon; see [Installing Rivet Engine](\u002Fdocs\u002Fself-hosting\u002Finstall) for current options.\n\nRun it with the file system backend, which stores everything on local disk and is the production-ready choice for single-node deployments. The [File System](\u002Fdocs\u002Fself-hosting\u002Ffilesystem) docs list air-gapped environments as a primary use case because it needs no database infrastructure:\n\n```bash\nRIVET__database__file_system__path=\"\u002Fvar\u002Flib\u002Frivet\u002Fdata\" .\u002Frivet-engine\n```\n\nConfiguration can also come from files. The engine discovers config at `\u002Fetc\u002Frivet\u002Fconfig.json` on Linux (JSON, JSON5, JSONC, YAML, and YML are all supported), and `--config` overrides the path. Environment variables use the `RIVET__` prefix with `__` as the separator. See [Configuration](\u002Fdocs\u002Fself-hosting\u002Fconfiguration).\n\nThe engine serves its own dashboard on port `6420`, so inspection and namespace management work with nothing but a browser inside the perimeter.\n\n## Docker Compose Deployment\n\nFor Docker hosts without registry access, move the engine image across the boundary the standard way:\n\n```bash\n# Outside the perimeter.\ndocker pull rivetdev\u002Fengine:latest\ndocker save rivetdev\u002Fengine:latest -o rivet-engine.tar\n# Inside the perimeter.\ndocker load -i rivet-engine.tar\n```\n\nThen run the engine and your app together in one Compose file:\n\n```yaml\nservices:\n  rivet-engine:\n    image: rivetdev\u002Fengine:latest\n    ports:\n      - \"6420:6420\"\n    volumes:\n      - rivet-data:\u002Fdata\n    environment:\n      RIVET__FILE_SYSTEM__PATH: \"\u002Fdata\"\n    restart: unless-stopped\n\n  my-app:\n    build: .\n    environment:\n      RIVET_ENDPOINT: \"http:\u002F\u002Fdefault:admin@rivet-engine:6420\"\n    depends_on:\n      - rivet-engine\n    restart: unless-stopped\n\nvolumes:\n  rivet-data:\n```\n\n`RIVET_ENDPOINT` uses the format `http:\u002F\u002Fnamespace:token@host:port` and tells your app to connect to the engine as a runner instead of running standalone. After both services start, register your runner with the engine through the dashboard or its API. The full walkthrough, including PostgreSQL setup for multi-node deployments, is in [Docker Compose](\u002Fdocs\u002Fself-hosting\u002Fdocker-compose).\n\n## No Outbound Telemetry\n\nThe engine exports traces and metrics only when you opt in with OpenTelemetry. Export is disabled unless `RIVET_OTEL_ENABLED=1` is set, and the export target defaults to a local collector at `http:\u002F\u002Flocalhost:4317`. With no configuration, nothing crosses the perimeter.\n\nWhen you want observability, keep it inside the network:\n\n- Set `RIVET_OTEL_ENABLED=1` and point `RIVET_OTEL_GRPC_ENDPOINT` at a collector you run inside the perimeter.\n- Adjust `RIVET_OTEL_SAMPLER_RATIO` to control trace sampling.\n- Use the engine's health endpoint for liveness and readiness probes.\n\nSee the [Production Checklist](\u002Fdocs\u002Fself-hosting\u002Fproduction-checklist) for monitoring guidance.\n\n## Embedding Rivet in a Customer's Environment\n\nIf you ship software that runs inside your customers' VPCs, the same setup turns Rivet into an internal component of your product rather than a service your customers must reach over the internet:\n\n- **Ship the engine next to your app.** Add `rivetdev\u002Fengine` to the Compose file or chart you already deliver. Your app finds it over the private network via `RIVET_ENDPOINT`, so one artifact deploys the whole stack.\n- **One namespace per install.** The endpoint URL carries the namespace and token (`http:\u002F\u002Fnamespace:token@host:port`), so a single image works across customer deployments. See [Endpoints](\u002Fdocs\u002Fgeneral\u002Fendpoints).\n- **Generate a strong admin token per install.** Replace the default token and keep it server-side. Never include the admin token in `RIVET_PUBLIC_ENDPOINT` or anywhere clients can read it.\n- **Public endpoint only when needed.** `RIVET_PUBLIC_ENDPOINT` with a public (`pk_`) token is only required when browser clients connect to actors in [serverless runtime mode](\u002Fdocs\u002Fgeneral\u002Fruntime-modes). Backend-only deployments can skip it entirely.\n- **TLS at the customer's edge.** Terminate TLS with the customer's reverse proxy or load balancer in front of the engine.\n\n## Scaling Past One Node\n\n| Backend | Use when | Status |\n| --- | --- | --- |\n| [File System](\u002Fdocs\u002Fself-hosting\u002Ffilesystem) (RocksDB-based) | Single-node deployments, including air-gapped installs | Production-ready, single node only |\n| [PostgreSQL](\u002Fdocs\u002Fself-hosting\u002Fpostgres) | Multi-node deployments | Recommended for multi-node today, but experimental |\n| FoundationDB | Largest production deployments | [Enterprise](\u002Fsales) |\n\nFor multi-node deployments, run two or more engine nodes behind a load balancer and add NATS for pub\u002Fsub, which replaces the default PostgreSQL `LISTEN`\u002F`NOTIFY` path at high throughput. Neither is needed for a single-node file system install. See the [Production Checklist](\u002Fdocs\u002Fself-hosting\u002Fproduction-checklist).\n\n## Perimeter Checklist\n\n- **Admin token**: Generate a strong, random token for engine authentication and verify it is not exposed to clients.\n- **TLS termination**: Encrypt connections to the engine via a reverse proxy or load balancer.\n- **No public exposure**: Keep port `6420` reachable only from inside the perimeter unless clients outside it genuinely need access.\n- **Health checks**: Configure liveness and readiness probes against the engine health endpoint.\n- **Telemetry**: Leave OpenTelemetry export off, or point it at a collector inside the network.\n- **Backups**: With the file system backend, back up the data directory. With PostgreSQL, configure automated backups and failover.\n\n## Full Configuration\n\n- [Self-Hosting Overview](\u002Fdocs\u002Fself-hosting) for architecture and the self-host vs BYOC comparison\n- [Installing Rivet Engine](\u002Fdocs\u002Fself-hosting\u002Finstall) for Docker, binary, and source installs\n- [Docker Container](\u002Fdocs\u002Fself-hosting\u002Fdocker-container) and [Docker Compose](\u002Fdocs\u002Fself-hosting\u002Fdocker-compose) for container deployments\n- [Kubernetes](\u002Fdocs\u002Fself-hosting\u002Fkubernetes) for cluster deployments\n- [Configuration](\u002Fdocs\u002Fself-hosting\u002Fconfiguration) for every option and the full JSON schema\n- [Endpoints](\u002Fdocs\u002Fgeneral\u002Fendpoints) for connecting your backend and clients\n- [Production Checklist](\u002Fdocs\u002Fself-hosting\u002Fproduction-checklist) before going live\n\n## Reference Map\n\n### Actors\n\n- [Access Control](reference\u002Factors\u002Faccess-control.md)\n- [Actions](reference\u002Factors\u002Factions.md)\n- [Actor Keys](reference\u002Factors\u002Fkeys.md)\n- [Actor Runtime Socket](reference\u002Factors\u002Factor-runtime-socket.md)\n- [Actor Statuses](reference\u002Factors\u002Fstatuses.md)\n- [Authentication](reference\u002Factors\u002Fauthentication.md)\n- [Cloudflare Workers Quickstart](reference\u002Factors\u002Fquickstart\u002Fcloudflare.md)\n- [Communicating Between Actors](reference\u002Factors\u002Fcommunicating-between-actors.md)\n- [Connections](reference\u002Factors\u002Fconnections.md)\n- [Custom Inspector Tabs](reference\u002Factors\u002Finspector-tabs.md)\n- [Debugging](reference\u002Factors\u002Fdebugging.md)\n- [Design Patterns](reference\u002Factors\u002Fdesign-patterns.md)\n- [Destroying Actors](reference\u002Factors\u002Fdestroy.md)\n- [Effect.ts Quickstart (Beta)](reference\u002Factors\u002Fquickstart\u002Feffect.md)\n- [Errors](reference\u002Factors\u002Ferrors.md)\n- [Fetch and WebSocket Handler](reference\u002Factors\u002Ffetch-and-websocket-handler.md)\n- [Helper Types](reference\u002Factors\u002Fhelper-types.md)\n- [Icons & Names](reference\u002Factors\u002Fappearance.md)\n- [In-Memory State](reference\u002Factors\u002Fstate.md)\n- [Input Parameters](reference\u002Factors\u002Finput.md)\n- [Lifecycle](reference\u002Factors\u002Flifecycle.md)\n- [Limits](reference\u002Factors\u002Flimits.md)\n- [Low-Level HTTP Request Handler](reference\u002Factors\u002Frequest-handler.md)\n- [Low-Level KV Storage](reference\u002Factors\u002Fkv.md)\n- [Low-Level WebSocket Handler](reference\u002Factors\u002Fwebsocket-handler.md)\n- [Metadata](reference\u002Factors\u002Fmetadata.md)\n- [Next.js Quickstart](reference\u002Factors\u002Fquickstart\u002Fnext-js.md)\n- [Node.js & Bun Quickstart](reference\u002Factors\u002Fquickstart\u002Fbackend.md)\n- [Queues & Run Loops](reference\u002Factors\u002Fqueues.md)\n- [React Quickstart](reference\u002Factors\u002Fquickstart\u002Freact.md)\n- [Realtime](reference\u002Factors\u002Fevents.md)\n- [Rust Quickstart (Beta)](reference\u002Factors\u002Fquickstart\u002Frust.md)\n- [Scaling & Concurrency](reference\u002Factors\u002Fscaling.md)\n- [Schedule & Cron](reference\u002Factors\u002Fschedule.md)\n- [Sharing and Joining State](reference\u002Factors\u002Fsharing-and-joining-state.md)\n- [SQLite](reference\u002Factors\u002Fsqlite.md)\n- [SQLite + Drizzle](reference\u002Factors\u002Fsqlite-drizzle.md)\n- [Supabase Functions Quickstart](reference\u002Factors\u002Fquickstart\u002Fsupabase.md)\n- [Testing](reference\u002Factors\u002Ftesting.md)\n- [Troubleshooting](reference\u002Factors\u002Ftroubleshooting.md)\n- [Types](reference\u002Factors\u002Ftypes.md)\n- [Vanilla HTTP API](reference\u002Factors\u002Fhttp-api.md)\n- [Versions & Upgrades](reference\u002Factors\u002Fversions.md)\n- [Workflows](reference\u002Factors\u002Fworkflows.md)\n\n### Cli\n\n- [CLI](reference\u002Fcli.md)\n\n### Clients\n\n- [Node.js & Bun](reference\u002Fclients\u002Fjavascript.md)\n- [React](reference\u002Fclients\u002Freact.md)\n- [Rust (Beta)](reference\u002Fclients\u002Frust.md)\n- [Swift](reference\u002Fclients\u002Fswift.md)\n- [SwiftUI](reference\u002Fclients\u002Fswiftui.md)\n\n### Cookbook\n\n- [AI Agent](reference\u002Fcookbook\u002Fai-agent.md)\n- [Chat Room](reference\u002Fcookbook\u002Fchat-room.md)\n- [Collaborative Text Editor](reference\u002Fcookbook\u002Fcollaborative-text-editor.md)\n- [Cron Jobs and Scheduled Tasks](reference\u002Fcookbook\u002Fcron-jobs.md)\n- [Database per Tenant](reference\u002Fcookbook\u002Fper-tenant-database.md)\n- [Deploying Rivet in a VPC or Air-Gapped Network](reference\u002Fcookbook\u002Fvpc-air-gapped.md)\n- [Live Cursors and Presence](reference\u002Fcookbook\u002Flive-cursors.md)\n- [Multiplayer Game](reference\u002Fcookbook\u002Fmultiplayer-game.md)\n\n### Deploy\n\n- [Container Runner](reference\u002Fdeploy\u002Fcontainer-runner.md)\n- [Deploy To Amazon Web Services Lambda](reference\u002Fdeploy\u002Faws-lambda.md)\n- [Deploying to AWS ECS](reference\u002Fdeploy\u002Faws-ecs.md)\n- [Deploying to Cloudflare Workers](reference\u002Fdeploy\u002Fcloudflare.md)\n- [Deploying to Freestyle](reference\u002Fdeploy\u002Ffreestyle.md)\n- [Deploying to Google Cloud Run](reference\u002Fdeploy\u002Fgcp-cloud-run.md)\n- [Deploying to Hetzner](reference\u002Fdeploy\u002Fhetzner.md)\n- [Deploying to Kubernetes](reference\u002Fdeploy\u002Fkubernetes.md)\n- [Deploying to Railway](reference\u002Fdeploy\u002Frailway.md)\n- [Deploying to Rivet Compute](reference\u002Fdeploy\u002Frivet-compute.md)\n- [Deploying to Supabase Functions](reference\u002Fdeploy\u002Fsupabase.md)\n- [Deploying to Vercel](reference\u002Fdeploy\u002Fvercel.md)\n- [Deploying to VMs & Bare Metal](reference\u002Fdeploy\u002Fvm-and-bare-metal.md)\n\n### General\n\n- [Actor Configuration](reference\u002Fgeneral\u002Factor-configuration.md)\n- [Architecture](reference\u002Fgeneral\u002Farchitecture.md)\n- [Cross-Origin Resource Sharing](reference\u002Fgeneral\u002Fcors.md)\n- [Documentation for LLMs & AI](reference\u002Fgeneral\u002Fdocs-for-llms.md)\n- [Edge Networking](reference\u002Fgeneral\u002Fedge.md)\n- [Endpoints](reference\u002Fgeneral\u002Fendpoints.md)\n- [Environment Variables](reference\u002Fgeneral\u002Fenvironment-variables.md)\n- [HTTP Server](reference\u002Fgeneral\u002Fhttp-server.md)\n- [Logging](reference\u002Fgeneral\u002Flogging.md)\n- [Pool Configuration](reference\u002Fgeneral\u002Fpool-configuration.md)\n- [Production Checklist](reference\u002Fgeneral\u002Fproduction-checklist.md)\n- [Registry Configuration](reference\u002Fgeneral\u002Fregistry-configuration.md)\n- [Runtime Modes](reference\u002Fgeneral\u002Fruntime-modes.md)\n- [WASM vs Native SDK](reference\u002Fgeneral\u002Fwasm-vs-native-sdk.md)\n\n### Self Hosting\n\n- [Configuration](reference\u002Fself-hosting\u002Fconfiguration.md)\n- [Docker Compose](reference\u002Fself-hosting\u002Fdocker-compose.md)\n- [Docker Container](reference\u002Fself-hosting\u002Fdocker-container.md)\n- [File System](reference\u002Fself-hosting\u002Ffilesystem.md)\n- [FoundationDB (Enterprise)](reference\u002Fself-hosting\u002Ffoundationdb.md)\n- [Installing Rivet Engine](reference\u002Fself-hosting\u002Finstall.md)\n- [Kubernetes](reference\u002Fself-hosting\u002Fkubernetes.md)\n- [Multi-Region](reference\u002Fself-hosting\u002Fmulti-region.md)\n- [PostgreSQL](reference\u002Fself-hosting\u002Fpostgres.md)\n- [Production Checklist](reference\u002Fself-hosting\u002Fproduction-checklist.md)\n- [Railway Deployment](reference\u002Fself-hosting\u002Frailway.md)\n- [Render Deployment](reference\u002Fself-hosting\u002Frender.md)\n- [TLS & Certificates](reference\u002Fself-hosting\u002Ftls.md)\n\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,55,74,88,95,100,185,206,212,225,313,326,339,380,424,437,443,448,537,542,865,891,897,918,923,966,979,985,990,1103,1109,1202,1228,1234,1304,1310,1386,1392,1399,1798,1804,1816,1822,1870,1876,1950,1956,2076,2082,2208,2214,2326],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"deploying-rivet-in-a-vpc-or-air-gapped-network",[52],{"type":53,"value":54},"text","Deploying Rivet in a VPC or Air-Gapped Network",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59],{"type":47,"tag":60,"props":61,"children":62},"strong",{},[63,65,72],{"type":53,"value":64},"IMPORTANT: Before doing anything, you MUST read ",{"type":47,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":53,"value":71},"BASE_SKILL.md",{"type":53,"value":73}," in this skill's directory. It contains essential guidance on debugging, error handling, state management, deployment, and project setup. Those rules and patterns apply to all RivetKit work. Everything below assumes you have already read and understood it.",{"type":47,"tag":56,"props":75,"children":76},{},[77,79,86],{"type":53,"value":78},"Patterns for running self-hosted Rivet inside a private network: a VPC without internet egress, an on-premises rack, or a fully air-gapped environment. The engine is one service, the recommended single-node storage backend is the local file system, and the engine makes no outbound connections by default. Self-hosting is the only Rivet deployment model that supports air-gapped networks; see the ",{"type":47,"tag":80,"props":81,"children":83},"a",{"href":82},"\u002Fdocs\u002Fself-hosting",[84],{"type":53,"value":85},"Self-Hosting Overview",{"type":53,"value":87}," for the full comparison with BYOC.",{"type":47,"tag":89,"props":90,"children":92},"h2",{"id":91},"what-runs-inside-the-perimeter",[93],{"type":53,"value":94},"What Runs Inside the Perimeter",{"type":47,"tag":56,"props":96,"children":97},{},[98],{"type":53,"value":99},"A self-hosted deployment has three components, all of which live inside your network:",{"type":47,"tag":101,"props":102,"children":103},"table",{},[104,128],{"type":47,"tag":105,"props":106,"children":107},"thead",{},[108],{"type":47,"tag":109,"props":110,"children":111},"tr",{},[112,118,123],{"type":47,"tag":113,"props":114,"children":115},"th",{},[116],{"type":53,"value":117},"Component",{"type":47,"tag":113,"props":119,"children":120},{},[121],{"type":53,"value":122},"Role",{"type":47,"tag":113,"props":124,"children":125},{},[126],{"type":53,"value":127},"Inside the perimeter",{"type":47,"tag":129,"props":130,"children":131},"tbody",{},[132,151,168],{"type":47,"tag":109,"props":133,"children":134},{},[135,141,146],{"type":47,"tag":136,"props":137,"children":138},"td",{},[139],{"type":53,"value":140},"Your backend",{"type":47,"tag":136,"props":142,"children":143},{},[144],{"type":53,"value":145},"Your application server, including the runner that executes actor code",{"type":47,"tag":136,"props":147,"children":148},{},[149],{"type":53,"value":150},"Yes",{"type":47,"tag":109,"props":152,"children":153},{},[154,159,164],{"type":47,"tag":136,"props":155,"children":156},{},[157],{"type":53,"value":158},"Rivet Engine",{"type":47,"tag":136,"props":160,"children":161},{},[162],{"type":53,"value":163},"Orchestration service that manages actor lifecycle, routes messages, and serves the dashboard and APIs",{"type":47,"tag":136,"props":165,"children":166},{},[167],{"type":53,"value":150},{"type":47,"tag":109,"props":169,"children":170},{},[171,176,181],{"type":47,"tag":136,"props":172,"children":173},{},[174],{"type":53,"value":175},"Storage",{"type":47,"tag":136,"props":177,"children":178},{},[179],{"type":53,"value":180},"Persistence for actor state. Local file system for single-node, PostgreSQL or FoundationDB for multi-node",{"type":47,"tag":136,"props":182,"children":183},{},[184],{"type":53,"value":150},{"type":47,"tag":56,"props":186,"children":187},{},[188,190,196,198,204],{"type":53,"value":189},"There is no license server, no Rivet Cloud account, and no callback to ",{"type":47,"tag":66,"props":191,"children":193},{"className":192},[],[194],{"type":53,"value":195},"rivet.dev",{"type":53,"value":197},". Clients inside the perimeter reach actors through the engine's gateway over your private network. See ",{"type":47,"tag":80,"props":199,"children":201},{"href":200},"\u002Fdocs\u002Fself-hosting#architecture",[202],{"type":53,"value":203},"Architecture",{"type":53,"value":205},".",{"type":47,"tag":89,"props":207,"children":209},{"id":208},"single-binary-install",[210],{"type":53,"value":211},"Single-Binary Install",{"type":47,"tag":56,"props":213,"children":214},{},[215,217,223],{"type":53,"value":216},"The engine compiles to a single ",{"type":47,"tag":66,"props":218,"children":220},{"className":219},[],[221],{"type":53,"value":222},"rivet-engine",{"type":53,"value":224}," binary. Build it from source outside the perimeter, then copy the binary across the boundary:",{"type":47,"tag":226,"props":227,"children":232},"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Frivet.git\ncd rivet\ncargo build --release -p rivet-engine\n# Copy target\u002Frelease\u002Frivet-engine into the perimeter.\n","bash","",[233],{"type":47,"tag":66,"props":234,"children":235},{"__ignoreMap":231},[236,259,274,303],{"type":47,"tag":237,"props":238,"children":241},"span",{"class":239,"line":240},"line",1,[242,248,254],{"type":47,"tag":237,"props":243,"children":245},{"style":244},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[246],{"type":53,"value":247},"git",{"type":47,"tag":237,"props":249,"children":251},{"style":250},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[252],{"type":53,"value":253}," clone",{"type":47,"tag":237,"props":255,"children":256},{"style":250},[257],{"type":53,"value":258}," https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Frivet.git\n",{"type":47,"tag":237,"props":260,"children":262},{"class":239,"line":261},2,[263,269],{"type":47,"tag":237,"props":264,"children":266},{"style":265},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[267],{"type":53,"value":268},"cd",{"type":47,"tag":237,"props":270,"children":271},{"style":250},[272],{"type":53,"value":273}," rivet\n",{"type":47,"tag":237,"props":275,"children":277},{"class":239,"line":276},3,[278,283,288,293,298],{"type":47,"tag":237,"props":279,"children":280},{"style":244},[281],{"type":53,"value":282},"cargo",{"type":47,"tag":237,"props":284,"children":285},{"style":250},[286],{"type":53,"value":287}," build",{"type":47,"tag":237,"props":289,"children":290},{"style":250},[291],{"type":53,"value":292}," --release",{"type":47,"tag":237,"props":294,"children":295},{"style":250},[296],{"type":53,"value":297}," -p",{"type":47,"tag":237,"props":299,"children":300},{"style":250},[301],{"type":53,"value":302}," rivet-engine\n",{"type":47,"tag":237,"props":304,"children":306},{"class":239,"line":305},4,[307],{"type":47,"tag":237,"props":308,"children":310},{"style":309},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[311],{"type":53,"value":312},"# Copy target\u002Frelease\u002Frivet-engine into the perimeter.\n",{"type":47,"tag":56,"props":314,"children":315},{},[316,318,324],{"type":53,"value":317},"Prebuilt binaries are coming soon; see ",{"type":47,"tag":80,"props":319,"children":321},{"href":320},"\u002Fdocs\u002Fself-hosting\u002Finstall",[322],{"type":53,"value":323},"Installing Rivet Engine",{"type":53,"value":325}," for current options.",{"type":47,"tag":56,"props":327,"children":328},{},[329,331,337],{"type":53,"value":330},"Run it with the file system backend, which stores everything on local disk and is the production-ready choice for single-node deployments. The ",{"type":47,"tag":80,"props":332,"children":334},{"href":333},"\u002Fdocs\u002Fself-hosting\u002Ffilesystem",[335],{"type":53,"value":336},"File System",{"type":53,"value":338}," docs list air-gapped environments as a primary use case because it needs no database infrastructure:",{"type":47,"tag":226,"props":340,"children":342},{"className":228,"code":341,"language":230,"meta":231,"style":231},"RIVET__database__file_system__path=\"\u002Fvar\u002Flib\u002Frivet\u002Fdata\" .\u002Frivet-engine\n",[343],{"type":47,"tag":66,"props":344,"children":345},{"__ignoreMap":231},[346],{"type":47,"tag":237,"props":347,"children":348},{"class":239,"line":240},[349,355,361,366,371,375],{"type":47,"tag":237,"props":350,"children":352},{"style":351},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[353],{"type":53,"value":354},"RIVET__database__file_system__path",{"type":47,"tag":237,"props":356,"children":358},{"style":357},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[359],{"type":53,"value":360},"=",{"type":47,"tag":237,"props":362,"children":363},{"style":357},[364],{"type":53,"value":365},"\"",{"type":47,"tag":237,"props":367,"children":368},{"style":250},[369],{"type":53,"value":370},"\u002Fvar\u002Flib\u002Frivet\u002Fdata",{"type":47,"tag":237,"props":372,"children":373},{"style":357},[374],{"type":53,"value":365},{"type":47,"tag":237,"props":376,"children":377},{"style":244},[378],{"type":53,"value":379}," .\u002Frivet-engine\n",{"type":47,"tag":56,"props":381,"children":382},{},[383,385,391,393,399,401,407,409,415,417,423],{"type":53,"value":384},"Configuration can also come from files. The engine discovers config at ",{"type":47,"tag":66,"props":386,"children":388},{"className":387},[],[389],{"type":53,"value":390},"\u002Fetc\u002Frivet\u002Fconfig.json",{"type":53,"value":392}," on Linux (JSON, JSON5, JSONC, YAML, and YML are all supported), and ",{"type":47,"tag":66,"props":394,"children":396},{"className":395},[],[397],{"type":53,"value":398},"--config",{"type":53,"value":400}," overrides the path. Environment variables use the ",{"type":47,"tag":66,"props":402,"children":404},{"className":403},[],[405],{"type":53,"value":406},"RIVET__",{"type":53,"value":408}," prefix with ",{"type":47,"tag":66,"props":410,"children":412},{"className":411},[],[413],{"type":53,"value":414},"__",{"type":53,"value":416}," as the separator. See ",{"type":47,"tag":80,"props":418,"children":420},{"href":419},"\u002Fdocs\u002Fself-hosting\u002Fconfiguration",[421],{"type":53,"value":422},"Configuration",{"type":53,"value":205},{"type":47,"tag":56,"props":425,"children":426},{},[427,429,435],{"type":53,"value":428},"The engine serves its own dashboard on port ",{"type":47,"tag":66,"props":430,"children":432},{"className":431},[],[433],{"type":53,"value":434},"6420",{"type":53,"value":436},", so inspection and namespace management work with nothing but a browser inside the perimeter.",{"type":47,"tag":89,"props":438,"children":440},{"id":439},"docker-compose-deployment",[441],{"type":53,"value":442},"Docker Compose Deployment",{"type":47,"tag":56,"props":444,"children":445},{},[446],{"type":53,"value":447},"For Docker hosts without registry access, move the engine image across the boundary the standard way:",{"type":47,"tag":226,"props":449,"children":451},{"className":228,"code":450,"language":230,"meta":231,"style":231},"# Outside the perimeter.\ndocker pull rivetdev\u002Fengine:latest\ndocker save rivetdev\u002Fengine:latest -o rivet-engine.tar\n# Inside the perimeter.\ndocker load -i rivet-engine.tar\n",[452],{"type":47,"tag":66,"props":453,"children":454},{"__ignoreMap":231},[455,463,480,507,515],{"type":47,"tag":237,"props":456,"children":457},{"class":239,"line":240},[458],{"type":47,"tag":237,"props":459,"children":460},{"style":309},[461],{"type":53,"value":462},"# Outside the perimeter.\n",{"type":47,"tag":237,"props":464,"children":465},{"class":239,"line":261},[466,470,475],{"type":47,"tag":237,"props":467,"children":468},{"style":244},[469],{"type":53,"value":23},{"type":47,"tag":237,"props":471,"children":472},{"style":250},[473],{"type":53,"value":474}," pull",{"type":47,"tag":237,"props":476,"children":477},{"style":250},[478],{"type":53,"value":479}," rivetdev\u002Fengine:latest\n",{"type":47,"tag":237,"props":481,"children":482},{"class":239,"line":276},[483,487,492,497,502],{"type":47,"tag":237,"props":484,"children":485},{"style":244},[486],{"type":53,"value":23},{"type":47,"tag":237,"props":488,"children":489},{"style":250},[490],{"type":53,"value":491}," save",{"type":47,"tag":237,"props":493,"children":494},{"style":250},[495],{"type":53,"value":496}," rivetdev\u002Fengine:latest",{"type":47,"tag":237,"props":498,"children":499},{"style":250},[500],{"type":53,"value":501}," -o",{"type":47,"tag":237,"props":503,"children":504},{"style":250},[505],{"type":53,"value":506}," rivet-engine.tar\n",{"type":47,"tag":237,"props":508,"children":509},{"class":239,"line":305},[510],{"type":47,"tag":237,"props":511,"children":512},{"style":309},[513],{"type":53,"value":514},"# Inside the perimeter.\n",{"type":47,"tag":237,"props":516,"children":518},{"class":239,"line":517},5,[519,523,528,533],{"type":47,"tag":237,"props":520,"children":521},{"style":244},[522],{"type":53,"value":23},{"type":47,"tag":237,"props":524,"children":525},{"style":250},[526],{"type":53,"value":527}," load",{"type":47,"tag":237,"props":529,"children":530},{"style":250},[531],{"type":53,"value":532}," -i",{"type":47,"tag":237,"props":534,"children":535},{"style":250},[536],{"type":53,"value":506},{"type":47,"tag":56,"props":538,"children":539},{},[540],{"type":53,"value":541},"Then run the engine and your app together in one Compose file:",{"type":47,"tag":226,"props":543,"children":547},{"className":544,"code":545,"language":546,"meta":231,"style":231},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  rivet-engine:\n    image: rivetdev\u002Fengine:latest\n    ports:\n      - \"6420:6420\"\n    volumes:\n      - rivet-data:\u002Fdata\n    environment:\n      RIVET__FILE_SYSTEM__PATH: \"\u002Fdata\"\n    restart: unless-stopped\n\n  my-app:\n    build: .\n    environment:\n      RIVET_ENDPOINT: \"http:\u002F\u002Fdefault:admin@rivet-engine:6420\"\n    depends_on:\n      - rivet-engine\n    restart: unless-stopped\n\nvolumes:\n  rivet-data:\n","yaml",[548],{"type":47,"tag":66,"props":549,"children":550},{"__ignoreMap":231},[551,565,577,594,606,629,642,654,667,693,711,721,734,753,765,791,804,815,831,839,852],{"type":47,"tag":237,"props":552,"children":553},{"class":239,"line":240},[554,560],{"type":47,"tag":237,"props":555,"children":557},{"style":556},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[558],{"type":53,"value":559},"services",{"type":47,"tag":237,"props":561,"children":562},{"style":357},[563],{"type":53,"value":564},":\n",{"type":47,"tag":237,"props":566,"children":567},{"class":239,"line":261},[568,573],{"type":47,"tag":237,"props":569,"children":570},{"style":556},[571],{"type":53,"value":572},"  rivet-engine",{"type":47,"tag":237,"props":574,"children":575},{"style":357},[576],{"type":53,"value":564},{"type":47,"tag":237,"props":578,"children":579},{"class":239,"line":276},[580,585,590],{"type":47,"tag":237,"props":581,"children":582},{"style":556},[583],{"type":53,"value":584},"    image",{"type":47,"tag":237,"props":586,"children":587},{"style":357},[588],{"type":53,"value":589},":",{"type":47,"tag":237,"props":591,"children":592},{"style":250},[593],{"type":53,"value":479},{"type":47,"tag":237,"props":595,"children":596},{"class":239,"line":305},[597,602],{"type":47,"tag":237,"props":598,"children":599},{"style":556},[600],{"type":53,"value":601},"    ports",{"type":47,"tag":237,"props":603,"children":604},{"style":357},[605],{"type":53,"value":564},{"type":47,"tag":237,"props":607,"children":608},{"class":239,"line":517},[609,614,619,624],{"type":47,"tag":237,"props":610,"children":611},{"style":357},[612],{"type":53,"value":613},"      -",{"type":47,"tag":237,"props":615,"children":616},{"style":357},[617],{"type":53,"value":618}," \"",{"type":47,"tag":237,"props":620,"children":621},{"style":250},[622],{"type":53,"value":623},"6420:6420",{"type":47,"tag":237,"props":625,"children":626},{"style":357},[627],{"type":53,"value":628},"\"\n",{"type":47,"tag":237,"props":630,"children":632},{"class":239,"line":631},6,[633,638],{"type":47,"tag":237,"props":634,"children":635},{"style":556},[636],{"type":53,"value":637},"    volumes",{"type":47,"tag":237,"props":639,"children":640},{"style":357},[641],{"type":53,"value":564},{"type":47,"tag":237,"props":643,"children":644},{"class":239,"line":34},[645,649],{"type":47,"tag":237,"props":646,"children":647},{"style":357},[648],{"type":53,"value":613},{"type":47,"tag":237,"props":650,"children":651},{"style":250},[652],{"type":53,"value":653}," rivet-data:\u002Fdata\n",{"type":47,"tag":237,"props":655,"children":657},{"class":239,"line":656},8,[658,663],{"type":47,"tag":237,"props":659,"children":660},{"style":556},[661],{"type":53,"value":662},"    environment",{"type":47,"tag":237,"props":664,"children":665},{"style":357},[666],{"type":53,"value":564},{"type":47,"tag":237,"props":668,"children":670},{"class":239,"line":669},9,[671,676,680,684,689],{"type":47,"tag":237,"props":672,"children":673},{"style":556},[674],{"type":53,"value":675},"      RIVET__FILE_SYSTEM__PATH",{"type":47,"tag":237,"props":677,"children":678},{"style":357},[679],{"type":53,"value":589},{"type":47,"tag":237,"props":681,"children":682},{"style":357},[683],{"type":53,"value":618},{"type":47,"tag":237,"props":685,"children":686},{"style":250},[687],{"type":53,"value":688},"\u002Fdata",{"type":47,"tag":237,"props":690,"children":691},{"style":357},[692],{"type":53,"value":628},{"type":47,"tag":237,"props":694,"children":696},{"class":239,"line":695},10,[697,702,706],{"type":47,"tag":237,"props":698,"children":699},{"style":556},[700],{"type":53,"value":701},"    restart",{"type":47,"tag":237,"props":703,"children":704},{"style":357},[705],{"type":53,"value":589},{"type":47,"tag":237,"props":707,"children":708},{"style":250},[709],{"type":53,"value":710}," unless-stopped\n",{"type":47,"tag":237,"props":712,"children":714},{"class":239,"line":713},11,[715],{"type":47,"tag":237,"props":716,"children":718},{"emptyLinePlaceholder":717},true,[719],{"type":53,"value":720},"\n",{"type":47,"tag":237,"props":722,"children":724},{"class":239,"line":723},12,[725,730],{"type":47,"tag":237,"props":726,"children":727},{"style":556},[728],{"type":53,"value":729},"  my-app",{"type":47,"tag":237,"props":731,"children":732},{"style":357},[733],{"type":53,"value":564},{"type":47,"tag":237,"props":735,"children":737},{"class":239,"line":736},13,[738,743,747],{"type":47,"tag":237,"props":739,"children":740},{"style":556},[741],{"type":53,"value":742},"    build",{"type":47,"tag":237,"props":744,"children":745},{"style":357},[746],{"type":53,"value":589},{"type":47,"tag":237,"props":748,"children":750},{"style":749},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[751],{"type":53,"value":752}," .\n",{"type":47,"tag":237,"props":754,"children":756},{"class":239,"line":755},14,[757,761],{"type":47,"tag":237,"props":758,"children":759},{"style":556},[760],{"type":53,"value":662},{"type":47,"tag":237,"props":762,"children":763},{"style":357},[764],{"type":53,"value":564},{"type":47,"tag":237,"props":766,"children":768},{"class":239,"line":767},15,[769,774,778,782,787],{"type":47,"tag":237,"props":770,"children":771},{"style":556},[772],{"type":53,"value":773},"      RIVET_ENDPOINT",{"type":47,"tag":237,"props":775,"children":776},{"style":357},[777],{"type":53,"value":589},{"type":47,"tag":237,"props":779,"children":780},{"style":357},[781],{"type":53,"value":618},{"type":47,"tag":237,"props":783,"children":784},{"style":250},[785],{"type":53,"value":786},"http:\u002F\u002Fdefault:admin@rivet-engine:6420",{"type":47,"tag":237,"props":788,"children":789},{"style":357},[790],{"type":53,"value":628},{"type":47,"tag":237,"props":792,"children":794},{"class":239,"line":793},16,[795,800],{"type":47,"tag":237,"props":796,"children":797},{"style":556},[798],{"type":53,"value":799},"    depends_on",{"type":47,"tag":237,"props":801,"children":802},{"style":357},[803],{"type":53,"value":564},{"type":47,"tag":237,"props":805,"children":806},{"class":239,"line":30},[807,811],{"type":47,"tag":237,"props":808,"children":809},{"style":357},[810],{"type":53,"value":613},{"type":47,"tag":237,"props":812,"children":813},{"style":250},[814],{"type":53,"value":302},{"type":47,"tag":237,"props":816,"children":818},{"class":239,"line":817},18,[819,823,827],{"type":47,"tag":237,"props":820,"children":821},{"style":556},[822],{"type":53,"value":701},{"type":47,"tag":237,"props":824,"children":825},{"style":357},[826],{"type":53,"value":589},{"type":47,"tag":237,"props":828,"children":829},{"style":250},[830],{"type":53,"value":710},{"type":47,"tag":237,"props":832,"children":834},{"class":239,"line":833},19,[835],{"type":47,"tag":237,"props":836,"children":837},{"emptyLinePlaceholder":717},[838],{"type":53,"value":720},{"type":47,"tag":237,"props":840,"children":842},{"class":239,"line":841},20,[843,848],{"type":47,"tag":237,"props":844,"children":845},{"style":556},[846],{"type":53,"value":847},"volumes",{"type":47,"tag":237,"props":849,"children":850},{"style":357},[851],{"type":53,"value":564},{"type":47,"tag":237,"props":853,"children":855},{"class":239,"line":854},21,[856,861],{"type":47,"tag":237,"props":857,"children":858},{"style":556},[859],{"type":53,"value":860},"  rivet-data",{"type":47,"tag":237,"props":862,"children":863},{"style":357},[864],{"type":53,"value":564},{"type":47,"tag":56,"props":866,"children":867},{},[868,874,876,882,884,890],{"type":47,"tag":66,"props":869,"children":871},{"className":870},[],[872],{"type":53,"value":873},"RIVET_ENDPOINT",{"type":53,"value":875}," uses the format ",{"type":47,"tag":66,"props":877,"children":879},{"className":878},[],[880],{"type":53,"value":881},"http:\u002F\u002Fnamespace:token@host:port",{"type":53,"value":883}," and tells your app to connect to the engine as a runner instead of running standalone. After both services start, register your runner with the engine through the dashboard or its API. The full walkthrough, including PostgreSQL setup for multi-node deployments, is in ",{"type":47,"tag":80,"props":885,"children":887},{"href":886},"\u002Fdocs\u002Fself-hosting\u002Fdocker-compose",[888],{"type":53,"value":889},"Docker Compose",{"type":53,"value":205},{"type":47,"tag":89,"props":892,"children":894},{"id":893},"no-outbound-telemetry",[895],{"type":53,"value":896},"No Outbound Telemetry",{"type":47,"tag":56,"props":898,"children":899},{},[900,902,908,910,916],{"type":53,"value":901},"The engine exports traces and metrics only when you opt in with OpenTelemetry. Export is disabled unless ",{"type":47,"tag":66,"props":903,"children":905},{"className":904},[],[906],{"type":53,"value":907},"RIVET_OTEL_ENABLED=1",{"type":53,"value":909}," is set, and the export target defaults to a local collector at ",{"type":47,"tag":66,"props":911,"children":913},{"className":912},[],[914],{"type":53,"value":915},"http:\u002F\u002Flocalhost:4317",{"type":53,"value":917},". With no configuration, nothing crosses the perimeter.",{"type":47,"tag":56,"props":919,"children":920},{},[921],{"type":53,"value":922},"When you want observability, keep it inside the network:",{"type":47,"tag":924,"props":925,"children":926},"ul",{},[927,948,961],{"type":47,"tag":928,"props":929,"children":930},"li",{},[931,933,938,940,946],{"type":53,"value":932},"Set ",{"type":47,"tag":66,"props":934,"children":936},{"className":935},[],[937],{"type":53,"value":907},{"type":53,"value":939}," and point ",{"type":47,"tag":66,"props":941,"children":943},{"className":942},[],[944],{"type":53,"value":945},"RIVET_OTEL_GRPC_ENDPOINT",{"type":53,"value":947}," at a collector you run inside the perimeter.",{"type":47,"tag":928,"props":949,"children":950},{},[951,953,959],{"type":53,"value":952},"Adjust ",{"type":47,"tag":66,"props":954,"children":956},{"className":955},[],[957],{"type":53,"value":958},"RIVET_OTEL_SAMPLER_RATIO",{"type":53,"value":960}," to control trace sampling.",{"type":47,"tag":928,"props":962,"children":963},{},[964],{"type":53,"value":965},"Use the engine's health endpoint for liveness and readiness probes.",{"type":47,"tag":56,"props":967,"children":968},{},[969,971,977],{"type":53,"value":970},"See the ",{"type":47,"tag":80,"props":972,"children":974},{"href":973},"\u002Fdocs\u002Fself-hosting\u002Fproduction-checklist",[975],{"type":53,"value":976},"Production Checklist",{"type":53,"value":978}," for monitoring guidance.",{"type":47,"tag":89,"props":980,"children":982},{"id":981},"embedding-rivet-in-a-customers-environment",[983],{"type":53,"value":984},"Embedding Rivet in a Customer's Environment",{"type":47,"tag":56,"props":986,"children":987},{},[988],{"type":53,"value":989},"If you ship software that runs inside your customers' VPCs, the same setup turns Rivet into an internal component of your product rather than a service your customers must reach over the internet:",{"type":47,"tag":924,"props":991,"children":992},{},[993,1018,1042,1060,1093],{"type":47,"tag":928,"props":994,"children":995},{},[996,1001,1003,1009,1011,1016],{"type":47,"tag":60,"props":997,"children":998},{},[999],{"type":53,"value":1000},"Ship the engine next to your app.",{"type":53,"value":1002}," Add ",{"type":47,"tag":66,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":53,"value":1008},"rivetdev\u002Fengine",{"type":53,"value":1010}," to the Compose file or chart you already deliver. Your app finds it over the private network via ",{"type":47,"tag":66,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":53,"value":873},{"type":53,"value":1017},", so one artifact deploys the whole stack.",{"type":47,"tag":928,"props":1019,"children":1020},{},[1021,1026,1028,1033,1035,1041],{"type":47,"tag":60,"props":1022,"children":1023},{},[1024],{"type":53,"value":1025},"One namespace per install.",{"type":53,"value":1027}," The endpoint URL carries the namespace and token (",{"type":47,"tag":66,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":53,"value":881},{"type":53,"value":1034},"), so a single image works across customer deployments. See ",{"type":47,"tag":80,"props":1036,"children":1038},{"href":1037},"\u002Fdocs\u002Fgeneral\u002Fendpoints",[1039],{"type":53,"value":1040},"Endpoints",{"type":53,"value":205},{"type":47,"tag":928,"props":1043,"children":1044},{},[1045,1050,1052,1058],{"type":47,"tag":60,"props":1046,"children":1047},{},[1048],{"type":53,"value":1049},"Generate a strong admin token per install.",{"type":53,"value":1051}," Replace the default token and keep it server-side. Never include the admin token in ",{"type":47,"tag":66,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":53,"value":1057},"RIVET_PUBLIC_ENDPOINT",{"type":53,"value":1059}," or anywhere clients can read it.",{"type":47,"tag":928,"props":1061,"children":1062},{},[1063,1068,1070,1075,1077,1083,1085,1091],{"type":47,"tag":60,"props":1064,"children":1065},{},[1066],{"type":53,"value":1067},"Public endpoint only when needed.",{"type":53,"value":1069}," ",{"type":47,"tag":66,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":53,"value":1057},{"type":53,"value":1076}," with a public (",{"type":47,"tag":66,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":53,"value":1082},"pk_",{"type":53,"value":1084},") token is only required when browser clients connect to actors in ",{"type":47,"tag":80,"props":1086,"children":1088},{"href":1087},"\u002Fdocs\u002Fgeneral\u002Fruntime-modes",[1089],{"type":53,"value":1090},"serverless runtime mode",{"type":53,"value":1092},". Backend-only deployments can skip it entirely.",{"type":47,"tag":928,"props":1094,"children":1095},{},[1096,1101],{"type":47,"tag":60,"props":1097,"children":1098},{},[1099],{"type":53,"value":1100},"TLS at the customer's edge.",{"type":53,"value":1102}," Terminate TLS with the customer's reverse proxy or load balancer in front of the engine.",{"type":47,"tag":89,"props":1104,"children":1106},{"id":1105},"scaling-past-one-node",[1107],{"type":53,"value":1108},"Scaling Past One Node",{"type":47,"tag":101,"props":1110,"children":1111},{},[1112,1133],{"type":47,"tag":105,"props":1113,"children":1114},{},[1115],{"type":47,"tag":109,"props":1116,"children":1117},{},[1118,1123,1128],{"type":47,"tag":113,"props":1119,"children":1120},{},[1121],{"type":53,"value":1122},"Backend",{"type":47,"tag":113,"props":1124,"children":1125},{},[1126],{"type":53,"value":1127},"Use when",{"type":47,"tag":113,"props":1129,"children":1130},{},[1131],{"type":53,"value":1132},"Status",{"type":47,"tag":129,"props":1134,"children":1135},{},[1136,1158,1180],{"type":47,"tag":109,"props":1137,"children":1138},{},[1139,1148,1153],{"type":47,"tag":136,"props":1140,"children":1141},{},[1142,1146],{"type":47,"tag":80,"props":1143,"children":1144},{"href":333},[1145],{"type":53,"value":336},{"type":53,"value":1147}," (RocksDB-based)",{"type":47,"tag":136,"props":1149,"children":1150},{},[1151],{"type":53,"value":1152},"Single-node deployments, including air-gapped installs",{"type":47,"tag":136,"props":1154,"children":1155},{},[1156],{"type":53,"value":1157},"Production-ready, single node only",{"type":47,"tag":109,"props":1159,"children":1160},{},[1161,1170,1175],{"type":47,"tag":136,"props":1162,"children":1163},{},[1164],{"type":47,"tag":80,"props":1165,"children":1167},{"href":1166},"\u002Fdocs\u002Fself-hosting\u002Fpostgres",[1168],{"type":53,"value":1169},"PostgreSQL",{"type":47,"tag":136,"props":1171,"children":1172},{},[1173],{"type":53,"value":1174},"Multi-node deployments",{"type":47,"tag":136,"props":1176,"children":1177},{},[1178],{"type":53,"value":1179},"Recommended for multi-node today, but experimental",{"type":47,"tag":109,"props":1181,"children":1182},{},[1183,1188,1193],{"type":47,"tag":136,"props":1184,"children":1185},{},[1186],{"type":53,"value":1187},"FoundationDB",{"type":47,"tag":136,"props":1189,"children":1190},{},[1191],{"type":53,"value":1192},"Largest production deployments",{"type":47,"tag":136,"props":1194,"children":1195},{},[1196],{"type":47,"tag":80,"props":1197,"children":1199},{"href":1198},"\u002Fsales",[1200],{"type":53,"value":1201},"Enterprise",{"type":47,"tag":56,"props":1203,"children":1204},{},[1205,1207,1213,1215,1221,1223,1227],{"type":53,"value":1206},"For multi-node deployments, run two or more engine nodes behind a load balancer and add NATS for pub\u002Fsub, which replaces the default PostgreSQL ",{"type":47,"tag":66,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":53,"value":1212},"LISTEN",{"type":53,"value":1214},"\u002F",{"type":47,"tag":66,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":53,"value":1220},"NOTIFY",{"type":53,"value":1222}," path at high throughput. Neither is needed for a single-node file system install. See the ",{"type":47,"tag":80,"props":1224,"children":1225},{"href":973},[1226],{"type":53,"value":976},{"type":53,"value":205},{"type":47,"tag":89,"props":1229,"children":1231},{"id":1230},"perimeter-checklist",[1232],{"type":53,"value":1233},"Perimeter Checklist",{"type":47,"tag":924,"props":1235,"children":1236},{},[1237,1247,1257,1274,1284,1294],{"type":47,"tag":928,"props":1238,"children":1239},{},[1240,1245],{"type":47,"tag":60,"props":1241,"children":1242},{},[1243],{"type":53,"value":1244},"Admin token",{"type":53,"value":1246},": Generate a strong, random token for engine authentication and verify it is not exposed to clients.",{"type":47,"tag":928,"props":1248,"children":1249},{},[1250,1255],{"type":47,"tag":60,"props":1251,"children":1252},{},[1253],{"type":53,"value":1254},"TLS termination",{"type":53,"value":1256},": Encrypt connections to the engine via a reverse proxy or load balancer.",{"type":47,"tag":928,"props":1258,"children":1259},{},[1260,1265,1267,1272],{"type":47,"tag":60,"props":1261,"children":1262},{},[1263],{"type":53,"value":1264},"No public exposure",{"type":53,"value":1266},": Keep port ",{"type":47,"tag":66,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":53,"value":434},{"type":53,"value":1273}," reachable only from inside the perimeter unless clients outside it genuinely need access.",{"type":47,"tag":928,"props":1275,"children":1276},{},[1277,1282],{"type":47,"tag":60,"props":1278,"children":1279},{},[1280],{"type":53,"value":1281},"Health checks",{"type":53,"value":1283},": Configure liveness and readiness probes against the engine health endpoint.",{"type":47,"tag":928,"props":1285,"children":1286},{},[1287,1292],{"type":47,"tag":60,"props":1288,"children":1289},{},[1290],{"type":53,"value":1291},"Telemetry",{"type":53,"value":1293},": Leave OpenTelemetry export off, or point it at a collector inside the network.",{"type":47,"tag":928,"props":1295,"children":1296},{},[1297,1302],{"type":47,"tag":60,"props":1298,"children":1299},{},[1300],{"type":53,"value":1301},"Backups",{"type":53,"value":1303},": With the file system backend, back up the data directory. With PostgreSQL, configure automated backups and failover.",{"type":47,"tag":89,"props":1305,"children":1307},{"id":1306},"full-configuration",[1308],{"type":53,"value":1309},"Full Configuration",{"type":47,"tag":924,"props":1311,"children":1312},{},[1313,1322,1331,1348,1359,1368,1377],{"type":47,"tag":928,"props":1314,"children":1315},{},[1316,1320],{"type":47,"tag":80,"props":1317,"children":1318},{"href":82},[1319],{"type":53,"value":85},{"type":53,"value":1321}," for architecture and the self-host vs BYOC comparison",{"type":47,"tag":928,"props":1323,"children":1324},{},[1325,1329],{"type":47,"tag":80,"props":1326,"children":1327},{"href":320},[1328],{"type":53,"value":323},{"type":53,"value":1330}," for Docker, binary, and source installs",{"type":47,"tag":928,"props":1332,"children":1333},{},[1334,1340,1342,1346],{"type":47,"tag":80,"props":1335,"children":1337},{"href":1336},"\u002Fdocs\u002Fself-hosting\u002Fdocker-container",[1338],{"type":53,"value":1339},"Docker Container",{"type":53,"value":1341}," and ",{"type":47,"tag":80,"props":1343,"children":1344},{"href":886},[1345],{"type":53,"value":889},{"type":53,"value":1347}," for container deployments",{"type":47,"tag":928,"props":1349,"children":1350},{},[1351,1357],{"type":47,"tag":80,"props":1352,"children":1354},{"href":1353},"\u002Fdocs\u002Fself-hosting\u002Fkubernetes",[1355],{"type":53,"value":1356},"Kubernetes",{"type":53,"value":1358}," for cluster deployments",{"type":47,"tag":928,"props":1360,"children":1361},{},[1362,1366],{"type":47,"tag":80,"props":1363,"children":1364},{"href":419},[1365],{"type":53,"value":422},{"type":53,"value":1367}," for every option and the full JSON schema",{"type":47,"tag":928,"props":1369,"children":1370},{},[1371,1375],{"type":47,"tag":80,"props":1372,"children":1373},{"href":1037},[1374],{"type":53,"value":1040},{"type":53,"value":1376}," for connecting your backend and clients",{"type":47,"tag":928,"props":1378,"children":1379},{},[1380,1384],{"type":47,"tag":80,"props":1381,"children":1382},{"href":973},[1383],{"type":53,"value":976},{"type":53,"value":1385}," before going live",{"type":47,"tag":89,"props":1387,"children":1389},{"id":1388},"reference-map",[1390],{"type":53,"value":1391},"Reference Map",{"type":47,"tag":1393,"props":1394,"children":1396},"h3",{"id":1395},"actors",[1397],{"type":53,"value":1398},"Actors",{"type":47,"tag":924,"props":1400,"children":1401},{},[1402,1411,1420,1429,1438,1447,1456,1465,1474,1483,1492,1501,1510,1519,1528,1537,1546,1555,1564,1573,1582,1591,1600,1609,1618,1627,1636,1645,1654,1663,1672,1681,1690,1699,1708,1717,1726,1735,1744,1753,1762,1771,1780,1789],{"type":47,"tag":928,"props":1403,"children":1404},{},[1405],{"type":47,"tag":80,"props":1406,"children":1408},{"href":1407},"reference\u002Factors\u002Faccess-control.md",[1409],{"type":53,"value":1410},"Access Control",{"type":47,"tag":928,"props":1412,"children":1413},{},[1414],{"type":47,"tag":80,"props":1415,"children":1417},{"href":1416},"reference\u002Factors\u002Factions.md",[1418],{"type":53,"value":1419},"Actions",{"type":47,"tag":928,"props":1421,"children":1422},{},[1423],{"type":47,"tag":80,"props":1424,"children":1426},{"href":1425},"reference\u002Factors\u002Fkeys.md",[1427],{"type":53,"value":1428},"Actor Keys",{"type":47,"tag":928,"props":1430,"children":1431},{},[1432],{"type":47,"tag":80,"props":1433,"children":1435},{"href":1434},"reference\u002Factors\u002Factor-runtime-socket.md",[1436],{"type":53,"value":1437},"Actor Runtime Socket",{"type":47,"tag":928,"props":1439,"children":1440},{},[1441],{"type":47,"tag":80,"props":1442,"children":1444},{"href":1443},"reference\u002Factors\u002Fstatuses.md",[1445],{"type":53,"value":1446},"Actor Statuses",{"type":47,"tag":928,"props":1448,"children":1449},{},[1450],{"type":47,"tag":80,"props":1451,"children":1453},{"href":1452},"reference\u002Factors\u002Fauthentication.md",[1454],{"type":53,"value":1455},"Authentication",{"type":47,"tag":928,"props":1457,"children":1458},{},[1459],{"type":47,"tag":80,"props":1460,"children":1462},{"href":1461},"reference\u002Factors\u002Fquickstart\u002Fcloudflare.md",[1463],{"type":53,"value":1464},"Cloudflare Workers Quickstart",{"type":47,"tag":928,"props":1466,"children":1467},{},[1468],{"type":47,"tag":80,"props":1469,"children":1471},{"href":1470},"reference\u002Factors\u002Fcommunicating-between-actors.md",[1472],{"type":53,"value":1473},"Communicating Between Actors",{"type":47,"tag":928,"props":1475,"children":1476},{},[1477],{"type":47,"tag":80,"props":1478,"children":1480},{"href":1479},"reference\u002Factors\u002Fconnections.md",[1481],{"type":53,"value":1482},"Connections",{"type":47,"tag":928,"props":1484,"children":1485},{},[1486],{"type":47,"tag":80,"props":1487,"children":1489},{"href":1488},"reference\u002Factors\u002Finspector-tabs.md",[1490],{"type":53,"value":1491},"Custom Inspector Tabs",{"type":47,"tag":928,"props":1493,"children":1494},{},[1495],{"type":47,"tag":80,"props":1496,"children":1498},{"href":1497},"reference\u002Factors\u002Fdebugging.md",[1499],{"type":53,"value":1500},"Debugging",{"type":47,"tag":928,"props":1502,"children":1503},{},[1504],{"type":47,"tag":80,"props":1505,"children":1507},{"href":1506},"reference\u002Factors\u002Fdesign-patterns.md",[1508],{"type":53,"value":1509},"Design Patterns",{"type":47,"tag":928,"props":1511,"children":1512},{},[1513],{"type":47,"tag":80,"props":1514,"children":1516},{"href":1515},"reference\u002Factors\u002Fdestroy.md",[1517],{"type":53,"value":1518},"Destroying Actors",{"type":47,"tag":928,"props":1520,"children":1521},{},[1522],{"type":47,"tag":80,"props":1523,"children":1525},{"href":1524},"reference\u002Factors\u002Fquickstart\u002Feffect.md",[1526],{"type":53,"value":1527},"Effect.ts Quickstart (Beta)",{"type":47,"tag":928,"props":1529,"children":1530},{},[1531],{"type":47,"tag":80,"props":1532,"children":1534},{"href":1533},"reference\u002Factors\u002Ferrors.md",[1535],{"type":53,"value":1536},"Errors",{"type":47,"tag":928,"props":1538,"children":1539},{},[1540],{"type":47,"tag":80,"props":1541,"children":1543},{"href":1542},"reference\u002Factors\u002Ffetch-and-websocket-handler.md",[1544],{"type":53,"value":1545},"Fetch and WebSocket Handler",{"type":47,"tag":928,"props":1547,"children":1548},{},[1549],{"type":47,"tag":80,"props":1550,"children":1552},{"href":1551},"reference\u002Factors\u002Fhelper-types.md",[1553],{"type":53,"value":1554},"Helper Types",{"type":47,"tag":928,"props":1556,"children":1557},{},[1558],{"type":47,"tag":80,"props":1559,"children":1561},{"href":1560},"reference\u002Factors\u002Fappearance.md",[1562],{"type":53,"value":1563},"Icons & Names",{"type":47,"tag":928,"props":1565,"children":1566},{},[1567],{"type":47,"tag":80,"props":1568,"children":1570},{"href":1569},"reference\u002Factors\u002Fstate.md",[1571],{"type":53,"value":1572},"In-Memory State",{"type":47,"tag":928,"props":1574,"children":1575},{},[1576],{"type":47,"tag":80,"props":1577,"children":1579},{"href":1578},"reference\u002Factors\u002Finput.md",[1580],{"type":53,"value":1581},"Input Parameters",{"type":47,"tag":928,"props":1583,"children":1584},{},[1585],{"type":47,"tag":80,"props":1586,"children":1588},{"href":1587},"reference\u002Factors\u002Flifecycle.md",[1589],{"type":53,"value":1590},"Lifecycle",{"type":47,"tag":928,"props":1592,"children":1593},{},[1594],{"type":47,"tag":80,"props":1595,"children":1597},{"href":1596},"reference\u002Factors\u002Flimits.md",[1598],{"type":53,"value":1599},"Limits",{"type":47,"tag":928,"props":1601,"children":1602},{},[1603],{"type":47,"tag":80,"props":1604,"children":1606},{"href":1605},"reference\u002Factors\u002Frequest-handler.md",[1607],{"type":53,"value":1608},"Low-Level HTTP Request Handler",{"type":47,"tag":928,"props":1610,"children":1611},{},[1612],{"type":47,"tag":80,"props":1613,"children":1615},{"href":1614},"reference\u002Factors\u002Fkv.md",[1616],{"type":53,"value":1617},"Low-Level KV Storage",{"type":47,"tag":928,"props":1619,"children":1620},{},[1621],{"type":47,"tag":80,"props":1622,"children":1624},{"href":1623},"reference\u002Factors\u002Fwebsocket-handler.md",[1625],{"type":53,"value":1626},"Low-Level WebSocket Handler",{"type":47,"tag":928,"props":1628,"children":1629},{},[1630],{"type":47,"tag":80,"props":1631,"children":1633},{"href":1632},"reference\u002Factors\u002Fmetadata.md",[1634],{"type":53,"value":1635},"Metadata",{"type":47,"tag":928,"props":1637,"children":1638},{},[1639],{"type":47,"tag":80,"props":1640,"children":1642},{"href":1641},"reference\u002Factors\u002Fquickstart\u002Fnext-js.md",[1643],{"type":53,"value":1644},"Next.js Quickstart",{"type":47,"tag":928,"props":1646,"children":1647},{},[1648],{"type":47,"tag":80,"props":1649,"children":1651},{"href":1650},"reference\u002Factors\u002Fquickstart\u002Fbackend.md",[1652],{"type":53,"value":1653},"Node.js & Bun Quickstart",{"type":47,"tag":928,"props":1655,"children":1656},{},[1657],{"type":47,"tag":80,"props":1658,"children":1660},{"href":1659},"reference\u002Factors\u002Fqueues.md",[1661],{"type":53,"value":1662},"Queues & Run Loops",{"type":47,"tag":928,"props":1664,"children":1665},{},[1666],{"type":47,"tag":80,"props":1667,"children":1669},{"href":1668},"reference\u002Factors\u002Fquickstart\u002Freact.md",[1670],{"type":53,"value":1671},"React Quickstart",{"type":47,"tag":928,"props":1673,"children":1674},{},[1675],{"type":47,"tag":80,"props":1676,"children":1678},{"href":1677},"reference\u002Factors\u002Fevents.md",[1679],{"type":53,"value":1680},"Realtime",{"type":47,"tag":928,"props":1682,"children":1683},{},[1684],{"type":47,"tag":80,"props":1685,"children":1687},{"href":1686},"reference\u002Factors\u002Fquickstart\u002Frust.md",[1688],{"type":53,"value":1689},"Rust Quickstart (Beta)",{"type":47,"tag":928,"props":1691,"children":1692},{},[1693],{"type":47,"tag":80,"props":1694,"children":1696},{"href":1695},"reference\u002Factors\u002Fscaling.md",[1697],{"type":53,"value":1698},"Scaling & Concurrency",{"type":47,"tag":928,"props":1700,"children":1701},{},[1702],{"type":47,"tag":80,"props":1703,"children":1705},{"href":1704},"reference\u002Factors\u002Fschedule.md",[1706],{"type":53,"value":1707},"Schedule & Cron",{"type":47,"tag":928,"props":1709,"children":1710},{},[1711],{"type":47,"tag":80,"props":1712,"children":1714},{"href":1713},"reference\u002Factors\u002Fsharing-and-joining-state.md",[1715],{"type":53,"value":1716},"Sharing and Joining State",{"type":47,"tag":928,"props":1718,"children":1719},{},[1720],{"type":47,"tag":80,"props":1721,"children":1723},{"href":1722},"reference\u002Factors\u002Fsqlite.md",[1724],{"type":53,"value":1725},"SQLite",{"type":47,"tag":928,"props":1727,"children":1728},{},[1729],{"type":47,"tag":80,"props":1730,"children":1732},{"href":1731},"reference\u002Factors\u002Fsqlite-drizzle.md",[1733],{"type":53,"value":1734},"SQLite + Drizzle",{"type":47,"tag":928,"props":1736,"children":1737},{},[1738],{"type":47,"tag":80,"props":1739,"children":1741},{"href":1740},"reference\u002Factors\u002Fquickstart\u002Fsupabase.md",[1742],{"type":53,"value":1743},"Supabase Functions Quickstart",{"type":47,"tag":928,"props":1745,"children":1746},{},[1747],{"type":47,"tag":80,"props":1748,"children":1750},{"href":1749},"reference\u002Factors\u002Ftesting.md",[1751],{"type":53,"value":1752},"Testing",{"type":47,"tag":928,"props":1754,"children":1755},{},[1756],{"type":47,"tag":80,"props":1757,"children":1759},{"href":1758},"reference\u002Factors\u002Ftroubleshooting.md",[1760],{"type":53,"value":1761},"Troubleshooting",{"type":47,"tag":928,"props":1763,"children":1764},{},[1765],{"type":47,"tag":80,"props":1766,"children":1768},{"href":1767},"reference\u002Factors\u002Ftypes.md",[1769],{"type":53,"value":1770},"Types",{"type":47,"tag":928,"props":1772,"children":1773},{},[1774],{"type":47,"tag":80,"props":1775,"children":1777},{"href":1776},"reference\u002Factors\u002Fhttp-api.md",[1778],{"type":53,"value":1779},"Vanilla HTTP API",{"type":47,"tag":928,"props":1781,"children":1782},{},[1783],{"type":47,"tag":80,"props":1784,"children":1786},{"href":1785},"reference\u002Factors\u002Fversions.md",[1787],{"type":53,"value":1788},"Versions & Upgrades",{"type":47,"tag":928,"props":1790,"children":1791},{},[1792],{"type":47,"tag":80,"props":1793,"children":1795},{"href":1794},"reference\u002Factors\u002Fworkflows.md",[1796],{"type":53,"value":1797},"Workflows",{"type":47,"tag":1393,"props":1799,"children":1801},{"id":1800},"cli",[1802],{"type":53,"value":1803},"Cli",{"type":47,"tag":924,"props":1805,"children":1806},{},[1807],{"type":47,"tag":928,"props":1808,"children":1809},{},[1810],{"type":47,"tag":80,"props":1811,"children":1813},{"href":1812},"reference\u002Fcli.md",[1814],{"type":53,"value":1815},"CLI",{"type":47,"tag":1393,"props":1817,"children":1819},{"id":1818},"clients",[1820],{"type":53,"value":1821},"Clients",{"type":47,"tag":924,"props":1823,"children":1824},{},[1825,1834,1843,1852,1861],{"type":47,"tag":928,"props":1826,"children":1827},{},[1828],{"type":47,"tag":80,"props":1829,"children":1831},{"href":1830},"reference\u002Fclients\u002Fjavascript.md",[1832],{"type":53,"value":1833},"Node.js & Bun",{"type":47,"tag":928,"props":1835,"children":1836},{},[1837],{"type":47,"tag":80,"props":1838,"children":1840},{"href":1839},"reference\u002Fclients\u002Freact.md",[1841],{"type":53,"value":1842},"React",{"type":47,"tag":928,"props":1844,"children":1845},{},[1846],{"type":47,"tag":80,"props":1847,"children":1849},{"href":1848},"reference\u002Fclients\u002Frust.md",[1850],{"type":53,"value":1851},"Rust (Beta)",{"type":47,"tag":928,"props":1853,"children":1854},{},[1855],{"type":47,"tag":80,"props":1856,"children":1858},{"href":1857},"reference\u002Fclients\u002Fswift.md",[1859],{"type":53,"value":1860},"Swift",{"type":47,"tag":928,"props":1862,"children":1863},{},[1864],{"type":47,"tag":80,"props":1865,"children":1867},{"href":1866},"reference\u002Fclients\u002Fswiftui.md",[1868],{"type":53,"value":1869},"SwiftUI",{"type":47,"tag":1393,"props":1871,"children":1873},{"id":1872},"cookbook",[1874],{"type":53,"value":1875},"Cookbook",{"type":47,"tag":924,"props":1877,"children":1878},{},[1879,1888,1897,1906,1915,1924,1932,1941],{"type":47,"tag":928,"props":1880,"children":1881},{},[1882],{"type":47,"tag":80,"props":1883,"children":1885},{"href":1884},"reference\u002Fcookbook\u002Fai-agent.md",[1886],{"type":53,"value":1887},"AI Agent",{"type":47,"tag":928,"props":1889,"children":1890},{},[1891],{"type":47,"tag":80,"props":1892,"children":1894},{"href":1893},"reference\u002Fcookbook\u002Fchat-room.md",[1895],{"type":53,"value":1896},"Chat Room",{"type":47,"tag":928,"props":1898,"children":1899},{},[1900],{"type":47,"tag":80,"props":1901,"children":1903},{"href":1902},"reference\u002Fcookbook\u002Fcollaborative-text-editor.md",[1904],{"type":53,"value":1905},"Collaborative Text Editor",{"type":47,"tag":928,"props":1907,"children":1908},{},[1909],{"type":47,"tag":80,"props":1910,"children":1912},{"href":1911},"reference\u002Fcookbook\u002Fcron-jobs.md",[1913],{"type":53,"value":1914},"Cron Jobs and Scheduled Tasks",{"type":47,"tag":928,"props":1916,"children":1917},{},[1918],{"type":47,"tag":80,"props":1919,"children":1921},{"href":1920},"reference\u002Fcookbook\u002Fper-tenant-database.md",[1922],{"type":53,"value":1923},"Database per Tenant",{"type":47,"tag":928,"props":1925,"children":1926},{},[1927],{"type":47,"tag":80,"props":1928,"children":1930},{"href":1929},"reference\u002Fcookbook\u002Fvpc-air-gapped.md",[1931],{"type":53,"value":54},{"type":47,"tag":928,"props":1933,"children":1934},{},[1935],{"type":47,"tag":80,"props":1936,"children":1938},{"href":1937},"reference\u002Fcookbook\u002Flive-cursors.md",[1939],{"type":53,"value":1940},"Live Cursors and Presence",{"type":47,"tag":928,"props":1942,"children":1943},{},[1944],{"type":47,"tag":80,"props":1945,"children":1947},{"href":1946},"reference\u002Fcookbook\u002Fmultiplayer-game.md",[1948],{"type":53,"value":1949},"Multiplayer Game",{"type":47,"tag":1393,"props":1951,"children":1953},{"id":1952},"deploy",[1954],{"type":53,"value":1955},"Deploy",{"type":47,"tag":924,"props":1957,"children":1958},{},[1959,1968,1977,1986,1995,2004,2013,2022,2031,2040,2049,2058,2067],{"type":47,"tag":928,"props":1960,"children":1961},{},[1962],{"type":47,"tag":80,"props":1963,"children":1965},{"href":1964},"reference\u002Fdeploy\u002Fcontainer-runner.md",[1966],{"type":53,"value":1967},"Container Runner",{"type":47,"tag":928,"props":1969,"children":1970},{},[1971],{"type":47,"tag":80,"props":1972,"children":1974},{"href":1973},"reference\u002Fdeploy\u002Faws-lambda.md",[1975],{"type":53,"value":1976},"Deploy To Amazon Web Services Lambda",{"type":47,"tag":928,"props":1978,"children":1979},{},[1980],{"type":47,"tag":80,"props":1981,"children":1983},{"href":1982},"reference\u002Fdeploy\u002Faws-ecs.md",[1984],{"type":53,"value":1985},"Deploying to AWS ECS",{"type":47,"tag":928,"props":1987,"children":1988},{},[1989],{"type":47,"tag":80,"props":1990,"children":1992},{"href":1991},"reference\u002Fdeploy\u002Fcloudflare.md",[1993],{"type":53,"value":1994},"Deploying to Cloudflare Workers",{"type":47,"tag":928,"props":1996,"children":1997},{},[1998],{"type":47,"tag":80,"props":1999,"children":2001},{"href":2000},"reference\u002Fdeploy\u002Ffreestyle.md",[2002],{"type":53,"value":2003},"Deploying to Freestyle",{"type":47,"tag":928,"props":2005,"children":2006},{},[2007],{"type":47,"tag":80,"props":2008,"children":2010},{"href":2009},"reference\u002Fdeploy\u002Fgcp-cloud-run.md",[2011],{"type":53,"value":2012},"Deploying to Google Cloud Run",{"type":47,"tag":928,"props":2014,"children":2015},{},[2016],{"type":47,"tag":80,"props":2017,"children":2019},{"href":2018},"reference\u002Fdeploy\u002Fhetzner.md",[2020],{"type":53,"value":2021},"Deploying to Hetzner",{"type":47,"tag":928,"props":2023,"children":2024},{},[2025],{"type":47,"tag":80,"props":2026,"children":2028},{"href":2027},"reference\u002Fdeploy\u002Fkubernetes.md",[2029],{"type":53,"value":2030},"Deploying to Kubernetes",{"type":47,"tag":928,"props":2032,"children":2033},{},[2034],{"type":47,"tag":80,"props":2035,"children":2037},{"href":2036},"reference\u002Fdeploy\u002Frailway.md",[2038],{"type":53,"value":2039},"Deploying to Railway",{"type":47,"tag":928,"props":2041,"children":2042},{},[2043],{"type":47,"tag":80,"props":2044,"children":2046},{"href":2045},"reference\u002Fdeploy\u002Frivet-compute.md",[2047],{"type":53,"value":2048},"Deploying to Rivet Compute",{"type":47,"tag":928,"props":2050,"children":2051},{},[2052],{"type":47,"tag":80,"props":2053,"children":2055},{"href":2054},"reference\u002Fdeploy\u002Fsupabase.md",[2056],{"type":53,"value":2057},"Deploying to Supabase Functions",{"type":47,"tag":928,"props":2059,"children":2060},{},[2061],{"type":47,"tag":80,"props":2062,"children":2064},{"href":2063},"reference\u002Fdeploy\u002Fvercel.md",[2065],{"type":53,"value":2066},"Deploying to Vercel",{"type":47,"tag":928,"props":2068,"children":2069},{},[2070],{"type":47,"tag":80,"props":2071,"children":2073},{"href":2072},"reference\u002Fdeploy\u002Fvm-and-bare-metal.md",[2074],{"type":53,"value":2075},"Deploying to VMs & Bare Metal",{"type":47,"tag":1393,"props":2077,"children":2079},{"id":2078},"general",[2080],{"type":53,"value":2081},"General",{"type":47,"tag":924,"props":2083,"children":2084},{},[2085,2094,2102,2111,2120,2129,2137,2146,2155,2164,2173,2181,2190,2199],{"type":47,"tag":928,"props":2086,"children":2087},{},[2088],{"type":47,"tag":80,"props":2089,"children":2091},{"href":2090},"reference\u002Fgeneral\u002Factor-configuration.md",[2092],{"type":53,"value":2093},"Actor Configuration",{"type":47,"tag":928,"props":2095,"children":2096},{},[2097],{"type":47,"tag":80,"props":2098,"children":2100},{"href":2099},"reference\u002Fgeneral\u002Farchitecture.md",[2101],{"type":53,"value":203},{"type":47,"tag":928,"props":2103,"children":2104},{},[2105],{"type":47,"tag":80,"props":2106,"children":2108},{"href":2107},"reference\u002Fgeneral\u002Fcors.md",[2109],{"type":53,"value":2110},"Cross-Origin Resource Sharing",{"type":47,"tag":928,"props":2112,"children":2113},{},[2114],{"type":47,"tag":80,"props":2115,"children":2117},{"href":2116},"reference\u002Fgeneral\u002Fdocs-for-llms.md",[2118],{"type":53,"value":2119},"Documentation for LLMs & AI",{"type":47,"tag":928,"props":2121,"children":2122},{},[2123],{"type":47,"tag":80,"props":2124,"children":2126},{"href":2125},"reference\u002Fgeneral\u002Fedge.md",[2127],{"type":53,"value":2128},"Edge Networking",{"type":47,"tag":928,"props":2130,"children":2131},{},[2132],{"type":47,"tag":80,"props":2133,"children":2135},{"href":2134},"reference\u002Fgeneral\u002Fendpoints.md",[2136],{"type":53,"value":1040},{"type":47,"tag":928,"props":2138,"children":2139},{},[2140],{"type":47,"tag":80,"props":2141,"children":2143},{"href":2142},"reference\u002Fgeneral\u002Fenvironment-variables.md",[2144],{"type":53,"value":2145},"Environment Variables",{"type":47,"tag":928,"props":2147,"children":2148},{},[2149],{"type":47,"tag":80,"props":2150,"children":2152},{"href":2151},"reference\u002Fgeneral\u002Fhttp-server.md",[2153],{"type":53,"value":2154},"HTTP Server",{"type":47,"tag":928,"props":2156,"children":2157},{},[2158],{"type":47,"tag":80,"props":2159,"children":2161},{"href":2160},"reference\u002Fgeneral\u002Flogging.md",[2162],{"type":53,"value":2163},"Logging",{"type":47,"tag":928,"props":2165,"children":2166},{},[2167],{"type":47,"tag":80,"props":2168,"children":2170},{"href":2169},"reference\u002Fgeneral\u002Fpool-configuration.md",[2171],{"type":53,"value":2172},"Pool Configuration",{"type":47,"tag":928,"props":2174,"children":2175},{},[2176],{"type":47,"tag":80,"props":2177,"children":2179},{"href":2178},"reference\u002Fgeneral\u002Fproduction-checklist.md",[2180],{"type":53,"value":976},{"type":47,"tag":928,"props":2182,"children":2183},{},[2184],{"type":47,"tag":80,"props":2185,"children":2187},{"href":2186},"reference\u002Fgeneral\u002Fregistry-configuration.md",[2188],{"type":53,"value":2189},"Registry Configuration",{"type":47,"tag":928,"props":2191,"children":2192},{},[2193],{"type":47,"tag":80,"props":2194,"children":2196},{"href":2195},"reference\u002Fgeneral\u002Fruntime-modes.md",[2197],{"type":53,"value":2198},"Runtime Modes",{"type":47,"tag":928,"props":2200,"children":2201},{},[2202],{"type":47,"tag":80,"props":2203,"children":2205},{"href":2204},"reference\u002Fgeneral\u002Fwasm-vs-native-sdk.md",[2206],{"type":53,"value":2207},"WASM vs Native SDK",{"type":47,"tag":1393,"props":2209,"children":2211},{"id":2210},"self-hosting",[2212],{"type":53,"value":2213},"Self Hosting",{"type":47,"tag":924,"props":2215,"children":2216},{},[2217,2225,2233,2241,2249,2258,2266,2274,2283,2291,2299,2308,2317],{"type":47,"tag":928,"props":2218,"children":2219},{},[2220],{"type":47,"tag":80,"props":2221,"children":2223},{"href":2222},"reference\u002Fself-hosting\u002Fconfiguration.md",[2224],{"type":53,"value":422},{"type":47,"tag":928,"props":2226,"children":2227},{},[2228],{"type":47,"tag":80,"props":2229,"children":2231},{"href":2230},"reference\u002Fself-hosting\u002Fdocker-compose.md",[2232],{"type":53,"value":889},{"type":47,"tag":928,"props":2234,"children":2235},{},[2236],{"type":47,"tag":80,"props":2237,"children":2239},{"href":2238},"reference\u002Fself-hosting\u002Fdocker-container.md",[2240],{"type":53,"value":1339},{"type":47,"tag":928,"props":2242,"children":2243},{},[2244],{"type":47,"tag":80,"props":2245,"children":2247},{"href":2246},"reference\u002Fself-hosting\u002Ffilesystem.md",[2248],{"type":53,"value":336},{"type":47,"tag":928,"props":2250,"children":2251},{},[2252],{"type":47,"tag":80,"props":2253,"children":2255},{"href":2254},"reference\u002Fself-hosting\u002Ffoundationdb.md",[2256],{"type":53,"value":2257},"FoundationDB (Enterprise)",{"type":47,"tag":928,"props":2259,"children":2260},{},[2261],{"type":47,"tag":80,"props":2262,"children":2264},{"href":2263},"reference\u002Fself-hosting\u002Finstall.md",[2265],{"type":53,"value":323},{"type":47,"tag":928,"props":2267,"children":2268},{},[2269],{"type":47,"tag":80,"props":2270,"children":2272},{"href":2271},"reference\u002Fself-hosting\u002Fkubernetes.md",[2273],{"type":53,"value":1356},{"type":47,"tag":928,"props":2275,"children":2276},{},[2277],{"type":47,"tag":80,"props":2278,"children":2280},{"href":2279},"reference\u002Fself-hosting\u002Fmulti-region.md",[2281],{"type":53,"value":2282},"Multi-Region",{"type":47,"tag":928,"props":2284,"children":2285},{},[2286],{"type":47,"tag":80,"props":2287,"children":2289},{"href":2288},"reference\u002Fself-hosting\u002Fpostgres.md",[2290],{"type":53,"value":1169},{"type":47,"tag":928,"props":2292,"children":2293},{},[2294],{"type":47,"tag":80,"props":2295,"children":2297},{"href":2296},"reference\u002Fself-hosting\u002Fproduction-checklist.md",[2298],{"type":53,"value":976},{"type":47,"tag":928,"props":2300,"children":2301},{},[2302],{"type":47,"tag":80,"props":2303,"children":2305},{"href":2304},"reference\u002Fself-hosting\u002Frailway.md",[2306],{"type":53,"value":2307},"Railway Deployment",{"type":47,"tag":928,"props":2309,"children":2310},{},[2311],{"type":47,"tag":80,"props":2312,"children":2314},{"href":2313},"reference\u002Fself-hosting\u002Frender.md",[2315],{"type":53,"value":2316},"Render Deployment",{"type":47,"tag":928,"props":2318,"children":2319},{},[2320],{"type":47,"tag":80,"props":2321,"children":2323},{"href":2322},"reference\u002Fself-hosting\u002Ftls.md",[2324],{"type":53,"value":2325},"TLS & Certificates",{"type":47,"tag":2327,"props":2328,"children":2329},"style",{},[2330],{"type":53,"value":2331},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2333,"total":793},[2334,2356,2372,2391,2407,2423,2440],{"slug":2335,"name":2335,"fn":2336,"description":2337,"org":2338,"tags":2339,"stars":30,"repoUrl":31,"updatedAt":2355},"ai-agent","build AI agent backends with Rivet","Build an AI agent backend with persistent memory: one Rivet Actor per conversation, queued message handling, and streaming LLM responses as realtime events.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2340,2343,2345,2348,2351,2354],{"name":2341,"slug":2342,"type":16},"Agents","agents",{"name":1122,"slug":2344,"type":16},"backend",{"name":2346,"slug":2347,"type":16},"LLM","llm",{"name":2349,"slug":2350,"type":16},"Memory","memory",{"name":2352,"slug":2353,"type":16},"Real-time","real-time",{"name":9,"slug":8,"type":16},"2026-07-21T05:37:45.411803",{"slug":2357,"name":2357,"fn":2358,"description":2359,"org":2360,"tags":2361,"stars":30,"repoUrl":31,"updatedAt":2371},"ai-agent-workspace","create persistent workspaces for AI agents","Give every AI agent its own computer: a persistent workspace with a filesystem, processes, shells, networking, and agent sessions on a lightweight in-process OS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2362,2363,2366,2367,2368],{"name":2341,"slug":2342,"type":16},{"name":2364,"slug":2365,"type":16},"File Storage","file-storage",{"name":25,"slug":26,"type":16},{"name":9,"slug":8,"type":16},{"name":2369,"slug":2370,"type":16},"Sandboxing","sandboxing","2026-06-14T08:06:57.274844",{"slug":2373,"name":2373,"fn":2374,"description":2375,"org":2376,"tags":2377,"stars":30,"repoUrl":31,"updatedAt":2390},"chat-room","build realtime chat rooms with Rivet","Build a realtime chat room backend with Rivet Actors: one actor per room, SQLite-backed message history, and WebSocket broadcast to every connected client.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2378,2379,2382,2383,2384,2387],{"name":1122,"slug":2344,"type":16},{"name":2380,"slug":2381,"type":16},"Messaging","messaging",{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"name":2385,"slug":2386,"type":16},"SQL","sql",{"name":2388,"slug":2389,"type":16},"WebSockets","websockets","2026-07-21T05:37:48.403494",{"slug":2392,"name":2392,"fn":2393,"description":2394,"org":2395,"tags":2396,"stars":30,"repoUrl":31,"updatedAt":2406},"collaborative-text-editor","build collaborative text editors with Rivet","Build a collaborative text editor backend with Yjs CRDTs and Rivet Actors: per-document actors relay sync and awareness updates and persist snapshots.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2397,2398,2401,2404,2405],{"name":1122,"slug":2344,"type":16},{"name":2399,"slug":2400,"type":16},"Collaboration","collaboration",{"name":2402,"slug":2403,"type":16},"Documents","documents",{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},"2026-07-21T05:37:49.412829",{"slug":2408,"name":2408,"fn":2409,"description":2410,"org":2411,"tags":2412,"stars":30,"repoUrl":31,"updatedAt":2422},"cron-jobs","schedule durable cron jobs with Rivet","Patterns for durable one-shot, calendar, and fixed-interval work on Rivet Actors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2413,2416,2417,2418,2419],{"name":2414,"slug":2415,"type":16},"Automation","automation",{"name":1122,"slug":2344,"type":16},{"name":25,"slug":26,"type":16},{"name":9,"slug":8,"type":16},{"name":2420,"slug":2421,"type":16},"Scheduling","scheduling","2026-07-21T05:37:43.395911",{"slug":2424,"name":2424,"fn":2425,"description":2426,"org":2427,"tags":2428,"stars":30,"repoUrl":31,"updatedAt":2439},"live-cursors","implement live cursors and multiplayer presence","Live cursors and multiplayer presence with Rivet Actors: per-connection cursor state, realtime updates over events or raw WebSockets, and throttling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2429,2430,2433,2434,2435,2438],{"name":2399,"slug":2400,"type":16},{"name":2431,"slug":2432,"type":16},"Frontend","frontend",{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"name":2436,"slug":2437,"type":16},"UX Design","ux-design",{"name":2388,"slug":2389,"type":16},"2026-07-21T05:37:47.391088",{"slug":2441,"name":2441,"fn":2442,"description":2443,"org":2444,"tags":2445,"stars":30,"repoUrl":31,"updatedAt":2456},"multiplayer-game","build multiplayer games with Rivet","Pragmatic patterns for building multiplayer games: matchmaking, tick loops, realtime state, interest management, and validation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2446,2448,2451,2454,2455],{"name":203,"slug":2447,"type":16},"architecture",{"name":2449,"slug":2450,"type":16},"Engineering","engineering",{"name":2452,"slug":2453,"type":16},"Game Development","game-development",{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},"2026-07-21T05:37:44.627991",{"items":2458,"total":30},[2459,2468,2476,2485,2493,2501,2510,2518,2536,2549,2565,2580],{"slug":2335,"name":2335,"fn":2336,"description":2337,"org":2460,"tags":2461,"stars":30,"repoUrl":31,"updatedAt":2355},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2462,2463,2464,2465,2466,2467],{"name":2341,"slug":2342,"type":16},{"name":1122,"slug":2344,"type":16},{"name":2346,"slug":2347,"type":16},{"name":2349,"slug":2350,"type":16},{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"slug":2357,"name":2357,"fn":2358,"description":2359,"org":2469,"tags":2470,"stars":30,"repoUrl":31,"updatedAt":2371},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2471,2472,2473,2474,2475],{"name":2341,"slug":2342,"type":16},{"name":2364,"slug":2365,"type":16},{"name":25,"slug":26,"type":16},{"name":9,"slug":8,"type":16},{"name":2369,"slug":2370,"type":16},{"slug":2373,"name":2373,"fn":2374,"description":2375,"org":2477,"tags":2478,"stars":30,"repoUrl":31,"updatedAt":2390},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2479,2480,2481,2482,2483,2484],{"name":1122,"slug":2344,"type":16},{"name":2380,"slug":2381,"type":16},{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"name":2385,"slug":2386,"type":16},{"name":2388,"slug":2389,"type":16},{"slug":2392,"name":2392,"fn":2393,"description":2394,"org":2486,"tags":2487,"stars":30,"repoUrl":31,"updatedAt":2406},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2488,2489,2490,2491,2492],{"name":1122,"slug":2344,"type":16},{"name":2399,"slug":2400,"type":16},{"name":2402,"slug":2403,"type":16},{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"slug":2408,"name":2408,"fn":2409,"description":2410,"org":2494,"tags":2495,"stars":30,"repoUrl":31,"updatedAt":2422},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2496,2497,2498,2499,2500],{"name":2414,"slug":2415,"type":16},{"name":1122,"slug":2344,"type":16},{"name":25,"slug":26,"type":16},{"name":9,"slug":8,"type":16},{"name":2420,"slug":2421,"type":16},{"slug":2424,"name":2424,"fn":2425,"description":2426,"org":2502,"tags":2503,"stars":30,"repoUrl":31,"updatedAt":2439},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2504,2505,2506,2507,2508,2509],{"name":2399,"slug":2400,"type":16},{"name":2431,"slug":2432,"type":16},{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"name":2436,"slug":2437,"type":16},{"name":2388,"slug":2389,"type":16},{"slug":2441,"name":2441,"fn":2442,"description":2443,"org":2511,"tags":2512,"stars":30,"repoUrl":31,"updatedAt":2456},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2513,2514,2515,2516,2517],{"name":203,"slug":2447,"type":16},{"name":2449,"slug":2450,"type":16},{"name":2452,"slug":2453,"type":16},{"name":2352,"slug":2353,"type":16},{"name":9,"slug":8,"type":16},{"slug":2519,"name":2519,"fn":2520,"description":2521,"org":2522,"tags":2523,"stars":30,"repoUrl":31,"updatedAt":2535},"per-tenant-database","implement multi-tenant data isolation with Rivet","Multi-tenant data isolation with one Rivet Actor per tenant: the actor key is the tenant id, so each tenant gets its own isolated dataset and migrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2524,2525,2528,2531,2534],{"name":203,"slug":2447,"type":16},{"name":2526,"slug":2527,"type":16},"Database","database",{"name":2529,"slug":2530,"type":16},"Migration","migration",{"name":2532,"slug":2533,"type":16},"Multi-Tenant","multi-tenant",{"name":9,"slug":8,"type":16},"2026-07-21T05:37:46.414425",{"slug":2537,"name":2537,"fn":2538,"description":2539,"org":2540,"tags":2541,"stars":30,"repoUrl":31,"updatedAt":2548},"rivetkit","build and debug Rivet Actors","RivetKit backend and Rivet Actor runtime guidance. Use for building, modifying, debugging, or testing Rivet Actors, registries, serverless\u002Frunner modes, deployment, or actor-based workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2542,2543,2544,2546,2547],{"name":2341,"slug":2342,"type":16},{"name":1122,"slug":2344,"type":16},{"name":1500,"slug":2545,"type":16},"debugging",{"name":19,"slug":20,"type":16},{"name":9,"slug":8,"type":16},"2026-07-24T05:38:58.10133",{"slug":2550,"name":2550,"fn":2551,"description":2552,"org":2553,"tags":2554,"stars":30,"repoUrl":31,"updatedAt":2564},"rivetkit-client-javascript","use RivetKit JavaScript client","RivetKit JavaScript client guidance. Use for browser, Node.js, or Bun clients that connect to Rivet Actors with rivetkit\u002Fclient, create clients, call actions, or manage connections.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2555,2556,2557,2560,2561],{"name":1122,"slug":2344,"type":16},{"name":2431,"slug":2432,"type":16},{"name":2558,"slug":2559,"type":16},"JavaScript","javascript",{"name":9,"slug":8,"type":16},{"name":2562,"slug":2563,"type":16},"SDK","sdk","2026-07-30T05:31:37.725576",{"slug":2566,"name":2566,"fn":2567,"description":2568,"org":2569,"tags":2570,"stars":30,"repoUrl":31,"updatedAt":2579},"rivetkit-client-react","use RivetKit React client","RivetKit React client guidance. Use for React apps that connect to Rivet Actors with @rivetkit\u002Freact, create hooks with createRivetKit, or manage realtime state with useActor.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2571,2572,2574,2575,2576],{"name":2431,"slug":2432,"type":16},{"name":1842,"slug":2573,"type":16},"react",{"name":9,"slug":8,"type":16},{"name":2562,"slug":2563,"type":16},{"name":2577,"slug":2578,"type":16},"State Management","state-management","2026-07-30T05:31:36.618873",{"slug":2581,"name":2581,"fn":2582,"description":2583,"org":2584,"tags":2585,"stars":30,"repoUrl":31,"updatedAt":2593},"rivetkit-client-rust","build RivetKit Rust clients","RivetKit Rust client guidance. Use for Rust clients and backends that connect to Rivet Actors with rivetkit::client, create typed actor handles, call actions, or manage connections.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2586,2589,2590],{"name":2587,"slug":2588,"type":16},"API Development","api-development",{"name":1122,"slug":2344,"type":16},{"name":2591,"slug":2592,"type":16},"Rust","rust","2026-07-24T05:39:02.105888"]