Request Deduplication

Identical in-flight queries are automatically deduplicated — only one HTTP request is made and all callers share the same promise.

How It Works

When multiple callers issue the same query with the same input concurrently, only one HTTP request is made. Requests are matched by procedure name + serialized input. Subsequent callers receive the same in-flight promise.

ts
// Both calls result in a single HTTP request
const [a, b] = await Promise.all([
  rpc.query("get_user", { id: 1 }),
  rpc.query("get_user", { id: 1 }),
]);
// a === b (same reference)

Disabling Deduplication

Dedup is controlled at two levels — client config and per-call. Per-call takes precedence.

ts
// Disable deduplication globally
const rpc = createRpcClient({
  baseUrl: "/api",
  dedupe: false,
});
ts
// Disable for a single call
const fresh = await rpc.query("get_user", id, { dedupe: false });

Mutations are never deduplicated. Each per-caller AbortSignal is wrapped independently — aborting one caller does not affect others sharing the same in-flight promise.

Try it

Fire 5 identical queries concurrently. With dedup enabled, only 1 HTTP request is made. The server sleeps 500ms and increments a counter on each real request.

visit GitHub to learn more about metaxy