Skip to content

Why fate? ​

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.

Features ​

🎑 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.

Thinking in Views →

🥽 Data Masking & Strict Selection

fate prevents accidental coupling and overfetching by enforcing strict data selection for each view, and masks (hides) data that components did not request.

Data Masking →

✨ AI-Ready

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.

AGENTS.md ↗

⚛️ Async React & Vue

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.

Actions in fate → · Vue guide →

Get Started ​

Getting Started →

Read about the Core Concepts, or jump right in and learn about Views.

Introducing fate · fate 1.0

Released under the MIT License