fate

A modern data client for React.

Search Login
Thinking...
fate demo

fate is a modern data client for React inspired by Relay and GraphQL.

fate combines view composition, normalized caching, data masking, Async React features, and type-safe data fetching.

LoginSign in to post comments.

Latest posts

ViewRefs as the boundary between components

Core Concepts
#views
#normalized-cache
👍100 likes

ViewRefs are intentionally small: a typename, an id, and enough metadata for fate to resolve masked data against a view. Passing refs through the tree keeps component props light and lets each component declare the fields it reads. This post walks through how a PostCard can select title and author while a detail route adds comments, tags, and counts without creating another hand-written data shape.

- Ari

3 Comments

Sora

Passing ViewRefs through components made the example easier to read than a stack of custom DTO types.

Christoph

Optimistic likes are simple, but they make the rollback behavior easy to test in front of someone.

Hana

The Void example deserves a walkthrough because it proves the framework integration boundary is small.

Add a comment

Live views over a single SSE stream

Realtime
#normalized-cache
#live-views
👍107 likes

useLiveView has the same shape as useView, but it subscribes to updates for the selected object through the native live transport. The client keeps one SSE stream open, sends subscribe and unsubscribe control messages, and merges returned records into the same normalized cache used by requests and mutations. Components keep their view definitions and just opt into live data.

- Mika

3 Comments

Christoph

The single SSE connection model is reassuring; we were worried live views would create one stream per card.

Dina

The search route feels more convincing when it can find live views, adapters, and migration content.

Lena

Connection identity following Relay semantics is a strong choice for teams that already know that model.

Add a comment

An incremental adoption checklist

Migration Notes
#async-react
#server-adapters
👍64 likes

The safest adoption path is incremental. Add byId and list procedures or source adapters next to existing server routes, generate a client, and move one screen to views. The first win is usually removing loading branches and manual cache patches from a feed or detail page. From there, optimistic actions and live views can be introduced without rewriting the whole app.

- Noah

2 Comments

Hana

I appreciate that the examples still work with existing server routes while adding the fate procedures.

Jamal

The comments list is long enough now to exercise load-more behavior without creating fake lorem ipsum.

Add a comment

Explore by theme

Server Integrations

Prisma, Drizzle, native HTTP, tRPC, and source adapter notes.

3 posts
Request arguments and connection identity73 likes
by Hana
#pagination
#server-adapters
Prisma and Drizzle source adapters85 likes
by Dina
#views
#server-adapters
Native HTTP transport after the alpha launch89 likes
by Ari
#http-transport
#server-adapters

React Integration

Async React, Suspense, Actions, and the react-fate hooks.

3 posts
Suspense-first screens with useRequest76 likes
by Jamal
#views
#async-react
Optimistic actions that roll back cleanly82 likes
by Kai
#optimistic-updates
#async-react
Connection lists for comments and feeds69 likes
by Lena
#pagination
#normalized-cache

Core Concepts

Core ideas behind views, ViewRefs, strict selection, and data masking.

4 posts
ViewRefs as the boundary between components100 likes
by Ari
#views
#normalized-cache
A normalized cache without manual key math111 likes
by Hana
#normalized-cache
#optimistic-updates
Thinking in views instead of requests128 likes
by Christoph
#views
#data-masking
Data masking as a team contract87 likes
by Dina
#views
#data-masking

Realtime

Live views, live lists, SSE streams, and update events.

3 posts
Live views over a single SSE stream107 likes
by Mika
#normalized-cache
#live-views
Keeping deletions consistent across lists64 likes
by Sora
#optimistic-updates
#live-views
Live list views for active threads97 likes
by Noah
#pagination
#live-views

Migration Notes

Practical migration notes for teams moving away from request-centric state.

2 posts
An incremental adoption checklist64 likes
by Noah
#async-react
#server-adapters
Moving away from request-centric state79 likes
by Mika
#views
#normalized-cache

Release Notes

Progress reports from the alpha releases and example applications.

4 posts
The Vite plugin replaces everyday codegen91 likes
by Jamal
#http-transport
#vite-plugin
Stable refs and smaller rerenders67 likes
by Lena
#views
#normalized-cache
Garbage collection for request lifetimes58 likes
by Kai
#normalized-cache
#async-react
What the Void example proves86 likes
by Sora
#void
#http-transport

Events

fate alpha progress call

A guided tour of the current alpha covering views, normalized caching, native HTTP, and the updated example apps.

Community Call
May 20, 5:30 PM → May 20, 6:30 PM
Online
2 attending · capacity 300
Hosted by Christoph
Views
Native HTTP
Examples
Community RSVPs
Ari · Going
Dina · Interested
Christoph · Going
Join livestream

From request hooks to views

Hands-on workshop for replacing request hooks with co-located views, root requests, and Suspense boundaries.

Workshop
May 28, 4:00 PM → May 28, 8:00 PM
Nakazawa Tech Studio
2 attending · capacity 120
Hosted by Ari
Migration
Suspense
Data masking
Community RSVPs
Hana · Going
Kai · Interested
Jamal · Going
Join livestream

Live views lab

Live demo of object updates, connection events, visible inserts, deletion pruning, and one SSE stream per client.

Meetup
Jun 4, 5:30 PM → Jun 4, 7:00 PM
Online
2 attending · capacity 180
Hosted by Mika
Live views
SSE
Pagination
Community RSVPs
Noah · Interested
Mika · Going
Sora · Going
Join livestream

Server adapter office hours

Server-focused session on data views, source adapters, Prisma, Drizzle, and the native fate HTTP handler.

Ama
Jun 12, 5:00 PM → Jun 12, 6:30 PM
Online
2 attending · capacity 90
Hosted by Dina
Prisma
Drizzle
HTTP transport
Community RSVPs
Dina · Going
Lena · Going
Ari · Interested
Join livestream

Void example launch review

Launch review for the Void example, including routing, auth, seed data, live comments, and fate client generation.

Launch
Jun 24, 5:00 PM → Jun 24, 6:00 PM
Online
2 attending · capacity 150
Hosted by Sora
Void
Vite plugin
Examples
Community RSVPs
Jamal · Going
Hana · Interested
Sora · Going
Join livestream