🎑 View Composition
Components declare their data requirements using co-located “views”. Views are composed into a single request per screen, minimizing network requests and eliminating waterfalls.
fate is a modern data client for the web inspired by Relay and GraphQL. It combines view composition, normalized caching, data masking, Async React features, and type-safe data fetching.
React data fetching is still largely centered around requests. Components fetch independently, and keeping client state consistent often requires imperative cache invalidation, defensive refetching, or detailed mutation patching logic. As coding agents write more of our code, reducing imperative cache management becomes more important, not less.
Instead of caching requests, fate caches normalized objects, shifts thinking to what data is required, and composes view requirements into a single request at the application root. This enables precise optimistic updates, efficient live subscriptions, and deep integration with Async React through a minimal, composable API.
Components declare their data requirements using co-located “views”. Views are composed into a single request per screen, minimizing network requests and eliminating waterfalls.
fate prevents accidental coupling and overfetching by enforcing strict data selection for each view, and masks (hides) data that components did not request.
fate’s minimal, predictable API and explicit data selection enable local reasoning, enabling humans and AI tools to generate stable, type-safe data-fetching code.
fate uses modern Async React features like Actions, Suspense, and use for a seamless user experience. Optimistic updates enable instant UI feedback and rollbacks are handled automatically. Vue brings the same view model to composables, resources, Suspense, and a reactive FateClient provider.
Read about the Core Concepts, or jump right in and learn about Views.