-
rivetkitno longer exposesctx.sqlon actor contexts. Migrate raw SQLite calls toctx.dbfromrivetkit/db, and keep Drizzle setup on therivetkit/db/drizzlesubpath.Migration example:
import { db } from "rivetkit/db"; const myActor = actor({ db: db(), actions: { listTodos: async (ctx) => { return await ctx.db.execute("SELECT * FROM todos ORDER BY created_at DESC"); }, }, });
-
rivetkitno longer exports the old concrete typed error classes fromrivetkit/actor/errorssuch asQueueFull,ActorNotFound, andActionTimedOut. The native runtime now standardizes onRivetErrorplusgroupandcodeso the same error shape survives HTTP, WebSocket, and bridge boundaries instead of depending oninstanceofacross runtimes.Migration example:
try { await actor.someAction(); } catch (e) { if (e instanceof QueueFull) { // old path } if (isRivetErrorCode(e, "queue", "full")) { // new path } }
Common replacements:
Removed class Use now QueueFullisRivetErrorCode(e, "queue", "full")QueueMessageTooLargeisRivetErrorCode(e, "queue", "message_too_large")QueueMessageInvalidisRivetErrorCode(e, "queue", "message_invalid")QueuePayloadInvalidisRivetErrorCode(e, "queue", "invalid_payload")QueueCompletionPayloadInvalidisRivetErrorCode(e, "queue", "invalid_completion_payload")QueueAlreadyCompletedisRivetErrorCode(e, "queue", "already_completed")ActionTimedOutisRivetErrorCode(e, "action", "timed_out")ActionNotFoundisRivetErrorCode(e, "action", "not_found")ActorNotFoundisRivetErrorCode(e, "actor", "not_found")ActorStoppingisRivetErrorCode(e, "actor", "stopping")ActorAbortedisRivetErrorCode(e, "actor", "aborted")IncomingMessageTooLongisRivetErrorCode(e, "message", "incoming_too_long")OutgoingMessageTooLongisRivetErrorCode(e, "message", "outgoing_too_long")InvalidEncodingisRivetErrorCode(e, "encoding", "invalid")InvalidRequestisRivetErrorCode(e, "request", "invalid")InvalidQueryJSONisRivetErrorCode(e, "request", "invalid_query_json")RequestHandlerNotDefinedisRivetErrorCode(e, "handler", "request_not_defined")WebSocketHandlerNotDefinedisRivetErrorCode(e, "handler", "websocket_not_defined")FeatureNotImplementedisRivetErrorCode(e, "feature", "not_implemented")UnsupportedisRivetErrorCode(e, "feature", "unsupported")Keep catching
UserErrorwhen you intentionally throw user-facing application errors yourself. The removal only affects the built-in typed subclasses that used to wrap framework/runtime failures. -
Restored
Registry.handler(request)andRegistry.serve()for the native serverless runner endpoint described in.agent/specs/serverless-restoration.md. The route surface is/api/rivet,/api/rivet/health,/api/rivet/metadata, and/api/rivet/start; user traffic still goes through the Rivet Engine gateway. -
Registry.start()now starts the native envoy path only. Built-instaticDirserving is not wired through the native engine subprocess yet and remains a follow-up. -
Restored the supported
rivetkit/test,rivetkit/inspector, andrivetkit/inspector/cliententrypoints.rivetkit/testnow waits for the native envoy metadata endpoint instead of the removed TypeScript in-memory runtime. -
Restored the zero-runtime
*ContextOfhelper types on the rootrivetkitexport so patterns likeActionContextOf<typeof myActor>work again.PATH_CONNECT,PATH_WEBSOCKET_PREFIX,KV_KEYS,ActorKv,ActorInstance,ActorRouter,createActorRouter, androuteWebSocketstay removed. -
rivetkit/driver-helpersandrivetkit/driver-helpers/websocketstay removed. They only exposed internal runtime/router helpers; migrate to the publicrivetkit,rivetkit/client, and engine-client APIs instead of importing package internals. -
rivetkit/topologies/*stays removed. The topology helpers are deleted on this branch; keep custom coordinate/partition logic in app code if you still need it. -
rivetkit/dynamicandrivetkit/sandbox/*stay permanently removed on this branch. There is no in-package replacement, so move those integrations out ofrivetkitimports instead of waiting for a hidden subpath to come back.