[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-tanstack-maintain-custom-addons-dev-watch":3,"mdc--d11k4r-key":34,"related-org-tanstack-maintain-custom-addons-dev-watch":696,"related-repo-tanstack-maintain-custom-addons-dev-watch":840},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"maintain-custom-addons-dev-watch","develop and iterate TanStack custom add-ons","Build and iterate custom add-ons\u002Ftemplates with tanstack add-on init, add-on compile, add-on dev, and tanstack create --dev-watch, including sync loop preconditions, watch-path validation, and project metadata constraints.\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,19,22],{"name":13,"slug":14,"type":15},"CLI","cli","tag",{"name":17,"slug":18,"type":15},"Templates","templates",{"name":20,"slug":21,"type":15},"Engineering","engineering",{"name":9,"slug":8,"type":15},1281,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Fcli","2026-07-20T05:59:11.938087",null,180,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"The official TanStack CLI - Project Scaffolding, MCP Server, Agent Skills Installation, etc","https:\u002F\u002Fgithub.com\u002FTanStack\u002Fcli\u002Ftree\u002FHEAD\u002Fpackages\u002Fcli\u002Fskills\u002Fmaintain-custom-addons-dev-watch","---\nname: maintain-custom-addons-dev-watch\ndescription: >\n  Build and iterate custom add-ons\u002Ftemplates with tanstack add-on init,\n  add-on compile, add-on dev, and tanstack create --dev-watch, including sync\n  loop preconditions, watch-path validation, and project metadata constraints.\nmetadata:\n  type: lifecycle\n  library: tanstack-cli\n  library_version: \"0.62.1\"\nrequires:\n  - add-addons-existing-app\n---\n\n# Maintain Custom Add-ons In Dev Watch\n\nUse this skill for local add-on authoring workflows where you continuously compile and sync package output into a target app.\n\n## Setup\n\n```bash\nnpx @tanstack\u002Fcli add-on init\nnpx @tanstack\u002Fcli add-on compile\n```\n\n## Core Patterns\n\n### Run add-on dev loop while editing source\n\n```bash\nnpx @tanstack\u002Fcli add-on dev\n```\n\n### Sync watched framework directory into a sandbox target app\n\n```bash\n# --dev-watch is a flag on `create`, not on `dev`\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fpath\u002Fto\u002Fframework-dir\n```\n\n### Re-run compile before apply when changing metadata\n\n```bash\nnpx @tanstack\u002Fcli add-on compile\nnpx @tanstack\u002Fcli add my-custom-addon\n```\n\n## Common Mistakes\n\n### HIGH Use --dev-watch with --no-install\n\nWrong:\n```bash\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmy-addon-package --no-install\n```\n\nCorrect:\n```bash\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmy-addon-package\n```\n\nDev-watch rejects `--no-install`, so automated loops fail before any sync work starts.\n\nSource: packages\u002Fcli\u002Fsrc\u002Fdev-watch.ts:112\n\n### HIGH Start dev-watch without valid framework directory\n\nWrong:\n```bash\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmissing-or-invalid-dir\n```\n\nCorrect:\n```bash\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fvalid-framework-dir\n```\n\nWatch setup validates that the path exists, is a directory, and contains at least one of `add-ons\u002F`, `assets\u002F`, or `framework.json`. Invalid targets fail before file syncing begins.\n\nSource: packages\u002Fcli\u002Fsrc\u002Fcommand-line.ts:599\n\n### CRITICAL Author add-on from code-router project\n\nWrong:\n```bash\nnpx @tanstack\u002Fcli add-on init\n```\n\nCorrect:\n```bash\n# Run add-on init from a file-router project\nnpx @tanstack\u002Fcli add-on init\n```\n\nCustom add-on authoring expects file-router mode and exits when run from incompatible project modes.\n\nSource: packages\u002Fcreate\u002Fsrc\u002Fcustom-add-ons\u002Fadd-on.ts\n\n### HIGH Run add-on workflows without scaffold metadata\n\nWrong:\n```bash\nnpx @tanstack\u002Fcli add-on dev\n```\n\nCorrect:\n```bash\n# Run in a project scaffolded by TanStack CLI (contains .cta.json), then:\nnpx @tanstack\u002Fcli add-on dev\n```\n\nCustom add-on flows rely on persisted scaffold options, so missing metadata blocks initialization and update paths.\n\nSource: packages\u002Fcreate\u002Fsrc\u002Fcustom-add-ons\u002Fshared.ts:158\n\n### HIGH Tension: Backwards support vs deterministic automation\n\nThis domain's patterns conflict with add-addons-existing-app. Tooling assumes reusable automation, but hidden metadata preconditions from legacy support make add-on loops non-portable across repositories.\n\nSee also: add-addons-existing-app\u002FSKILL.md § Common Mistakes\n",{"data":35,"body":42},{"name":4,"description":6,"metadata":36,"requires":40},{"type":37,"library":38,"library_version":39},"lifecycle","tanstack-cli","0.62.1",[41],"add-addons-existing-app",{"type":43,"children":44},"root",[45,54,60,67,128,134,141,168,174,221,227,274,280,286,291,331,336,371,384,389,395,399,434,438,473,502,507,513,517,543,547,581,586,591,597,601,626,630,664,669,674,680,685,690],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"maintain-custom-add-ons-in-dev-watch",[51],{"type":52,"value":53},"text","Maintain Custom Add-ons In Dev Watch",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Use this skill for local add-on authoring workflows where you continuously compile and sync package output into a target app.",{"type":46,"tag":61,"props":62,"children":64},"h2",{"id":63},"setup",[65],{"type":52,"value":66},"Setup",{"type":46,"tag":68,"props":69,"children":74},"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx @tanstack\u002Fcli add-on init\nnpx @tanstack\u002Fcli add-on compile\n","bash","",[75],{"type":46,"tag":76,"props":77,"children":78},"code",{"__ignoreMap":73},[79,107],{"type":46,"tag":80,"props":81,"children":84},"span",{"class":82,"line":83},"line",1,[85,91,97,102],{"type":46,"tag":80,"props":86,"children":88},{"style":87},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[89],{"type":52,"value":90},"npx",{"type":46,"tag":80,"props":92,"children":94},{"style":93},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[95],{"type":52,"value":96}," @tanstack\u002Fcli",{"type":46,"tag":80,"props":98,"children":99},{"style":93},[100],{"type":52,"value":101}," add-on",{"type":46,"tag":80,"props":103,"children":104},{"style":93},[105],{"type":52,"value":106}," init\n",{"type":46,"tag":80,"props":108,"children":110},{"class":82,"line":109},2,[111,115,119,123],{"type":46,"tag":80,"props":112,"children":113},{"style":87},[114],{"type":52,"value":90},{"type":46,"tag":80,"props":116,"children":117},{"style":93},[118],{"type":52,"value":96},{"type":46,"tag":80,"props":120,"children":121},{"style":93},[122],{"type":52,"value":101},{"type":46,"tag":80,"props":124,"children":125},{"style":93},[126],{"type":52,"value":127}," compile\n",{"type":46,"tag":61,"props":129,"children":131},{"id":130},"core-patterns",[132],{"type":52,"value":133},"Core Patterns",{"type":46,"tag":135,"props":136,"children":138},"h3",{"id":137},"run-add-on-dev-loop-while-editing-source",[139],{"type":52,"value":140},"Run add-on dev loop while editing source",{"type":46,"tag":68,"props":142,"children":144},{"className":70,"code":143,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli add-on dev\n",[145],{"type":46,"tag":76,"props":146,"children":147},{"__ignoreMap":73},[148],{"type":46,"tag":80,"props":149,"children":150},{"class":82,"line":83},[151,155,159,163],{"type":46,"tag":80,"props":152,"children":153},{"style":87},[154],{"type":52,"value":90},{"type":46,"tag":80,"props":156,"children":157},{"style":93},[158],{"type":52,"value":96},{"type":46,"tag":80,"props":160,"children":161},{"style":93},[162],{"type":52,"value":101},{"type":46,"tag":80,"props":164,"children":165},{"style":93},[166],{"type":52,"value":167}," dev\n",{"type":46,"tag":135,"props":169,"children":171},{"id":170},"sync-watched-framework-directory-into-a-sandbox-target-app",[172],{"type":52,"value":173},"Sync watched framework directory into a sandbox target app",{"type":46,"tag":68,"props":175,"children":177},{"className":70,"code":176,"language":72,"meta":73,"style":73},"# --dev-watch is a flag on `create`, not on `dev`\nnpx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fpath\u002Fto\u002Fframework-dir\n",[178],{"type":46,"tag":76,"props":179,"children":180},{"__ignoreMap":73},[181,190],{"type":46,"tag":80,"props":182,"children":183},{"class":82,"line":83},[184],{"type":46,"tag":80,"props":185,"children":187},{"style":186},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[188],{"type":52,"value":189},"# --dev-watch is a flag on `create`, not on `dev`\n",{"type":46,"tag":80,"props":191,"children":192},{"class":82,"line":109},[193,197,201,206,211,216],{"type":46,"tag":80,"props":194,"children":195},{"style":87},[196],{"type":52,"value":90},{"type":46,"tag":80,"props":198,"children":199},{"style":93},[200],{"type":52,"value":96},{"type":46,"tag":80,"props":202,"children":203},{"style":93},[204],{"type":52,"value":205}," create",{"type":46,"tag":80,"props":207,"children":208},{"style":93},[209],{"type":52,"value":210}," my-sandbox",{"type":46,"tag":80,"props":212,"children":213},{"style":93},[214],{"type":52,"value":215}," --dev-watch",{"type":46,"tag":80,"props":217,"children":218},{"style":93},[219],{"type":52,"value":220}," ..\u002Fpath\u002Fto\u002Fframework-dir\n",{"type":46,"tag":135,"props":222,"children":224},{"id":223},"re-run-compile-before-apply-when-changing-metadata",[225],{"type":52,"value":226},"Re-run compile before apply when changing metadata",{"type":46,"tag":68,"props":228,"children":230},{"className":70,"code":229,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli add-on compile\nnpx @tanstack\u002Fcli add my-custom-addon\n",[231],{"type":46,"tag":76,"props":232,"children":233},{"__ignoreMap":73},[234,253],{"type":46,"tag":80,"props":235,"children":236},{"class":82,"line":83},[237,241,245,249],{"type":46,"tag":80,"props":238,"children":239},{"style":87},[240],{"type":52,"value":90},{"type":46,"tag":80,"props":242,"children":243},{"style":93},[244],{"type":52,"value":96},{"type":46,"tag":80,"props":246,"children":247},{"style":93},[248],{"type":52,"value":101},{"type":46,"tag":80,"props":250,"children":251},{"style":93},[252],{"type":52,"value":127},{"type":46,"tag":80,"props":254,"children":255},{"class":82,"line":109},[256,260,264,269],{"type":46,"tag":80,"props":257,"children":258},{"style":87},[259],{"type":52,"value":90},{"type":46,"tag":80,"props":261,"children":262},{"style":93},[263],{"type":52,"value":96},{"type":46,"tag":80,"props":265,"children":266},{"style":93},[267],{"type":52,"value":268}," add",{"type":46,"tag":80,"props":270,"children":271},{"style":93},[272],{"type":52,"value":273}," my-custom-addon\n",{"type":46,"tag":61,"props":275,"children":277},{"id":276},"common-mistakes",[278],{"type":52,"value":279},"Common Mistakes",{"type":46,"tag":135,"props":281,"children":283},{"id":282},"high-use-dev-watch-with-no-install",[284],{"type":52,"value":285},"HIGH Use --dev-watch with --no-install",{"type":46,"tag":55,"props":287,"children":288},{},[289],{"type":52,"value":290},"Wrong:",{"type":46,"tag":68,"props":292,"children":294},{"className":70,"code":293,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmy-addon-package --no-install\n",[295],{"type":46,"tag":76,"props":296,"children":297},{"__ignoreMap":73},[298],{"type":46,"tag":80,"props":299,"children":300},{"class":82,"line":83},[301,305,309,313,317,321,326],{"type":46,"tag":80,"props":302,"children":303},{"style":87},[304],{"type":52,"value":90},{"type":46,"tag":80,"props":306,"children":307},{"style":93},[308],{"type":52,"value":96},{"type":46,"tag":80,"props":310,"children":311},{"style":93},[312],{"type":52,"value":205},{"type":46,"tag":80,"props":314,"children":315},{"style":93},[316],{"type":52,"value":210},{"type":46,"tag":80,"props":318,"children":319},{"style":93},[320],{"type":52,"value":215},{"type":46,"tag":80,"props":322,"children":323},{"style":93},[324],{"type":52,"value":325}," ..\u002Fmy-addon-package",{"type":46,"tag":80,"props":327,"children":328},{"style":93},[329],{"type":52,"value":330}," --no-install\n",{"type":46,"tag":55,"props":332,"children":333},{},[334],{"type":52,"value":335},"Correct:",{"type":46,"tag":68,"props":337,"children":339},{"className":70,"code":338,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmy-addon-package\n",[340],{"type":46,"tag":76,"props":341,"children":342},{"__ignoreMap":73},[343],{"type":46,"tag":80,"props":344,"children":345},{"class":82,"line":83},[346,350,354,358,362,366],{"type":46,"tag":80,"props":347,"children":348},{"style":87},[349],{"type":52,"value":90},{"type":46,"tag":80,"props":351,"children":352},{"style":93},[353],{"type":52,"value":96},{"type":46,"tag":80,"props":355,"children":356},{"style":93},[357],{"type":52,"value":205},{"type":46,"tag":80,"props":359,"children":360},{"style":93},[361],{"type":52,"value":210},{"type":46,"tag":80,"props":363,"children":364},{"style":93},[365],{"type":52,"value":215},{"type":46,"tag":80,"props":367,"children":368},{"style":93},[369],{"type":52,"value":370}," ..\u002Fmy-addon-package\n",{"type":46,"tag":55,"props":372,"children":373},{},[374,376,382],{"type":52,"value":375},"Dev-watch rejects ",{"type":46,"tag":76,"props":377,"children":379},{"className":378},[],[380],{"type":52,"value":381},"--no-install",{"type":52,"value":383},", so automated loops fail before any sync work starts.",{"type":46,"tag":55,"props":385,"children":386},{},[387],{"type":52,"value":388},"Source: packages\u002Fcli\u002Fsrc\u002Fdev-watch.ts:112",{"type":46,"tag":135,"props":390,"children":392},{"id":391},"high-start-dev-watch-without-valid-framework-directory",[393],{"type":52,"value":394},"HIGH Start dev-watch without valid framework directory",{"type":46,"tag":55,"props":396,"children":397},{},[398],{"type":52,"value":290},{"type":46,"tag":68,"props":400,"children":402},{"className":70,"code":401,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fmissing-or-invalid-dir\n",[403],{"type":46,"tag":76,"props":404,"children":405},{"__ignoreMap":73},[406],{"type":46,"tag":80,"props":407,"children":408},{"class":82,"line":83},[409,413,417,421,425,429],{"type":46,"tag":80,"props":410,"children":411},{"style":87},[412],{"type":52,"value":90},{"type":46,"tag":80,"props":414,"children":415},{"style":93},[416],{"type":52,"value":96},{"type":46,"tag":80,"props":418,"children":419},{"style":93},[420],{"type":52,"value":205},{"type":46,"tag":80,"props":422,"children":423},{"style":93},[424],{"type":52,"value":210},{"type":46,"tag":80,"props":426,"children":427},{"style":93},[428],{"type":52,"value":215},{"type":46,"tag":80,"props":430,"children":431},{"style":93},[432],{"type":52,"value":433}," ..\u002Fmissing-or-invalid-dir\n",{"type":46,"tag":55,"props":435,"children":436},{},[437],{"type":52,"value":335},{"type":46,"tag":68,"props":439,"children":441},{"className":70,"code":440,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli create my-sandbox --dev-watch ..\u002Fvalid-framework-dir\n",[442],{"type":46,"tag":76,"props":443,"children":444},{"__ignoreMap":73},[445],{"type":46,"tag":80,"props":446,"children":447},{"class":82,"line":83},[448,452,456,460,464,468],{"type":46,"tag":80,"props":449,"children":450},{"style":87},[451],{"type":52,"value":90},{"type":46,"tag":80,"props":453,"children":454},{"style":93},[455],{"type":52,"value":96},{"type":46,"tag":80,"props":457,"children":458},{"style":93},[459],{"type":52,"value":205},{"type":46,"tag":80,"props":461,"children":462},{"style":93},[463],{"type":52,"value":210},{"type":46,"tag":80,"props":465,"children":466},{"style":93},[467],{"type":52,"value":215},{"type":46,"tag":80,"props":469,"children":470},{"style":93},[471],{"type":52,"value":472}," ..\u002Fvalid-framework-dir\n",{"type":46,"tag":55,"props":474,"children":475},{},[476,478,484,486,492,494,500],{"type":52,"value":477},"Watch setup validates that the path exists, is a directory, and contains at least one of ",{"type":46,"tag":76,"props":479,"children":481},{"className":480},[],[482],{"type":52,"value":483},"add-ons\u002F",{"type":52,"value":485},", ",{"type":46,"tag":76,"props":487,"children":489},{"className":488},[],[490],{"type":52,"value":491},"assets\u002F",{"type":52,"value":493},", or ",{"type":46,"tag":76,"props":495,"children":497},{"className":496},[],[498],{"type":52,"value":499},"framework.json",{"type":52,"value":501},". Invalid targets fail before file syncing begins.",{"type":46,"tag":55,"props":503,"children":504},{},[505],{"type":52,"value":506},"Source: packages\u002Fcli\u002Fsrc\u002Fcommand-line.ts:599",{"type":46,"tag":135,"props":508,"children":510},{"id":509},"critical-author-add-on-from-code-router-project",[511],{"type":52,"value":512},"CRITICAL Author add-on from code-router project",{"type":46,"tag":55,"props":514,"children":515},{},[516],{"type":52,"value":290},{"type":46,"tag":68,"props":518,"children":520},{"className":70,"code":519,"language":72,"meta":73,"style":73},"npx @tanstack\u002Fcli add-on init\n",[521],{"type":46,"tag":76,"props":522,"children":523},{"__ignoreMap":73},[524],{"type":46,"tag":80,"props":525,"children":526},{"class":82,"line":83},[527,531,535,539],{"type":46,"tag":80,"props":528,"children":529},{"style":87},[530],{"type":52,"value":90},{"type":46,"tag":80,"props":532,"children":533},{"style":93},[534],{"type":52,"value":96},{"type":46,"tag":80,"props":536,"children":537},{"style":93},[538],{"type":52,"value":101},{"type":46,"tag":80,"props":540,"children":541},{"style":93},[542],{"type":52,"value":106},{"type":46,"tag":55,"props":544,"children":545},{},[546],{"type":52,"value":335},{"type":46,"tag":68,"props":548,"children":550},{"className":70,"code":549,"language":72,"meta":73,"style":73},"# Run add-on init from a file-router project\nnpx @tanstack\u002Fcli add-on init\n",[551],{"type":46,"tag":76,"props":552,"children":553},{"__ignoreMap":73},[554,562],{"type":46,"tag":80,"props":555,"children":556},{"class":82,"line":83},[557],{"type":46,"tag":80,"props":558,"children":559},{"style":186},[560],{"type":52,"value":561},"# Run add-on init from a file-router project\n",{"type":46,"tag":80,"props":563,"children":564},{"class":82,"line":109},[565,569,573,577],{"type":46,"tag":80,"props":566,"children":567},{"style":87},[568],{"type":52,"value":90},{"type":46,"tag":80,"props":570,"children":571},{"style":93},[572],{"type":52,"value":96},{"type":46,"tag":80,"props":574,"children":575},{"style":93},[576],{"type":52,"value":101},{"type":46,"tag":80,"props":578,"children":579},{"style":93},[580],{"type":52,"value":106},{"type":46,"tag":55,"props":582,"children":583},{},[584],{"type":52,"value":585},"Custom add-on authoring expects file-router mode and exits when run from incompatible project modes.",{"type":46,"tag":55,"props":587,"children":588},{},[589],{"type":52,"value":590},"Source: packages\u002Fcreate\u002Fsrc\u002Fcustom-add-ons\u002Fadd-on.ts",{"type":46,"tag":135,"props":592,"children":594},{"id":593},"high-run-add-on-workflows-without-scaffold-metadata",[595],{"type":52,"value":596},"HIGH Run add-on workflows without scaffold metadata",{"type":46,"tag":55,"props":598,"children":599},{},[600],{"type":52,"value":290},{"type":46,"tag":68,"props":602,"children":603},{"className":70,"code":143,"language":72,"meta":73,"style":73},[604],{"type":46,"tag":76,"props":605,"children":606},{"__ignoreMap":73},[607],{"type":46,"tag":80,"props":608,"children":609},{"class":82,"line":83},[610,614,618,622],{"type":46,"tag":80,"props":611,"children":612},{"style":87},[613],{"type":52,"value":90},{"type":46,"tag":80,"props":615,"children":616},{"style":93},[617],{"type":52,"value":96},{"type":46,"tag":80,"props":619,"children":620},{"style":93},[621],{"type":52,"value":101},{"type":46,"tag":80,"props":623,"children":624},{"style":93},[625],{"type":52,"value":167},{"type":46,"tag":55,"props":627,"children":628},{},[629],{"type":52,"value":335},{"type":46,"tag":68,"props":631,"children":633},{"className":70,"code":632,"language":72,"meta":73,"style":73},"# Run in a project scaffolded by TanStack CLI (contains .cta.json), then:\nnpx @tanstack\u002Fcli add-on dev\n",[634],{"type":46,"tag":76,"props":635,"children":636},{"__ignoreMap":73},[637,645],{"type":46,"tag":80,"props":638,"children":639},{"class":82,"line":83},[640],{"type":46,"tag":80,"props":641,"children":642},{"style":186},[643],{"type":52,"value":644},"# Run in a project scaffolded by TanStack CLI (contains .cta.json), then:\n",{"type":46,"tag":80,"props":646,"children":647},{"class":82,"line":109},[648,652,656,660],{"type":46,"tag":80,"props":649,"children":650},{"style":87},[651],{"type":52,"value":90},{"type":46,"tag":80,"props":653,"children":654},{"style":93},[655],{"type":52,"value":96},{"type":46,"tag":80,"props":657,"children":658},{"style":93},[659],{"type":52,"value":101},{"type":46,"tag":80,"props":661,"children":662},{"style":93},[663],{"type":52,"value":167},{"type":46,"tag":55,"props":665,"children":666},{},[667],{"type":52,"value":668},"Custom add-on flows rely on persisted scaffold options, so missing metadata blocks initialization and update paths.",{"type":46,"tag":55,"props":670,"children":671},{},[672],{"type":52,"value":673},"Source: packages\u002Fcreate\u002Fsrc\u002Fcustom-add-ons\u002Fshared.ts:158",{"type":46,"tag":135,"props":675,"children":677},{"id":676},"high-tension-backwards-support-vs-deterministic-automation",[678],{"type":52,"value":679},"HIGH Tension: Backwards support vs deterministic automation",{"type":46,"tag":55,"props":681,"children":682},{},[683],{"type":52,"value":684},"This domain's patterns conflict with add-addons-existing-app. Tooling assumes reusable automation, but hidden metadata preconditions from legacy support make add-on loops non-portable across repositories.",{"type":46,"tag":55,"props":686,"children":687},{},[688],{"type":52,"value":689},"See also: add-addons-existing-app\u002FSKILL.md § Common Mistakes",{"type":46,"tag":691,"props":692,"children":693},"style",{},[694],{"type":52,"value":695},"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":697,"total":839},[698,714,726,738,753,765,775,785,798,808,819,829],{"slug":699,"name":699,"fn":700,"description":701,"org":702,"tags":703,"stars":711,"repoUrl":712,"updatedAt":713},"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},[704,707,710],{"name":705,"slug":706,"type":15},"Data Analysis","data-analysis",{"name":708,"slug":709,"type":15},"Frontend","frontend",{"name":9,"slug":8,"type":15},28175,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Ftable","2026-07-30T05:25:59.429787",{"slug":715,"name":715,"fn":716,"description":717,"org":718,"tags":719,"stars":711,"repoUrl":712,"updatedAt":725},"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},[720,723,724],{"name":721,"slug":722,"type":15},"Debugging","debugging",{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:26:05.418735",{"slug":727,"name":727,"fn":728,"description":729,"org":730,"tags":731,"stars":711,"repoUrl":712,"updatedAt":737},"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},[732,733,734],{"name":705,"slug":706,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"UI Components","ui-components","2026-07-30T05:25:38.403427",{"slug":739,"name":739,"fn":740,"description":741,"org":742,"tags":743,"stars":711,"repoUrl":712,"updatedAt":752},"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},[744,747,748,751],{"name":745,"slug":746,"type":15},"Data Pipeline","data-pipeline",{"name":708,"slug":709,"type":15},{"name":749,"slug":750,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:25:45.400104",{"slug":754,"name":754,"fn":755,"description":756,"org":757,"tags":758,"stars":711,"repoUrl":712,"updatedAt":764},"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},[759,762,763],{"name":760,"slug":761,"type":15},"Data Visualization","data-visualization",{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:41.397257",{"slug":766,"name":766,"fn":767,"description":768,"org":769,"tags":770,"stars":711,"repoUrl":712,"updatedAt":774},"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},[771,772,773],{"name":705,"slug":706,"type":15},{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:53.391632",{"slug":776,"name":776,"fn":777,"description":778,"org":779,"tags":780,"stars":711,"repoUrl":712,"updatedAt":784},"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},[781,782,783],{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:26:03.37801",{"slug":786,"name":786,"fn":787,"description":788,"org":789,"tags":790,"stars":711,"repoUrl":712,"updatedAt":797},"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},[791,794,795,796],{"name":792,"slug":793,"type":15},"CSS","css",{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:25:55.377366",{"slug":799,"name":799,"fn":800,"description":801,"org":802,"tags":803,"stars":711,"repoUrl":712,"updatedAt":807},"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},[804,805,806],{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:25:51.400011",{"slug":809,"name":809,"fn":810,"description":811,"org":812,"tags":813,"stars":711,"repoUrl":712,"updatedAt":818},"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},[814,815,816,817],{"name":792,"slug":793,"type":15},{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:25:48.703799",{"slug":820,"name":820,"fn":821,"description":822,"org":823,"tags":824,"stars":711,"repoUrl":712,"updatedAt":828},"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},[825,826,827],{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:25:47.367943",{"slug":830,"name":830,"fn":831,"description":832,"org":833,"tags":834,"stars":711,"repoUrl":712,"updatedAt":838},"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},[835,836,837],{"name":705,"slug":706,"type":15},{"name":708,"slug":709,"type":15},{"name":735,"slug":736,"type":15},"2026-07-30T05:25:52.366295",125,{"items":841,"total":892},[842,853,863,873,880],{"slug":41,"name":41,"fn":843,"description":844,"org":845,"tags":846,"stars":23,"repoUrl":24,"updatedAt":852},"add integrations to existing TanStack projects","Apply integrations to existing projects with tanstack add, including add-on id resolution, dependency chains, option prompts, and .cta.json project metadata preconditions.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[847,848,851],{"name":13,"slug":14,"type":15},{"name":849,"slug":850,"type":15},"Integrations","integrations",{"name":9,"slug":8,"type":15},"2026-07-20T05:59:14.921659",{"slug":854,"name":854,"fn":855,"description":856,"org":857,"tags":858,"stars":23,"repoUrl":24,"updatedAt":862},"choose-ecosystem-integrations","manage TanStack ecosystem integrations","Map tanstack ecosystem partner metadata to installable add-on ids using tanstack ecosystem --json, tanstack create --list-add-ons --json, and tanstack create --addon-details --json. Covers exclusive categories, provider options, and router-only compatibility constraints.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[859,860,861],{"name":13,"slug":14,"type":15},{"name":849,"slug":850,"type":15},{"name":9,"slug":8,"type":15},"2026-07-20T05:59:10.94663",{"slug":864,"name":864,"fn":865,"description":866,"org":867,"tags":868,"stars":23,"repoUrl":24,"updatedAt":872},"create-app-scaffold","scaffold TanStack applications with CLI","Scaffold a TanStack app with tanstack create using --framework, --template, --toolchain, --deployment, --add-ons, --blank, and --router-only. Covers flag compatibility, non-interactive defaults, and intent-preserving command construction.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[869,870,871],{"name":13,"slug":14,"type":15},{"name":708,"slug":709,"type":15},{"name":9,"slug":8,"type":15},"2026-07-20T05:59:12.932804",{"slug":4,"name":4,"fn":5,"description":6,"org":874,"tags":875,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[876,877,878,879],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":881,"name":881,"fn":882,"description":883,"org":884,"tags":885,"stars":23,"repoUrl":24,"updatedAt":891},"query-docs-library-metadata","retrieve TanStack library documentation and metadata","Retrieve machine-readable context with tanstack libraries, tanstack doc, tanstack search-docs, tanstack create --list-add-ons --json, and --addon-details for agent-safe discovery and preflight validation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[886,887,890],{"name":13,"slug":14,"type":15},{"name":888,"slug":889,"type":15},"Documentation","documentation",{"name":9,"slug":8,"type":15},"2026-07-20T05:59:13.902452",5]