TanStack/table · warning

filterFn '${filterFnName}' (auto) for column '${column.id}'

Error message

filterFn '${filterFnName}' (auto) for column '${column.id}' is not registered

What it means

When a column's filterFn is 'auto' (or unspecified), column.getAutoFilterFn picks a built-in filter function based on the inferred data type. If the resolved filterFn name is not present in the registered filterFns map, it warns that the auto-selected filter function is unregistered and returns undefined.

Source

Thrown at packages/table-core/src/features/column-filtering/columnFilteringFeature.utils.ts:89

    filterFnName = 'includesString'
  } else if (typeof value === 'number') {
    filterFnName = 'inNumberRange'
  } else if (typeof value === 'boolean') {
    filterFnName = 'equals'
  } else if (Array.isArray(value)) {
    filterFnName = 'arrIncludes'
  } else if (Object.prototype.toString.call(value) === '[object Date]') {
    filterFnName = 'inDateRange'
  } else if (value !== null && typeof value === 'object') {
    filterFnName = 'equals'
  } else {
    filterFnName = 'weakEquals'
  }

  const filterFn = filterFns?.[filterFnName]

  if (process.env.NODE_ENV === 'development' && !filterFn) {
    console.warn(
      `filterFn '${filterFnName}' (auto) for column '${column.id}' is not registered`,
    )
  }

  return filterFn
}

/**
 * Resolves the filter function configured for a column.
 *
 * Function-valued `columnDef.filterFn` is returned directly, `'auto'` delegates
 * to `column_getAutoFilterFn`, and string values are looked up in the table's
 * filter function registry.
 *
 * @example
 * ```ts
 * const filterFn = column_getFilterFn(column)
 * ```

View on GitHub (pinned to d01c01bedb)

Solutions

  1. Register the missing filter function (e.g. spread built-in filterFns into your filterFns map).
  2. Set an explicit filterFn on the column that exists in your registry instead of relying on 'auto'.
  3. Check the registry keys against the resolved filterFnName in the warning and fix the naming mismatch.
  4. If using a custom auto-resolution, ensure every name it can return is registered.

Example fix

// before
const filterFns = { myCustom: fn }

// after
import { builtInFilterFns } from '@tanstack/table-core'
const filterFns = { ...builtInFilterFns, myCustom: fn }
Defensive patterns

Strategy: validation

Validate before calling

function assertAutoFilterFnsRegistered(filterFns: Record<string, FilterFn<any>>, required = ['includesString', 'weakEquals', 'inNumberRange', 'equalsString', 'arrIncludes', 'arrIncludesSome']) {
  const missing = required.filter((name) => !(name in filterFns))
  if (missing.length) throw new Error(`filterFns missing required for auto resolution: ${missing.join(', ')}`)
}

Try / catch

try {
  const fn = column.getAutoFilterFn()
  if (!fn) throw new Error(`No auto filterFn resolvable for column '${column.id}'`)
} catch (e) {
  console.warn(e)
}

Prevention

When it happens

Trigger: Using a custom filterFns registry that omits a built-in name (e.g. 'weakEquals', 'includesString') that getAutoFilterFn tries to select; passing filterFn: 'auto' while registering only custom filter functions; overriding built-in filterFns with an incomplete set.

Common situations: Building a custom filtering setup and forgetting to spread the built-in filterFns; tree-shaken or customized feature setup removing built-in filter functions; typo when registering filter functions so names don't match.

Related errors


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