What trpc/trpc shipped
Written by FoxPlug from the repository's own releases; not affiliated with Trpc. 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/trpc/trpc; Trpc 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
- Subscribe() without callbacks now returns an async iterable, so a vanilla-client subscription can be read with for await. Pull request #7865
- V11.25.2 ships a fix so an empty POST body is accepted as undefined input, and a fix that guards subscriptions on closing websockets. Release
- V11.25.1 ships handles as plain functions in unstable-handles for tanstack-react-query. Release
- The standalone, Express and Next.js adapters keep running when a streamed body fails after headers are sent or when errorFormatter throws. Pull request #7931
- A throwing onError, errorFormatter or encoder in the ws adapter no longer crashes the Node process. Pull request #7915
- Retired WebSocket close and error events are isolated so they cannot fail queries on a replacement socket. Pull request #7727
- A throwing handler in wsLink no longer leaves the socket open but unable to read frames. Pull request #7926
- Twoslash popups can now be read, pinned and copied, and show JSDoc. Pull request #7977
- V11.25.0 ships server fixes for pending next() on abort, teardown errors in subscriptions and related observable and websocket cleanup. Release
- WebSocket batches now reject all sibling requests when sending fails, so close() no longer waits forever. Pull request #7725
Why it matters
This week brings a string of WebSocket and server stability fixes, so a throwing handler, formatter or encoder no longer takes down the process or hangs later requests. It also adds async iteration over subscriptions in the client and ships three releases, v11.25.0 through v11.25.2.
Changelog entry
- Feat(client): subscribe() without callbacks returns an async iterable Pull request #7865
- Feat(tanstack-react-query): handles as plain functions in unstable-handles Release
- Fix(server): accept an empty POST body as undefined input Pull request #7964
- Fix(server): guard subscriptions on closing websockets Pull request #7976
- Fix(server): keep Node adapters running when a streamed body fails or errorFormatter throws Pull request #7931
- Fix(server): keep a throwing onError, errorFormatter or encoder from crashing the ws server Pull request #7915
- Fix(client): isolate retired WebSocket close and error events Pull request #7727
- Fix(client): keep a wsLink socket working when a handler throws Pull request #7926
- Fix(client): reject WebSocket batches when sending fails Pull request #7725
- Fix(client): don't flush a later WebSocket request onto a connecting socket Pull request #7911
- Feat(www): Twoslash popups that can be read, pinned and copied, with JSDoc Pull request #7977
- Fix(server): ship the root LICENSE in the @trpc/server tarball again Pull request #7904
V11.25.2 is out. subscribe() without callbacks now gives you an async iterable, and WebSocket and Node adapter fixes keep a throwing handler from crashing the process or hanging later requests.
V11.25.2 is out, following v11.25.1 and v11.25.0. The client can now read a subscription without callbacks as an async iterable with for await. On the server side, a throwing onError, errorFormatter or encoder in the ws adapter no longer crashes the process, and the standalone, Express and Next.js adapters keep running when a streamed body fails or errorFormatter throws. WebSocket fixes also isolate retired close and error events and reject a whole batch when sending fails.
Week of October 26, 2026
What shipped
- CreateHTTPServer now accepts a basePath without a trailing slash instead of answering those requests with a 404. Pull request #7781
- HttpLink now lets a caller's Content-Type header replace the default instead of failing mutations with a 415 error. Pull request #7780
- Unstable_localLink is renamed to localLink, with the old names kept as deprecated aliases. Pull request #7775
- KeyPrefix in tanstack-react-query works without the feature flag, and createTRPCOptionsProxy now takes its types from values with one signature. Pull request #7767
- 405 responses from the server now carry an Allow header listing the methods the procedure accepts. Pull request #7769
- The react-query and tanstack-react-query packages now build and test against @tanstack/react-query 5.105 types. Pull request #7760
- Infinite queries now always send the cursor field, fixing a validation error on first render with a nullable cursor schema and dropped page 0 cursors. Pull request #7361
- CreateTRPCReact now produces a usable proxy type instead of a union of false collision errors. Pull request #7428
- Share() teardown ordering and synchronous source leaks in the server are fixed, each with a regression test. Pull request #7731
- Share() now notifies every active shared observable subscriber, so a completion no longer skips all but the first. Pull request #7729
Why it matters
This week fixes several client and server behaviours that show up in day-to-day use: base paths without a trailing slash, caller Content-Type headers, infinite query cursors and shared observable subscribers. It also settles the localLink name and removes the feature flag from keyPrefix, so code relying on the old prefixed names or the flag should be updated. The SSE chat example moves to TanStack Start and the tooling moves to oxlint and oxfmt.
Changelog entry
- Server: accept a standalone basePath without a trailing slash Pull request #7781
- Client: let a caller's Content-Type header replace the default Pull request #7780
- Client: rename unstable_localLink to localLink Pull request #7775
- Tanstack-react-query: keyPrefix works without a feature flag Pull request #7767
- Server: set the Allow header on 405 responses Pull request #7769
- React-query, tanstack-react-query: support @tanstack/react-query 5.105 types Pull request #7760
- React-query: usable proxy type for createTRPCReact Pull request #7428
- React-query: always inject the cursor field in infinite queries Pull request #7361
- Server: fix share() teardown ordering and synchronous source leaks Pull request #7731
- Server: notify all active shared observable subscribers Pull request #7729
- Examples: rename next-sse-chat to tanstack-start-sse-chat Pull request #7756
- Chore: replace ESLint and Prettier with oxlint and oxfmt Pull request #7765
This week: createHTTPServer accepts a basePath without a trailing slash, httpLink lets your Content-Type win, 405s get an Allow header, infinite queries always send the cursor, and share() no longer skips subscribers. unstable_localLink is now localLink; keyPrefix needs no flag.
This week's changes to tRPC: createHTTPServer now accepts a basePath without a trailing slash, httpLink lets a caller's Content-Type header replace the default, 405 responses include an Allow header, and share() notifies every active subscriber. Infinite queries always send the cursor field, fixing a validation error on first render and dropped page 0 cursors, and createTRPCReact produces a usable proxy type. unstable_localLink is renamed to localLink with the old names kept as deprecated aliases, and keyPrefix in tanstack-react-query works without the feature flag. The react-query packages now build and test against @tanstack/react-query 5.105 types.
Week of October 19, 2026
What shipped
- UseSubscription now passes trpc.context to links. Pull request #7655
- Inferred types stay portable when no baseUrl is set. Pull request #7662
- Batch stream content-type is now configurable via initTRPC.jsonl.contentType. Pull request #7345
- Serialize resolves record values lazily, fixing TS2589 on recursive JSON types. Pull request #7660
- Lazy routes are preserved when composing routers. Pull request #7667
- Malformed URL-encoding in the request path now returns 400 instead of 500. Pull request #7555
- Content-type header matching is now case-insensitive. Pull request #7614
- Node requests with an already-consumed body no longer hang. Pull request #7706
- Cancelling a streamed response now aborts its calls' signals. Pull request #7683
- UseSuspenseInfiniteQuery supports a custom select. Pull request #7388
Why it matters
This week fixed several server-side hangs, aborts and error handling issues in the Node HTTP, SSE and streaming paths, including malformed paths returning 400 and cancelled responses ending procedures. Type portability and router composition fixes make setups without baseUrl and with lazy routers work as expected. Client fixes add context to subscriptions, make batch stream content-type configurable and support select in useSuspenseInfiniteQuery.
Changelog entry
- Feat(react-query): pass trpc.context to links in useSubscription Pull request #7655
- Fix(server): keep inferred types portable without baseUrl Pull request #7662
- Fix(server): make batch stream content-type configurable Pull request #7345
- Fix(server): resolve record values lazily in Serialize Pull request #7660
- Fix(server): preserve lazy routes when composing routers Pull request #7667
- Fix(server): return 400 for malformed url-encoding in the request path Pull request #7555
- Fix(server): match content-type header case-insensitively Pull request #7614
- Fix(server): don't hang when the node request body was already consumed Pull request #7706
- Fix(server): cancelling a streamed response aborts its calls' signals Pull request #7683
- Fix(react-query): support select() in useSuspenseInfiniteQuery Pull request #7388
- Fix(server): clear the sse maxDurationMs timer when the subscription ends Pull request #7666
- Fix(server): stop untracked SSE events inheriting the previous tracked id Pull request #7691
New this week: useSubscription passes trpc.context to links, inferred types stay portable without baseUrl, and Serialize fixes TS2589 on recursive JSON types. Lazy routes survive router composition, and several server fixes stop hangs on consumed bodies and cancelled streams.
This week in tRPC: useSubscription now passes trpc.context to links, so subscriptions can be routed by context like queries and mutations. Inferred types remain portable without baseUrl, and Serialize resolves record values lazily to fix TS2589 on recursive JSON types such as Prisma.JsonValue. Batch stream content-type is configurable, lazy routes are preserved when composing routers, and useSuspenseInfiniteQuery supports select. Server fixes stop hangs when a node request body was already consumed, return 400 for malformed URL-encoding, match content-type case-insensitively, and abort call signals when a streamed response is cancelled.
Week of October 12, 2026
What shipped
- Required checks now run in the merge queue, so queued pull requests can actually merge instead of timing out on missing status checks. Pull request #7676
- Npm publishing from CI is now gated behind an npm-publish environment that only allows deployments from main, with an admin check. Pull request #7675
- The repository moved from its previous release tooling to lerna-lite. Pull request #7669
- Fixed failing example typechecks and builds by no longer publicly hoisting the stub @types/parse-path. Pull request #7673
- The data transformers docs page now notes that without a transformer, values go through JSON.stringify, so a Date returned from a procedure arrives on the client as a string. Pull request #7397
- The README and docs sponsor lists were refreshed from current GitHub Sponsors data, adding Vault and removing sponsors no longer in the set. Pull request #7672
- The next branch docs now cover CI gates, vendored-repo bumps, coverage, bun test and benchmark budget commands, and test and lint conventions. Pull request #7671
Why it matters
People opening pull requests will notice the merge queue actually working now instead of dropping entries on missing checks. Anyone who has been confused by dates arriving as strings on the client gets an explicit note in the docs. Publishing to npm from CI is also more tightly restricted, and the example builds that broke with the lerna-lite switch are fixed.
Changelog entry
- Ci: run required checks on
merge_groupso the merge queue can merge pull requests Pull request #7676 - Ci: restrict npm publishing to the npm-publish environment on main with an admin check Pull request #7675
- Chore: switch release tooling to lerna-lite Pull request #7669
- Fix: stop publicly hoisting the stub @types/parse-path so example typechecks and builds pass Pull request #7673
- Docs: note default JSON.stringify serialization on the data transformers page Pull request #7397
- Docs: refresh README and docs sponsor lists from current GitHub Sponsors data Pull request #7672
- Docs(next): document CI gates, vendored-repo bumps, coverage, bun test and bench budget commands, and test and lint conventions Pull request #7671
This week: merge queue now runs required checks, npm publishing restricted to a main-only environment, docs note on default JSON serialization, examples typecheck fixed, and a switch to lerna-lite.
This week in the repository: required status checks now run in the merge queue, so queued pull requests can merge instead of timing out. npm publishing from CI is restricted to a new npm-publish environment that only allows deployments from main. The data transformers docs page now explains why a Date returned from a procedure arrives as a string when no transformer is set. Example typechecks and builds are fixed after the move to lerna-lite. The next branch docs gained CI gate, vendored-repo bump, and test and lint conventions, and the sponsor lists were refreshed.
More from trpc/trpc on GitHub
Merged pull requests
- fix(server): Handle premature stream ending (#7604, merged September 17, 2026 by tmcw) (source)
- feat(openapi): emit per-procedure error shapes (#7592, merged September 16, 2026 by Nick-Lucas) (source)
- fix(openapi): drop function-valued properties from generated schemas (#7588, merged September 12, 2026 by Nick-Lucas) (source)
- fix(client): abort httpLink/httpBatchLink requests on unsubscribe (#7469, merged September 12, 2026 by SnowingFox) (source)
- fix(server): match lazy router keys on a path boundary in getProcedureAtPath (#7474, merged September 12, 2026 by contactjawad) (source)
- fix(server): delete stale clientSubscriptions entry on subscription task rejection (#7401, merged September 12, 2026 by Adit-Jain-srm) (source)
- docs: add Authier to awesome tRPC projects (#7558, merged September 12, 2026 by capaj) (source)
- docs(www): add Sury to validator library integrations (#7466, merged September 12, 2026 by DZakh) (source)
- docs: add vscode-toolkit to awesome-trpc (#7363, merged September 12, 2026 by wszgrcy) (source)
- fix(client): wire the operation AbortSignal in the WebSocket link (#7434, merged September 12, 2026 by ATKasem) (source)
- docs: add observable deprecation note to subscriptions reference projects (#7375, merged September 12, 2026 by algojogacor) (source)
- fix(tanstack-react-query): subscriptionOptions(skipToken).enabled incorrectly returns true (#7464, merged September 12, 2026 by okxint) (source)