# query_kit > TanStack Query for Dart and Flutter, ported test for test. query_kit is an entirely AI-coded project: all code, tests and documentation were written by AI coding agents (Anthropic's Claude). A human maintainer set the goals and reviews releases, but did not write the code. A community port, not affiliated with or endorsed by TanStack. query_kit is a port of TanStack Query's `query-core` to Dart (the package `query_kit`, pure Dart) with a Flutter binding on top (`query_kit_flutter`), both on pub.dev. It caches server state per query key, deduplicates and retries fetches, refetches stale data on focus, on reconnect or on an interval, and covers mutations, optimistic updates and infinite queries. Its behaviour follows TanStack Query's, proven by porting upstream's test suite; where it differs is listed on the "Differences from TanStack Query" page below. Install with `flutter pub add query_kit_flutter` in a Flutter app, or `dart pub add query_kit` in pure Dart. Every page below is Markdown at its own URL with `.md` appended, and all of them together are https://query-kit.dev/llms-full.txt. Source: https://github.com/dualmeta-gmbh/query_kit ## Getting started - [Overview: TanStack Query for Flutter](https://query-kit.dev/docs/overview.md): query_kit is TanStack Query for Flutter and Dart. It fetches, caches and refreshes server data, with background refetches, retries, mutations and infinite queries. - [Installation: TanStack Query for Flutter](https://query-kit.dev/docs/installation.md): Add TanStack Query to a Flutter app with flutter pub add query_kit_flutter, or query_kit for pure Dart. Dependencies, Dart and Flutter floors, analyzer settings. - [Quick start: TanStack Query in a Flutter app](https://query-kit.dev/docs/quick-start.md): TanStack Query in a Flutter app in four steps — a provider at the root, an options function, a widget that reads it, and the mutation that invalidates it. - [Important defaults](https://query-kit.dev/docs/important-defaults.md): What the cache does out of the box — stale at once, kept five minutes, retried three times, refetched on return to the app — and how to change each default. - [React Query in Flutter: coming from TanStack Query](https://query-kit.dev/docs/coming-from-react-query.md): React Query and TanStack Query in Flutter — every JavaScript name mapped to its Dart counterpart, from useQuery and the client to options, infinite queries and mutations. - [Type safety in Dart](https://query-kit.dev/docs/dart-type-safety.md): Sealed results, one key one exact type, two options shapes, and the analyzer setting that catches the one literal inference cannot type. ## Guides & concepts - [Guides: TanStack Query concepts in Flutter](https://query-kit.dev/docs/guides.md): Every query_kit guide in one list, grouped by task: reading queries, refetching and the network, paging, mutations, the cache and tools. ### Queries - [Queries](https://query-kit.dev/docs/guides/queries.md): What a query is, where it lives in an app, the three result states, status versus fetchStatus, and the flags that combine them. - [Four ways to read a query](https://query-kit.dev/docs/guides/reading-queries-in-widgets.md): context.query, QueryBuilder, QueryMixin and QueryController — four equal call styles, how to pick between them, and when a read is released. - [useQuery and useMutation in Flutter](https://query-kit.dev/docs/guides/hooks.md): Use React Query-style hooks in Flutter with query_kit_hooks: fetch and cache data, run mutations, load more pages, and test your HookWidgets. - [Query keys](https://query-kit.dev/docs/guides/query-keys.md): QueryKey as a value type, hierarchical keys and prefix matching, key factories, and the parts that do not compare the way you expect. - [Query functions](https://query-kit.dev/docs/guides/query-functions.md): A query function returns a Future and throws on failure — a repository on dio or package:http, error types a retry policy can read, cancellation, and what the function context carries. - [Describing a query once](https://query-kit.dev/docs/guides/query-options.md): Options functions, the two observer options shapes, withSelect, what null means, and why options built in build are fine. - [Parallel API queries in Flutter](https://query-kit.dev/docs/guides/parallel-queries.md): Fetch independent API requests in parallel in Flutter. Read fixed or dynamic sets of queries with query_kit and avoid sequential request waterfalls. - [Combining queries](https://query-kit.dev/docs/guides/combining-queries.md): combine over a record or a list of results — the pending, error and data rules, optional sources, combineWith, CombineMemo and keys. - [Dependent API queries in Flutter](https://query-kit.dev/docs/guides/dependent-queries.md): Run a Flutter API query after another query supplies its input. Enable or pause dependent queries and understand the resulting request waterfall. - [Disabling queries](https://query-kit.dev/docs/guides/disabling-queries.md): Enabled.no keeps a query from fetching on its own — a query run only on demand, a search that waits for input, what a disabled query still does, and why there is no skipToken. - [Side effects](https://query-kit.dev/docs/guides/side-effects.md): Navigation, snackbars and analytics on a change of a result — QueryListener, InfiniteQueryListener and MutationListener, mutation callbacks, and the global callbacks for the whole app. ### Refetching and the network - [Background fetching indicators](https://query-kit.dev/docs/guides/background-fetching-indicators.md): Show that a query is refreshing without hiding the data it already has — isRefetching on one result, and IsFetchingController for an app-wide progress bar. - [App focus refetching](https://query-kit.dev/docs/guides/window-focus-refetching.md): Stale queries refetch when the user comes back to the app — how Flutter's app lifecycle becomes focus on phones, desktop and the web, how to turn it off or narrow it, and how to bring your own focus source. - [Network mode and offline](https://query-kit.dev/docs/guides/network-mode.md): What queries and mutations do while the client believes it is offline — online, always and offlineFirst — how paused work shows on the result, and how it resumes. - [Connectivity](https://query-kit.dev/docs/guides/connectivity.md): Telling the client whether it is online — nothing is installed by default; OnlineStatus.fixed and OnlineStatus.stream, a connectivity_plus adapter, and a reachability probe, because a link is not the internet. - [Polling](https://query-kit.dev/docs/guides/polling.md): refetchInterval refetches a query on a timer while a reader is on screen — fixed or computed intervals, polling in the background, stopping when the server confirms, and giving up after failures in a row. - [Query retries](https://query-kit.dev/docs/guides/query-retries.md): A failed query is retried before the error reaches the screen — RetryPolicy and RetryDelay, not retrying a 4xx, honouring Retry-After, and showing the attempts in the UI. - [Query cancellation](https://query-kit.dev/docs/guides/query-cancellation.md): Every query function receives a QueryCancelToken — bridging it to dio and package:http, stopping work done in steps, and what cancelQueries, a leaving screen and a refetch each do to a fetch in flight. ### Paging and early data - [Pagination in Flutter with cached queries](https://query-kit.dev/docs/guides/paginated-queries.md): Paginate API data in Flutter while keeping the previous page visible. Cache each page by query key and prefetch the next page with query_kit. - [Infinite scrolling in Flutter with query_kit](https://query-kit.dev/docs/guides/infinite-queries.md): Build an infinite scrolling list in Flutter with query_kit. Fetch the next page, limit cached pages, and combine load-on-scroll with pull-to-refresh. - [Initial query data](https://query-kit.dev/docs/guides/initial-query-data.md): InitialData seeds the cache with data the app already has — a bundled catalogue, a row from the list screen — and initialDataUpdatedAt says how old it is, so staleTime decides whether to fetch. - [Placeholder query data](https://query-kit.dev/docs/guides/placeholder-query-data.md): PlaceholderData is shown while the real fetch runs and never written to the cache — a fixed stand-in, a row borrowed from the list, or the previous key's data — flagged isPlaceholderData so the screen can render it as provisional. - [Scroll restoration](https://query-kit.dev/docs/guides/scroll-restoration.md): A list comes back where it was when its data is still cached, because the first build already has the rows — and what Flutter needs from you, a PageStorageKey or a restorationId, to put the position back. ### Mutations - [API mutations in Flutter with query_kit](https://query-kit.dev/docs/guides/mutations.md): Create, update and delete server data in Flutter with query_kit. Handle pending and error states, await writes, and refresh affected queries. - [Query invalidation](https://query-kit.dev/docs/guides/query-invalidation.md): invalidateQueries marks matching queries stale and refetches the ones on screen — prefix matching, exact, predicates, refetchType and cancelRefetch. - [Invalidations from mutations](https://query-kit.dev/docs/guides/invalidations-from-mutations.md): Invalidate the queries a write affected from its onSuccess or onSettled — which keys, which callback, and what returning the future does to the mutation's state. - [Updates from mutation responses](https://query-kit.dev/docs/guides/updates-from-mutation-responses.md): Write what a mutation returned straight into the cache — setQueryData, updateQueryData and updateQueriesData, immutable updates, and the one-key-one-type rule. - [Optimistic updates in Flutter](https://query-kit.dev/docs/guides/optimistic-updates.md): Update Flutter UI before a write completes. Show pending mutation variables or update the cache, then roll back on error with query_kit. - [Mutation scopes](https://query-kit.dev/docs/guides/mutation-scopes.md): MutationScope runs the mutations that share it one at a time, in the order they were started — for writes to the same thing that must not race. - [Cancelling mutations](https://query-kit.dev/docs/guides/cancelling-mutations.md): mutationFnWithContext, the signal cancel() cancels, and why cancelling a write fails it rather than reverting it. - [Track pending mutations in Flutter](https://query-kit.dev/docs/guides/mutation-state.md): Show saving indicators for concurrent writes in Flutter. Read pending and failed mutations from the shared cache with MutationStateController. ### The cache and performance - [Filters](https://query-kit.dev/docs/guides/filters.md): QueryFilters and MutationFilters — the one named filters argument every bulk operation takes, what each field matches, and how to match a query yourself. - [Request waterfalls](https://query-kit.dev/docs/guides/request-waterfalls.md): When one request cannot start before another has answered — where waterfalls come from in a widget tree, and how hoisting, prefetching and flatter reads avoid them. - [Prefetch API data in Dart and Flutter](https://query-kit.dev/docs/guides/prefetching.md): Load API data before a screen opens in Dart and Flutter. Prefetch on tap, hover or navigation, reuse cached results, and revalidate stale data. - [API caching in Dart and Flutter](https://query-kit.dev/docs/guides/caching.md): Cache API responses in Dart and Flutter, keep data fresh with background refetching, and control cache lifetime with staleTime and gcTime. - [What rebuilds, and when](https://query-kit.dev/docs/guides/render-optimizations.md): select narrows what a widget reads; buildWhen narrows when it rebuilds. They are not the same tool. - [Structural sharing](https://query-kit.dev/docs/guides/structural-sharing.md): A refetch that brings back equal data keeps the cached instances — what is shared, why a model needs ==, StructurallyShareable, and turning it off. - [Default query functions in Dart and Flutter](https://query-kit.dev/docs/guides/default-query-function.md): Share one fetch function across queries in Dart and Flutter. Derive requests from query keys and configure query and mutation defaults by key prefix. - [Global query and mutation callbacks in Flutter](https://query-kit.dev/docs/guides/global-callbacks.md): Handle query and mutation errors once per operation in Flutter. Add shared logging, error notifications and invalidation rules with cache callbacks. ### Tools and architecture - [Debugging](https://query-kit.dev/docs/guides/debugging.md): There are no devtools — what the cache can tell you instead, by subscribing to its events, reading its entries, or putting a small inspector on screen. - [Testing](https://query-kit.dev/docs/guides/testing.md): The teardown every widget test needs, a harness that wraps it, a client without retries, and the pump rules that fake timers impose. - [Without Flutter](https://query-kit.dev/docs/guides/pure-dart.md): Using query_kit on its own — observers, subscribe, and the one thing you have to do yourself. - [Does this replace state management?](https://query-kit.dev/docs/guides/does-this-replace-state-management.md): Server state and client state are different problems — what moves into the cache, what stays in your state-management package, and how the two meet. ## Examples - [Examples](https://query-kit.dev/docs/examples.md): Every feature as a live screen you can run in the browser, one whole small app that composes them, and the package's one-file example. - [Task manager](https://query-kit.dev/docs/examples/task-manager.md): One small, whole app on query_kit — a shared list and detail, optimistic writes with rollback, and a poll that stops once the server confirms. - [One-file tour](https://query-kit.dev/docs/examples/one-file-tour.md): The package's own example, a provider, one query read two ways and a mutation that invalidates it, in a single file with no server. ### Basics - [Simple](https://query-kit.dev/docs/examples/simple.md): One query read in build, its three states told apart with a switch, and a refetch that keeps the data on screen. - [Basic](https://query-kit.dev/docs/examples/basic.md): A list and a detail sharing one cache, a mark on every row the cache already holds, and a detail entry that is dropped once nobody reads it. - [Four call styles](https://query-kit.dev/docs/examples/four-call-styles.md): One query read through context.query, QueryBuilder, QueryMixin and QueryController at once, with the listeners and the mutation and infinite-query counterparts beside them. ### Queries - [Default query function: live Flutter example](https://query-kit.dev/docs/examples/default-query-function.md): Run a Flutter example with a shared query function. Fetch requests from query keys and see queries and mutations inherit defaults by key prefix. - [Dependent queries: live Flutter example](https://query-kit.dev/docs/examples/dependent-queries.md): Run a Flutter dependent queries example. Fetch a post before its comments, pause the comments query, and inspect pending and fetching states. - [Parallel queries: live Flutter example](https://query-kit.dev/docs/examples/parallel-queries.md): Run a Flutter parallel queries example. Fetch three posts at once and inspect the shared count of requests in flight. - [Query collections](https://query-kit.dev/docs/examples/query-collections.md): A list of queries of one type that grows, shrinks and reorders at runtime, read with QueriesBuilder and again with a QueriesController. - [Combine](https://query-kit.dev/docs/examples/combine.md): Three queries of three different types read as one sealed CombinedResult, with a retry for the failed sources only and a memo that skips the combiner when nothing changed. - [Initial and placeholder data](https://query-kit.dev/docs/examples/initial-and-placeholder.md): Showing something before the first fetch returns, either as initial data written to the cache or as placeholder data that is only displayed. - [Select and structural sharing](https://query-kit.dev/docs/examples/select-and-sharing.md): Five readers of one cache entry, each selecting something different, with build counters that show which changes reach which reader. ### Paging - [Pagination](https://query-kit.dev/docs/examples/pagination.md): Page-numbered results, one cache entry per page, the previous page kept on screen while the next loads, and the next page prefetched. - [Load more and infinite scroll](https://query-kit.dev/docs/examples/load-more.md): One infinite query that appends a page per cursor, from a button or from scrolling near the end, and whose pages outlive the list that read them. - [Infinite query with max pages](https://query-kit.dev/docs/examples/max-pages.md): An infinite query that pages in both directions from the middle of the data and keeps a window of at most three pages. ### Mutations - [Mutations: live Flutter example](https://query-kit.dev/docs/examples/mutations.md): Run a Flutter mutations example. Update a server counter, inspect callbacks, queue writes with mutation scopes, and observe writes after unmounting. - [Optimistic updates: live Flutter example](https://query-kit.dev/docs/examples/optimistic-updates.md): Run a Flutter optimistic updates example. Add a row before the server responds, compare variables and cache updates, and try failure and rollback. - [Mutation context and cancel](https://query-kit.dev/docs/examples/mutation-cancel.md): An optimistic rename whose mutation function reads what onMutate kept and passes the cancel signal to its transport, and a Cancel button that fails the run so the rollback runs. - [Mutation state: live Flutter example](https://query-kit.dev/docs/examples/mutation-state.md): Run a Flutter example that tracks concurrent mutations. Fire writes and watch a shared badge count pending and failed operations in the mutation cache. ### Cache - [Prefetching: live Flutter example](https://query-kit.dev/docs/examples/prefetching.md): Run a Flutter prefetching example. Load a post into the cache before opening its detail screen and compare three ways to read cached data. - [Stale time and garbage collection](https://query-kit.dev/docs/examples/stale-and-gc.md): Every StaleTime and GcTime value on one cache entry, with a reader you can detach and attach to see when data refetches and when an unused entry is dropped. - [Invalidation and filters](https://query-kit.dev/docs/examples/invalidation-and-filters.md): The client's bulk operations — invalidate, refetch, reset, remove, cancel and update — run over one small cache with a key prefix, exact, type, stale and predicate filters. - [Playground](https://query-kit.dev/docs/examples/playground.md): A todo list and an editor with four live knobs — stale time, gc time, latency and error rate — turned while the queries are on screen. - [Cache inspector](https://query-kit.dev/docs/examples/cache-inspector.md): Every entry and every event of the query and mutation caches, live, with buttons that load, refetch, invalidate and remove entries. ### Network - [Auto refetching](https://query-kit.dev/docs/examples/auto-refetching.md): A list polled on an interval that can be switched live between off, two fixed values and one computed from the data, with and without polling in the background. - [Retry](https://query-kit.dev/docs/examples/retry.md): Every retry policy and delay on one query, with failures scripted on the backend, and what the result reports while the retries run. - [Cancellation](https://query-kit.dev/docs/examples/cancellation.md): A slow fetch cancelled by hand, with and without the signal reaching the transport, and search-as-you-type that cancels the needle in flight. - [Offline](https://query-kit.dev/docs/examples/offline.md): A query and a mutation under a connection you switch off and on, compared across the three network modes, with paused mutations resuming on reconnect. - [Focus refetch](https://query-kit.dev/docs/examples/focus-refetch.md): Every RefetchOn value for app focus and for mount, a minimum background time before a return refetches, and the provider's own focus and connectivity settings. ### Advanced - [Filtering rebuilds](https://query-kit.dev/docs/examples/build-when.md): buildWhen on the eight keyless reads, each read twice over one entry, filtered and plain, with build counters side by side. - [Global callbacks: live Flutter example](https://query-kit.dev/docs/examples/global-callbacks.md): Run a Flutter cache callbacks example. Inspect query and mutation events, show global error notifications, and opt individual queries out with meta. - [Diagnostics](https://query-kit.dev/docs/examples/diagnostics.md): The errors the library raises for a read or write of the wrong type and for a mutation with no function, and the fix for each. ## Cookbook - [Cookbook](https://query-kit.dev/docs/cookbook.md): Recipes for tasks that combine several features — each one a complete, compiled answer to "how do I…". - [Use Dio or http with query_kit in Flutter](https://query-kit.dev/docs/cookbook/wiring-dio-and-http.md): Connect Dio or package:http to query_kit in Flutter. Share an API client, forward cancellation, set timeouts, and turn HTTP failures into useful errors. - [Auth and token refresh](https://query-kit.dev/docs/cookbook/auth-and-token-refresh.md): Refresh an expired token once for every request that hit it, never retry a refused request, and give each signed-in user a cache of their own. - [List to detail, seeded](https://query-kit.dev/docs/cookbook/list-detail-seeding.md): Open a detail screen with the data the list already has — no spinner, no second request — and still refetch it when it is old. - [Lifecycle and connectivity wiring](https://query-kit.dev/docs/cookbook/lifecycle-and-connectivity-wiring.md): One main.dart that tells the client when the app is in front and when the network is there — connectivity_plus, a reachability probe, a calmer focus refetch and a debug offline switch. - [Pull to refresh in Flutter with cached data](https://query-kit.dev/docs/cookbook/pull-to-refresh.md): Connect Flutter RefreshIndicator to query_kit. Keep cached data visible, stop the spinner when refetching finishes, and support empty lists and errors. - [Debounced API search in Flutter](https://query-kit.dev/docs/cookbook/search-as-you-type.md): Build debounced API search in Flutter with query_kit. Cancel outdated requests, skip empty searches, and keep previous results visible while loading. - [Forms and server validation](https://query-kit.dev/docs/cookbook/forms-and-server-validation.md): An edit form driven by a mutation — disabled while saving, the server's field errors next to the fields, the cache updated from the response, and the screen closed on success. - [A global error snackbar](https://query-kit.dev/docs/cookbook/global-error-snackbar.md): One place that turns failed background refreshes and failed saves into a SnackBar — once per failure, never for what a screen already shows, and with a per-query way out. - [An infinite list view](https://query-kit.dev/docs/cookbook/infinite-list-view.md): A ListView that loads the next page as the user nears the end — once per page, with a footer that shows progress, a retry and the end of the list, and pull-to-refresh on top. - [Testing a screen](https://query-kit.dev/docs/cookbook/testing-a-screen.md): Widget tests for screens that read queries — a fake API with latency, a harness with the teardown built in, and tests for loading, errors, seeded data, staleness and a refused save. - [Use query_kit with Riverpod, Bloc or Provider](https://query-kit.dev/docs/cookbook/riverpod-bloc-provider.md): Combine query_kit with Riverpod, Bloc or Provider in Flutter. Keep API data in the query cache and local UI state in your existing state management. - [Offline first, and surviving a restart](https://query-kit.dev/docs/cookbook/offline-first-and-persistence.md): Save chosen queries and unsent writes to disk, restore them before the first frame, and let paused writes go out when the network comes back. - [Where the client lives](https://query-kit.dev/docs/cookbook/dependency-injection.md): Create the QueryClient once, provide it with QueryClientProvider, reach it with of, maybeOf and read, and register it in get_it when code outside the tree needs it. - [Routing with go_router](https://query-kit.dev/docs/cookbook/routing-go-router.md): Derive query keys from path parameters, prefetch before a route opens, refetch when the user comes back, and read queries in dialogs. - [Realtime updates over a WebSocket](https://query-kit.dev/docs/cookbook/realtime-websockets.md): Let server events write to the cache or invalidate it, keep the socket's lifetime in one widget, and resynchronise after a reconnect. - [Poll until a device confirms](https://query-kit.dev/docs/cookbook/poll-until-confirmed.md): A write the server accepts but a device confirms later, with the requested value shown at once, a poll that starts and stops itself, and a clear state for giving up. - [Disconnecting a device](https://query-kit.dev/docs/cookbook/device-and-iot-disconnect.md): Stop every query for a device the user disconnected, with no request sent to it afterwards and no old reading left in the cache. - [Sign out and multiple accounts](https://query-kit.dev/docs/cookbook/sign-out-and-multi-account.md): Give each signed-in user a fresh cache, empty it at sign-out without a refetch storm, warn about unsent writes, and keep several accounts apart in one client. - [Normalised data or one key per entity](https://query-kit.dev/docs/cookbook/normalised-vs-per-entity-keys.md): When to cache a list plus one entry per item, when to cache a map by id, and how to keep unchanged items' instances either way. - [Models with freezed and JSON](https://query-kit.dev/docs/cookbook/freezed-and-json-models.md): What a model needs to work well in the cache, how freezed and json_serializable provide it, and why a wrapper class needs StructurallyShareable to keep unchanged items. ## API reference - [API reference](https://query-kit.dev/docs/reference/api.md): One page per main surface of query_kit and query_kit_flutter — every option, field and member with its type, default and TanStack Query name — plus where the generated dartdoc lives. - [QueryClient](https://query-kit.dev/docs/reference/query-client.md): Every member of QueryClient — constructor, reads, writes, bulk operations, defaults and lifecycle — with its signature and what it does. - [Options reference](https://query-kit.dev/docs/reference/query-options.md): Every field of the query, infinite-query and mutation options, with its type, its built-in default and what it does. - [Results](https://query-kit.dev/docs/reference/results.md): Every field of what a reader is handed — QueryResult and its cases, QueryState, InfiniteData and the paging flags, MutationResult and MutationState, and CombinedResult. - [Widgets and controllers](https://query-kit.dev/docs/reference/widgets-and-controllers.md): Every public widget, controller, extension and mixin of query_kit_flutter, with its parameters, defaults and meaning; the TanStack Query counterpart is named where there is one. - [Caches and observers](https://query-kit.dev/docs/reference/caches-and-observers.md): The query and mutation caches, their entries and events, the five observers, the filters that select entries, and the three managers — every public member a user touches. - [Errors](https://query-kit.dev/docs/reference/errors.md): Every error query_kit and query_kit_flutter throw or record, every debug-build check you can trip, and what to do about each. - [Feature matrix](https://query-kit.dev/docs/reference/feature-matrix.md): What is here, and what is deliberately not in 1.0. - [Troubleshooting](https://query-kit.dev/docs/reference/troubleshooting.md): Symptom first — what you see, why it happens, and what to do instead. - [Differences from TanStack Query](https://query-kit.dev/docs/reference/differences-from-tanstack.md): Where query_kit behaves differently from TanStack Query on purpose — the shape of the API, the rules Dart's type system adds, and the failure cases it settles differently. - [TanStack Query for Flutter: query_kit, fquery, cached_query and flutter_query compared](https://query-kit.dev/docs/reference/other-dart-libraries.md): How query_kit compares with the other TanStack-Query-like packages for Dart and Flutter (fquery, cached_query, flutter_query and query_stack), read from each package's own pub.dev listing, README and changelog on 18 October 2026. ## Optional - [Credits, and what this is not](https://query-kit.dev/docs/project/credits.md): A port of TanStack Query, with thanks — unaffiliated with TanStack, and written by AI. - [How fidelity is proven](https://query-kit.dev/docs/project/fidelity.md): TanStack Query's suite ported case by case, what porting found, what review and real use found, and where every omission is written down. - [Design notes](https://query-kit.dev/docs/project/design-notes.md): Why query_kit is shaped the way it is. The decision records, the research behind them, the plans and the porting notes live in the repository; this page says which one answers which question. - [How the examples are built](https://query-kit.dev/docs/project/examples.md): How the examples are built and tested — the one-file tour, the showcase against a real backend, the acceptance demo, and the hooks add-on's example.