Catalog npm
Back to packageRELEASE DETAILS

0.4.0

npm

@021.is/spine-query

TanStack Query wrapper with sensible defaults: dedupe, SWR, no auto-refetch, query-key factory pattern. Reduces frontend → backend traffic.

Published28 May 2026
Direct dependencies3
Transitive dependenciesNot calculated

README

Current package documentation

@021.is/spine-query

TanStack Query wrapper with sensible defaults that minimize backend traffic. Plus a typed makeKeys factory for consistent, scoped query keys.

Why

A production app hit a real rate-limit because 10 components were each calling the same endpoint. TanStack Query's defaults (refetchOnFocus: true, staleTime: 0) make this worse, not better. spine-query tunes for don't hammer.

Defaults (built into makeQueryClient)

ValueWhy
staleTime60_000 (1 min)Component swaps within a minute don't refetch
gcTime5 * 60_000 (5 min)Back-button warm hit
refetchOnWindowFocusfalseOpt-in per query if needed
refetchOnReconnectfalseSame — explicit > implicit
retry1Don't thrash on failure
mutations.retry0Never auto-retry mutations

Use — client setup

import { QueryClientProvider } from "@tanstack/react-query";
import { makeQueryClient } from "@021.is/spine-query";

const qc = makeQueryClient();
<QueryClientProvider client={qc}>{children}</QueryClientProvider>

Use — typed query keys

import { makeKeys } from "@021.is/spine-query";

export const eventKeys = makeKeys("events", {
  all: () => [],
  byId: (id: string) => [id],
  listByOrganizer: (orgId: string, status: "draft" | "published") => ["by-org", orgId, status],
});

useQuery({ queryKey: eventKeys.byId("e_1"), queryFn: () => fetchEvent("e_1") });
queryClient.invalidateQueries({ queryKey: eventKeys.all() }); // wipes ALL event queries

Result: every key is prefixed with the scope (["events", "e_1"], ["events", "by-org", "o_1", "published"]). Invalidation is reliable; typos are caught at compile time.

Override per query when needed

useQuery({
  queryKey: eventKeys.byId(id),
  queryFn: () => fetchEvent(id),
  refetchOnWindowFocus: true, // override the default for hot-status surfaces
  staleTime: 5_000,
});

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 3

Native requirements
3 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
@types/react
Environment
{
  "local_name": "@types/react",
  "alias": false,
  "peer_metadata": null
}
^19.2.15development
react
Environment
{
  "local_name": "react",
  "alias": false,
  "peer_metadata": {
    "optional": false
  }
}
^19.2.6peer
@tanstack/react-query
Environment
{
  "local_name": "@tanstack/react-query",
  "alias": false,
  "peer_metadata": {
    "optional": false
  }
}
^5.100.14peer

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "a91739a2237f5c9f5a18b5f776503c0d322f2df9",
  "tarball": "https://registry.npmjs.org/@021.is/spine-query/-/spine-query-0.4.0.tgz",
  "fileCount": 4,
  "integrity": "sha512-YRNNkPLUIWB0Hgs4fOl+Q6aUGWDxux1V1aw3PFS9iFcsgzTgy2riodXl01gSod/I40bc9lPebOdbsmBfByAF+A==",
  "signatures": [
    {
      "sig": "MEUCIEj+E8VGwPW7ICkwt4LJuPrDtiN9TX4yrpqJ/9y84yEKAiEAl2rekXsUrDSmoZuJS3Zevkmc3eGBI5GXjvPUHj67KBY=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 5059
}

Repository

PENDING
021is/spine-ts

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:00 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:622af032d486e95b5e93f65cdd7dd2b41a28981b9bf545fe5ee3b44c8feb56a7

Other collected versions

0.4.328 MayView all collected versions →