Spoosh
Plugins

Deduplication

Prevent duplicate concurrent requests

The deduplication plugin prevents making the same request multiple times concurrently. If a request is already in flight, subsequent calls reuse the same promise.

This is especially important when using invalidationPlugin - when a mutation invalidates multiple queries that share the same endpoint, deduplication ensures only one network request is made.

Installation

npm install @spoosh/plugin-deduplication

Usage

import { deduplicationPlugin } from "@spoosh/plugin-deduplication";

const plugins = [
  cachePlugin({ staleTime: 5000 }),
  deduplicationPlugin(),
  invalidationPlugin(),
];

Why It Matters

Without deduplication, invalidating queries can cause duplicate requests:

// Multiple components using the same query
function ComponentA() {
  const { data } = useRead((api) => api.users.$get());
}

function ComponentB() {
  const { data } = useRead((api) => api.users.$get());
}

// When a mutation invalidates "users", both components would refetch
// With deduplicationPlugin, only ONE network request is made

Per-Request Override

// Disable deduplication for this request
useRead((api) => api.posts.$get(), { dedupe: false });

Options

Plugin Config

OptionTypeDefaultDescription
read"in-flight" | false"in-flight"Deduplication mode for reads
write"in-flight" | falsefalseDeduplication mode for writes

Per-Request Options

OptionTypeDescription
dedupe"in-flight" | falseOverride deduplication for this request

Modes

ModeDescription
"in-flight"Reuse existing in-flight request promise if one exists
falseAlways make a new request

Write Deduplication

By default, writes are not deduplicated to avoid unintended side effects. Enable with caution:

// Enable deduplication for writes (use carefully)
const plugins = [deduplicationPlugin({ write: "in-flight" })];

On this page