Skip to content

feat: initial alpine adapter work#6249

Merged
KevinVandy merged 9 commits into
TanStack:betafrom
marceloverdijk:feat/alpine-adapter
Jun 30, 2026
Merged

feat: initial alpine adapter work#6249
KevinVandy merged 9 commits into
TanStack:betafrom
marceloverdijk:feat/alpine-adapter

Conversation

@marceloverdijk

Copy link
Copy Markdown
Contributor

🎯 Changes

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm test:pr.

@coderabbitai

coderabbitai Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 259 files, which is 109 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8b78fe6e-a7ae-4274-bac8-e10411b0e570

📥 Commits

Reviewing files that changed from the base of the PR and between b7b05a9 and 75337c5.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (259)
  • README.md
  • docs/config.json
  • docs/devtools.md
  • docs/framework/alpine/guide/column-faceting.md
  • docs/framework/alpine/guide/column-filtering.md
  • docs/framework/alpine/guide/column-ordering.md
  • docs/framework/alpine/guide/column-pinning.md
  • docs/framework/alpine/guide/column-resizing.md
  • docs/framework/alpine/guide/column-sizing.md
  • docs/framework/alpine/guide/column-visibility.md
  • docs/framework/alpine/guide/composable-tables.md
  • docs/framework/alpine/guide/custom-features.md
  • docs/framework/alpine/guide/expanding.md
  • docs/framework/alpine/guide/fuzzy-filtering.md
  • docs/framework/alpine/guide/global-filtering.md
  • docs/framework/alpine/guide/grouping.md
  • docs/framework/alpine/guide/pagination.md
  • docs/framework/alpine/guide/row-pinning.md
  • docs/framework/alpine/guide/row-selection.md
  • docs/framework/alpine/guide/sorting.md
  • docs/framework/alpine/guide/table-state.md
  • docs/framework/alpine/quick-start.md
  • docs/framework/alpine/reference/functions/FlexRender-1.md
  • docs/framework/alpine/reference/functions/createTable.md
  • docs/framework/alpine/reference/functions/createTableHook.md
  • docs/framework/alpine/reference/functions/flexRender.md
  • docs/framework/alpine/reference/index.md
  • docs/framework/alpine/reference/type-aliases/AlpineTable.md
  • docs/framework/alpine/reference/type-aliases/AppAlpineTable.md
  • docs/framework/alpine/reference/type-aliases/AppColumnHelper.md
  • docs/framework/alpine/reference/type-aliases/CreateTableHookOptions.md
  • docs/framework/alpine/reference/type-aliases/FlexRenderProps.md
  • docs/guide/table-and-column-meta.md
  • docs/guide/tables.md
  • docs/installation.md
  • docs/overview.md
  • examples/alpine/basic-app-table/index.html
  • examples/alpine/basic-app-table/package.json
  • examples/alpine/basic-app-table/src/index.css
  • examples/alpine/basic-app-table/src/main.ts
  • examples/alpine/basic-app-table/src/vite-env.d.ts
  • examples/alpine/basic-app-table/tsconfig.json
  • examples/alpine/basic-app-table/vite.config.js
  • examples/alpine/basic-create-table/index.html
  • examples/alpine/basic-create-table/package.json
  • examples/alpine/basic-create-table/src/index.css
  • examples/alpine/basic-create-table/src/main.ts
  • examples/alpine/basic-create-table/src/makeData.ts
  • examples/alpine/basic-create-table/src/vite-env.d.ts
  • examples/alpine/basic-create-table/tsconfig.json
  • examples/alpine/basic-create-table/vite.config.js
  • examples/alpine/basic-external-atoms/index.html
  • examples/alpine/basic-external-atoms/package.json
  • examples/alpine/basic-external-atoms/src/index.css
  • examples/alpine/basic-external-atoms/src/main.ts
  • examples/alpine/basic-external-atoms/src/makeData.ts
  • examples/alpine/basic-external-atoms/src/vite-env.d.ts
  • examples/alpine/basic-external-atoms/tsconfig.json
  • examples/alpine/basic-external-atoms/vite.config.js
  • examples/alpine/basic-external-state/index.html
  • examples/alpine/basic-external-state/package.json
  • examples/alpine/basic-external-state/src/index.css
  • examples/alpine/basic-external-state/src/main.ts
  • examples/alpine/basic-external-state/src/makeData.ts
  • examples/alpine/basic-external-state/src/vite-env.d.ts
  • examples/alpine/basic-external-state/tsconfig.json
  • examples/alpine/basic-external-state/vite.config.js
  • examples/alpine/column-groups/index.html
  • examples/alpine/column-groups/package.json
  • examples/alpine/column-groups/src/index.css
  • examples/alpine/column-groups/src/main.ts
  • examples/alpine/column-groups/src/makeData.ts
  • examples/alpine/column-groups/src/vite-env.d.ts
  • examples/alpine/column-groups/tsconfig.json
  • examples/alpine/column-groups/vite.config.js
  • examples/alpine/column-ordering/index.html
  • examples/alpine/column-ordering/package.json
  • examples/alpine/column-ordering/src/index.css
  • examples/alpine/column-ordering/src/main.ts
  • examples/alpine/column-ordering/src/makeData.ts
  • examples/alpine/column-ordering/src/vite-env.d.ts
  • examples/alpine/column-ordering/tsconfig.json
  • examples/alpine/column-ordering/vite.config.js
  • examples/alpine/column-pinning-split/index.html
  • examples/alpine/column-pinning-split/package.json
  • examples/alpine/column-pinning-split/src/index.css
  • examples/alpine/column-pinning-split/src/main.ts
  • examples/alpine/column-pinning-split/src/makeData.ts
  • examples/alpine/column-pinning-split/src/vite-env.d.ts
  • examples/alpine/column-pinning-split/tsconfig.json
  • examples/alpine/column-pinning-split/vite.config.js
  • examples/alpine/column-pinning-sticky/index.html
  • examples/alpine/column-pinning-sticky/package.json
  • examples/alpine/column-pinning-sticky/src/index.css
  • examples/alpine/column-pinning-sticky/src/main.ts
  • examples/alpine/column-pinning-sticky/src/makeData.ts
  • examples/alpine/column-pinning-sticky/src/vite-env.d.ts
  • examples/alpine/column-pinning-sticky/tsconfig.json
  • examples/alpine/column-pinning-sticky/vite.config.js
  • examples/alpine/column-pinning/index.html
  • examples/alpine/column-pinning/package.json
  • examples/alpine/column-pinning/src/index.css
  • examples/alpine/column-pinning/src/main.ts
  • examples/alpine/column-pinning/src/makeData.ts
  • examples/alpine/column-pinning/src/vite-env.d.ts
  • examples/alpine/column-pinning/tsconfig.json
  • examples/alpine/column-pinning/vite.config.js
  • examples/alpine/column-resizing-performant/index.html
  • examples/alpine/column-resizing-performant/package.json
  • examples/alpine/column-resizing-performant/src/index.css
  • examples/alpine/column-resizing-performant/src/main.ts
  • examples/alpine/column-resizing-performant/src/makeData.ts
  • examples/alpine/column-resizing-performant/src/vite-env.d.ts
  • examples/alpine/column-resizing-performant/tsconfig.json
  • examples/alpine/column-resizing-performant/vite.config.js
  • examples/alpine/column-resizing/index.html
  • examples/alpine/column-resizing/package.json
  • examples/alpine/column-resizing/src/index.css
  • examples/alpine/column-resizing/src/main.ts
  • examples/alpine/column-resizing/src/makeData.ts
  • examples/alpine/column-resizing/src/vite-env.d.ts
  • examples/alpine/column-resizing/tsconfig.json
  • examples/alpine/column-resizing/vite.config.js
  • examples/alpine/column-sizing/index.html
  • examples/alpine/column-sizing/package.json
  • examples/alpine/column-sizing/src/index.css
  • examples/alpine/column-sizing/src/main.ts
  • examples/alpine/column-sizing/src/makeData.ts
  • examples/alpine/column-sizing/src/vite-env.d.ts
  • examples/alpine/column-sizing/tsconfig.json
  • examples/alpine/column-sizing/vite.config.js
  • examples/alpine/column-visibility/index.html
  • examples/alpine/column-visibility/package.json
  • examples/alpine/column-visibility/src/index.css
  • examples/alpine/column-visibility/src/main.ts
  • examples/alpine/column-visibility/src/makeData.ts
  • examples/alpine/column-visibility/src/vite-env.d.ts
  • examples/alpine/column-visibility/tsconfig.json
  • examples/alpine/column-visibility/vite.config.js
  • examples/alpine/custom-plugin/index.html
  • examples/alpine/custom-plugin/package.json
  • examples/alpine/custom-plugin/src/index.css
  • examples/alpine/custom-plugin/src/main.ts
  • examples/alpine/custom-plugin/src/makeData.ts
  • examples/alpine/custom-plugin/src/vite-env.d.ts
  • examples/alpine/custom-plugin/tsconfig.json
  • examples/alpine/custom-plugin/vite.config.js
  • examples/alpine/expanding/index.html
  • examples/alpine/expanding/package.json
  • examples/alpine/expanding/src/index.css
  • examples/alpine/expanding/src/main.ts
  • examples/alpine/expanding/src/makeData.ts
  • examples/alpine/expanding/src/vite-env.d.ts
  • examples/alpine/expanding/tsconfig.json
  • examples/alpine/expanding/vite.config.js
  • examples/alpine/filters-faceted/index.html
  • examples/alpine/filters-faceted/package.json
  • examples/alpine/filters-faceted/src/index.css
  • examples/alpine/filters-faceted/src/main.ts
  • examples/alpine/filters-faceted/src/makeData.ts
  • examples/alpine/filters-faceted/src/vite-env.d.ts
  • examples/alpine/filters-faceted/tsconfig.json
  • examples/alpine/filters-faceted/vite.config.js
  • examples/alpine/filters/index.html
  • examples/alpine/filters/package.json
  • examples/alpine/filters/src/index.css
  • examples/alpine/filters/src/main.ts
  • examples/alpine/filters/src/makeData.ts
  • examples/alpine/filters/src/vite-env.d.ts
  • examples/alpine/filters/tsconfig.json
  • examples/alpine/filters/vite.config.js
  • examples/alpine/grouping/index.html
  • examples/alpine/grouping/package.json
  • examples/alpine/grouping/src/index.css
  • examples/alpine/grouping/src/main.ts
  • examples/alpine/grouping/src/makeData.ts
  • examples/alpine/grouping/src/vite-env.d.ts
  • examples/alpine/grouping/tsconfig.json
  • examples/alpine/grouping/vite.config.js
  • examples/alpine/pagination/index.html
  • examples/alpine/pagination/package.json
  • examples/alpine/pagination/src/index.css
  • examples/alpine/pagination/src/main.ts
  • examples/alpine/pagination/src/makeData.ts
  • examples/alpine/pagination/src/vite-env.d.ts
  • examples/alpine/pagination/tsconfig.json
  • examples/alpine/pagination/vite.config.js
  • examples/alpine/row-pinning/index.html
  • examples/alpine/row-pinning/package.json
  • examples/alpine/row-pinning/src/index.css
  • examples/alpine/row-pinning/src/main.ts
  • examples/alpine/row-pinning/src/makeData.ts
  • examples/alpine/row-pinning/src/vite-env.d.ts
  • examples/alpine/row-pinning/tsconfig.json
  • examples/alpine/row-pinning/vite.config.js
  • examples/alpine/row-selection/index.html
  • examples/alpine/row-selection/package.json
  • examples/alpine/row-selection/src/index.css
  • examples/alpine/row-selection/src/main.ts
  • examples/alpine/row-selection/src/makeData.ts
  • examples/alpine/row-selection/src/vite-env.d.ts
  • examples/alpine/row-selection/tsconfig.json
  • examples/alpine/row-selection/vite.config.js
  • examples/alpine/sorting-dynamic-data/index.html
  • examples/alpine/sorting-dynamic-data/package.json
  • examples/alpine/sorting-dynamic-data/src/index.css
  • examples/alpine/sorting-dynamic-data/src/main.ts
  • examples/alpine/sorting-dynamic-data/src/makeData.ts
  • examples/alpine/sorting-dynamic-data/src/vite-env.d.ts
  • examples/alpine/sorting-dynamic-data/tsconfig.json
  • examples/alpine/sorting-dynamic-data/vite.config.js
  • examples/alpine/sorting/index.html
  • examples/alpine/sorting/package.json
  • examples/alpine/sorting/src/index.css
  • examples/alpine/sorting/src/main.ts
  • examples/alpine/sorting/src/makeData.ts
  • examples/alpine/sorting/src/vite-env.d.ts
  • examples/alpine/sorting/tsconfig.json
  • examples/alpine/sorting/vite.config.js
  • examples/alpine/sub-components/index.html
  • examples/alpine/sub-components/package.json
  • examples/alpine/sub-components/src/index.css
  • examples/alpine/sub-components/src/main.ts
  • examples/alpine/sub-components/src/makeData.ts
  • examples/alpine/sub-components/src/vite-env.d.ts
  • examples/alpine/sub-components/tsconfig.json
  • examples/alpine/sub-components/vite.config.js
  • package.json
  • packages/alpine-table/README.md
  • packages/alpine-table/eslint.config.js
  • packages/alpine-table/package.json
  • packages/alpine-table/src/createTable.ts
  • packages/alpine-table/src/createTableHook.ts
  • packages/alpine-table/src/flex-render.ts
  • packages/alpine-table/src/flexRender.ts
  • packages/alpine-table/src/index.ts
  • packages/alpine-table/src/reactivity.ts
  • packages/alpine-table/src/static-functions.ts
  • packages/alpine-table/tsconfig.json
  • packages/alpine-table/tsdown.config.ts
  • packages/alpine-table/vite.config.ts
  • packages/angular-table/README.md
  • packages/lit-table/README.md
  • packages/match-sorter-utils/README.md
  • packages/preact-table-devtools/README.md
  • packages/preact-table/README.md
  • packages/react-table-devtools/README.md
  • packages/react-table/README.md
  • packages/solid-table-devtools/README.md
  • packages/solid-table/README.md
  • packages/svelte-table/README.md
  • packages/table-core/README.md
  • packages/table-devtools/README.md
  • packages/vue-table-devtools/README.md
  • packages/vue-table/README.md
  • pnpm-workspace.yaml
  • scripts/config.js
  • scripts/generateDocs.js
  • vitest.workspace.mjs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@nx-cloud

