TanStack/table · error

Feature not supported in current reactivity implementation

Error message

Feature not supported in current reactivity implementation

What it means

alpineReactivity() returns a TableReactivityBindings object describing what the Alpine table's reactivity implementation supports. Its addSubscription capability is intentionally unimplemented, so calling it always throws this error to signal the feature is unavailable in the current (Alpine) reactivity implementation.

Source

Thrown at packages/alpine-table/src/reactivity.ts:18

import { batch, createAtom } from '@tanstack/store'
import type {
  TableAtomOptions,
  TableReactivityBindings,
} from '@tanstack/table-core/reactivity'

/**
 * Creates the table-core reactivity bindings used by the Alpine adapter.
 *
 * Alpine uses TanStack Store atoms directly. Table instance reads
 * are then exposed to Alpine through the proxy wrapper in `createTable`.
 */
export function alpineReactivity(): TableReactivityBindings {
  return {
    createOptionsStore: true,
    wrapExternalAtoms: false,
    addSubscription: () => {
      throw new Error(
        'Feature not supported in current reactivity implementation',
      )
    },
    unmount: () => {
      throw new Error(
        'Feature not supported in current reactivity implementation',
      )
    },
    schedule: (fn) => queueMicrotask(() => fn()),
    batch,
    untrack: (fn) => fn(),
    createReadonlyAtom: <T>(fn: () => T, options?: TableAtomOptions<T>) => {
      return createAtom(() => fn(), {
        compare: options?.compare,
      })
    },
    createWritableAtom: <T>(value: T, options?: TableAtomOptions<T>) => {
      return createAtom(value, {

View on GitHub (pinned to d01c01bedb)

Solutions

  1. Do not call addSubscription with the Alpine reactivity bindings; guard feature use by checking the bindings flags (createOptionsStore: true, wrapExternalAtoms: false) before subscribing
  2. Use the adapter's supported reactivity APIs (schedule, batch, untrack, createOptionsStore) instead of subscriptions
  3. If subscription support is required, switch to a table adapter/package whose reactivity implementation supports it, or file/upvote a feature request

Example fix

// before
const bindings = alpineReactivity();
bindings.addSubscription(fn); // throws
// after
const bindings = alpineReactivity();
if (typeof bindings.addSubscription === 'function' && !isAlpineUnsupported(bindings)) {
  bindings.addSubscription(fn);
} else {
  bindings.schedule(fn); // supported alternative
}
Defensive patterns

Strategy: validation

Validate before calling

const bindings = alpineReactivity();
if (!bindings.addSubscription || isAlpineUnsupported(bindings)) {
  // skip subscription path; use schedule/batch instead
}

Type guard

function supportsSubscriptions(b) {
  return typeof b.addSubscription === 'function' && !b.addSubscription.toString().includes('not supported');
}

Try / catch

try {
  bindings.addSubscription(fn);
} catch (e) {
  if (e.message.includes('Feature not supported')) {
    bindings.schedule(fn); // fallback
  } else { throw e; }
}

Prevention

When it happens

Trigger: Any code path that calls the bindings returned by alpineReactivity() — specifically the addSubscription function (reactivity.ts:18) — is invoked, e.g. when mergedOptions wires up external store subscriptions.

Common situations: Developers enabling reactive option stores or external atom/subscription integration with the Alpine table adapter; calling table reactivity APIs that assume a Pinia/Solid-like subscription system that Alpine does not provide.

Related errors


AI-assisted analysis of TanStack/table@d01c01bedb (2026-08-28). Data as JSON: /api/errors/17064d7e965b8a30. Report an issue: GitHub.