Repository navigation
Release candidate - #16
Merged
Merged
Conversation
monarcode
commented
Nov 1, 2026
Owner
- feat(react): add TanStack Router and Start integration
- feat(client): accept a ManagedRuntime in QueryClient.make
- fix(tanstack-router): leave awaited redirects to the loader and harden SSR
- feat(react): Next.js App Router recipe, digest rethrow and hydration fixes
- feat(react): React Router recipe, and revert the digest rethrow
- feat(client): add QueryClient.disposeAfter
- refactor!: adopt Effect 4 naming ahead of the API freeze
- docs(readme): rewrite around effetch with a step-by-step start
- feat(examples): basic, TanStack Start (with and without effetch) and React Router apps on dummyjson
- chore(release): 0.1.0-rc.0
- Add `connectQueryClient` at `@monarcode/effetch-query/react/tanstack-router`, which streams server-loaded queries to the browser and follows `redirect()` from queries and mutations - Let `dehydrate` skip queries an earlier batch already sent - Add a TanStack Start example and test, and `@tanstack/react-router` as an optional peer
- Add a `runtime` option, an alternative to `layer`, that uses the runtime's services and Reactivity and leaves it running on `dispose` - Split `Options` into `LayerOptions`, `RuntimeOptions` and `CommonOptions`, so a `layer` or `memoMap` with a `runtime` is a compile error - Update the README, SSR and TanStack Start examples to share one runtime per process
…n SSR - Skip the redirect for a fetch an Effect awaits, such as a loader's `Query.fetch`, so the router follows it and a preload drops it - Fetch queries whose streamed result never arrives once the page has loaded - Send a query that replaced one an earlier batch sent, and report a failed request-client disposal instead of leaving it unhandled
…fixes - README: a Next.js App Router recipe with the core and ./react, no integration package: getQueryClient with React's cache() and Next's after(), a QueryProvider for client components, streaming with pending: "promise". - useSuspenseQuery and useSuspenseInfiniteQuery throw an error with a string digest (Next's redirect() and notFound()) as it is, rather than in a QueryFailure. - Fix: a hydrated query is no longer refetched when React hydrates in slices. React's server snapshot no longer seeds an unobserved fetch atom that the registry dropped before React subscribed. - Fix: streamed results accept a thenable whose then returns nothing, as React's RSC client hands over, without unhandled rejections. - Smoke test loads the core with the react-server condition.
- README: a React Router framework-mode recipe with the core and ./react, no integration package: a root middleware makes each request's client and disposes it once the response body is sent, loaders return the dehydrated state for a HydrationBoundary, and entry.server.tsx renders with the request's client. - Revert: suspense hooks wrap every failure in a QueryFailure again. React Router uses digest only in its unstable RSC mode, so the rethrow served Next alone. - README: start streamed prefetches with runPromiseExit, which never rejects, so a prefetch cut short by disposal isn't an unhandled rejection; examples/tanstack-start follows. - Test the recipe through react-router's createRequestHandler.
QueryClient.disposeAfter(client, response) returns the response with its body wrapped so the client is disposed once the body has been sent, fails or is cancelled; a response with no body disposes it at once, and a failed dispose is logged rather than thrown. It's for a client per request on a server that answers with a streamed Response: React Router's middleware, Hono, Bun.serve, Deno.serve. - The README's React Router recipe uses it, so its middleware is three lines instead of a hand-written stream wrapper. - connectQueryClient's cleanup shares its dispose logging.
Query.Key/Target/Family/Schema, InfiniteQuery.Family/Schema, TypeId exports, Error-suffixed defects, and Mutation.isMutation.
- Explain why effetch-query exists, how it works and how it relates to TanStack Query - Build every example on effetch endpoints, and add a "Without effetch" section for queries over any Effect - Mark the release as a release candidate and note the rewrite in the changelog
…React Router apps on dummyjson Replace the todos, ssr and tanstack-start examples with four on dummyjson.com's todos and auth APIs, with a shared UI. The examples are plain code; test/examples builds the Start and React Router apps and tests them end to end.
Freeze the API (AGENTS.md rule 9), test against effect and @effect/atom-react 4.1.1, and turn Unreleased into the 0.1.0-rc.0 changelog section.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.