Similarities

AspectTanStack Querysimple-svelte-query
InvalidationHierarchical query keys (exact + prefix)Same model (exact key or prefix)Familiar pattern
Stale timeConfigurable per queryConfigurable per querySame semantics
CancellationAbortSignal via observers / lifecycleAbortSignal passed directly to queryFnAligned with fetch API

Differences

AspectTanStack Querysimple-svelte-query
Cache unitResolved values + status flags (data, error, isFetching…)The Promise itselfNative async semantics, direct await composition
Component APIuseQuery hook returns a state objectcreateQuery returns a PromiseLike. Use await directly.No wrapper, less boilerplate
MutationsFull useMutation API with onMutate, onSuccess, onError, onSettledNo mutation API. Use setQuery for optimistic updates, invalidate after.Intentionally omitted; standard fetch + invalidate is enough
Key hashingObject keys in the array are sorted deterministically. { b, a } equals { a, b }Keys are JSON.stringify'd as-is. No object key sorting.{ b: 1, a: 2 } and { a: 2, b: 1 } are different here
Garbage collectiongcTime removes unused entries automaticallyNo automatic GC. Use clear() or invalidate manually.Smaller API surface, manual control
DevtoolsOfficial devtools panelNoneInspect cache via getQuery or $inspect
SSR / HydrationDehydrate / hydrate APIUses Svelte's hydratable() built-inZero config, native SvelteKit support