Expand description
gpui-query — Zero-boilerplate async state management for GPUI.
Inspired by TanStack Query v5, redesigned for GPUI’s synchronous rendering model and Rust’s ownership semantics.
§v2 Improvements over v1
- Options-first API with sensible defaults —
use_query("users", fetcher, cx) - Tuple return types — hooks return
(Entity<QueryResource<T,E>>, Subscription)for explicit control - Signal-always — fetchers always receive
QuerySignalfor cooperative cancellation - Fixed signal lifecycle — signals are cancelled on LatestWins replacement
- Fixed retry loops — single counter, signal checked between attempts
- Efficient re-renders —
cx.notify()only on terminal state changes QueryError: Display + Error— ecosystem interop with?andanyhowAHashMapfor trusted cache keys — ~2x faster lookups- Bounded
max_pagesdefault — prevents unbounded memory growth - Actual mutation GC — no more memory leaks
§Layers
core— Serde-only state machine (QueryResource,CachePolicy, etc.)client— GPUIQueryClientregistry with type-partitioned bucketshook—use_query()/use_mutation()/use_infinite_query()hooks
§Quick Start
Hooks are re-exported at the crate root for ergonomic imports:
ⓘ
use gpui_query::{use_query, use_mutation, use_infinite_query, QueryClient};