| Cache unit | Resolved values + status flags (data, error, isFetching…) | The Promise itself | Native async semantics, direct await composition |
| Component API | useQuery hook returns a state object | createQuery returns a PromiseLike. Use await directly. | No wrapper, less boilerplate |
| Mutations | Full useMutation API with onMutate, onSuccess, onError, onSettled | No mutation API. Use setQuery for optimistic updates, invalidate after. | Intentionally omitted; standard fetch + invalidate is enough |
| Key hashing | Object 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 collection | gcTime removes unused entries automatically | No automatic GC. Use clear() or invalidate manually. | Smaller API surface, manual control |
| Devtools | Official devtools panel | None | Inspect cache via getQuery or $inspect |
| SSR / Hydration | Dehydrate / hydrate API | Uses Svelte's hydratable() built-in | Zero config, native SvelteKit support |