Changelog
Latest updates and release notes for Niko Table.
March 2026
Section titled “March 2026”Performance & consistency
Section titled “Performance & consistency”- Row click: event delegation — All table body components (standard, virtualized, and DnD variants) now use a single delegated row-click handler instead of one handler per row or per cell. This reduces allocations and keeps behavior consistent across
DataTableBody,DataTableVirtualizedBody,DataTableVirtualizedDndBody,DataTableVirtualizedDndColumnBody,DataTableDndBody, andDataTableDndColumnBody. - DataTableRoot — Global filter and default column-pinning handlers are memoized with
useCallbackso table options stay stable and the table does not re-initialize unnecessarily. - TablePagination — Page size, page input, and prev/next button handlers are memoized with
useCallbackfor stable references when pagination state changes. - DataTableAside — Trigger toggle and close button handlers are memoized with
useCallback.
Documentation
Section titled “Documentation”- DataTableRoot — Docs now list the required
childrenprop and the optionalstateprop for controlled mode. The introduction page also documentsclassName. - Props tables and examples were reviewed for accuracy against the current implementation.
Bug Fixes
Section titled “Bug Fixes”- TablePagination — page input draft state — The page number input now uses local draft state so users can type intermediate values (e.g.
"1"before completing"12") without the table jumping mid-edit. The page index is only committed on blur or Enter; invalid input resets to the current page. - TablePagination — stale page index on page size change —
onPageSizeChangenow receives the recalculated page index (Math.floor((pageIndex * pageSize) / newPageSize)) instead of the stale pre-change index. - Sticky header z-index — Fixed an issue where pinned body cells could overlap the sticky header during scroll. The sticky header container now uses
z-30, above header pinned cells (z-20) and body pinned cells (z-10). - Pinned header cell
topstyle — Addedtop: 0to pinned header cells ingetCommonPinningStylesso they stick vertically when the header is sticky.
February 2026 - Initial Release
Section titled “February 2026 - Initial Release”The first public release of Niko Table — a composable, shadcn-compatible data table component registry built with TanStack Table and React.
Components
Section titled “Components”- DataTable - Core data table with sorting, filtering, and pagination
- DataTableVirtualized - Virtualized rendering for large datasets
- DataTablePagination - Flexible pagination controls
- DataTableSearchFilter - Global search across all columns
- DataTableFacetedFilter - Multi-select faceted filtering with counts
- DataTableFilterMenu - Advanced filter menu with AND/OR logic
- DataTableInlineFilter - Inline filter bar with mixed operator support
- DataTableSliderFilter - Range slider filtering for numeric columns
- DataTableDateFilter - Date and date range filtering
- DataTableExportButton - CSV/JSON export
- DataTableAside - Side panel for row details
- DataTableSelectionBar - Bulk actions on selected rows
- DataTableColumnSort - Sort menu and sort icon components
- DataTableColumnHide - Column visibility toggle
- DataTableColumnPin - Column pinning (left/right)
Features
Section titled “Features”- Row DnD - Drag and drop row reordering via
@dnd-kit - Column DnD - Drag and drop column reordering
- Row Selection - Single and multi-row selection with bulk actions
- Row Expansion - Expandable rows with custom content
- Tree Table - Hierarchical data with expand/collapse
- Virtualization - Smooth scrolling for 10k+ rows
- URL State - Sync filters, sorting, and pagination to URL via
nuqs - Server-Side - Server-side filtering, sorting, and pagination support
Filter System
Section titled “Filter System”- 15+ filter operators (contains, equals, greater than, between, etc.)
- Mixed AND/OR logic with mathematical precedence
- Per-filter join operator control
- Regex-cached filter execution for large datasets