Column Pinning

Examples & API

Guide

Column pinning can be implemented using two approaches: splitting pinned columns into separate tables, or keeping all columns in a single table while using pinning state for column ordering and sticky CSS for visual positioning.

Column Order Priority

Three table features can reorder columns, applied in the following order:

  1. Column Pinning – Columns are split into left, center (unpinned), and right pinned columns.
  2. Column Ordering
  3. Grouping

The columnPinning.left and columnPinning.right state controls the order of pinned columns. The columnOrder state only affects unpinned ("center") columns.

Manage Column Pinning State

The table manages columnPinning state internally by default. Manage state manually for features like persistence or external state synchronization:

const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({
  left: [],
  right: [],
})

const table = useReactTable({
  // ...
  state: {
    columnPinning,
  },
  onColumnPinningChange: setColumnPinning,
})

Pin Columns by Default

Initialize the columnPinning state or use the initialState table option to set default pinned columns:

const table = useReactTable({
  // ...
  initialState: {
    columnPinning: {
      left: ["expand-column"],
      right: ["actions-column"],
    },
  },
})

Column Pinning APIs