Data tables are the highest-density UI pattern in product surfaces, and the one with the most variation in implementation depth. The systems that document them seriously cover sticky columns, async loading, bulk actions, expandable rows, sortable headers with persisted state, empty/loading/error states, and resizable columns. Most systems ship a Table component and stop there.
Use these references when your product surface needs more than 'a table that lists rows' — when bulk actions, filters, sticky behavior, or row-level actions enter the picture.
- 01Sortable, filterable, paginated, with persisted user state across sessions.
- 02Bulk-action affordance built into the row-selection model — not bolted on.
- 03Expandable rows with disclosure indicators and accessible keyboard handling.
- 04Empty / loading / error states designed deliberately, not as afterthoughts.
- 05Sticky columns and resizable columns when the table is wider than the viewport.
- 01The team builds Table v1 with three props and discovers the product needs all the missing features two quarters later.
- 02Pagination and sorting are client-side at first, then need to become server-side, but the API didn't anticipate it.
- 03Bulk actions are added later as a separate component and never feel native.
Polaris
Shopify
ResourceList / IndexTable
Bulk-action data grids that are genuinely usable at scale — Shopify Admin's merchant flows are the harshest test bed.
Carbon
IBM
DataTable
Sortable, filterable, expandable grid that scales to enterprise data volumes; documented down to the keyboard interaction.
Stripe Design System
Stripe
DataTable (Dashboard)
Sticky-column financial table with async filters, presets, and exportable views — the reconciliation workflow is the goal.
eBay Evo
eBay
ItemCard / search-grid pattern
Marketplace-scale dense grids for inventory listings; the table pattern adapted for two-sided commerce.