What middleapi/orpc shipped
Written by FoxPlug from the repository's own releases; not affiliated with Orpc. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/middleapi/orpc; Orpc did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- RPCLink now throws on 3xx responses instead of resolving the redirect body as procedure output. Pull request #2429
- RPC clients now reject 2xx JSON bodies that are not an RPC envelope with MalformedResponseError instead of resolving undefined. Pull request #2445
- The RPC handler outputStatus option must now resolve to a number, removing the silent fallback to 200. Pull request #2438
- DedupeLinkPlugin removes its abort listeners as soon as a request settles, so long-lived shared signals no longer accumulate listeners. Pull request #2444
- BatchLinkPlugin cancels the batch response stream on decode errors instead of only releasing the reader lock. Pull request #2443
- SSE error events without data are kept intact instead of failing deserialization on undefined data. Pull request #2442
- The OpenAPI generator now serializes the document before downgrading to 3.1 or 3.0, so downgraders no longer work on non-JSON values. Pull request #2439
- OpenAPI component names are sanitized to valid keys matching the OpenAPI component name pattern. Pull request #2437
- Discriminator mapping refs are rewritten when root $defs are hoisted into components.schemas. Pull request #2435
- The Redis locker keeps the callback return value or error when the lock release script fails. Pull request #2404
Why it matters
This week is largely about correctness at the edges: RPC and batch clients now fail loudly on malformed or redirected responses instead of resolving something misleading, and several stream and dedupe paths stop leaking listeners, streams or stale writes. OpenAPI generation got closer to the runtime behavior by serializing before downgrade, sanitizing component names and fixing discriminator refs, while two breaking fixes narrow option types before v2 stable.
Changelog entry
- Client: RPCLink throws on 3xx responses instead of resolving the redirect body. Pull request #2429
- Rpc: reject 2xx JSON bodies that are not an RPC envelope with MalformedResponseError. Pull request #2445
- Rpc: outputStatus must resolve to a number; null and undefined no longer fall back to 200. Pull request #2438
- Client: DedupeLinkPlugin removes abort listeners once the request settles. Pull request #2444
- Client: BatchLinkPlugin cancels the batch response stream on decode errors. Pull request #2443
- Rpc: keep SSE error events without data intact during deserialization. Pull request #2442
- Openapi: serialize the document before downgrading to OpenAPI 3.1 or 3.0. Pull request #2439
- Openapi: remove the omitUndefinedProperties option; undefined object properties are always omitted. Pull request #2441
- Openapi: sanitize component names to valid OpenAPI keys. Pull request #2437
- Json-schema, openapi: rewrite discriminator mapping refs when hoisting $defs. Pull request #2435
- Json-schema, openapi: treat primitive type lists as primitive in query params. Pull request #2433
- Lock: keep the callback outcome when the Redis lock release fails. Pull request #2404
This week: RPCLink rejects 3xx responses, malformed RPC success bodies now throw MalformedResponseError, abort listeners are cleaned up after deduped calls settle, and OpenAPI component names are sanitized to valid keys.
This week in oRPC: RPCLink now throws on 3xx responses instead of resolving a redirect body as output, and malformed 2xx JSON bodies are rejected with MalformedResponseError. Dedupe no longer keeps abort listeners after a request settles, batch streaming cancels the response stream on decode errors, and data-less SSE error events are preserved. On the OpenAPI side, documents are serialized before downgrading to 3.1 or 3.0, component names are sanitized to valid keys, and discriminator mapping refs are rewritten when $defs are hoisted. Also: the RPC outputStatus option must now resolve to a number.
Week of October 26, 2026
What shipped
- Released v2.0.0-beta.48, adding a cookie jar for non-browser clients, HEAD support for GET procedures, a streaming option for batch responses, and a new OpenAPI router, with one breaking change to custom OpenAPI error responses. Release
- Added CookieJarLinkPlugin and CookieJar to @orpc/client/plugins so clients outside a browser store cookies servers set and send them back on later requests. Pull request #2366
- Added HeadMethodHandlerPlugin, which answers HEAD requests with the status and headers of the matching GET procedure and no body. Pull request #2353
- Brought back the mode option on BatchLinkPlugin with buffered and streaming values, buffered by default and sent to the server in the orpc-batch header. Pull request #2369
- Removed the default fallback for error response body options, so errorResponseBodyEncoder, errorResponseBodyDecoder and errorResponseBodySchema always decide the behavior. Pull request #2350
- Upgraded openapi-spec to 0.6.0 and routed OpenAPI procedures with @openapi-spec/router instead of rou3, matching path templates directly. Pull request #2370
- Fixed RPC deserialization to skip unknown meta types instead of throwing when client and server are deployed out of sync. Pull request #2357
- Changed wrapReadableStream to read wrapped readable streams on demand so wrappers no longer read ahead of the consumer. Pull request #2346
- Fixed the OpenAPI generator to keep additionalProperties on request bodies rebuilt after path params are removed from a compact route. Pull request #2364
- Added an errorResponseContentType option to OpenAPIHandler, OpenAPILink and OpenAPIGenerator.generate for sending and documenting errors under a different media type. Pull request #2337
Why it matters
This week shipped a beta with new client and server plugins, including a cookie jar for non-browser clients and HEAD support for GET procedures, plus a streaming option for batch responses. It also brought breaking changes to OpenAPI error response options and several fixes to OpenAPI generation and RPC deserialization that affect people upgrading.
Changelog entry
- Released v2.0.0-beta.48 with a cookie jar, HEAD support for GET procedures, a streaming batch option and a new OpenAPI router. Release
- Added CookieJarLinkPlugin and CookieJar to @orpc/client/plugins for clients outside a browser. Pull request #2366
- Added HeadMethodHandlerPlugin to answer HEAD requests with the status and headers of the matching GET procedure. Pull request #2353
- Restored the mode option on BatchLinkPlugin, buffered by default, with a streaming alternative. Pull request #2369
- Removed the default fallback for OpenAPI error response body options. Pull request #2350
- Upgraded openapi-spec to 0.6.0 and replaced rou3 with its router for OpenAPI procedures. Pull request #2370
- Fixed RPC deserialization to skip unknown meta types. Pull request #2357
- Made wrapped readable streams read on demand instead of ahead of the consumer. Pull request #2346
- Kept additionalProperties on request bodies rebuilt after path params are split out. Pull request #2364
- Added a configurable media type for OpenAPI error responses. Pull request #2337
- Omitted allowReserved on json query params to match the OpenAPI 3.2 schema. Pull request #2345
- Applied responseBodyHint only to successful responses in OpenAPI Link. Pull request #2339
V2.0.0-beta.48 is out: a cookie jar for clients outside the browser, HEAD support for GET procedures, a streaming option for batch responses, and a new OpenAPI router. Error response body options no longer fall back to defaults.
V2.0.0-beta.48 is out. It adds CookieJarLinkPlugin and CookieJar for clients outside the browser, HeadMethodHandlerPlugin for HEAD requests against GET procedures, a streaming mode for BatchLinkPlugin, and a new OpenAPI router. One breaking change: error response body options no longer fall back to the default behavior, so each option now always decides. This week also fixed RPC deserialization of unknown meta types and made wrapped readable streams read on demand.
Week of October 19, 2026
What shipped
- Released v2.0.0-beta.46 with breaking changes: jsonified client factories are now the only accepted form in createContractJsonifiedUtilsFactory and internal-only APIs are no longer exported. Release
- Added a prefix method to publisher, rate limiter and lock adapters that returns a new adapter with an appended prefix while sharing the original client. Pull request #2332
- Made TanStack Query structural sharing and query key serialization type-aware so Date, URL, Map, Set and custom serializer types keep references and hash consistently. Pull request #2305
- Added a configurable serializer option and type-aware input keys to Pinia Colada so custom types and distinct values produce distinct keys. Pull request #2300
- Gave AI SDK tools a default output serialization using OpenAPIJsonSerializer and support for sending files to the model. Pull request #2334
- Let Next server functions plug into React useActionState with a two-argument call parsed from FormData. Pull request #2302
- Added SignalSyncHandlerPlugin to keep the request signal and streaming procedure outputs in sync, so cancelling either side aborts the other. Pull request #2299
- Added TanStack Query SSR helpers for hashing, hydration and streamed queries instead of hand-copied setup. Pull request #2289
- Promoted the Effect integration to stable as @orpc/effect, dropping the experimental prefix. Pull request #2321
- Renamed @orpc/experimental-msw to @orpc/msw now that the MSW integration is stable. Pull request #2258
Why it matters
This week brings a large v2 beta with breaking changes and moves the Effect and MSW integrations out of experimental naming. It also adds type-aware keys and structural sharing across the query adapters and a prefix method on adapters, which change how inputs hash and how scoping works. Several fixes address retries, iterator cancellation and serialization so remote and streaming calls behave more predictably.
Changelog entry
- Release: v2.0.0-beta.46 with breaking changes to jsonified client factories and removed internal exports Release
- Feat(msw)!: rename @orpc/experimental-msw to @orpc/msw Pull request #2258
- Feat(effect)!: promote Effect integration to stable as @orpc/effect Pull request #2321
- Feat: add prefix method to publisher, rate limiter and lock adapters Pull request #2332
- Feat(tanstack-query)!: type-aware structural sharing and serialized input keys Pull request #2305
- Feat(pinia-colada): configurable key serializer and type-aware input keys Pull request #2300
- Feat(ai-sdk): serialize tool outputs like OpenAPI responses and send files to the model Pull request #2334
- Feat(next): let server functions plug into useActionState Pull request #2302
- Feat(server): add SignalSyncHandlerPlugin Pull request #2299
- Feat(tanstack-query): add SSR helpers for hashing, hydration and streamed queries Pull request #2289
- Fix(client): stop retrying after iterator is closed Pull request #2297
- Fix(rpc): reject batch messages with non-string ids Pull request #2304
V2.0.0-beta.46 is out: only jsonified client factories in createContractJsonifiedUtilsFactory, internal-only exports removed. Adapters gained a prefix() method, TanStack Query and Pinia Colada keys are now type-aware, and @orpc/effect plus @orpc/msw drop the experimental prefix.
This week's releases include v2.0.0-beta.46, which makes breaking changes: createContractJsonifiedUtilsFactory now accepts only jsonified client factories and internal-only APIs are no longer exported. Publisher, rate limiter and lock adapters gained a prefix() method that returns a scoped adapter sharing the original client. TanStack Query now uses type-aware structural sharing and serialized input keys, and Pinia Colada gained a configurable key serializer. The Effect integration is now published as @orpc/effect and the MSW integration as @orpc/msw, both dropping the experimental prefix. Fixes cover iterator retries after close, durable iterator token refresh failures, and primitive conversion for router utils and error constructor maps.
Week of October 12, 2026
What shipped
- Fixed exponential smart coercion of recursive union schemas, closing a pre-auth event-loop DoS when SmartCoercionHandlerPlugin is used. Pull request #2229
- Capped bigint digit count in the RPC serializer and smart coercion at 4300 digits so huge bigint strings can no longer block the event loop before auth runs. Pull request #2233
- RPC deserialize now rejects meta paths that descend into values already deserialized, so untrusted payloads cannot change values after validation. Pull request #2247
- OpenAPILink now encodes a leading slash in a first-segment catch-all param, preventing protocol-relative URLs that could send requests and headers to another host. Pull request #2242
- Bounded the lazy router prefix scan in the RPC matcher, removing an unauthenticated quadratic-time routing path. Pull request #2231
- TmpFileUploadHandlerPlugin keeps small uploads in memory instead of writing a temp file per part, reducing temp-file and inode flooding. Pull request #2232
- Unsign and decrypt now reject non-canonical base64url, so signed and encrypted token strings are no longer malleable. Pull request #2252
- RPCLink and OpenAPILink now throw MalformedResponseError directly instead of wrapping it in an ORPCError with code MALFORMED_ORPC_RESPONSE, a breaking change. Pull request #2238
- The batch handler plugin switches from buffered to streaming mode when any sub-response is a stream, so such batches no longer hang. Pull request #2239
- Resumed iterator subscriptions are capped at maxBufferedEvents, reverting the change that let any client replay the full retained event history. Pull request #2240
Why it matters
This week is mostly security hardening: several fixes close unauthenticated CPU and memory exhaustion paths in the RPC serializer, matcher, file uploads and event replay, plus a URL construction issue in OpenAPILink. There is also a breaking change in how client links report malformed responses. Users on affected versions should upgrade, and those relying on MALFORMED_ORPC_RESPONSE error handling should adjust their code.
Changelog entry
- Release v2.0.0-beta.44 with breaking changes: MalformedResponseError replaces MALFORMED_ORPC_RESPONSE ORPCError, and the prototype pollution protection plugin is removed. Release
- Rpc, openapi: throw MalformedResponseError directly when a response cannot be decoded. Pull request #2238
- Json-schema: prevent exponential smart coercion of recursive union schemas. Pull request #2229
- Rpc, json-schema: limit bigint digit count in the RPC serializer and smart coercion to 4300 digits. Pull request #2233
- Rpc: reject meta paths that descend into already deserialized values. Pull request #2247
- Openapi: encode a leading slash in first-segment catch-all path params in OpenAPILink. Pull request #2242
- Server: reject non-canonical base64url in unsign and decrypt. Pull request #2252
- Rpc: bound the lazy router prefix scan in the RPC matcher. Pull request #2231
- Node: keep small uploads in memory in TmpFileUploadHandlerPlugin. Pull request #2232
- Server: stream buffered batches when a sub-response is a stream. Pull request #2239
- Publisher: cap resumed events at maxBufferedEvents. Pull request #2240
- Release v1.15.7 with a fix limiting bigint digit count in the RPC serializer and smart coercion. Release
V2.0.0-beta.44 is out. Malformed responses now throw MalformedResponseError directly, and buffered batches switch to streaming when a sub-response is a stream. This week also shipped hardening: bigint digit caps, meta path checks in RPC deserialize, canonical base64url in unsign/
This week brought v2.0.0-beta.44 and v1.15.7, along with a set of security hardening fixes. Client links now throw MalformedResponseError directly instead of wrapping it in an ORPCError, and buffered batches switch to streaming when a sub-response is a stream. On the hardening side: bigint digit counts are capped in the RPC serializer and smart coercion, meta paths that descend into already deserialized values are rejected, unsign and decrypt reject non-canonical base64url, the lazy router prefix scan is bounded, small uploads stay in memory, and OpenAPILink encodes a leading slash in first-segment catch-all params. If you use RPC or OpenAPI links, review the breaking change before upgrading.
Week of October 5, 2026
What shipped
- Bracket notation deserialization in OpenAPI now tracks empty slots across the whole payload, bounding memory use while still allowing longer sequential arrays, and path parsing was optimized. Pull request #2196
- The OpenAPI generator now supports enum and union status codes in detailed output responses, including picklists emitted by Effect, arktype and valibot and unions of literals, so a single response definition can cover multiple statuses. Pull request #2187
- In compact input structure, path params now take precedence over colliding query or body keys, so a client body field can no longer replace the value taken from the URL. Pull request #2191
- Cloudflare message ids are now timestamp based, so resuming after idle cleanup or a schema reset no longer skips newer events when SQLite's autoincrement sequence restarts on table recreation. Pull request #2190
- The Retry After Link Plugin now detects and skips requests with non-resendable request bodies such as ReadableStream and AsyncIteratorObject, since those bodies are consumed on the first attempt. Pull request #2183
- Path matching now handles both raw characters such as caret and colon and their percent-encoded forms when clients send them, retrying with normalization transparently. Pull request #2185
- TanStack Query and Pinia Colada peer dependency floors were raised: tanstack-query needs query-core 5.89.0 or newer and pinia-colada needs 1.2.0 or newer, because older TanStack versions pass an undefined fnContext to mutation interceptors. Pull request #2180
- Every standard-server dependency was upgraded from 0.10.1 to 0.10.2, picking up upstream fixes for the Node and peer WebSocket and MessagePort adapters, with no oRPC source changes required. Pull request #2194
- The tRPC to oRPC router conversion now catches and converts TRPCError exceptions thrown during subscription iteration, not only during initial procedure execution. Pull request #2181
- A regex pattern in the getIssueMessage function was anchored at the start so numeric path validation only matches a path that is entirely numeric. Pull request #2186
Why it matters
This week's work tightens the OpenAPI surface: memory use for bracket notation keys is bounded, enum and union statuses are supported in detailed responses, and path params win over colliding body or query keys in compact input. Several fixes prevent silent data problems, from Cloudflare message ids skipping events after a table recreation to retries of request bodies that cannot be resent. Peer dependency floors were raised so mutation interceptors behave correctly on supported TanStack Query and Pinia Colada versions.
Changelog entry
- Fix(openapi)!: bound memory used by sparse bracket notation keys Pull request #2196
- Feat(openapi): support enum and union status in detailed responses Pull request #2187
- Fix(openapi): give path params precedence in compact input Pull request #2191
- Fix(cloudflare): use timestamp-based ids to handle table recreation Pull request #2190
- Fix(client): prevent retry of non-resendable request bodies Pull request #2183
- Fix(openapi,rpc): handle raw chars in paths stored percent-encoded Pull request #2185
- Fix(openapi): fix regex pattern for numeric path validation Pull request #2186
- Fix: raise TanStack Query and Pinia Colada peer dependency floors Pull request #2180
- Fix: upgrade standard-server/* packages to 0.10.2 Pull request #2194
- Fix(trpc): handle TRPCError in subscription iterators Pull request #2181
- Chore(msw): upgrade MSW to v3 while keeping v2 support Pull request #2203
- Chore(content): upgrade Blume to v2 Pull request #2193
New release: OpenAPI detailed responses now support enum and union statuses, bracket notation keys use bounded memory, and path params take precedence in compact input. Also: timestamp-based Cloudflare message ids, no retry of non-resendable bodies, and higher TanStack Query and
This week we shipped changes across the OpenAPI layer and a few important fixes. OpenAPI detailed responses now accept enum and union status codes, including picklists from Effect, arktype and valibot. Bracket notation deserialization tracks empty slots across the payload to bound memory while allowing longer sequential arrays, and path params now take precedence over colliding query or body keys in compact input. On the fixes side, Cloudflare message ids are timestamp based so resuming after idle cleanup or a schema reset does not skip newer events, the Retry After Link Plugin skips requests whose bodies cannot be resent, and path matching handles raw and percent-encoded characters. We also raised the TanStack Query and Pinia Colada peer dependency floors because older TanStack versions p
Week of September 28, 2026
What shipped
- V2.0.0-beta.42 released with improved JSON Schema converter caching, upgraded standard-server and OpenAPI spec packages. Release
- JSON Schema converter now directly uses Effect's native API instead of wrapping the standard converter. Pull request #2175
- OpenAPI path matching upgraded to rou3 v1.0.0 with better handling of catch-all parameters and special characters. Pull request #2173
- Batch link plugin now excludes aborted subrequests from batch messages sent to the server. Pull request #2176
- Cancelled batched streams now properly stop on the server instead of running indefinitely. Pull request #2161
- Batched and deduped requests now send in their caller's async context, preserving request-scoped data. Pull request #2160
- Infinity and -Infinity now round-trip through RPC serializers instead of becoming null. Pull request #2158
- Fixed date parsing, bigint handling, tuple composition, and required field detection in JSON schema. Pull request #2127
- OpenAPI handler now only parses query strings when the input structure actually uses them. Pull request #2139
- Effect library peer dependency upgraded to stable 4.0.0 release. Pull request #2163
Why it matters
This week focused on robustness in streaming and batch operations, fixing edge cases where cancelled requests continued running and async context was lost between callers. The JSON Schema and OpenAPI improvements ensure types round-trip correctly and special values like Infinity serialize properly. These fixes matter because they prevent silent failures in production where batched calls, streams, and context-aware transports are heavily used.
Changelog entry
- V2.0.0-beta.42 released Release
- Effect: improved JSON Schema converter with direct Effect API integration Pull request #2175
- OpenAPI: upgrade rou3 to v1.0.0 and improve path matching for edge cases Pull request #2173
- Client: batch link now excludes aborted subrequests Pull request #2176
- Client: cancelled batched streams now stop on the server Pull request #2161
- Client: batched and deduped requests preserve caller async context Pull request #2160
- RPC: Infinity and -Infinity now serialize and deserialize correctly Pull request #2158
- JSON Schema: fixed date parsing, bigint, tuple, and required handling Pull request #2127
- OpenAPI: query string only parsed when input structure uses it Pull request #2139
- Dependencies: @openapi-spec packages upgraded to v0.3.0 Pull request #2178
- Dependencies: @standard-server packages upgraded to 0.10.1 Pull request #2174
- Effect: upgraded to stable 4.0.0 release Pull request #2163
V2.0.0-beta.42: batch streams now cancel properly, async context flows correctly between callers, Infinity round-trips through serializers, and JSON Schema handles dates and composed types.
V2.0.0-beta.42 ships fixes for batch and streaming reliability. Cancelled streams now properly stop on the server instead of running indefinitely, batched requests preserve caller async context so request-scoped data stays intact, and infinity values round-trip through serializers. We also improved JSON Schema handling for dates, tuples, and composed types, and OpenAPI path matching now correctly handles catch-all parameters and special characters.
Week of September 21, 2026
What shipped
- Redis Pub/Sub now delivers events in stream order when resume is enabled, fixing cases where concurrent publishers could skip or duplicate events. Pull request #2073
- Batched procedures and subscriptions now stop when the client disconnects instead of running to completion. Pull request #2092
- BatchLinkPlugin and DedupeLinkPlugin gain a wait option to collect requests for milliseconds before sending, reducing request count. Pull request #2090
- Procedures served through toORPCRouter now receive only schema-declared fields, closing a mass-assignment risk. Pull request #2106
- RetryLinkPlugin no longer loops forever when retryDelay throws or rejects. Pull request #2105
- Publisher resume with lastEventId no longer silently drops the oldest missed events when backlog exceeds maxBufferedEvents. Pull request #2104
- Nest Express adapter now cancels streamed response bodies when the client disconnects, preventing subscription leaks. Pull request #2101
- PrototypePollutionProtectionHandlerPlugin now protects against proto keys on arrays in MessagePort messages. Pull request #2107
- CloudflareTracer now renames request spans to procedure paths and records exceptions following OpenTelemetry semantics. Pull request #2095
- Routers implemented with.lazy() now follow the contract's error map and meta. Pull request #2070
Why it matters
This week addresses critical reliability issues in streaming, batching, and event delivery, plus mass-assignment and security gaps. Connection lifecycle handling across multiple transports is now correct, and procedures respect schema boundaries properly. These fixes prevent data loss, resource leaks, and vulnerability exposure.
Changelog entry
- Fix(publisher, bun)!: keep Redis Pub/Sub delivery in stream order Pull request #2073
- Fix(server): abort batch sub-requests when the client disconnects Pull request #2092
- Feat(client): add wait option to batch and dedupe link plugins Pull request #2090
- Fix(trpc): stop toORPCRouter from passing input keys the schema strips Pull request #2106
- Fix(client): stop retrying forever when retryDelay throws Pull request #2105
- Fix(publisher): stop truncating the resume backlog to maxBufferedEvents Pull request #2104
- Fix(nest): cancel streamed response bodies when the client disconnects Pull request #2101
- Fix(server): stop MessagePort arrays from bypassing prototype pollution protection Pull request #2107
- Feat(cloudflare): rename spans and follow OTel exception semantics in CloudflareTracer Pull request #2095
- Fix(server): apply the contract to routers implemented with.lazy() Pull request #2070
- Fix(client): send FormData uploads outside the batch Pull request #2102
- Fix(json-schema): prevent unhandled rejections when converting async schemas Pull request #2103
- Fix(server,contract,ai-sdk): stop loose stacked input schemas from reverting earlier transforms Pull request #2099
- Fix(shared): close the source iterator when consumeAsyncIterator onEvent throws Pull request #2093
- Fix(client): let the WebSocket link reconnect after giving up Pull request #2084
- Fix(client): reject WebSocket link calls when connect returns a closed socket Pull request #2083
- Fix(client): reject message port link calls after the port closes Pull request #2082
- Fix(client): reject WebSocket link calls after the socket closes Pull request #2081
- Fix(client): reject batched calls when a batch option throws Pull request #2079
This week: Redis events now stay in order, batches and subscriptions stop on disconnect, retry loops don't freeze, and procedures respect their schemas. 40 fixes across transport, validation, and streaming.
Orpc shipped 40 fixes this week focusing on reliability and correctness. Redis Pub/Sub now guarantees event ordering during resume, client disconnects properly cancel streamed responses and batched work, and procedures no longer receive undeclared fields. RetryLinkPlugin no longer hangs on errors, and batching gains a configurable wait option to optimize request grouping. These changes address streaming leaks, mass-assignment risks, and connection lifecycle issues across WebSocket, MessagePort, and HTTP transports.
Week of September 14, 2026
What shipped
- V2.0.0-beta.37 removes adapter interceptors and adapter plugins, removes built-in RegExp support from serializers and JSON Schema coercer, and fixes plugin registration order. Release
- RPC JSON serializer now checks wire types before restoring serialized values and compiles RegExp values lazily to prevent type confusion attacks from untrusted clients. Pull request #2048
- Server handler options now accept context as a function resolved after the prefix check, avoiding context setup costs on requests that don't match. Pull request #2029
- V2.0.0-beta.36 adds distributed locking helpers with multiple adapters, NestJS support for HTTP QUERY method, and Redis cluster support for rate limiting. Release
- Documentation now lists Cloudflare Workers Traces alongside OpenTelemetry as a first-party tracing option. Pull request #2051
- NestJS integration now supports HTTP QUERY method on NestJS v11.2+ through QueryMethod decorator. Pull request #2031
- Performance comparison page updated with benchmarks from oRPC 2.0.0-beta.37, tRPC 11.19.0, and Hono 4.13.8. Pull request #2050
- Zod integration now preserves JSON Schema constraints on zod >= 4.6 by reading checks from the definition directly. Pull request #2028
- Bracket notation serializer now prevents prototype pollution by reading and writing own properties only. Pull request #2024
- Lock package adds distributed locking helpers with multiple adapter implementations. Pull request #2016
Why it matters
Beta.37 hardens security with type checking during deserialization and removes deprecated adapter-level hooks, while beta.36 expanded platform support with distributed locks and NestJS QUERY method. These releases improve both safety and flexibility for developers building production systems.
Changelog entry
- Breaking: Remove adapter interceptors and adapter plugins Release
- Breaking: Remove built-in RegExp support from serializers and JSON Schema coercer Release
- Fix: Keep registration order when sorting plugins Release
- Fix: Check serialized value types and compile regexps lazily during RPC deserialization Release
- Upgrade: @standard-server/* to 0.9.2 Pull request #2049
- Docs: Warn that Fastify bodyLimit does not cover catch-all parser in oRPC Pull request #2046
- Docs: Add Redirect Response section to OpenAPI Input and Output Mapping page Pull request #2043
- Upgrade: @standard-server/* to 0.9.1 Pull request #2035
- Feature: Add distributed locking helpers with multiple adapters Release
- Feature: NestJS support for HTTP QUERY method Release
- Feature: Rate limiter accepts Redis cluster clients Release
- Fix: Keep request span open until streamed response body finishes Pull request #2032
- Feature: Handler options accept context as function resolved after prefix check Pull request #2029
- Fix: Reject form action calls with non-FormData input Release
- Fix: Keep JSON Schema constraints on zod >= 4.6 Release
- Fix: Prevent prototype pollution through object values in bracket notation Pull request #2024
V2.0.0-beta.37 and beta.36 shipped this week. Beta.37 removes adapter interceptors, hardens RPC deserialization against type confusion, and fixes plugin ordering. Beta.36 adds distributed locking, NestJS QUERY support, and Redis cluster adapters.
Two oRPC beta releases landed this week with significant improvements: v2.0.0-beta.37 removes deprecated adapter-level interceptors and plugins, hardens the RPC serializer to validate wire types before restoring built-in values, fixes plugin registration order, and lets handlers accept context functions resolved after prefix checks. v2.0.0-beta.36 introduces distributed locking helpers with multiple adapters, adds NestJS support for HTTP QUERY method on v11.2+, and extends rate limiting to accept Redis cluster clients. Documentation now clarifies that any Standard Schema library works with oRPC, not just the three highlighted packages.