# TableFeature

# Interface: TableFeature

Defined in: [types/TableFeatures.ts:308](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L308)

Lifecycle hooks and defaults contributed by a table feature.

Feature objects are registered in the table's `features` option. They can
contribute default state/options, default column definitions, table APIs,
shared prototype APIs for rows/columns/headers/cells, and per-instance row
or column data.

## Properties

### assignCellPrototype()?

```ts
optional assignCellPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:317](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L317)

Adds feature methods to the shared cell prototype for a table.

This runs lazily the first time a cell is constructed for a table. Methods
assigned here are shared by every cell instance created by that table, so
this hook should be used for APIs and memoized methods rather than
per-cell mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignColumnPrototype()?

```ts
optional assignColumnPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:332](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L332)

Adds feature methods to the shared column prototype for a table.

This runs lazily the first time a column is constructed for a table.
Methods assigned here are shared by every column instance created by that
table, so this hook should be used for APIs and memoized methods rather
than per-column mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignHeaderPrototype()?

```ts
optional assignHeaderPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:347](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L347)

Adds feature methods to the shared header prototype for a table.

This runs lazily the first time a header is constructed for a table.
Methods assigned here are shared by every header instance created by that
table, so this hook should be used for APIs and memoized methods rather
than per-header mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignRowPrototype()?

```ts
optional assignRowPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:362](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L362)

Adds feature methods to the shared row prototype for a table.

This runs lazily the first time a row is constructed for a table. Methods
assigned here are shared by every row instance created by that table, so
this hook should be used for APIs and memoized methods rather than per-row
mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### constructTableAPIs()?

```ts
optional constructTableAPIs: <TFeatures, TData>(table) => void;
```

Defined in: [types/TableFeatures.ts:375](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L375)

Adds feature APIs directly to the table instance.

The table is a singleton, unlike rows, columns, headers, and cells, so
table APIs are assigned directly instead of through a shared prototype.
This hook is exclusively for assigning table methods. It runs after
options, state atoms, and the store have been created and after every
feature's `initTableInstanceData` hook has completed.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### getDefaultColumnDef()?

```ts
optional getDefaultColumnDef: <TFeatures, TData, TValue>() => ColumnDefBase_All<TFeatures, TData, TValue>;
```

Defined in: [types/TableFeatures.ts:385](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L385)

Returns default column definition options contributed by this feature.

These defaults are merged into the table's default column definition before
`options.defaultColumn` and before each user-supplied column definition is
resolved, so users can override values supplied here.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

##### TValue

`TValue` *extends* `unknown` = `unknown`

#### Returns

[`ColumnDefBase_All`](../type-aliases/ColumnDefBase_All.md)\<`TFeatures`, `TData`, `TValue`\>

***

### getDefaultTableOptions()?

```ts
optional getDefaultTableOptions: <TFeatures, TData>(table) => Partial<TableOptions_All<TFeatures, TData>>;
```

Defined in: [types/TableFeatures.ts:398](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L398)

Returns default table options contributed by this feature.

This runs while table options are being resolved. Use it for option
defaults such as feature enablement flags and default state-updater
callbacks. User-supplied table options take precedence over values returned
here.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`Partial`\<[`TableOptions_All`](../type-aliases/TableOptions_All.md)\<`TFeatures`, `TData`\>\>

***

### getInitialState()?

```ts
optional getInitialState: (initialState) => TableState_All;
```

Defined in: [types/TableFeatures.ts:412](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L412)

Returns this feature's initial table state.

The incoming `initialState` contains state accumulated from earlier
features and user-provided initial state. Return a complete state object
for this feature, preserving `initialState` so user-provided values can
override feature defaults.

#### Parameters

##### initialState

`Partial`\<[`TableState_All`](TableState_All.md)\>

#### Returns

[`TableState_All`](TableState_All.md)

***

### initColumnInstanceData()?

```ts
optional initColumnInstanceData: <TFeatures, TData, TValue>(column) => void;
```

Defined in: [types/TableFeatures.ts:437](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L437)

Initializes instance-specific data on each column.

This runs for every constructed column after core column fields such as
`id`, `depth`, `parent`, `columnDef`, and `columns` have been assigned.
Use this for per-column mutable data, caches, or annotations. Shared
methods should be assigned via `assignColumnPrototype` instead.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

##### TValue

`TValue` *extends* `unknown` = `unknown`

#### Parameters

##### column

[`Column`](../type-aliases/Column.md)\<`TFeatures`, `TData`, `TValue`\>

#### Returns

`void`

***

### initRowInstanceData()?

```ts
optional initRowInstanceData: <TFeatures, TData>(row) => void;
```

Defined in: [types/TableFeatures.ts:452](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L452)

Initializes instance-specific data on each row.

This runs for every constructed row after core row fields such as `id`,
`index`, `depth`, `original`, `parentId`, and `subRows` have been assigned.
Use this for per-row mutable data, caches, or annotations. Shared methods
should be assigned via `assignRowPrototype` instead.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### row

[`Row`](../type-aliases/Row.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### initTableInstanceData()?

```ts
optional initTableInstanceData: <TFeatures, TData>(table) => void;
```

Defined in: [types/TableFeatures.ts:423](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L423)

Initializes mutable, non-reactive data owned by this feature on the table
instance.

This runs once during table construction after options, state atoms, and
the store are available, and before any feature's `constructTableAPIs`
hook runs. Use `constructTableAPIs` exclusively for assigning table
methods. Table resets do not rerun this hook; use
`resetTableInstanceData` to clear transient instance data instead.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### resetTableInstanceData()?

```ts
optional resetTableInstanceData: <TFeatures, TData>(table) => void;
```

Defined in: [types/TableFeatures.ts:465](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L465)

Resets mutable, non-reactive table-instance data owned by this feature.

This runs after internally owned state atoms have been restored to
`table.initialState` by `table.reset()`. It is intended for transient
feature data, not table state slices or externally controlled state.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`
