[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-tanstack-column-faceting":3,"mdc-erddye-key":50,"related-org-tanstack-column-faceting":896,"related-repo-tanstack-column-faceting":1028},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":45,"sourceUrl":48,"mdContent":49},"column-faceting","build faceted filter UIs","Build faceted filter UIs with columnFacetingFeature, facetedRowModel, facetedUniqueValues, and facetedMinMaxValues. Load for facet counts, numeric ranges, own-filter exclusion, or server-page facet completeness.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"tanstack","TanStack","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftanstack.png",[12,16,17],{"name":13,"slug":14,"type":15},"Data Visualization","data-visualization","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Frontend","frontend",28175,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Ftable","2026-07-30T05:25:41.397257",null,3539,[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"datagrid","datagrids","datatable","filtering","grid","grouping","hooks","javascript","pagination","react","reactjs","solid","solidjs","sorting","svelte","sveltejs","table","typescript","vue",{"repoUrl":21,"stars":20,"forks":24,"topics":46,"description":47},[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"🤖 Headless UI for building powerful tables & datagrids for TS\u002FJS -  React-Table, Vue-Table, Solid-Table, Svelte-Table","https:\u002F\u002Fgithub.com\u002FTanStack\u002Ftable\u002Ftree\u002FHEAD\u002Fpackages\u002Ftable-core\u002Fskills\u002Fcolumn-faceting","---\nname: column-faceting\ndescription: >\n  Build faceted filter UIs with columnFacetingFeature, facetedRowModel, facetedUniqueValues, and facetedMinMaxValues. Load for facet counts, numeric ranges, own-filter exclusion, or server-page facet completeness.\nmetadata:\n  {\n    type: sub-skill,\n    library: '@tanstack\u002Ftable-core',\n    library_version: '9.0.0-beta.59',\n  }\nrequires: ['core', 'table-features', 'column-filtering']\nsources:\n  - 'TanStack\u002Ftable:docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md'\n  - 'TanStack\u002Ftable:packages\u002Ftable-core\u002Fsrc\u002Ffeatures\u002Fcolumn-faceting'\n  - 'TanStack\u002Ftable:examples\u002Freact\u002Ffilters-faceted'\n---\n\nThis skill builds on `core`, `table-features`, and `column-filtering`. Faceting derives filter choices; it does not render controls.\n\n## Setup\n\n```ts\nimport {\n  columnFacetingFeature,\n  columnFilteringFeature,\n  createFacetedMinMaxValues,\n  createFacetedRowModel,\n  createFacetedUniqueValues,\n  createFilteredRowModel,\n  filterFn_includesString,\n  filterFn_inNumberRange,\n  tableFeatures,\n} from '@tanstack\u002Ftable-core'\n\nexport const features = tableFeatures({\n  columnFilteringFeature,\n  filteredRowModel: createFilteredRowModel(),\n  filterFns: {\n    includesString: filterFn_includesString,\n    inNumberRange: filterFn_inNumberRange,\n  },\n  columnFacetingFeature,\n  facetedRowModel: createFacetedRowModel(),\n  facetedUniqueValues: createFacetedUniqueValues(),\n  facetedMinMaxValues: createFacetedMinMaxValues(),\n})\n```\n\n## Core Patterns\n\n```ts\nconst counts = table.getColumn('status')?.getFacetedUniqueValues() ?? new Map()\nconst range = table.getColumn('age')?.getFacetedMinMaxValues()\n```\n\nUse unique values for discrete controls and min\u002Fmax only for numeric ranges.\nThe filtered model makes facets respond to the table's other active filters.\nRegister individually imported built-ins under their conventional keys so\ncolumns can reference them by string name; a column may instead receive a\nfilter function directly without registering it. The full `filterFns` registry\nobject still works but bundles every built-in.\n\n## Common Mistakes\n\n### [HIGH] Registering APIs without model slots\n\nWrong: `tableFeatures({ columnFilteringFeature, columnFacetingFeature })`\n\nCorrect: `tableFeatures({ columnFilteringFeature, columnFacetingFeature, facetedRowModel: createFacetedRowModel(), facetedUniqueValues: createFacetedUniqueValues() })`\n\nEach faceting getter needs its matching factory slot.\n\nSource: `packages\u002Ftable-core\u002Fsrc\u002Ffeatures\u002Fcolumn-faceting\u002FcolumnFacetingFeature.ts`\n\n### [MEDIUM] Expecting facet to apply itself\n\nWrong: `column.getFacetedUniqueValues().get(activeValue) === 0`\n\nCorrect: `column.getFacetedUniqueValues().get(activeValue) ?? 0`\n\nA column facet intentionally excludes that column's own filter while applying other filters.\n\nSource: `docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md`\n\n### [HIGH] Treating page facets as global\n\nWrong: `const globalCounts = column.getFacetedUniqueValues()`\n\nCorrect: `const globalCounts = await fetchFacetCounts(activeFilters)`\n\nWith server pagination, client faceting sees only loaded data.\n\nSource: `docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md#custom-server-side-faceting`\n\n## API Discovery\n\nInspect `node_modules\u002F@tanstack\u002Ftable-core\u002Fdist\u002Ffeatures\u002Fcolumn-faceting\u002F` for exact getters and factory return types.\n",{"data":51,"body":64},{"name":4,"description":6,"metadata":52,"requires":56,"sources":60},{"type":53,"library":54,"library_version":55},"sub-skill","@tanstack\u002Ftable-core","9.0.0-beta.59",[57,58,59],"core","table-features","column-filtering",[61,62,63],"TanStack\u002Ftable:docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md","TanStack\u002Ftable:packages\u002Ftable-core\u002Fsrc\u002Ffeatures\u002Fcolumn-faceting","TanStack\u002Ftable:examples\u002Freact\u002Ffilters-faceted",{"type":65,"children":66},"root",[67,97,104,546,552,711,724,730,742,753,764,769,780,791,801,811,816,826,836,846,856,861,871,877,890],{"type":68,"tag":69,"props":70,"children":71},"element","p",{},[72,75,81,83,88,90,95],{"type":73,"value":74},"text","This skill builds on ",{"type":68,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":73,"value":57},{"type":73,"value":82},", ",{"type":68,"tag":76,"props":84,"children":86},{"className":85},[],[87],{"type":73,"value":58},{"type":73,"value":89},", and ",{"type":68,"tag":76,"props":91,"children":93},{"className":92},[],[94],{"type":73,"value":59},{"type":73,"value":96},". Faceting derives filter choices; it does not render controls.",{"type":68,"tag":98,"props":99,"children":101},"h2",{"id":100},"setup",[102],{"type":73,"value":103},"Setup",{"type":68,"tag":105,"props":106,"children":111},"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  columnFacetingFeature,\n  columnFilteringFeature,\n  createFacetedMinMaxValues,\n  createFacetedRowModel,\n  createFacetedUniqueValues,\n  createFilteredRowModel,\n  filterFn_includesString,\n  filterFn_inNumberRange,\n  tableFeatures,\n} from '@tanstack\u002Ftable-core'\n\nexport const features = tableFeatures({\n  columnFilteringFeature,\n  filteredRowModel: createFilteredRowModel(),\n  filterFns: {\n    includesString: filterFn_includesString,\n    inNumberRange: filterFn_inNumberRange,\n  },\n  columnFacetingFeature,\n  facetedRowModel: createFacetedRowModel(),\n  facetedUniqueValues: createFacetedUniqueValues(),\n  facetedMinMaxValues: createFacetedMinMaxValues(),\n})\n","ts","",[112],{"type":68,"tag":76,"props":113,"children":114},{"__ignoreMap":110},[115,133,148,161,174,187,200,213,226,239,252,281,291,332,344,373,390,412,434,443,455,481,507,533],{"type":68,"tag":116,"props":117,"children":120},"span",{"class":118,"line":119},"line",1,[121,127],{"type":68,"tag":116,"props":122,"children":124},{"style":123},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[125],{"type":73,"value":126},"import",{"type":68,"tag":116,"props":128,"children":130},{"style":129},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[131],{"type":73,"value":132}," {\n",{"type":68,"tag":116,"props":134,"children":136},{"class":118,"line":135},2,[137,143],{"type":68,"tag":116,"props":138,"children":140},{"style":139},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[141],{"type":73,"value":142},"  columnFacetingFeature",{"type":68,"tag":116,"props":144,"children":145},{"style":129},[146],{"type":73,"value":147},",\n",{"type":68,"tag":116,"props":149,"children":151},{"class":118,"line":150},3,[152,157],{"type":68,"tag":116,"props":153,"children":154},{"style":139},[155],{"type":73,"value":156},"  columnFilteringFeature",{"type":68,"tag":116,"props":158,"children":159},{"style":129},[160],{"type":73,"value":147},{"type":68,"tag":116,"props":162,"children":164},{"class":118,"line":163},4,[165,170],{"type":68,"tag":116,"props":166,"children":167},{"style":139},[168],{"type":73,"value":169},"  createFacetedMinMaxValues",{"type":68,"tag":116,"props":171,"children":172},{"style":129},[173],{"type":73,"value":147},{"type":68,"tag":116,"props":175,"children":177},{"class":118,"line":176},5,[178,183],{"type":68,"tag":116,"props":179,"children":180},{"style":139},[181],{"type":73,"value":182},"  createFacetedRowModel",{"type":68,"tag":116,"props":184,"children":185},{"style":129},[186],{"type":73,"value":147},{"type":68,"tag":116,"props":188,"children":190},{"class":118,"line":189},6,[191,196],{"type":68,"tag":116,"props":192,"children":193},{"style":139},[194],{"type":73,"value":195},"  createFacetedUniqueValues",{"type":68,"tag":116,"props":197,"children":198},{"style":129},[199],{"type":73,"value":147},{"type":68,"tag":116,"props":201,"children":203},{"class":118,"line":202},7,[204,209],{"type":68,"tag":116,"props":205,"children":206},{"style":139},[207],{"type":73,"value":208},"  createFilteredRowModel",{"type":68,"tag":116,"props":210,"children":211},{"style":129},[212],{"type":73,"value":147},{"type":68,"tag":116,"props":214,"children":216},{"class":118,"line":215},8,[217,222],{"type":68,"tag":116,"props":218,"children":219},{"style":139},[220],{"type":73,"value":221},"  filterFn_includesString",{"type":68,"tag":116,"props":223,"children":224},{"style":129},[225],{"type":73,"value":147},{"type":68,"tag":116,"props":227,"children":229},{"class":118,"line":228},9,[230,235],{"type":68,"tag":116,"props":231,"children":232},{"style":139},[233],{"type":73,"value":234},"  filterFn_inNumberRange",{"type":68,"tag":116,"props":236,"children":237},{"style":129},[238],{"type":73,"value":147},{"type":68,"tag":116,"props":240,"children":242},{"class":118,"line":241},10,[243,248],{"type":68,"tag":116,"props":244,"children":245},{"style":139},[246],{"type":73,"value":247},"  tableFeatures",{"type":68,"tag":116,"props":249,"children":250},{"style":129},[251],{"type":73,"value":147},{"type":68,"tag":116,"props":253,"children":255},{"class":118,"line":254},11,[256,261,266,271,276],{"type":68,"tag":116,"props":257,"children":258},{"style":129},[259],{"type":73,"value":260},"}",{"type":68,"tag":116,"props":262,"children":263},{"style":123},[264],{"type":73,"value":265}," from",{"type":68,"tag":116,"props":267,"children":268},{"style":129},[269],{"type":73,"value":270}," '",{"type":68,"tag":116,"props":272,"children":274},{"style":273},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[275],{"type":73,"value":54},{"type":68,"tag":116,"props":277,"children":278},{"style":129},[279],{"type":73,"value":280},"'\n",{"type":68,"tag":116,"props":282,"children":284},{"class":118,"line":283},12,[285],{"type":68,"tag":116,"props":286,"children":288},{"emptyLinePlaceholder":287},true,[289],{"type":73,"value":290},"\n",{"type":68,"tag":116,"props":292,"children":294},{"class":118,"line":293},13,[295,300,306,311,316,322,327],{"type":68,"tag":116,"props":296,"children":297},{"style":123},[298],{"type":73,"value":299},"export",{"type":68,"tag":116,"props":301,"children":303},{"style":302},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[304],{"type":73,"value":305}," const",{"type":68,"tag":116,"props":307,"children":308},{"style":139},[309],{"type":73,"value":310}," features ",{"type":68,"tag":116,"props":312,"children":313},{"style":129},[314],{"type":73,"value":315},"=",{"type":68,"tag":116,"props":317,"children":319},{"style":318},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[320],{"type":73,"value":321}," tableFeatures",{"type":68,"tag":116,"props":323,"children":324},{"style":139},[325],{"type":73,"value":326},"(",{"type":68,"tag":116,"props":328,"children":329},{"style":129},[330],{"type":73,"value":331},"{\n",{"type":68,"tag":116,"props":333,"children":335},{"class":118,"line":334},14,[336,340],{"type":68,"tag":116,"props":337,"children":338},{"style":139},[339],{"type":73,"value":156},{"type":68,"tag":116,"props":341,"children":342},{"style":129},[343],{"type":73,"value":147},{"type":68,"tag":116,"props":345,"children":347},{"class":118,"line":346},15,[348,354,359,364,369],{"type":68,"tag":116,"props":349,"children":351},{"style":350},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[352],{"type":73,"value":353},"  filteredRowModel",{"type":68,"tag":116,"props":355,"children":356},{"style":129},[357],{"type":73,"value":358},":",{"type":68,"tag":116,"props":360,"children":361},{"style":318},[362],{"type":73,"value":363}," createFilteredRowModel",{"type":68,"tag":116,"props":365,"children":366},{"style":139},[367],{"type":73,"value":368},"()",{"type":68,"tag":116,"props":370,"children":371},{"style":129},[372],{"type":73,"value":147},{"type":68,"tag":116,"props":374,"children":376},{"class":118,"line":375},16,[377,382,386],{"type":68,"tag":116,"props":378,"children":379},{"style":350},[380],{"type":73,"value":381},"  filterFns",{"type":68,"tag":116,"props":383,"children":384},{"style":129},[385],{"type":73,"value":358},{"type":68,"tag":116,"props":387,"children":388},{"style":129},[389],{"type":73,"value":132},{"type":68,"tag":116,"props":391,"children":393},{"class":118,"line":392},17,[394,399,403,408],{"type":68,"tag":116,"props":395,"children":396},{"style":350},[397],{"type":73,"value":398},"    includesString",{"type":68,"tag":116,"props":400,"children":401},{"style":129},[402],{"type":73,"value":358},{"type":68,"tag":116,"props":404,"children":405},{"style":139},[406],{"type":73,"value":407}," filterFn_includesString",{"type":68,"tag":116,"props":409,"children":410},{"style":129},[411],{"type":73,"value":147},{"type":68,"tag":116,"props":413,"children":415},{"class":118,"line":414},18,[416,421,425,430],{"type":68,"tag":116,"props":417,"children":418},{"style":350},[419],{"type":73,"value":420},"    inNumberRange",{"type":68,"tag":116,"props":422,"children":423},{"style":129},[424],{"type":73,"value":358},{"type":68,"tag":116,"props":426,"children":427},{"style":139},[428],{"type":73,"value":429}," filterFn_inNumberRange",{"type":68,"tag":116,"props":431,"children":432},{"style":129},[433],{"type":73,"value":147},{"type":68,"tag":116,"props":435,"children":437},{"class":118,"line":436},19,[438],{"type":68,"tag":116,"props":439,"children":440},{"style":129},[441],{"type":73,"value":442},"  },\n",{"type":68,"tag":116,"props":444,"children":446},{"class":118,"line":445},20,[447,451],{"type":68,"tag":116,"props":448,"children":449},{"style":139},[450],{"type":73,"value":142},{"type":68,"tag":116,"props":452,"children":453},{"style":129},[454],{"type":73,"value":147},{"type":68,"tag":116,"props":456,"children":458},{"class":118,"line":457},21,[459,464,468,473,477],{"type":68,"tag":116,"props":460,"children":461},{"style":350},[462],{"type":73,"value":463},"  facetedRowModel",{"type":68,"tag":116,"props":465,"children":466},{"style":129},[467],{"type":73,"value":358},{"type":68,"tag":116,"props":469,"children":470},{"style":318},[471],{"type":73,"value":472}," createFacetedRowModel",{"type":68,"tag":116,"props":474,"children":475},{"style":139},[476],{"type":73,"value":368},{"type":68,"tag":116,"props":478,"children":479},{"style":129},[480],{"type":73,"value":147},{"type":68,"tag":116,"props":482,"children":484},{"class":118,"line":483},22,[485,490,494,499,503],{"type":68,"tag":116,"props":486,"children":487},{"style":350},[488],{"type":73,"value":489},"  facetedUniqueValues",{"type":68,"tag":116,"props":491,"children":492},{"style":129},[493],{"type":73,"value":358},{"type":68,"tag":116,"props":495,"children":496},{"style":318},[497],{"type":73,"value":498}," createFacetedUniqueValues",{"type":68,"tag":116,"props":500,"children":501},{"style":139},[502],{"type":73,"value":368},{"type":68,"tag":116,"props":504,"children":505},{"style":129},[506],{"type":73,"value":147},{"type":68,"tag":116,"props":508,"children":510},{"class":118,"line":509},23,[511,516,520,525,529],{"type":68,"tag":116,"props":512,"children":513},{"style":350},[514],{"type":73,"value":515},"  facetedMinMaxValues",{"type":68,"tag":116,"props":517,"children":518},{"style":129},[519],{"type":73,"value":358},{"type":68,"tag":116,"props":521,"children":522},{"style":318},[523],{"type":73,"value":524}," createFacetedMinMaxValues",{"type":68,"tag":116,"props":526,"children":527},{"style":139},[528],{"type":73,"value":368},{"type":68,"tag":116,"props":530,"children":531},{"style":129},[532],{"type":73,"value":147},{"type":68,"tag":116,"props":534,"children":536},{"class":118,"line":535},24,[537,541],{"type":68,"tag":116,"props":538,"children":539},{"style":129},[540],{"type":73,"value":260},{"type":68,"tag":116,"props":542,"children":543},{"style":139},[544],{"type":73,"value":545},")\n",{"type":68,"tag":98,"props":547,"children":549},{"id":548},"core-patterns",[550],{"type":73,"value":551},"Core Patterns",{"type":68,"tag":105,"props":553,"children":555},{"className":107,"code":554,"language":109,"meta":110,"style":110},"const counts = table.getColumn('status')?.getFacetedUniqueValues() ?? new Map()\nconst range = table.getColumn('age')?.getFacetedMinMaxValues()\n",[556],{"type":68,"tag":76,"props":557,"children":558},{"__ignoreMap":110},[559,649],{"type":68,"tag":116,"props":560,"children":561},{"class":118,"line":119},[562,567,572,576,581,586,591,595,600,605,609,614,619,624,629,634,639,644],{"type":68,"tag":116,"props":563,"children":564},{"style":302},[565],{"type":73,"value":566},"const",{"type":68,"tag":116,"props":568,"children":569},{"style":139},[570],{"type":73,"value":571}," counts ",{"type":68,"tag":116,"props":573,"children":574},{"style":129},[575],{"type":73,"value":315},{"type":68,"tag":116,"props":577,"children":578},{"style":139},[579],{"type":73,"value":580}," table",{"type":68,"tag":116,"props":582,"children":583},{"style":129},[584],{"type":73,"value":585},".",{"type":68,"tag":116,"props":587,"children":588},{"style":318},[589],{"type":73,"value":590},"getColumn",{"type":68,"tag":116,"props":592,"children":593},{"style":139},[594],{"type":73,"value":326},{"type":68,"tag":116,"props":596,"children":597},{"style":129},[598],{"type":73,"value":599},"'",{"type":68,"tag":116,"props":601,"children":602},{"style":273},[603],{"type":73,"value":604},"status",{"type":68,"tag":116,"props":606,"children":607},{"style":129},[608],{"type":73,"value":599},{"type":68,"tag":116,"props":610,"children":611},{"style":139},[612],{"type":73,"value":613},")",{"type":68,"tag":116,"props":615,"children":616},{"style":129},[617],{"type":73,"value":618},"?.",{"type":68,"tag":116,"props":620,"children":621},{"style":318},[622],{"type":73,"value":623},"getFacetedUniqueValues",{"type":68,"tag":116,"props":625,"children":626},{"style":139},[627],{"type":73,"value":628},"() ",{"type":68,"tag":116,"props":630,"children":631},{"style":129},[632],{"type":73,"value":633},"??",{"type":68,"tag":116,"props":635,"children":636},{"style":129},[637],{"type":73,"value":638}," new",{"type":68,"tag":116,"props":640,"children":641},{"style":318},[642],{"type":73,"value":643}," Map",{"type":68,"tag":116,"props":645,"children":646},{"style":139},[647],{"type":73,"value":648},"()\n",{"type":68,"tag":116,"props":650,"children":651},{"class":118,"line":135},[652,656,661,665,669,673,677,681,685,690,694,698,702,707],{"type":68,"tag":116,"props":653,"children":654},{"style":302},[655],{"type":73,"value":566},{"type":68,"tag":116,"props":657,"children":658},{"style":139},[659],{"type":73,"value":660}," range ",{"type":68,"tag":116,"props":662,"children":663},{"style":129},[664],{"type":73,"value":315},{"type":68,"tag":116,"props":666,"children":667},{"style":139},[668],{"type":73,"value":580},{"type":68,"tag":116,"props":670,"children":671},{"style":129},[672],{"type":73,"value":585},{"type":68,"tag":116,"props":674,"children":675},{"style":318},[676],{"type":73,"value":590},{"type":68,"tag":116,"props":678,"children":679},{"style":139},[680],{"type":73,"value":326},{"type":68,"tag":116,"props":682,"children":683},{"style":129},[684],{"type":73,"value":599},{"type":68,"tag":116,"props":686,"children":687},{"style":273},[688],{"type":73,"value":689},"age",{"type":68,"tag":116,"props":691,"children":692},{"style":129},[693],{"type":73,"value":599},{"type":68,"tag":116,"props":695,"children":696},{"style":139},[697],{"type":73,"value":613},{"type":68,"tag":116,"props":699,"children":700},{"style":129},[701],{"type":73,"value":618},{"type":68,"tag":116,"props":703,"children":704},{"style":318},[705],{"type":73,"value":706},"getFacetedMinMaxValues",{"type":68,"tag":116,"props":708,"children":709},{"style":139},[710],{"type":73,"value":648},{"type":68,"tag":69,"props":712,"children":713},{},[714,716,722],{"type":73,"value":715},"Use unique values for discrete controls and min\u002Fmax only for numeric ranges.\nThe filtered model makes facets respond to the table's other active filters.\nRegister individually imported built-ins under their conventional keys so\ncolumns can reference them by string name; a column may instead receive a\nfilter function directly without registering it. The full ",{"type":68,"tag":76,"props":717,"children":719},{"className":718},[],[720],{"type":73,"value":721},"filterFns",{"type":73,"value":723}," registry\nobject still works but bundles every built-in.",{"type":68,"tag":98,"props":725,"children":727},{"id":726},"common-mistakes",[728],{"type":73,"value":729},"Common Mistakes",{"type":68,"tag":731,"props":732,"children":734},"h3",{"id":733},"high-registering-apis-without-model-slots",[735,740],{"type":68,"tag":116,"props":736,"children":737},{},[738],{"type":73,"value":739},"HIGH",{"type":73,"value":741}," Registering APIs without model slots",{"type":68,"tag":69,"props":743,"children":744},{},[745,747],{"type":73,"value":746},"Wrong: ",{"type":68,"tag":76,"props":748,"children":750},{"className":749},[],[751],{"type":73,"value":752},"tableFeatures({ columnFilteringFeature, columnFacetingFeature })",{"type":68,"tag":69,"props":754,"children":755},{},[756,758],{"type":73,"value":757},"Correct: ",{"type":68,"tag":76,"props":759,"children":761},{"className":760},[],[762],{"type":73,"value":763},"tableFeatures({ columnFilteringFeature, columnFacetingFeature, facetedRowModel: createFacetedRowModel(), facetedUniqueValues: createFacetedUniqueValues() })",{"type":68,"tag":69,"props":765,"children":766},{},[767],{"type":73,"value":768},"Each faceting getter needs its matching factory slot.",{"type":68,"tag":69,"props":770,"children":771},{},[772,774],{"type":73,"value":773},"Source: ",{"type":68,"tag":76,"props":775,"children":777},{"className":776},[],[778],{"type":73,"value":779},"packages\u002Ftable-core\u002Fsrc\u002Ffeatures\u002Fcolumn-faceting\u002FcolumnFacetingFeature.ts",{"type":68,"tag":731,"props":781,"children":783},{"id":782},"medium-expecting-facet-to-apply-itself",[784,789],{"type":68,"tag":116,"props":785,"children":786},{},[787],{"type":73,"value":788},"MEDIUM",{"type":73,"value":790}," Expecting facet to apply itself",{"type":68,"tag":69,"props":792,"children":793},{},[794,795],{"type":73,"value":746},{"type":68,"tag":76,"props":796,"children":798},{"className":797},[],[799],{"type":73,"value":800},"column.getFacetedUniqueValues().get(activeValue) === 0",{"type":68,"tag":69,"props":802,"children":803},{},[804,805],{"type":73,"value":757},{"type":68,"tag":76,"props":806,"children":808},{"className":807},[],[809],{"type":73,"value":810},"column.getFacetedUniqueValues().get(activeValue) ?? 0",{"type":68,"tag":69,"props":812,"children":813},{},[814],{"type":73,"value":815},"A column facet intentionally excludes that column's own filter while applying other filters.",{"type":68,"tag":69,"props":817,"children":818},{},[819,820],{"type":73,"value":773},{"type":68,"tag":76,"props":821,"children":823},{"className":822},[],[824],{"type":73,"value":825},"docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md",{"type":68,"tag":731,"props":827,"children":829},{"id":828},"high-treating-page-facets-as-global",[830,834],{"type":68,"tag":116,"props":831,"children":832},{},[833],{"type":73,"value":739},{"type":73,"value":835}," Treating page facets as global",{"type":68,"tag":69,"props":837,"children":838},{},[839,840],{"type":73,"value":746},{"type":68,"tag":76,"props":841,"children":843},{"className":842},[],[844],{"type":73,"value":845},"const globalCounts = column.getFacetedUniqueValues()",{"type":68,"tag":69,"props":847,"children":848},{},[849,850],{"type":73,"value":757},{"type":68,"tag":76,"props":851,"children":853},{"className":852},[],[854],{"type":73,"value":855},"const globalCounts = await fetchFacetCounts(activeFilters)",{"type":68,"tag":69,"props":857,"children":858},{},[859],{"type":73,"value":860},"With server pagination, client faceting sees only loaded data.",{"type":68,"tag":69,"props":862,"children":863},{},[864,865],{"type":73,"value":773},{"type":68,"tag":76,"props":866,"children":868},{"className":867},[],[869],{"type":73,"value":870},"docs\u002Fframework\u002Freact\u002Fguide\u002Fcolumn-faceting.md#custom-server-side-faceting",{"type":68,"tag":98,"props":872,"children":874},{"id":873},"api-discovery",[875],{"type":73,"value":876},"API Discovery",{"type":68,"tag":69,"props":878,"children":879},{},[880,882,888],{"type":73,"value":881},"Inspect ",{"type":68,"tag":76,"props":883,"children":885},{"className":884},[],[886],{"type":73,"value":887},"node_modules\u002F@tanstack\u002Ftable-core\u002Fdist\u002Ffeatures\u002Fcolumn-faceting\u002F",{"type":73,"value":889}," for exact getters and factory return types.",{"type":68,"tag":891,"props":892,"children":893},"style",{},[894],{"type":73,"value":895},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":897,"total":1027},[898,910,922,934,949,955,964,974,987,997,1008,1018],{"slug":899,"name":899,"fn":900,"description":901,"org":902,"tags":903,"stars":20,"repoUrl":21,"updatedAt":909},"aggregation","perform data aggregation in TanStack Table","Aggregate TanStack Table columns independently of grouping, including grand totals, caller-selected row totals, multiple keyed aggregations, custom context-based definitions, grouped merges, manual values, and worker constraints.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[904,907,908],{"name":905,"slug":906,"type":15},"Data Analysis","data-analysis",{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:59.429787",{"slug":911,"name":911,"fn":912,"description":913,"org":914,"tags":915,"stars":20,"repoUrl":21,"updatedAt":921},"api-not-found","diagnose TanStack Table API errors","Diagnose missing TanStack Table v9 exports, options, state slices, and instance methods. Load before inventing an API when code sees a type error, undefined feature method, absent object key, adapter mismatch, or v8-shaped example.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[916,919,920],{"name":917,"slug":918,"type":15},"Debugging","debugging",{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:26:05.418735",{"slug":923,"name":923,"fn":924,"description":925,"org":926,"tags":927,"stars":20,"repoUrl":21,"updatedAt":933},"cell-selection","select rectangular cell ranges in tables","Select rectangular cell ranges with cellSelectionFeature: two-corner range state keyed by row and column id, mousedown\u002Fmouseenter handlers, selection edges, render-order resolution under pinning, and autoResetCellSelection. Load when ranges widen unexpectedly after sorting or column reordering, when a drag re-renders the whole table, or when building copy-to-clipboard from a selection.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[928,929,930],{"name":905,"slug":906,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"UI Components","ui-components","2026-07-30T05:25:38.403427",{"slug":935,"name":935,"fn":936,"description":937,"org":938,"tags":939,"stars":20,"repoUrl":21,"updatedAt":948},"client-vs-server","manage TanStack Table data pipelines","Choose client or server ownership for filtering, grouping, sorting, expanding, and pagination in TanStack Table v9. Load for manual* flags, mixed pipelines, server counts, or deciding which dataset each row-model stage receives.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[940,943,944,947],{"name":941,"slug":942,"type":15},"Data Pipeline","data-pipeline",{"name":18,"slug":19,"type":15},{"name":945,"slug":946,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:25:45.400104",{"slug":4,"name":4,"fn":5,"description":6,"org":950,"tags":951,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[952,953,954],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":59,"name":59,"fn":956,"description":957,"org":958,"tags":959,"stars":20,"repoUrl":21,"updatedAt":963},"implement column filtering in TanStack Table","Filter columns with columnFilteringFeature, filteredRowModel, filterFns, filterMeta, nested-row direction, and manualFiltering. Load for accessor compatibility, controlled filter updaters, fuzzy metadata, or client\u002Fserver ownership.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[960,961,962],{"name":905,"slug":906,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:53.391632",{"slug":965,"name":965,"fn":966,"description":967,"org":968,"tags":969,"stars":20,"repoUrl":21,"updatedAt":973},"column-ordering","manage TanStack Table column ordering","Control TanStack Table v9 leaf columnOrder with stable IDs while accounting for pinning regions, visibility, and groupedColumnMode precedence. Load for drag-and-drop columns or rendered order that differs from state.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[970,971,972],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:26:03.37801",{"slug":975,"name":975,"fn":976,"description":977,"org":978,"tags":979,"stars":20,"repoUrl":21,"updatedAt":986},"column-pinning","configure column pinning in TanStack Table","Pin columns into logical start, center, and end regions with columnPinningFeature and renderer-owned sticky CSS. Load for RTL offsets, z-index, backgrounds, overflow, widths, gaps, or overlaps.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[980,983,984,985],{"name":981,"slug":982,"type":15},"CSS","css",{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:25:55.377366",{"slug":988,"name":988,"fn":989,"description":990,"org":991,"tags":992,"stars":20,"repoUrl":21,"updatedAt":996},"column-resizing","implement column resizing in TanStack Table","Wire columnResizingFeature, header.getResizeHandler, resize mode and direction, pointer or touch events, and performant CSS-variable updates. Load when resize state changes but widths do not, or large tables resize slowly.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[993,994,995],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:25:51.400011",{"slug":998,"name":998,"fn":999,"description":1000,"org":1001,"tags":1002,"stars":20,"repoUrl":21,"updatedAt":1007},"column-sizing","configure column sizing in TanStack Table","Use columnSizingFeature numeric size, minSize, maxSize, getSize, getStart, getAfter, and total-size APIs in table, grid, or flex CSS. Load for auto or percentage misconceptions and sizing\u002Fpinning layout mismatch.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1003,1004,1005,1006],{"name":981,"slug":982,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:25:48.703799",{"slug":1009,"name":1009,"fn":1010,"description":1011,"org":1012,"tags":1013,"stars":20,"repoUrl":21,"updatedAt":1017},"column-visibility","manage column visibility in TanStack Table","Hide columns with columnVisibilityFeature while rendering visibility-aware header, column, and cell collections. Load when hidden columns remain in the DOM, false-versus-absent state is confused, or enableHiding is misunderstood.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1014,1015,1016],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:25:47.367943",{"slug":57,"name":57,"fn":1019,"description":1020,"org":1021,"tags":1022,"stars":20,"repoUrl":21,"updatedAt":1026},"build data grids with TanStack Table","Use TanStack Table v9 as a headless data-grid state and row-processing engine. Load for first-table architecture, stable data and columns, row numbering with getDisplayIndex, semantic rendering, framework adapter choice, or deciding what Table owns versus the renderer.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1023,1024,1025],{"name":905,"slug":906,"type":15},{"name":18,"slug":19,"type":15},{"name":931,"slug":932,"type":15},"2026-07-30T05:25:52.366295",125,{"items":1029,"total":1073},[1030,1036,1042,1048,1055,1061,1067],{"slug":899,"name":899,"fn":900,"description":901,"org":1031,"tags":1032,"stars":20,"repoUrl":21,"updatedAt":909},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1033,1034,1035],{"name":905,"slug":906,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":911,"name":911,"fn":912,"description":913,"org":1037,"tags":1038,"stars":20,"repoUrl":21,"updatedAt":921},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1039,1040,1041],{"name":917,"slug":918,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":923,"name":923,"fn":924,"description":925,"org":1043,"tags":1044,"stars":20,"repoUrl":21,"updatedAt":933},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1045,1046,1047],{"name":905,"slug":906,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},{"slug":935,"name":935,"fn":936,"description":937,"org":1049,"tags":1050,"stars":20,"repoUrl":21,"updatedAt":948},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1051,1052,1053,1054],{"name":941,"slug":942,"type":15},{"name":18,"slug":19,"type":15},{"name":945,"slug":946,"type":15},{"name":9,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1056,"tags":1057,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1058,1059,1060],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":59,"name":59,"fn":956,"description":957,"org":1062,"tags":1063,"stars":20,"repoUrl":21,"updatedAt":963},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1064,1065,1066],{"name":905,"slug":906,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":965,"name":965,"fn":966,"description":967,"org":1068,"tags":1069,"stars":20,"repoUrl":21,"updatedAt":973},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1070,1071,1072],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},30]