nx-cloud Bot commented May 11, 2026

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 75337c5

Command Status Duration Result
nx affected --targets=test:eslint,test:sherif,t... ✅ Succeeded 1m 59s View ↗
nx run-many --targets=build --exclude=examples/** ✅ Succeeded <1s View ↗

☁️ Nx Cloud last updated this comment at 2026-06-30 19:31:21 UTC

@socket-security

socket-security Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedalpinejs@​3.15.12881007588100
Added@​types/​alpinejs@​3.13.111001007580100

View full report

@socket-security

socket-security Bot commented Jun 29, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm alpinejs is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: examples/alpine/basic-app-table/package.jsonnpm/alpinejs@3.15.12

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/alpinejs@3.15.12. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@KevinVandy

Copy link
Copy Markdown
Member

@marceloverdijk This PR is still pretty blank. Were you ever planning to work on it? I've merged the beta branch back in and fixed conflicts. I'm doing some basic updates and having AI finish a basic example, but thenI'd want to hand this back to someone who actually knows alpine

@KevinVandy KevinVandy changed the base branch from alpha to beta June 29, 2026 14:20
@KevinVandy

Copy link
Copy Markdown
Member

I was also able to get a basic example working after updating the package to the new syntax that we've moved to in beta. Didn't have any issues running the example locally, so hopefully that won't be a blocker anymore @marceloverdijk

@marceloverdijk

Copy link
Copy Markdown
Contributor Author

Currently I'm using a project "local" adapter implementation which I everytime upgrade to the latest v9 beta; (currently it uses 9.0.0-beta.21).

During alpha and beta version I had to update a few times as the API changes (no problem).
I wanted to work on when it stabalizes, not only in terms of code, but also for the documentation.

But I think this is a great start. It's also easier to add more examples or to change the adapter (if needed) once the package is there.

@marceloverdijk

Copy link
Copy Markdown
Contributor Author

Once merged and the package is released, I'm happy to update my project and start using the "official" adapter ;-)

@KevinVandy

Copy link
Copy Markdown
Member

I'm planning on releasing table v9 as stable in July so wanted to get this and the upcoming Ember one done this week. I can throw an ai agent at it to fill in the rest and then ask for your review

@KevinVandy KevinVandy marked this pull request as ready for review June 30, 2026 13:36
@KevinVandy KevinVandy requested a review from a team as a code owner June 30, 2026 13:36
@pkg-pr-new

pkg-pr-new Bot commented Jun 30, 2026

Copy link
Copy Markdown
More templates

@tanstack/alpine-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/alpine-table@6249

@tanstack/angular-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/angular-table@6249

@tanstack/angular-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/angular-table-devtools@6249

@tanstack/lit-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/lit-table@6249

@tanstack/match-sorter-utils

npm i https://pkg.pr.new/TanStack/table/@tanstack/match-sorter-utils@6249

@tanstack/preact-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/preact-table@6249

@tanstack/preact-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/preact-table-devtools@6249

@tanstack/react-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/react-table@6249

@tanstack/react-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/react-table-devtools@6249

@tanstack/solid-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/solid-table@6249

@tanstack/solid-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/solid-table-devtools@6249

@tanstack/svelte-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/svelte-table@6249

@tanstack/table-core

npm i https://pkg.pr.new/TanStack/table/@tanstack/table-core@6249

@tanstack/table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/table-devtools@6249

@tanstack/vue-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/vue-table@6249

@tanstack/vue-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/vue-table-devtools@6249

commit: 75337c5

@KevinVandy

Copy link
Copy Markdown
Member

@CodeRabbit review --dir /packages

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@KevinVandy Reviewing the changes with focus on /packages.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@KevinVandy

Copy link
Copy Markdown
Member

@marceloverdijk I think this adapter is finished. You can test it out in your app with

npm i https://pkg.pr.new/TanStack/table/@tanstack/alpine-table@6249

@marceloverdijk

Copy link
Copy Markdown
Contributor Author

@KevinVandy I removed the project local alpine adapter from my project and started using https://pkg.pr.new/TanStack/table/@tanstack/alpine-table@6249.

All works fine 💪
I'm using createTableHook with different presets, column filtering, global filtering, pagination and sorting.

I'm also using global type customization for meta and custom filter and sort functions.

import { type TableFeatures, type RowData, type CellData, type FilterFn, type SortFn } from '@tanstack/alpine-table';

declare module '@tanstack/alpine-table' {
  interface TableMeta<TFeatures extends TableFeatures, TData extends RowData> {
    fuzzyThreshold?: number;
    pageSizeOptions?: number[];
  }

  interface ColumnMeta<TFeatures extends TableFeatures, TData extends RowData, TValue extends CellData = CellData> {
    headerClass?: string;
    cellClass?: string;
    fuzzyThreshold?: number;
  }

  interface FilterFns {
    fuzzy: FilterFn<any, any>;
  }

  interface SortFns {
    alphanumericIgnoreDiacritics: SortFn<any, any>;
    alphanumericIgnoreDiacriticsCaseSensitive: SortFn<any, any>;
  }
}

This also work as expected, except in my custom filter functions, the table/column meta data (fuzzyThreshold) is not not recognized. It seems just typing issue as functionality wise it works.

import { fuzzy } from 'fast-fuzzy';
import { type FilterFn, type Row, type RowData, type TableFeatures, filterFns as defaultFilterFns } from '@tanstack/alpine-table';
import { normalizeText } from '@lib/utils/text';

const DEFAULT_FUZZY_THRESHOLD = 0.7;

export const filterFn_fuzzy: FilterFn<any, any> = <TFeatures extends TableFeatures, TData extends RowData>(
  row: Row<TFeatures, TData>,
  columnId: string,
  filterValue: unknown,
) => {
  if (!filterValue) {
    return true;
  }

  const value = row.getValue(columnId);

  if (!value) {
    return false;
  }

  const term = normalizeText(filterValue);
  const candidate = normalizeText(value);

  const cell = row.getAllCells().find((cell) => cell.column.id === columnId);
  const table = cell?.getContext().table;
  const column = table?.getColumn(columnId);
  const threshold = column?.columnDef?.meta?.fuzzyThreshold ?? table?.options.meta?.fuzzyThreshold ?? DEFAULT_FUZZY_THRESHOLD;

  const score = fuzzy(term, candidate, {
    ignoreCase: true,
    ignoreSymbols: true,
    normalizeWhitespace: true,
    useSeparatedUnicode: true,
  });

  return score >= threshold;
};

export const customFilterFns = {
  fuzzy: filterFn_fuzzy,
};

export const filterFns = {
  ...defaultFilterFns,
  ...customFilterFns,
};

@KevinVandy

Copy link
Copy Markdown
Member

@marceloverdijk You don't need to use declaration merging anymore as of the recent betas: https://tanstack.com/table/beta/docs/framework/react/guide/migrating#filterfns-sortfns-aggregationfns-filtermeta-augmentation-replaced-by-registry-slots

image

You don't even need declaration merging for table or column meta anymore either

image

This PR includes documentation for alpine like this: https://tanstack.com/table/beta/docs/guide/table-and-column-meta

@KevinVandy KevinVandy merged commit b13fae7 into TanStack:beta Jun 30, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants