[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-rivet-rivetkit-client-javascript":3,"mdc--13v365-key":38,"related-org-rivet-rivetkit-client-javascript":1627,"related-repo-rivet-rivetkit-client-javascript":1823},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":33,"sourceUrl":36,"mdContent":37},"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},"rivet","Rivet","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Frivet.png","rivet-dev",[13,15,18,21,24],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Backend","backend",{"name":19,"slug":20,"type":14},"JavaScript","javascript",{"name":22,"slug":23,"type":14},"SDK","sdk",{"name":25,"slug":26,"type":14},"Frontend","frontend",17,"https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Fskills","2026-07-30T05:31:37.725576",null,7,[],{"repoUrl":28,"stars":27,"forks":31,"topics":34,"description":35},[],"Generated skill files for Rivet AI integrations","https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Fskills\u002Ftree\u002FHEAD\u002Frivetkit-client-javascript","---\nname: \"rivetkit-client-javascript\"\ndescription: \"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.\"\n---\n\n# RivetKit JavaScript Client\n\nUse this skill when building JavaScript clients (browser, Node.js, or Bun) that connect to Rivet Actors with `rivetkit\u002Fclient`.\n\n## First Steps\n\n1. Install the client (latest: 2.3.7)\n   ```bash\n   npm install rivetkit@2.3.7\n   ```\n2. Create a client with `createClient()` and call actor actions.\n\n## Error Handling Policy\n\n- Prefer fail-fast behavior by default.\n- Avoid `try\u002Fcatch` unless absolutely needed.\n- If a `catch` is used, handle the error explicitly, at minimum by logging it.\n\n## Getting Started\n\nSee the [backend quickstart guide](\u002Fdocs\u002Factors\u002Fquickstart\u002Fbackend) for getting started.\n\n## Minimal Client\n\n## Stateless vs Stateful\n\n## Getting Actors\n\n## Connection Parameters\n\nUse `params` for static connection parameters. Use `getParams` when the value can change between connection attempts, such as refreshing a JWT before each `.connect()` or reconnect.\n\n## Subscribing to Events\n\n## Connection Lifecycle\n\n## Low-Level HTTP & WebSocket\n\nFor actors that implement `onRequest` or `onWebSocket`, call them directly:\n\n```ts @nocheck\nimport { createClient } from \"rivetkit\u002Fclient\";\n\nconst client = createClient();\nconst handle = client.chatRoom.getOrCreate([\"general\"]);\n\nconst response = await handle.fetch(\"history\");\nconst history = await response.json();\n\nconst ws = await handle.webSocket(\"stream\");\nws.addEventListener(\"message\", (event) => {\n  console.log(\"message:\", event.data);\n});\nws.send(\"hello\");\n```\n\n## Calling from Backend\n\n## Error Handling\n\n## Concepts\n\n### Keys\n\nKeys uniquely identify actor instances. Use compound keys (arrays) for hierarchical addressing:\n\nDon't build keys with string interpolation like `\"org:${userId}\"` when `userId` contains user data. Use arrays instead to prevent key injection attacks.\n\n### Environment Variables\n\n`createClient()` automatically reads:\n\n- `RIVET_ENDPOINT` (endpoint)\n- `RIVET_NAMESPACE`\n- `RIVET_TOKEN`\n- `RIVET_POOL`\n\nDefaults to `http:\u002F\u002Flocalhost:6420` when unset. RivetKit runs on port 6420 by default.\n\n### Endpoint Format\n\nEndpoints support URL auth syntax:\n\n```\nhttps:\u002F\u002Fnamespace:token@api.rivet.dev\n```\n\nYou can also pass the endpoint without auth and provide `RIVET_NAMESPACE` and `RIVET_TOKEN` separately. For serverless deployments, use your app's `\u002Fapi\u002Frivet` URL. See [Endpoints](\u002Fdocs\u002Fgeneral\u002Fendpoints#url-auth-syntax) for details.\n\n## Advanced\n\n### Skip Ready Wait\n\nRequests are normally held at the gateway until the actor is ready to accept traffic. An actor is not ready while it's still starting (before `onWake` finishes) or while it's in the [sleep grace period](\u002Fdocs\u002Factors\u002Flifecycle#shutdown-sequence) (running `onSleep`, `waitUntil`, and pending disconnects).\n\nPass `skipReadyWait: true` on the [low-level HTTP and WebSocket APIs](#low-level-http--websocket) to deliver immediately and reach the actor's `onRequest` \u002F `onWebSocket` handler in either window:\n\n```ts @nocheck\nimport { createClient } from \"rivetkit\u002Fclient\";\n\nconst client = createClient();\nconst handle = client.chatRoom.getOrCreate([\"general\"]);\n\nconst response = await handle.fetch(\"\u002Fhealthz\", {\n  skipReadyWait: true,\n});\n\nconst ws = await handle.webSocket(\"probe\", undefined, {\n  skipReadyWait: true,\n});\n```\n\nRequests can still return transient lifecycle or gateway errors. Retry once the actor is available again.\n\n- `actor.stopping`: the actor has fully stopped, i.e. the sleep grace period has ended but it has not yet restarted.\n- `guard.actor_stopped_while_waiting`: the request reached the actor tunnel, but the actor stopped before the gateway received a response.\n- `guard.tunnel_request_aborted`: the actor tunnel aborted the request before a response started.\n- `guard.tunnel_message_timeout`: the gateway dropped the in-flight tunnel request after its tunnel message timeout.\n- `guard.tunnel_response_closed`: the actor tunnel closed before sending a response.\n- `guard.gateway_response_start_timeout`: the gateway timed out waiting for the actor response to start.\n\n## API Reference\n\n**Package:** [rivetkit](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Frivetkit)\n\nSee the [RivetKit client overview](\u002Fdocs\u002Fclients).\n\n- [`createClient`](\u002Ftypedoc\u002Ffunctions\u002Frivetkit.client_mod.createClient.html) - Create a client\n- [`Client`](\u002Ftypedoc\u002Ftypes\u002Frivetkit.mod.Client.html) - Client type\n\n## Need More Than the Client?\n\nIf you need more about Rivet Actors, registries, or server-side RivetKit, add the main skill:\n\n```bash\nnpx skills add rivet-dev\u002Fskills\n```\n\nThen use the `rivetkit` skill for backend guidance.\n\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,52,67,74,131,137,172,178,192,198,204,210,216,245,251,257,263,284,821,827,833,839,846,851,872,878,888,929,942,948,953,963,998,1004,1010,1047,1082,1425,1430,1499,1505,1524,1535,1568,1574,1579,1609,1621],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"rivetkit-javascript-client",[49],{"type":50,"value":51},"text","RivetKit JavaScript Client",{"type":44,"tag":53,"props":54,"children":55},"p",{},[56,58,65],{"type":50,"value":57},"Use this skill when building JavaScript clients (browser, Node.js, or Bun) that connect to Rivet Actors with ",{"type":44,"tag":59,"props":60,"children":62},"code",{"className":61},[],[63],{"type":50,"value":64},"rivetkit\u002Fclient",{"type":50,"value":66},".",{"type":44,"tag":68,"props":69,"children":71},"h2",{"id":70},"first-steps",[72],{"type":50,"value":73},"First Steps",{"type":44,"tag":75,"props":76,"children":77},"ol",{},[78,118],{"type":44,"tag":79,"props":80,"children":81},"li",{},[82,84],{"type":50,"value":83},"Install the client (latest: 2.3.7)\n",{"type":44,"tag":85,"props":86,"children":91},"pre",{"className":87,"code":88,"language":89,"meta":90,"style":90},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install rivetkit@2.3.7\n","bash","",[92],{"type":44,"tag":59,"props":93,"children":94},{"__ignoreMap":90},[95],{"type":44,"tag":96,"props":97,"children":100},"span",{"class":98,"line":99},"line",1,[101,107,113],{"type":44,"tag":96,"props":102,"children":104},{"style":103},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[105],{"type":50,"value":106},"npm",{"type":44,"tag":96,"props":108,"children":110},{"style":109},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[111],{"type":50,"value":112}," install",{"type":44,"tag":96,"props":114,"children":115},{"style":109},[116],{"type":50,"value":117}," rivetkit@2.3.7\n",{"type":44,"tag":79,"props":119,"children":120},{},[121,123,129],{"type":50,"value":122},"Create a client with ",{"type":44,"tag":59,"props":124,"children":126},{"className":125},[],[127],{"type":50,"value":128},"createClient()",{"type":50,"value":130}," and call actor actions.",{"type":44,"tag":68,"props":132,"children":134},{"id":133},"error-handling-policy",[135],{"type":50,"value":136},"Error Handling Policy",{"type":44,"tag":138,"props":139,"children":140},"ul",{},[141,146,159],{"type":44,"tag":79,"props":142,"children":143},{},[144],{"type":50,"value":145},"Prefer fail-fast behavior by default.",{"type":44,"tag":79,"props":147,"children":148},{},[149,151,157],{"type":50,"value":150},"Avoid ",{"type":44,"tag":59,"props":152,"children":154},{"className":153},[],[155],{"type":50,"value":156},"try\u002Fcatch",{"type":50,"value":158}," unless absolutely needed.",{"type":44,"tag":79,"props":160,"children":161},{},[162,164,170],{"type":50,"value":163},"If a ",{"type":44,"tag":59,"props":165,"children":167},{"className":166},[],[168],{"type":50,"value":169},"catch",{"type":50,"value":171}," is used, handle the error explicitly, at minimum by logging it.",{"type":44,"tag":68,"props":173,"children":175},{"id":174},"getting-started",[176],{"type":50,"value":177},"Getting Started",{"type":44,"tag":53,"props":179,"children":180},{},[181,183,190],{"type":50,"value":182},"See the ",{"type":44,"tag":184,"props":185,"children":187},"a",{"href":186},"\u002Fdocs\u002Factors\u002Fquickstart\u002Fbackend",[188],{"type":50,"value":189},"backend quickstart guide",{"type":50,"value":191}," for getting started.",{"type":44,"tag":68,"props":193,"children":195},{"id":194},"minimal-client",[196],{"type":50,"value":197},"Minimal Client",{"type":44,"tag":68,"props":199,"children":201},{"id":200},"stateless-vs-stateful",[202],{"type":50,"value":203},"Stateless vs Stateful",{"type":44,"tag":68,"props":205,"children":207},{"id":206},"getting-actors",[208],{"type":50,"value":209},"Getting Actors",{"type":44,"tag":68,"props":211,"children":213},{"id":212},"connection-parameters",[214],{"type":50,"value":215},"Connection Parameters",{"type":44,"tag":53,"props":217,"children":218},{},[219,221,227,229,235,237,243],{"type":50,"value":220},"Use ",{"type":44,"tag":59,"props":222,"children":224},{"className":223},[],[225],{"type":50,"value":226},"params",{"type":50,"value":228}," for static connection parameters. Use ",{"type":44,"tag":59,"props":230,"children":232},{"className":231},[],[233],{"type":50,"value":234},"getParams",{"type":50,"value":236}," when the value can change between connection attempts, such as refreshing a JWT before each ",{"type":44,"tag":59,"props":238,"children":240},{"className":239},[],[241],{"type":50,"value":242},".connect()",{"type":50,"value":244}," or reconnect.",{"type":44,"tag":68,"props":246,"children":248},{"id":247},"subscribing-to-events",[249],{"type":50,"value":250},"Subscribing to Events",{"type":44,"tag":68,"props":252,"children":254},{"id":253},"connection-lifecycle",[255],{"type":50,"value":256},"Connection Lifecycle",{"type":44,"tag":68,"props":258,"children":260},{"id":259},"low-level-http-websocket",[261],{"type":50,"value":262},"Low-Level HTTP & WebSocket",{"type":44,"tag":53,"props":264,"children":265},{},[266,268,274,276,282],{"type":50,"value":267},"For actors that implement ",{"type":44,"tag":59,"props":269,"children":271},{"className":270},[],[272],{"type":50,"value":273},"onRequest",{"type":50,"value":275}," or ",{"type":44,"tag":59,"props":277,"children":279},{"className":278},[],[280],{"type":50,"value":281},"onWebSocket",{"type":50,"value":283},", call them directly:",{"type":44,"tag":85,"props":285,"children":290},{"className":286,"code":287,"language":288,"meta":289,"style":90},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createClient } from \"rivetkit\u002Fclient\";\n\nconst client = createClient();\nconst handle = client.chatRoom.getOrCreate([\"general\"]);\n\nconst response = await handle.fetch(\"history\");\nconst history = await response.json();\n\nconst ws = await handle.webSocket(\"stream\");\nws.addEventListener(\"message\", (event) => {\n  console.log(\"message:\", event.data);\n});\nws.send(\"hello\");\n","ts","@nocheck",[291],{"type":44,"tag":59,"props":292,"children":293},{"__ignoreMap":90},[294,344,354,388,455,463,526,568,576,635,700,762,779],{"type":44,"tag":96,"props":295,"children":296},{"class":98,"line":99},[297,303,309,315,320,325,330,334,339],{"type":44,"tag":96,"props":298,"children":300},{"style":299},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[301],{"type":50,"value":302},"import",{"type":44,"tag":96,"props":304,"children":306},{"style":305},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[307],{"type":50,"value":308}," {",{"type":44,"tag":96,"props":310,"children":312},{"style":311},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[313],{"type":50,"value":314}," createClient",{"type":44,"tag":96,"props":316,"children":317},{"style":305},[318],{"type":50,"value":319}," }",{"type":44,"tag":96,"props":321,"children":322},{"style":299},[323],{"type":50,"value":324}," from",{"type":44,"tag":96,"props":326,"children":327},{"style":305},[328],{"type":50,"value":329}," \"",{"type":44,"tag":96,"props":331,"children":332},{"style":109},[333],{"type":50,"value":64},{"type":44,"tag":96,"props":335,"children":336},{"style":305},[337],{"type":50,"value":338},"\"",{"type":44,"tag":96,"props":340,"children":341},{"style":305},[342],{"type":50,"value":343},";\n",{"type":44,"tag":96,"props":345,"children":347},{"class":98,"line":346},2,[348],{"type":44,"tag":96,"props":349,"children":351},{"emptyLinePlaceholder":350},true,[352],{"type":50,"value":353},"\n",{"type":44,"tag":96,"props":355,"children":357},{"class":98,"line":356},3,[358,364,369,374,379,384],{"type":44,"tag":96,"props":359,"children":361},{"style":360},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[362],{"type":50,"value":363},"const",{"type":44,"tag":96,"props":365,"children":366},{"style":311},[367],{"type":50,"value":368}," client ",{"type":44,"tag":96,"props":370,"children":371},{"style":305},[372],{"type":50,"value":373},"=",{"type":44,"tag":96,"props":375,"children":377},{"style":376},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[378],{"type":50,"value":314},{"type":44,"tag":96,"props":380,"children":381},{"style":311},[382],{"type":50,"value":383},"()",{"type":44,"tag":96,"props":385,"children":386},{"style":305},[387],{"type":50,"value":343},{"type":44,"tag":96,"props":389,"children":391},{"class":98,"line":390},4,[392,396,401,405,410,414,419,423,428,433,437,442,446,451],{"type":44,"tag":96,"props":393,"children":394},{"style":360},[395],{"type":50,"value":363},{"type":44,"tag":96,"props":397,"children":398},{"style":311},[399],{"type":50,"value":400}," handle ",{"type":44,"tag":96,"props":402,"children":403},{"style":305},[404],{"type":50,"value":373},{"type":44,"tag":96,"props":406,"children":407},{"style":311},[408],{"type":50,"value":409}," client",{"type":44,"tag":96,"props":411,"children":412},{"style":305},[413],{"type":50,"value":66},{"type":44,"tag":96,"props":415,"children":416},{"style":311},[417],{"type":50,"value":418},"chatRoom",{"type":44,"tag":96,"props":420,"children":421},{"style":305},[422],{"type":50,"value":66},{"type":44,"tag":96,"props":424,"children":425},{"style":376},[426],{"type":50,"value":427},"getOrCreate",{"type":44,"tag":96,"props":429,"children":430},{"style":311},[431],{"type":50,"value":432},"([",{"type":44,"tag":96,"props":434,"children":435},{"style":305},[436],{"type":50,"value":338},{"type":44,"tag":96,"props":438,"children":439},{"style":109},[440],{"type":50,"value":441},"general",{"type":44,"tag":96,"props":443,"children":444},{"style":305},[445],{"type":50,"value":338},{"type":44,"tag":96,"props":447,"children":448},{"style":311},[449],{"type":50,"value":450},"])",{"type":44,"tag":96,"props":452,"children":453},{"style":305},[454],{"type":50,"value":343},{"type":44,"tag":96,"props":456,"children":458},{"class":98,"line":457},5,[459],{"type":44,"tag":96,"props":460,"children":461},{"emptyLinePlaceholder":350},[462],{"type":50,"value":353},{"type":44,"tag":96,"props":464,"children":466},{"class":98,"line":465},6,[467,471,476,480,485,490,494,499,504,508,513,517,522],{"type":44,"tag":96,"props":468,"children":469},{"style":360},[470],{"type":50,"value":363},{"type":44,"tag":96,"props":472,"children":473},{"style":311},[474],{"type":50,"value":475}," response ",{"type":44,"tag":96,"props":477,"children":478},{"style":305},[479],{"type":50,"value":373},{"type":44,"tag":96,"props":481,"children":482},{"style":299},[483],{"type":50,"value":484}," await",{"type":44,"tag":96,"props":486,"children":487},{"style":311},[488],{"type":50,"value":489}," handle",{"type":44,"tag":96,"props":491,"children":492},{"style":305},[493],{"type":50,"value":66},{"type":44,"tag":96,"props":495,"children":496},{"style":376},[497],{"type":50,"value":498},"fetch",{"type":44,"tag":96,"props":500,"children":501},{"style":311},[502],{"type":50,"value":503},"(",{"type":44,"tag":96,"props":505,"children":506},{"style":305},[507],{"type":50,"value":338},{"type":44,"tag":96,"props":509,"children":510},{"style":109},[511],{"type":50,"value":512},"history",{"type":44,"tag":96,"props":514,"children":515},{"style":305},[516],{"type":50,"value":338},{"type":44,"tag":96,"props":518,"children":519},{"style":311},[520],{"type":50,"value":521},")",{"type":44,"tag":96,"props":523,"children":524},{"style":305},[525],{"type":50,"value":343},{"type":44,"tag":96,"props":527,"children":528},{"class":98,"line":31},[529,533,538,542,546,551,555,560,564],{"type":44,"tag":96,"props":530,"children":531},{"style":360},[532],{"type":50,"value":363},{"type":44,"tag":96,"props":534,"children":535},{"style":311},[536],{"type":50,"value":537}," history ",{"type":44,"tag":96,"props":539,"children":540},{"style":305},[541],{"type":50,"value":373},{"type":44,"tag":96,"props":543,"children":544},{"style":299},[545],{"type":50,"value":484},{"type":44,"tag":96,"props":547,"children":548},{"style":311},[549],{"type":50,"value":550}," response",{"type":44,"tag":96,"props":552,"children":553},{"style":305},[554],{"type":50,"value":66},{"type":44,"tag":96,"props":556,"children":557},{"style":376},[558],{"type":50,"value":559},"json",{"type":44,"tag":96,"props":561,"children":562},{"style":311},[563],{"type":50,"value":383},{"type":44,"tag":96,"props":565,"children":566},{"style":305},[567],{"type":50,"value":343},{"type":44,"tag":96,"props":569,"children":571},{"class":98,"line":570},8,[572],{"type":44,"tag":96,"props":573,"children":574},{"emptyLinePlaceholder":350},[575],{"type":50,"value":353},{"type":44,"tag":96,"props":577,"children":579},{"class":98,"line":578},9,[580,584,589,593,597,601,605,610,614,618,623,627,631],{"type":44,"tag":96,"props":581,"children":582},{"style":360},[583],{"type":50,"value":363},{"type":44,"tag":96,"props":585,"children":586},{"style":311},[587],{"type":50,"value":588}," ws ",{"type":44,"tag":96,"props":590,"children":591},{"style":305},[592],{"type":50,"value":373},{"type":44,"tag":96,"props":594,"children":595},{"style":299},[596],{"type":50,"value":484},{"type":44,"tag":96,"props":598,"children":599},{"style":311},[600],{"type":50,"value":489},{"type":44,"tag":96,"props":602,"children":603},{"style":305},[604],{"type":50,"value":66},{"type":44,"tag":96,"props":606,"children":607},{"style":376},[608],{"type":50,"value":609},"webSocket",{"type":44,"tag":96,"props":611,"children":612},{"style":311},[613],{"type":50,"value":503},{"type":44,"tag":96,"props":615,"children":616},{"style":305},[617],{"type":50,"value":338},{"type":44,"tag":96,"props":619,"children":620},{"style":109},[621],{"type":50,"value":622},"stream",{"type":44,"tag":96,"props":624,"children":625},{"style":305},[626],{"type":50,"value":338},{"type":44,"tag":96,"props":628,"children":629},{"style":311},[630],{"type":50,"value":521},{"type":44,"tag":96,"props":632,"children":633},{"style":305},[634],{"type":50,"value":343},{"type":44,"tag":96,"props":636,"children":638},{"class":98,"line":637},10,[639,644,648,653,657,661,666,670,675,680,686,690,695],{"type":44,"tag":96,"props":640,"children":641},{"style":311},[642],{"type":50,"value":643},"ws",{"type":44,"tag":96,"props":645,"children":646},{"style":305},[647],{"type":50,"value":66},{"type":44,"tag":96,"props":649,"children":650},{"style":376},[651],{"type":50,"value":652},"addEventListener",{"type":44,"tag":96,"props":654,"children":655},{"style":311},[656],{"type":50,"value":503},{"type":44,"tag":96,"props":658,"children":659},{"style":305},[660],{"type":50,"value":338},{"type":44,"tag":96,"props":662,"children":663},{"style":109},[664],{"type":50,"value":665},"message",{"type":44,"tag":96,"props":667,"children":668},{"style":305},[669],{"type":50,"value":338},{"type":44,"tag":96,"props":671,"children":672},{"style":305},[673],{"type":50,"value":674},",",{"type":44,"tag":96,"props":676,"children":677},{"style":305},[678],{"type":50,"value":679}," (",{"type":44,"tag":96,"props":681,"children":683},{"style":682},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[684],{"type":50,"value":685},"event",{"type":44,"tag":96,"props":687,"children":688},{"style":305},[689],{"type":50,"value":521},{"type":44,"tag":96,"props":691,"children":692},{"style":360},[693],{"type":50,"value":694}," =>",{"type":44,"tag":96,"props":696,"children":697},{"style":305},[698],{"type":50,"value":699}," {\n",{"type":44,"tag":96,"props":701,"children":703},{"class":98,"line":702},11,[704,709,713,718,723,727,732,736,740,745,749,754,758],{"type":44,"tag":96,"props":705,"children":706},{"style":311},[707],{"type":50,"value":708},"  console",{"type":44,"tag":96,"props":710,"children":711},{"style":305},[712],{"type":50,"value":66},{"type":44,"tag":96,"props":714,"children":715},{"style":376},[716],{"type":50,"value":717},"log",{"type":44,"tag":96,"props":719,"children":721},{"style":720},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[722],{"type":50,"value":503},{"type":44,"tag":96,"props":724,"children":725},{"style":305},[726],{"type":50,"value":338},{"type":44,"tag":96,"props":728,"children":729},{"style":109},[730],{"type":50,"value":731},"message:",{"type":44,"tag":96,"props":733,"children":734},{"style":305},[735],{"type":50,"value":338},{"type":44,"tag":96,"props":737,"children":738},{"style":305},[739],{"type":50,"value":674},{"type":44,"tag":96,"props":741,"children":742},{"style":311},[743],{"type":50,"value":744}," event",{"type":44,"tag":96,"props":746,"children":747},{"style":305},[748],{"type":50,"value":66},{"type":44,"tag":96,"props":750,"children":751},{"style":311},[752],{"type":50,"value":753},"data",{"type":44,"tag":96,"props":755,"children":756},{"style":720},[757],{"type":50,"value":521},{"type":44,"tag":96,"props":759,"children":760},{"style":305},[761],{"type":50,"value":343},{"type":44,"tag":96,"props":763,"children":765},{"class":98,"line":764},12,[766,771,775],{"type":44,"tag":96,"props":767,"children":768},{"style":305},[769],{"type":50,"value":770},"}",{"type":44,"tag":96,"props":772,"children":773},{"style":311},[774],{"type":50,"value":521},{"type":44,"tag":96,"props":776,"children":777},{"style":305},[778],{"type":50,"value":343},{"type":44,"tag":96,"props":780,"children":782},{"class":98,"line":781},13,[783,787,791,796,800,804,809,813,817],{"type":44,"tag":96,"props":784,"children":785},{"style":311},[786],{"type":50,"value":643},{"type":44,"tag":96,"props":788,"children":789},{"style":305},[790],{"type":50,"value":66},{"type":44,"tag":96,"props":792,"children":793},{"style":376},[794],{"type":50,"value":795},"send",{"type":44,"tag":96,"props":797,"children":798},{"style":311},[799],{"type":50,"value":503},{"type":44,"tag":96,"props":801,"children":802},{"style":305},[803],{"type":50,"value":338},{"type":44,"tag":96,"props":805,"children":806},{"style":109},[807],{"type":50,"value":808},"hello",{"type":44,"tag":96,"props":810,"children":811},{"style":305},[812],{"type":50,"value":338},{"type":44,"tag":96,"props":814,"children":815},{"style":311},[816],{"type":50,"value":521},{"type":44,"tag":96,"props":818,"children":819},{"style":305},[820],{"type":50,"value":343},{"type":44,"tag":68,"props":822,"children":824},{"id":823},"calling-from-backend",[825],{"type":50,"value":826},"Calling from Backend",{"type":44,"tag":68,"props":828,"children":830},{"id":829},"error-handling",[831],{"type":50,"value":832},"Error Handling",{"type":44,"tag":68,"props":834,"children":836},{"id":835},"concepts",[837],{"type":50,"value":838},"Concepts",{"type":44,"tag":840,"props":841,"children":843},"h3",{"id":842},"keys",[844],{"type":50,"value":845},"Keys",{"type":44,"tag":53,"props":847,"children":848},{},[849],{"type":50,"value":850},"Keys uniquely identify actor instances. Use compound keys (arrays) for hierarchical addressing:",{"type":44,"tag":53,"props":852,"children":853},{},[854,856,862,864,870],{"type":50,"value":855},"Don't build keys with string interpolation like ",{"type":44,"tag":59,"props":857,"children":859},{"className":858},[],[860],{"type":50,"value":861},"\"org:${userId}\"",{"type":50,"value":863}," when ",{"type":44,"tag":59,"props":865,"children":867},{"className":866},[],[868],{"type":50,"value":869},"userId",{"type":50,"value":871}," contains user data. Use arrays instead to prevent key injection attacks.",{"type":44,"tag":840,"props":873,"children":875},{"id":874},"environment-variables",[876],{"type":50,"value":877},"Environment Variables",{"type":44,"tag":53,"props":879,"children":880},{},[881,886],{"type":44,"tag":59,"props":882,"children":884},{"className":883},[],[885],{"type":50,"value":128},{"type":50,"value":887}," automatically reads:",{"type":44,"tag":138,"props":889,"children":890},{},[891,902,911,920],{"type":44,"tag":79,"props":892,"children":893},{},[894,900],{"type":44,"tag":59,"props":895,"children":897},{"className":896},[],[898],{"type":50,"value":899},"RIVET_ENDPOINT",{"type":50,"value":901}," (endpoint)",{"type":44,"tag":79,"props":903,"children":904},{},[905],{"type":44,"tag":59,"props":906,"children":908},{"className":907},[],[909],{"type":50,"value":910},"RIVET_NAMESPACE",{"type":44,"tag":79,"props":912,"children":913},{},[914],{"type":44,"tag":59,"props":915,"children":917},{"className":916},[],[918],{"type":50,"value":919},"RIVET_TOKEN",{"type":44,"tag":79,"props":921,"children":922},{},[923],{"type":44,"tag":59,"props":924,"children":926},{"className":925},[],[927],{"type":50,"value":928},"RIVET_POOL",{"type":44,"tag":53,"props":930,"children":931},{},[932,934,940],{"type":50,"value":933},"Defaults to ",{"type":44,"tag":59,"props":935,"children":937},{"className":936},[],[938],{"type":50,"value":939},"http:\u002F\u002Flocalhost:6420",{"type":50,"value":941}," when unset. RivetKit runs on port 6420 by default.",{"type":44,"tag":840,"props":943,"children":945},{"id":944},"endpoint-format",[946],{"type":50,"value":947},"Endpoint Format",{"type":44,"tag":53,"props":949,"children":950},{},[951],{"type":50,"value":952},"Endpoints support URL auth syntax:",{"type":44,"tag":85,"props":954,"children":958},{"className":955,"code":957,"language":50},[956],"language-text","https:\u002F\u002Fnamespace:token@api.rivet.dev\n",[959],{"type":44,"tag":59,"props":960,"children":961},{"__ignoreMap":90},[962],{"type":50,"value":957},{"type":44,"tag":53,"props":964,"children":965},{},[966,968,973,975,980,982,988,990,996],{"type":50,"value":967},"You can also pass the endpoint without auth and provide ",{"type":44,"tag":59,"props":969,"children":971},{"className":970},[],[972],{"type":50,"value":910},{"type":50,"value":974}," and ",{"type":44,"tag":59,"props":976,"children":978},{"className":977},[],[979],{"type":50,"value":919},{"type":50,"value":981}," separately. For serverless deployments, use your app's ",{"type":44,"tag":59,"props":983,"children":985},{"className":984},[],[986],{"type":50,"value":987},"\u002Fapi\u002Frivet",{"type":50,"value":989}," URL. See ",{"type":44,"tag":184,"props":991,"children":993},{"href":992},"\u002Fdocs\u002Fgeneral\u002Fendpoints#url-auth-syntax",[994],{"type":50,"value":995},"Endpoints",{"type":50,"value":997}," for details.",{"type":44,"tag":68,"props":999,"children":1001},{"id":1000},"advanced",[1002],{"type":50,"value":1003},"Advanced",{"type":44,"tag":840,"props":1005,"children":1007},{"id":1006},"skip-ready-wait",[1008],{"type":50,"value":1009},"Skip Ready Wait",{"type":44,"tag":53,"props":1011,"children":1012},{},[1013,1015,1021,1023,1029,1031,1037,1039,1045],{"type":50,"value":1014},"Requests are normally held at the gateway until the actor is ready to accept traffic. An actor is not ready while it's still starting (before ",{"type":44,"tag":59,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":50,"value":1020},"onWake",{"type":50,"value":1022}," finishes) or while it's in the ",{"type":44,"tag":184,"props":1024,"children":1026},{"href":1025},"\u002Fdocs\u002Factors\u002Flifecycle#shutdown-sequence",[1027],{"type":50,"value":1028},"sleep grace period",{"type":50,"value":1030}," (running ",{"type":44,"tag":59,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":50,"value":1036},"onSleep",{"type":50,"value":1038},", ",{"type":44,"tag":59,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":50,"value":1044},"waitUntil",{"type":50,"value":1046},", and pending disconnects).",{"type":44,"tag":53,"props":1048,"children":1049},{},[1050,1052,1058,1060,1066,1068,1073,1075,1080],{"type":50,"value":1051},"Pass ",{"type":44,"tag":59,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":50,"value":1057},"skipReadyWait: true",{"type":50,"value":1059}," on the ",{"type":44,"tag":184,"props":1061,"children":1063},{"href":1062},"#low-level-http--websocket",[1064],{"type":50,"value":1065},"low-level HTTP and WebSocket APIs",{"type":50,"value":1067}," to deliver immediately and reach the actor's ",{"type":44,"tag":59,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":50,"value":273},{"type":50,"value":1074}," \u002F ",{"type":44,"tag":59,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":50,"value":281},{"type":50,"value":1081}," handler in either window:",{"type":44,"tag":85,"props":1083,"children":1085},{"className":286,"code":1084,"language":288,"meta":289,"style":90},"import { createClient } from \"rivetkit\u002Fclient\";\n\nconst client = createClient();\nconst handle = client.chatRoom.getOrCreate([\"general\"]);\n\nconst response = await handle.fetch(\"\u002Fhealthz\", {\n  skipReadyWait: true,\n});\n\nconst ws = await handle.webSocket(\"probe\", undefined, {\n  skipReadyWait: true,\n});\n",[1086],{"type":44,"tag":59,"props":1087,"children":1088},{"__ignoreMap":90},[1089,1128,1135,1162,1221,1228,1284,1308,1323,1330,1391,1410],{"type":44,"tag":96,"props":1090,"children":1091},{"class":98,"line":99},[1092,1096,1100,1104,1108,1112,1116,1120,1124],{"type":44,"tag":96,"props":1093,"children":1094},{"style":299},[1095],{"type":50,"value":302},{"type":44,"tag":96,"props":1097,"children":1098},{"style":305},[1099],{"type":50,"value":308},{"type":44,"tag":96,"props":1101,"children":1102},{"style":311},[1103],{"type":50,"value":314},{"type":44,"tag":96,"props":1105,"children":1106},{"style":305},[1107],{"type":50,"value":319},{"type":44,"tag":96,"props":1109,"children":1110},{"style":299},[1111],{"type":50,"value":324},{"type":44,"tag":96,"props":1113,"children":1114},{"style":305},[1115],{"type":50,"value":329},{"type":44,"tag":96,"props":1117,"children":1118},{"style":109},[1119],{"type":50,"value":64},{"type":44,"tag":96,"props":1121,"children":1122},{"style":305},[1123],{"type":50,"value":338},{"type":44,"tag":96,"props":1125,"children":1126},{"style":305},[1127],{"type":50,"value":343},{"type":44,"tag":96,"props":1129,"children":1130},{"class":98,"line":346},[1131],{"type":44,"tag":96,"props":1132,"children":1133},{"emptyLinePlaceholder":350},[1134],{"type":50,"value":353},{"type":44,"tag":96,"props":1136,"children":1137},{"class":98,"line":356},[1138,1142,1146,1150,1154,1158],{"type":44,"tag":96,"props":1139,"children":1140},{"style":360},[1141],{"type":50,"value":363},{"type":44,"tag":96,"props":1143,"children":1144},{"style":311},[1145],{"type":50,"value":368},{"type":44,"tag":96,"props":1147,"children":1148},{"style":305},[1149],{"type":50,"value":373},{"type":44,"tag":96,"props":1151,"children":1152},{"style":376},[1153],{"type":50,"value":314},{"type":44,"tag":96,"props":1155,"children":1156},{"style":311},[1157],{"type":50,"value":383},{"type":44,"tag":96,"props":1159,"children":1160},{"style":305},[1161],{"type":50,"value":343},{"type":44,"tag":96,"props":1163,"children":1164},{"class":98,"line":390},[1165,1169,1173,1177,1181,1185,1189,1193,1197,1201,1205,1209,1213,1217],{"type":44,"tag":96,"props":1166,"children":1167},{"style":360},[1168],{"type":50,"value":363},{"type":44,"tag":96,"props":1170,"children":1171},{"style":311},[1172],{"type":50,"value":400},{"type":44,"tag":96,"props":1174,"children":1175},{"style":305},[1176],{"type":50,"value":373},{"type":44,"tag":96,"props":1178,"children":1179},{"style":311},[1180],{"type":50,"value":409},{"type":44,"tag":96,"props":1182,"children":1183},{"style":305},[1184],{"type":50,"value":66},{"type":44,"tag":96,"props":1186,"children":1187},{"style":311},[1188],{"type":50,"value":418},{"type":44,"tag":96,"props":1190,"children":1191},{"style":305},[1192],{"type":50,"value":66},{"type":44,"tag":96,"props":1194,"children":1195},{"style":376},[1196],{"type":50,"value":427},{"type":44,"tag":96,"props":1198,"children":1199},{"style":311},[1200],{"type":50,"value":432},{"type":44,"tag":96,"props":1202,"children":1203},{"style":305},[1204],{"type":50,"value":338},{"type":44,"tag":96,"props":1206,"children":1207},{"style":109},[1208],{"type":50,"value":441},{"type":44,"tag":96,"props":1210,"children":1211},{"style":305},[1212],{"type":50,"value":338},{"type":44,"tag":96,"props":1214,"children":1215},{"style":311},[1216],{"type":50,"value":450},{"type":44,"tag":96,"props":1218,"children":1219},{"style":305},[1220],{"type":50,"value":343},{"type":44,"tag":96,"props":1222,"children":1223},{"class":98,"line":457},[1224],{"type":44,"tag":96,"props":1225,"children":1226},{"emptyLinePlaceholder":350},[1227],{"type":50,"value":353},{"type":44,"tag":96,"props":1229,"children":1230},{"class":98,"line":465},[1231,1235,1239,1243,1247,1251,1255,1259,1263,1267,1272,1276,1280],{"type":44,"tag":96,"props":1232,"children":1233},{"style":360},[1234],{"type":50,"value":363},{"type":44,"tag":96,"props":1236,"children":1237},{"style":311},[1238],{"type":50,"value":475},{"type":44,"tag":96,"props":1240,"children":1241},{"style":305},[1242],{"type":50,"value":373},{"type":44,"tag":96,"props":1244,"children":1245},{"style":299},[1246],{"type":50,"value":484},{"type":44,"tag":96,"props":1248,"children":1249},{"style":311},[1250],{"type":50,"value":489},{"type":44,"tag":96,"props":1252,"children":1253},{"style":305},[1254],{"type":50,"value":66},{"type":44,"tag":96,"props":1256,"children":1257},{"style":376},[1258],{"type":50,"value":498},{"type":44,"tag":96,"props":1260,"children":1261},{"style":311},[1262],{"type":50,"value":503},{"type":44,"tag":96,"props":1264,"children":1265},{"style":305},[1266],{"type":50,"value":338},{"type":44,"tag":96,"props":1268,"children":1269},{"style":109},[1270],{"type":50,"value":1271},"\u002Fhealthz",{"type":44,"tag":96,"props":1273,"children":1274},{"style":305},[1275],{"type":50,"value":338},{"type":44,"tag":96,"props":1277,"children":1278},{"style":305},[1279],{"type":50,"value":674},{"type":44,"tag":96,"props":1281,"children":1282},{"style":305},[1283],{"type":50,"value":699},{"type":44,"tag":96,"props":1285,"children":1286},{"class":98,"line":31},[1287,1292,1297,1303],{"type":44,"tag":96,"props":1288,"children":1289},{"style":720},[1290],{"type":50,"value":1291},"  skipReadyWait",{"type":44,"tag":96,"props":1293,"children":1294},{"style":305},[1295],{"type":50,"value":1296},":",{"type":44,"tag":96,"props":1298,"children":1300},{"style":1299},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1301],{"type":50,"value":1302}," true",{"type":44,"tag":96,"props":1304,"children":1305},{"style":305},[1306],{"type":50,"value":1307},",\n",{"type":44,"tag":96,"props":1309,"children":1310},{"class":98,"line":570},[1311,1315,1319],{"type":44,"tag":96,"props":1312,"children":1313},{"style":305},[1314],{"type":50,"value":770},{"type":44,"tag":96,"props":1316,"children":1317},{"style":311},[1318],{"type":50,"value":521},{"type":44,"tag":96,"props":1320,"children":1321},{"style":305},[1322],{"type":50,"value":343},{"type":44,"tag":96,"props":1324,"children":1325},{"class":98,"line":578},[1326],{"type":44,"tag":96,"props":1327,"children":1328},{"emptyLinePlaceholder":350},[1329],{"type":50,"value":353},{"type":44,"tag":96,"props":1331,"children":1332},{"class":98,"line":637},[1333,1337,1341,1345,1349,1353,1357,1361,1365,1369,1374,1378,1382,1387],{"type":44,"tag":96,"props":1334,"children":1335},{"style":360},[1336],{"type":50,"value":363},{"type":44,"tag":96,"props":1338,"children":1339},{"style":311},[1340],{"type":50,"value":588},{"type":44,"tag":96,"props":1342,"children":1343},{"style":305},[1344],{"type":50,"value":373},{"type":44,"tag":96,"props":1346,"children":1347},{"style":299},[1348],{"type":50,"value":484},{"type":44,"tag":96,"props":1350,"children":1351},{"style":311},[1352],{"type":50,"value":489},{"type":44,"tag":96,"props":1354,"children":1355},{"style":305},[1356],{"type":50,"value":66},{"type":44,"tag":96,"props":1358,"children":1359},{"style":376},[1360],{"type":50,"value":609},{"type":44,"tag":96,"props":1362,"children":1363},{"style":311},[1364],{"type":50,"value":503},{"type":44,"tag":96,"props":1366,"children":1367},{"style":305},[1368],{"type":50,"value":338},{"type":44,"tag":96,"props":1370,"children":1371},{"style":109},[1372],{"type":50,"value":1373},"probe",{"type":44,"tag":96,"props":1375,"children":1376},{"style":305},[1377],{"type":50,"value":338},{"type":44,"tag":96,"props":1379,"children":1380},{"style":305},[1381],{"type":50,"value":674},{"type":44,"tag":96,"props":1383,"children":1384},{"style":305},[1385],{"type":50,"value":1386}," undefined,",{"type":44,"tag":96,"props":1388,"children":1389},{"style":305},[1390],{"type":50,"value":699},{"type":44,"tag":96,"props":1392,"children":1393},{"class":98,"line":702},[1394,1398,1402,1406],{"type":44,"tag":96,"props":1395,"children":1396},{"style":720},[1397],{"type":50,"value":1291},{"type":44,"tag":96,"props":1399,"children":1400},{"style":305},[1401],{"type":50,"value":1296},{"type":44,"tag":96,"props":1403,"children":1404},{"style":1299},[1405],{"type":50,"value":1302},{"type":44,"tag":96,"props":1407,"children":1408},{"style":305},[1409],{"type":50,"value":1307},{"type":44,"tag":96,"props":1411,"children":1412},{"class":98,"line":764},[1413,1417,1421],{"type":44,"tag":96,"props":1414,"children":1415},{"style":305},[1416],{"type":50,"value":770},{"type":44,"tag":96,"props":1418,"children":1419},{"style":311},[1420],{"type":50,"value":521},{"type":44,"tag":96,"props":1422,"children":1423},{"style":305},[1424],{"type":50,"value":343},{"type":44,"tag":53,"props":1426,"children":1427},{},[1428],{"type":50,"value":1429},"Requests can still return transient lifecycle or gateway errors. Retry once the actor is available again.",{"type":44,"tag":138,"props":1431,"children":1432},{},[1433,1444,1455,1466,1477,1488],{"type":44,"tag":79,"props":1434,"children":1435},{},[1436,1442],{"type":44,"tag":59,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":50,"value":1441},"actor.stopping",{"type":50,"value":1443},": the actor has fully stopped, i.e. the sleep grace period has ended but it has not yet restarted.",{"type":44,"tag":79,"props":1445,"children":1446},{},[1447,1453],{"type":44,"tag":59,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":50,"value":1452},"guard.actor_stopped_while_waiting",{"type":50,"value":1454},": the request reached the actor tunnel, but the actor stopped before the gateway received a response.",{"type":44,"tag":79,"props":1456,"children":1457},{},[1458,1464],{"type":44,"tag":59,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":50,"value":1463},"guard.tunnel_request_aborted",{"type":50,"value":1465},": the actor tunnel aborted the request before a response started.",{"type":44,"tag":79,"props":1467,"children":1468},{},[1469,1475],{"type":44,"tag":59,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":50,"value":1474},"guard.tunnel_message_timeout",{"type":50,"value":1476},": the gateway dropped the in-flight tunnel request after its tunnel message timeout.",{"type":44,"tag":79,"props":1478,"children":1479},{},[1480,1486],{"type":44,"tag":59,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":50,"value":1485},"guard.tunnel_response_closed",{"type":50,"value":1487},": the actor tunnel closed before sending a response.",{"type":44,"tag":79,"props":1489,"children":1490},{},[1491,1497],{"type":44,"tag":59,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":50,"value":1496},"guard.gateway_response_start_timeout",{"type":50,"value":1498},": the gateway timed out waiting for the actor response to start.",{"type":44,"tag":68,"props":1500,"children":1502},{"id":1501},"api-reference",[1503],{"type":50,"value":1504},"API Reference",{"type":44,"tag":53,"props":1506,"children":1507},{},[1508,1514,1516],{"type":44,"tag":1509,"props":1510,"children":1511},"strong",{},[1512],{"type":50,"value":1513},"Package:",{"type":50,"value":1515}," ",{"type":44,"tag":184,"props":1517,"children":1521},{"href":1518,"rel":1519},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Frivetkit",[1520],"nofollow",[1522],{"type":50,"value":1523},"rivetkit",{"type":44,"tag":53,"props":1525,"children":1526},{},[1527,1528,1534],{"type":50,"value":182},{"type":44,"tag":184,"props":1529,"children":1531},{"href":1530},"\u002Fdocs\u002Fclients",[1532],{"type":50,"value":1533},"RivetKit client overview",{"type":50,"value":66},{"type":44,"tag":138,"props":1536,"children":1537},{},[1538,1553],{"type":44,"tag":79,"props":1539,"children":1540},{},[1541,1551],{"type":44,"tag":184,"props":1542,"children":1544},{"href":1543},"\u002Ftypedoc\u002Ffunctions\u002Frivetkit.client_mod.createClient.html",[1545],{"type":44,"tag":59,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":50,"value":1550},"createClient",{"type":50,"value":1552}," - Create a client",{"type":44,"tag":79,"props":1554,"children":1555},{},[1556,1566],{"type":44,"tag":184,"props":1557,"children":1559},{"href":1558},"\u002Ftypedoc\u002Ftypes\u002Frivetkit.mod.Client.html",[1560],{"type":44,"tag":59,"props":1561,"children":1563},{"className":1562},[],[1564],{"type":50,"value":1565},"Client",{"type":50,"value":1567}," - Client type",{"type":44,"tag":68,"props":1569,"children":1571},{"id":1570},"need-more-than-the-client",[1572],{"type":50,"value":1573},"Need More Than the Client?",{"type":44,"tag":53,"props":1575,"children":1576},{},[1577],{"type":50,"value":1578},"If you need more about Rivet Actors, registries, or server-side RivetKit, add the main skill:",{"type":44,"tag":85,"props":1580,"children":1582},{"className":87,"code":1581,"language":89,"meta":90,"style":90},"npx skills add rivet-dev\u002Fskills\n",[1583],{"type":44,"tag":59,"props":1584,"children":1585},{"__ignoreMap":90},[1586],{"type":44,"tag":96,"props":1587,"children":1588},{"class":98,"line":99},[1589,1594,1599,1604],{"type":44,"tag":96,"props":1590,"children":1591},{"style":103},[1592],{"type":50,"value":1593},"npx",{"type":44,"tag":96,"props":1595,"children":1596},{"style":109},[1597],{"type":50,"value":1598}," skills",{"type":44,"tag":96,"props":1600,"children":1601},{"style":109},[1602],{"type":50,"value":1603}," add",{"type":44,"tag":96,"props":1605,"children":1606},{"style":109},[1607],{"type":50,"value":1608}," rivet-dev\u002Fskills\n",{"type":44,"tag":53,"props":1610,"children":1611},{},[1612,1614,1619],{"type":50,"value":1613},"Then use the ",{"type":44,"tag":59,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":50,"value":1523},{"type":50,"value":1620}," skill for backend guidance.",{"type":44,"tag":1622,"props":1623,"children":1624},"style",{},[1625],{"type":50,"value":1626},"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":1628,"total":27},[1629,1650,1668,1687,1703,1719,1734,1752,1770,1785,1793,1809],{"slug":1630,"name":1630,"fn":1631,"description":1632,"org":1633,"tags":1634,"stars":27,"repoUrl":28,"updatedAt":1649},"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},[1635,1638,1639,1642,1645,1648],{"name":1636,"slug":1637,"type":14},"Agents","agents",{"name":16,"slug":17,"type":14},{"name":1640,"slug":1641,"type":14},"LLM","llm",{"name":1643,"slug":1644,"type":14},"Memory","memory",{"name":1646,"slug":1647,"type":14},"Real-time","real-time",{"name":9,"slug":8,"type":14},"2026-07-21T05:37:45.411803",{"slug":1651,"name":1651,"fn":1652,"description":1653,"org":1654,"tags":1655,"stars":27,"repoUrl":28,"updatedAt":1667},"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},[1656,1657,1660,1663,1664],{"name":1636,"slug":1637,"type":14},{"name":1658,"slug":1659,"type":14},"File Storage","file-storage",{"name":1661,"slug":1662,"type":14},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":14},{"name":1665,"slug":1666,"type":14},"Sandboxing","sandboxing","2026-06-14T08:06:57.274844",{"slug":1669,"name":1669,"fn":1670,"description":1671,"org":1672,"tags":1673,"stars":27,"repoUrl":28,"updatedAt":1686},"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},[1674,1675,1678,1679,1680,1683],{"name":16,"slug":17,"type":14},{"name":1676,"slug":1677,"type":14},"Messaging","messaging",{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"name":1681,"slug":1682,"type":14},"SQL","sql",{"name":1684,"slug":1685,"type":14},"WebSockets","websockets","2026-07-21T05:37:48.403494",{"slug":1688,"name":1688,"fn":1689,"description":1690,"org":1691,"tags":1692,"stars":27,"repoUrl":28,"updatedAt":1702},"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},[1693,1694,1697,1700,1701],{"name":16,"slug":17,"type":14},{"name":1695,"slug":1696,"type":14},"Collaboration","collaboration",{"name":1698,"slug":1699,"type":14},"Documents","documents",{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},"2026-07-21T05:37:49.412829",{"slug":1704,"name":1704,"fn":1705,"description":1706,"org":1707,"tags":1708,"stars":27,"repoUrl":28,"updatedAt":1718},"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},[1709,1712,1713,1714,1715],{"name":1710,"slug":1711,"type":14},"Automation","automation",{"name":16,"slug":17,"type":14},{"name":1661,"slug":1662,"type":14},{"name":9,"slug":8,"type":14},{"name":1716,"slug":1717,"type":14},"Scheduling","scheduling","2026-07-21T05:37:43.395911",{"slug":1720,"name":1720,"fn":1721,"description":1722,"org":1723,"tags":1724,"stars":27,"repoUrl":28,"updatedAt":1733},"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},[1725,1726,1727,1728,1729,1732],{"name":1695,"slug":1696,"type":14},{"name":25,"slug":26,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"name":1730,"slug":1731,"type":14},"UX Design","ux-design",{"name":1684,"slug":1685,"type":14},"2026-07-21T05:37:47.391088",{"slug":1735,"name":1735,"fn":1736,"description":1737,"org":1738,"tags":1739,"stars":27,"repoUrl":28,"updatedAt":1751},"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},[1740,1743,1746,1749,1750],{"name":1741,"slug":1742,"type":14},"Architecture","architecture",{"name":1744,"slug":1745,"type":14},"Engineering","engineering",{"name":1747,"slug":1748,"type":14},"Game Development","game-development",{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},"2026-07-21T05:37:44.627991",{"slug":1753,"name":1753,"fn":1754,"description":1755,"org":1756,"tags":1757,"stars":27,"repoUrl":28,"updatedAt":1769},"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},[1758,1759,1762,1765,1768],{"name":1741,"slug":1742,"type":14},{"name":1760,"slug":1761,"type":14},"Database","database",{"name":1763,"slug":1764,"type":14},"Migration","migration",{"name":1766,"slug":1767,"type":14},"Multi-Tenant","multi-tenant",{"name":9,"slug":8,"type":14},"2026-07-21T05:37:46.414425",{"slug":1523,"name":1523,"fn":1771,"description":1772,"org":1773,"tags":1774,"stars":27,"repoUrl":28,"updatedAt":1784},"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},[1775,1776,1777,1780,1783],{"name":1636,"slug":1637,"type":14},{"name":16,"slug":17,"type":14},{"name":1778,"slug":1779,"type":14},"Debugging","debugging",{"name":1781,"slug":1782,"type":14},"Deployment","deployment",{"name":9,"slug":8,"type":14},"2026-07-24T05:38:58.10133",{"slug":4,"name":4,"fn":5,"description":6,"org":1786,"tags":1787,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1788,1789,1790,1791,1792],{"name":16,"slug":17,"type":14},{"name":25,"slug":26,"type":14},{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"slug":1794,"name":1794,"fn":1795,"description":1796,"org":1797,"tags":1798,"stars":27,"repoUrl":28,"updatedAt":1808},"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},[1799,1800,1803,1804,1805],{"name":25,"slug":26,"type":14},{"name":1801,"slug":1802,"type":14},"React","react",{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":1806,"slug":1807,"type":14},"State Management","state-management","2026-07-30T05:31:36.618873",{"slug":1810,"name":1810,"fn":1811,"description":1812,"org":1813,"tags":1814,"stars":27,"repoUrl":28,"updatedAt":1822},"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},[1815,1818,1819],{"name":1816,"slug":1817,"type":14},"API Development","api-development",{"name":16,"slug":17,"type":14},{"name":1820,"slug":1821,"type":14},"Rust","rust","2026-07-24T05:39:02.105888",{"items":1824,"total":1884},[1825,1834,1842,1851,1859,1867,1876],{"slug":1630,"name":1630,"fn":1631,"description":1632,"org":1826,"tags":1827,"stars":27,"repoUrl":28,"updatedAt":1649},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1828,1829,1830,1831,1832,1833],{"name":1636,"slug":1637,"type":14},{"name":16,"slug":17,"type":14},{"name":1640,"slug":1641,"type":14},{"name":1643,"slug":1644,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"slug":1651,"name":1651,"fn":1652,"description":1653,"org":1835,"tags":1836,"stars":27,"repoUrl":28,"updatedAt":1667},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1837,1838,1839,1840,1841],{"name":1636,"slug":1637,"type":14},{"name":1658,"slug":1659,"type":14},{"name":1661,"slug":1662,"type":14},{"name":9,"slug":8,"type":14},{"name":1665,"slug":1666,"type":14},{"slug":1669,"name":1669,"fn":1670,"description":1671,"org":1843,"tags":1844,"stars":27,"repoUrl":28,"updatedAt":1686},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1845,1846,1847,1848,1849,1850],{"name":16,"slug":17,"type":14},{"name":1676,"slug":1677,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"name":1681,"slug":1682,"type":14},{"name":1684,"slug":1685,"type":14},{"slug":1688,"name":1688,"fn":1689,"description":1690,"org":1852,"tags":1853,"stars":27,"repoUrl":28,"updatedAt":1702},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1854,1855,1856,1857,1858],{"name":16,"slug":17,"type":14},{"name":1695,"slug":1696,"type":14},{"name":1698,"slug":1699,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"slug":1704,"name":1704,"fn":1705,"description":1706,"org":1860,"tags":1861,"stars":27,"repoUrl":28,"updatedAt":1718},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1862,1863,1864,1865,1866],{"name":1710,"slug":1711,"type":14},{"name":16,"slug":17,"type":14},{"name":1661,"slug":1662,"type":14},{"name":9,"slug":8,"type":14},{"name":1716,"slug":1717,"type":14},{"slug":1720,"name":1720,"fn":1721,"description":1722,"org":1868,"tags":1869,"stars":27,"repoUrl":28,"updatedAt":1733},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1870,1871,1872,1873,1874,1875],{"name":1695,"slug":1696,"type":14},{"name":25,"slug":26,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},{"name":1730,"slug":1731,"type":14},{"name":1684,"slug":1685,"type":14},{"slug":1735,"name":1735,"fn":1736,"description":1737,"org":1877,"tags":1878,"stars":27,"repoUrl":28,"updatedAt":1751},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1879,1880,1881,1882,1883],{"name":1741,"slug":1742,"type":14},{"name":1744,"slug":1745,"type":14},{"name":1747,"slug":1748,"type":14},{"name":1646,"slug":1647,"type":14},{"name":9,"slug":8,"type":14},16]