[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-tanstack-tanstack-ai-memory-in-memory":3,"mdc-7r3zs-key":50,"related-org-tanstack-tanstack-ai-memory-in-memory":509,"related-repo-tanstack-tanstack-ai-memory-in-memory":653},{"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},"tanstack-ai-memory-in-memory","wire TanStack AI in-memory adapter","Use when wiring inMemory() from @tanstack\u002Fai-memory\u002Fin-memory — explains setup, options (embedder, extract, topK\u002FminScore), when to pick it (dev\u002Ftests\u002Fsingle-process demos), and what NOT to use it for (multi-process or persistent).",{"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,19],{"name":13,"slug":14,"type":15},"Memory","memory","tag",{"name":17,"slug":18,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},2884,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Fai","2026-07-26T06:08:53.657583",null,269,[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,8,41,42,43,44],"ai","ai-agents","ai-sdk","anthropic","chatbot","function-calling","gemini","generative-ai","llm","multimodal","openai","react","solidjs","streaming","svelte","tool-calling","typescript","typescript-sdk","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,8,41,42,43,44],"🤖 Type-safe, provider-agnostic TypeScript AI SDK for streaming chat, tool calling, agents, and multimodal apps across OpenAI, Anthropic, Gemini, React, Vue, Svelte, and Solid.","https:\u002F\u002Fgithub.com\u002FTanStack\u002Fai\u002Ftree\u002FHEAD\u002Fpackages\u002Fai-memory\u002Fskills\u002Ftanstack-ai-memory-in-memory","---\nname: tanstack-ai-memory-in-memory\ndescription: Use when wiring inMemory() from @tanstack\u002Fai-memory\u002Fin-memory — explains setup, options (embedder, extract, topK\u002FminScore), when to pick it (dev\u002Ftests\u002Fsingle-process demos), and what NOT to use it for (multi-process or persistent).\n---\n\n# In-Memory Memory Adapter\n\nZero-dependency `recall`\u002F`save` adapter backed by a `Map`. Records vanish on process\nrestart.\n\n## When to use it\n\n- Local development.\n- Vitest \u002F Playwright tests.\n- Single-process demos where users don't need persistence.\n\n## When NOT to use it\n\n- Production multi-process deployments — every worker has its own `Map`; users get\n  inconsistent memory.\n- Anything that needs survival across restarts.\n\nFor production, use `redis()` (see the `tanstack-ai-memory-redis` skill).\n\n## Setup\n\n```ts\nimport { memoryMiddleware } from '@tanstack\u002Fai-memory'\nimport { inMemory } from '@tanstack\u002Fai-memory\u002Fin-memory'\n\nconst memory = inMemory()\n\nmemoryMiddleware({ adapter: memory, scope })\n```\n\n## Options\n\n`inMemory(options?)` accepts:\n\n- `topK` (default 6), `minScore` (default 0.15), `kinds` — recall tuning.\n- `embedder: { embed(text): Promise\u003Cnumber[]> }` — enable semantic scoring (both\n  `recall` and `save` embed through it).\n- `extract(turn, scope)` — return derived facts to persist alongside the raw turn\n  (e.g. call an LLM to pull out preferences). Without it, `save` stores the raw\n  user\u002Fassistant messages and `recall` scores them lexically + by recency.\n- `render(hits)` — replace the built-in prompt renderer.\n\n## Capacity\n\nThe adapter scans every record in a scope per `recall`. Fine up to ~100k records; beyond\nthat, switch to Redis.\n",{"data":51,"body":52},{"name":4,"description":6},{"type":53,"children":54},"root",[55,64,95,102,122,128,148,169,175,377,383,394,485,491,503],{"type":56,"tag":57,"props":58,"children":60},"element","h1",{"id":59},"in-memory-memory-adapter",[61],{"type":62,"value":63},"text","In-Memory Memory Adapter",{"type":56,"tag":65,"props":66,"children":67},"p",{},[68,70,77,79,85,87,93],{"type":62,"value":69},"Zero-dependency ",{"type":56,"tag":71,"props":72,"children":74},"code",{"className":73},[],[75],{"type":62,"value":76},"recall",{"type":62,"value":78},"\u002F",{"type":56,"tag":71,"props":80,"children":82},{"className":81},[],[83],{"type":62,"value":84},"save",{"type":62,"value":86}," adapter backed by a ",{"type":56,"tag":71,"props":88,"children":90},{"className":89},[],[91],{"type":62,"value":92},"Map",{"type":62,"value":94},". Records vanish on process\nrestart.",{"type":56,"tag":96,"props":97,"children":99},"h2",{"id":98},"when-to-use-it",[100],{"type":62,"value":101},"When to use it",{"type":56,"tag":103,"props":104,"children":105},"ul",{},[106,112,117],{"type":56,"tag":107,"props":108,"children":109},"li",{},[110],{"type":62,"value":111},"Local development.",{"type":56,"tag":107,"props":113,"children":114},{},[115],{"type":62,"value":116},"Vitest \u002F Playwright tests.",{"type":56,"tag":107,"props":118,"children":119},{},[120],{"type":62,"value":121},"Single-process demos where users don't need persistence.",{"type":56,"tag":96,"props":123,"children":125},{"id":124},"when-not-to-use-it",[126],{"type":62,"value":127},"When NOT to use it",{"type":56,"tag":103,"props":129,"children":130},{},[131,143],{"type":56,"tag":107,"props":132,"children":133},{},[134,136,141],{"type":62,"value":135},"Production multi-process deployments — every worker has its own ",{"type":56,"tag":71,"props":137,"children":139},{"className":138},[],[140],{"type":62,"value":92},{"type":62,"value":142},"; users get\ninconsistent memory.",{"type":56,"tag":107,"props":144,"children":145},{},[146],{"type":62,"value":147},"Anything that needs survival across restarts.",{"type":56,"tag":65,"props":149,"children":150},{},[151,153,159,161,167],{"type":62,"value":152},"For production, use ",{"type":56,"tag":71,"props":154,"children":156},{"className":155},[],[157],{"type":62,"value":158},"redis()",{"type":62,"value":160}," (see the ",{"type":56,"tag":71,"props":162,"children":164},{"className":163},[],[165],{"type":62,"value":166},"tanstack-ai-memory-redis",{"type":62,"value":168}," skill).",{"type":56,"tag":96,"props":170,"children":172},{"id":171},"setup",[173],{"type":62,"value":174},"Setup",{"type":56,"tag":176,"props":177,"children":182},"pre",{"className":178,"code":179,"language":180,"meta":181,"style":181},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { memoryMiddleware } from '@tanstack\u002Fai-memory'\nimport { inMemory } from '@tanstack\u002Fai-memory\u002Fin-memory'\n\nconst memory = inMemory()\n\nmemoryMiddleware({ adapter: memory, scope })\n","ts","",[183],{"type":56,"tag":71,"props":184,"children":185},{"__ignoreMap":181},[186,236,274,284,314,322],{"type":56,"tag":187,"props":188,"children":191},"span",{"class":189,"line":190},"line",1,[192,198,204,210,215,220,225,231],{"type":56,"tag":187,"props":193,"children":195},{"style":194},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[196],{"type":62,"value":197},"import",{"type":56,"tag":187,"props":199,"children":201},{"style":200},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[202],{"type":62,"value":203}," {",{"type":56,"tag":187,"props":205,"children":207},{"style":206},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[208],{"type":62,"value":209}," memoryMiddleware",{"type":56,"tag":187,"props":211,"children":212},{"style":200},[213],{"type":62,"value":214}," }",{"type":56,"tag":187,"props":216,"children":217},{"style":194},[218],{"type":62,"value":219}," from",{"type":56,"tag":187,"props":221,"children":222},{"style":200},[223],{"type":62,"value":224}," '",{"type":56,"tag":187,"props":226,"children":228},{"style":227},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[229],{"type":62,"value":230},"@tanstack\u002Fai-memory",{"type":56,"tag":187,"props":232,"children":233},{"style":200},[234],{"type":62,"value":235},"'\n",{"type":56,"tag":187,"props":237,"children":239},{"class":189,"line":238},2,[240,244,248,253,257,261,265,270],{"type":56,"tag":187,"props":241,"children":242},{"style":194},[243],{"type":62,"value":197},{"type":56,"tag":187,"props":245,"children":246},{"style":200},[247],{"type":62,"value":203},{"type":56,"tag":187,"props":249,"children":250},{"style":206},[251],{"type":62,"value":252}," inMemory",{"type":56,"tag":187,"props":254,"children":255},{"style":200},[256],{"type":62,"value":214},{"type":56,"tag":187,"props":258,"children":259},{"style":194},[260],{"type":62,"value":219},{"type":56,"tag":187,"props":262,"children":263},{"style":200},[264],{"type":62,"value":224},{"type":56,"tag":187,"props":266,"children":267},{"style":227},[268],{"type":62,"value":269},"@tanstack\u002Fai-memory\u002Fin-memory",{"type":56,"tag":187,"props":271,"children":272},{"style":200},[273],{"type":62,"value":235},{"type":56,"tag":187,"props":275,"children":277},{"class":189,"line":276},3,[278],{"type":56,"tag":187,"props":279,"children":281},{"emptyLinePlaceholder":280},true,[282],{"type":62,"value":283},"\n",{"type":56,"tag":187,"props":285,"children":287},{"class":189,"line":286},4,[288,294,299,304,309],{"type":56,"tag":187,"props":289,"children":291},{"style":290},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[292],{"type":62,"value":293},"const",{"type":56,"tag":187,"props":295,"children":296},{"style":206},[297],{"type":62,"value":298}," memory ",{"type":56,"tag":187,"props":300,"children":301},{"style":200},[302],{"type":62,"value":303},"=",{"type":56,"tag":187,"props":305,"children":307},{"style":306},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[308],{"type":62,"value":252},{"type":56,"tag":187,"props":310,"children":311},{"style":206},[312],{"type":62,"value":313},"()\n",{"type":56,"tag":187,"props":315,"children":317},{"class":189,"line":316},5,[318],{"type":56,"tag":187,"props":319,"children":320},{"emptyLinePlaceholder":280},[321],{"type":62,"value":283},{"type":56,"tag":187,"props":323,"children":325},{"class":189,"line":324},6,[326,331,336,341,347,352,357,362,367,372],{"type":56,"tag":187,"props":327,"children":328},{"style":306},[329],{"type":62,"value":330},"memoryMiddleware",{"type":56,"tag":187,"props":332,"children":333},{"style":206},[334],{"type":62,"value":335},"(",{"type":56,"tag":187,"props":337,"children":338},{"style":200},[339],{"type":62,"value":340},"{",{"type":56,"tag":187,"props":342,"children":344},{"style":343},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[345],{"type":62,"value":346}," adapter",{"type":56,"tag":187,"props":348,"children":349},{"style":200},[350],{"type":62,"value":351},":",{"type":56,"tag":187,"props":353,"children":354},{"style":206},[355],{"type":62,"value":356}," memory",{"type":56,"tag":187,"props":358,"children":359},{"style":200},[360],{"type":62,"value":361},",",{"type":56,"tag":187,"props":363,"children":364},{"style":206},[365],{"type":62,"value":366}," scope ",{"type":56,"tag":187,"props":368,"children":369},{"style":200},[370],{"type":62,"value":371},"}",{"type":56,"tag":187,"props":373,"children":374},{"style":206},[375],{"type":62,"value":376},")\n",{"type":56,"tag":96,"props":378,"children":380},{"id":379},"options",[381],{"type":62,"value":382},"Options",{"type":56,"tag":65,"props":384,"children":385},{},[386,392],{"type":56,"tag":71,"props":387,"children":389},{"className":388},[],[390],{"type":62,"value":391},"inMemory(options?)",{"type":62,"value":393}," accepts:",{"type":56,"tag":103,"props":395,"children":396},{},[397,424,449,474],{"type":56,"tag":107,"props":398,"children":399},{},[400,406,408,414,416,422],{"type":56,"tag":71,"props":401,"children":403},{"className":402},[],[404],{"type":62,"value":405},"topK",{"type":62,"value":407}," (default 6), ",{"type":56,"tag":71,"props":409,"children":411},{"className":410},[],[412],{"type":62,"value":413},"minScore",{"type":62,"value":415}," (default 0.15), ",{"type":56,"tag":71,"props":417,"children":419},{"className":418},[],[420],{"type":62,"value":421},"kinds",{"type":62,"value":423}," — recall tuning.",{"type":56,"tag":107,"props":425,"children":426},{},[427,433,435,440,442,447],{"type":56,"tag":71,"props":428,"children":430},{"className":429},[],[431],{"type":62,"value":432},"embedder: { embed(text): Promise\u003Cnumber[]> }",{"type":62,"value":434}," — enable semantic scoring (both\n",{"type":56,"tag":71,"props":436,"children":438},{"className":437},[],[439],{"type":62,"value":76},{"type":62,"value":441}," and ",{"type":56,"tag":71,"props":443,"children":445},{"className":444},[],[446],{"type":62,"value":84},{"type":62,"value":448}," embed through it).",{"type":56,"tag":107,"props":450,"children":451},{},[452,458,460,465,467,472],{"type":56,"tag":71,"props":453,"children":455},{"className":454},[],[456],{"type":62,"value":457},"extract(turn, scope)",{"type":62,"value":459}," — return derived facts to persist alongside the raw turn\n(e.g. call an LLM to pull out preferences). Without it, ",{"type":56,"tag":71,"props":461,"children":463},{"className":462},[],[464],{"type":62,"value":84},{"type":62,"value":466}," stores the raw\nuser\u002Fassistant messages and ",{"type":56,"tag":71,"props":468,"children":470},{"className":469},[],[471],{"type":62,"value":76},{"type":62,"value":473}," scores them lexically + by recency.",{"type":56,"tag":107,"props":475,"children":476},{},[477,483],{"type":56,"tag":71,"props":478,"children":480},{"className":479},[],[481],{"type":62,"value":482},"render(hits)",{"type":62,"value":484}," — replace the built-in prompt renderer.",{"type":56,"tag":96,"props":486,"children":488},{"id":487},"capacity",[489],{"type":62,"value":490},"Capacity",{"type":56,"tag":65,"props":492,"children":493},{},[494,496,501],{"type":62,"value":495},"The adapter scans every record in a scope per ",{"type":56,"tag":71,"props":497,"children":499},{"className":498},[],[500],{"type":62,"value":76},{"type":62,"value":502},". Fine up to ~100k records; beyond\nthat, switch to Redis.",{"type":56,"tag":504,"props":505,"children":506},"style",{},[507],{"type":62,"value":508},"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":510,"total":652},[511,527,539,551,566,578,588,598,611,621,632,642],{"slug":512,"name":512,"fn":513,"description":514,"org":515,"tags":516,"stars":524,"repoUrl":525,"updatedAt":526},"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},[517,520,523],{"name":518,"slug":519,"type":15},"Data Analysis","data-analysis",{"name":521,"slug":522,"type":15},"Frontend","frontend",{"name":9,"slug":8,"type":15},28175,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Ftable","2026-07-30T05:25:59.429787",{"slug":528,"name":528,"fn":529,"description":530,"org":531,"tags":532,"stars":524,"repoUrl":525,"updatedAt":538},"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},[533,536,537],{"name":534,"slug":535,"type":15},"Debugging","debugging",{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:26:05.418735",{"slug":540,"name":540,"fn":541,"description":542,"org":543,"tags":544,"stars":524,"repoUrl":525,"updatedAt":550},"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},[545,546,547],{"name":518,"slug":519,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"UI Components","ui-components","2026-07-30T05:25:38.403427",{"slug":552,"name":552,"fn":553,"description":554,"org":555,"tags":556,"stars":524,"repoUrl":525,"updatedAt":565},"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},[557,560,561,564],{"name":558,"slug":559,"type":15},"Data Pipeline","data-pipeline",{"name":521,"slug":522,"type":15},{"name":562,"slug":563,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:25:45.400104",{"slug":567,"name":567,"fn":568,"description":569,"org":570,"tags":571,"stars":524,"repoUrl":525,"updatedAt":577},"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},[572,575,576],{"name":573,"slug":574,"type":15},"Data Visualization","data-visualization",{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:41.397257",{"slug":579,"name":579,"fn":580,"description":581,"org":582,"tags":583,"stars":524,"repoUrl":525,"updatedAt":587},"column-filtering","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},[584,585,586],{"name":518,"slug":519,"type":15},{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:53.391632",{"slug":589,"name":589,"fn":590,"description":591,"org":592,"tags":593,"stars":524,"repoUrl":525,"updatedAt":597},"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},[594,595,596],{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:26:03.37801",{"slug":599,"name":599,"fn":600,"description":601,"org":602,"tags":603,"stars":524,"repoUrl":525,"updatedAt":610},"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},[604,607,608,609],{"name":605,"slug":606,"type":15},"CSS","css",{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:25:55.377366",{"slug":612,"name":612,"fn":613,"description":614,"org":615,"tags":616,"stars":524,"repoUrl":525,"updatedAt":620},"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},[617,618,619],{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:25:51.400011",{"slug":622,"name":622,"fn":623,"description":624,"org":625,"tags":626,"stars":524,"repoUrl":525,"updatedAt":631},"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},[627,628,629,630],{"name":605,"slug":606,"type":15},{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:25:48.703799",{"slug":633,"name":633,"fn":634,"description":635,"org":636,"tags":637,"stars":524,"repoUrl":525,"updatedAt":641},"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},[638,639,640],{"name":521,"slug":522,"type":15},{"name":9,"slug":8,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:25:47.367943",{"slug":643,"name":643,"fn":644,"description":645,"org":646,"tags":647,"stars":524,"repoUrl":525,"updatedAt":651},"core","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},[648,649,650],{"name":518,"slug":519,"type":15},{"name":521,"slug":522,"type":15},{"name":548,"slug":549,"type":15},"2026-07-30T05:25:52.366295",125,{"items":654,"total":754},[655,673,686,701,714,726,740],{"slug":656,"name":656,"fn":657,"description":658,"org":659,"tags":660,"stars":20,"repoUrl":21,"updatedAt":672},"ai-code-mode","execute sandboxed TypeScript code with LLMs","LLM-generated TypeScript execution in sandboxed environments: createCodeModeTool() with isolate drivers (createNodeIsolateDriver, createQuickJSIsolateDriver, createCloudflareIsolateDriver), codeModeWithSkills() for persistent skill libraries, trust strategies, skill storage (FileSystem, LocalStorage, InMemory, Mongo), client-side execution progress via code_mode:* custom events in useChat.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[661,663,666,669,670],{"name":662,"slug":28,"type":15},"AI SDK",{"name":664,"slug":665,"type":15},"Code Execution","code-execution",{"name":667,"slug":668,"type":15},"Sandboxing","sandboxing",{"name":9,"slug":8,"type":15},{"name":671,"slug":42,"type":15},"TypeScript","2026-07-16T06:04:13.597905",{"slug":674,"name":674,"fn":675,"description":676,"org":677,"tags":678,"stars":20,"repoUrl":21,"updatedAt":685},"ai-core","configure TanStack AI agent features","Entry point for TanStack AI skills. Routes to chat-experience, tool-calling, media-generation, structured-outputs, adapter-configuration, ag-ui-protocol, middleware, locks, custom-backend-integration, and debug-logging, plus the skills shipped by companion packages (@tanstack\u002Fai-persistence, @tanstack\u002Fai-code-mode). Use chat() not streamText(), openaiText() not createOpenAI(), toServerSentEventsResponse() not manual SSE, middleware hooks not onEnd callbacks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[679,680,682],{"name":17,"slug":18,"type":15},{"name":681,"slug":26,"type":15},"AI",{"name":683,"slug":684,"type":15},"Middleware","middleware","2026-07-30T05:26:10.404565",{"slug":687,"name":688,"fn":689,"description":690,"org":691,"tags":692,"stars":20,"repoUrl":21,"updatedAt":700},"ai-coreadapter-configuration","ai-core\u002Fadapter-configuration","configure AI provider adapters","Provider adapter selection and configuration: openaiText, anthropicText, geminiText, ollamaText, grokText, groqText, openRouterText, bedrockText, openaiCompatible. Per-model type safety with modelOptions, reasoning\u002Fthinking configuration, runtime adapter switching, extendAdapter() for custom models, createModel(). Generic OpenAI-compatible providers (DeepSeek, Together, Fireworks, etc.) via openaiCompatible({ baseURL, apiKey, models }) from @tanstack\u002Fai-openai\u002Fcompatible. API key env vars: OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY\u002FGEMINI_API_KEY, XAI_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY, OLLAMA_HOST, BEDROCK_API_KEY (or AWS_BEARER_TOKEN_BEDROCK).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[693,694,697,699],{"name":662,"slug":28,"type":15},{"name":695,"slug":696,"type":15},"Configuration","configuration",{"name":698,"slug":34,"type":15},"LLM",{"name":9,"slug":8,"type":15},"2026-07-16T06:04:17.82075",{"slug":702,"name":703,"fn":704,"description":705,"org":706,"tags":707,"stars":20,"repoUrl":21,"updatedAt":713},"ai-coreag-ui-protocol","ai-core\u002Fag-ui-protocol","implement TanStack AI streaming protocol","Server-side AG-UI streaming protocol implementation: StreamChunk event types (RUN_STARTED, TEXT_MESSAGE_START\u002FCONTENT\u002FEND, TOOL_CALL_START\u002FARGS\u002FEND, RUN_FINISHED, RUN_ERROR, STEP_STARTED\u002FSTEP_FINISHED, STATE_SNAPSHOT\u002FDELTA, CUSTOM), toServerSentEventsStream() for SSE format, toHttpStream() for NDJSON format. For backends serving AG-UI events without client packages.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[708,711,712],{"name":709,"slug":710,"type":15},"API Development","api-development",{"name":698,"slug":34,"type":15},{"name":9,"slug":8,"type":15},"2026-07-16T06:04:10.093367",{"slug":715,"name":716,"fn":717,"description":718,"org":719,"tags":720,"stars":20,"repoUrl":21,"updatedAt":725},"ai-corechat-experience","ai-core\u002Fchat-experience","implement chat experiences with TanStack AI","End-to-end chat implementation: server endpoint with chat() and toServerSentEventsResponse(), client-side useChat hook with fetchServerSentEvents(), message rendering with UIMessage parts, multimodal content, thinking\u002Freasoning display. Covers streaming states, connection adapters, and message format conversions. NOT Vercel AI SDK — uses chat() not streamText().\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[721,722,723,724],{"name":709,"slug":710,"type":15},{"name":521,"slug":522,"type":15},{"name":698,"slug":34,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:26:11.505241",{"slug":727,"name":728,"fn":729,"description":730,"org":731,"tags":732,"stars":20,"repoUrl":21,"updatedAt":739},"ai-coreclient-persistence","ai-core\u002Fclient-persistence","implement browser chat persistence for TanStack AI","Browser chat persistence on useChat \u002F ChatClient: localStoragePersistence, sessionStoragePersistence, indexedDBPersistence. Client-authoritative (adapter, full transcript) vs server-authoritative (persistence: true, no client cache). Reload restore, pending interrupts, mid-stream rejoin with delivery durability. Use for SPA reload durability — NOT server history alone. No extra package: the adapters ship in the framework packages.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[733,734,735,738],{"name":681,"slug":26,"type":15},{"name":521,"slug":522,"type":15},{"name":736,"slug":737,"type":15},"Persistence","persistence",{"name":9,"slug":8,"type":15},"2026-07-30T05:53:35.503176",{"slug":741,"name":742,"fn":743,"description":744,"org":745,"tags":746,"stars":20,"repoUrl":21,"updatedAt":753},"ai-corecustom-backend-integration","ai-core\u002Fcustom-backend-integration","integrate custom backends with TanStack AI","Connect useChat to a non-TanStack-AI backend through custom connection adapters. ConnectConnectionAdapter (single async iterable) vs SubscribeConnectionAdapter (separate subscribe\u002Fsend). Customize fetchServerSentEvents() and fetchHttpStream() with auth headers, custom URLs, and request options. Import from framework package, not @tanstack\u002Fai-client.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[747,748,749,752],{"name":681,"slug":26,"type":15},{"name":709,"slug":710,"type":15},{"name":750,"slug":751,"type":15},"Backend","backend",{"name":9,"slug":8,"type":15},"2026-07-17T06:06:39.855351",27]