Changelog
Release history and updates for Simple Table.
2.5.6
Mar 9, 2026
- 🚀 New columnEditorConfig.customRenderer for full column editor layout control →
- 🚀 New tableRef.resetColumns() restores default column order and visibility →
- 🚀 New resetColumns callback in customRenderer for reset button without tableRef →
- ⚡ Improved defaultHeaders is never mutated; table clones internally →
2.5.3
Feb 25, 2026
2.5.0
Feb 22, 2026
- 🐛 Fix Fixed column resizing when pinned sections reach max width →
- 🐛 Fix Fixed double-resize issue on chart columns →
- 🐛 Fix Fixed pinned columns behavior with nested headers →
- 🐛 Fix Fixed pinned columns compatibility with autoExpandColumns →
- ⚡ Improved Enhanced column auto-sizing logic and constraints →
- ⚡ Improved Improved resize behavior across pinned and main sections →
2.4.8
Feb 16, 2026
- 🚀 New onColumnWidthChange callback fires when columns are resized or auto-sized →
- 🚀 New Double-click resize handles to auto-fit columns to content →
- 🚀 New Added modern-light and modern-dark themes with clean, minimal design →
- 🐛 Fix Fixed hover effects on sticky parent rows →
- 🐛 Fix Fixed horizontal scrolling on sticky rows →
- 🐛 Fix Removed resize handle from last column when autoExpandColumns is enabled →
2.4.3
Feb 9, 2026
- 🚀 New Added quickFilter prop to enable global search across all columns with simple text matching mode →
- 🚀 New Added smart search mode with multi-word AND logic, phrase search (quotes), negation (minus sign), and column-specific search (column:value syntax) →
- 🚀 New Added QuickFilterConfig for controlling filter text, mode, case sensitivity, searchable columns, and onChange callbacks →
- 🚀 New Added tableRef.setQuickFilter() method for programmatic control of the quick filter text →
- 🚀 New Added quickFilterable and quickFilterGetter properties to HeaderObject for customizing column behavior in quick filter →
- 🚀 New Exported QuickFilterConfig, QuickFilterMode, QuickFilterGetter, and QuickFilterGetterProps types for TypeScript support →
2.4.1
Migration Guide →Feb 6, 2026
- 🚀 New Added drag-and-drop column reordering in the column editor with visual drop indicators →
- 🚀 New Added built-in search functionality in the column editor with support for custom search functions →
- 🚀 New Added columnEditorConfig prop to replace columnEditorText with more configuration options →
- 🚀 New Added unified icons prop for configuring all table icons in one place (drag, expand, filter, sort, pagination, etc.) →
- ⚡ Improved Improved column editor UI/UX with better spacing, sticky search bar, and text overflow handling →
- ⚡ Improved Added new CSS classes and variables for column editor styling →
- 💥 Breaking Removed columnEditorPosition prop →
- 💥 Breaking Deprecated individual icon props (expandIcon, filterIcon, sortUpIcon, etc.) in favor of unified icons prop →
2.4.0
Feb 3, 2026
- 🐛 Fix Fixed copy functionality bug when enableRowSelection is enabled. Copy operations now work correctly with row selection enabled. →
2.3.8
Jan 31, 2026
- 🚀 New Added enableStickyParents prop (beta) to make parent rows sticky while scrolling through their children in row grouping. Defaults to false. This is a beta feature and may have edge cases that need refinement. →
2.3.1
Jan 30, 2026
- 🚀 New Added toggleColumnEditor() method to programmatically open, close, or toggle the column editor menu. Call with true to open, false to close, or no argument to toggle. →
- 🚀 New Added applyColumnVisibility() method to programmatically control which columns are visible. Pass a partial or complete visibility state object to show/hide specific columns. Perfect for implementing custom column visibility presets or views. →
2.3.0
Jan 29, 2026
- 🐛 Fix Fixed column visibility checkbox logic in the column editing popout. Checkboxes are now checked when columns are visible, and unchecked when hidden (previously was inverted). →
2.2.9
Jan 28, 2026
- 🚀 New getRowId function.getRowId={({ row }) => row.id as string}. The getRowId function receives: row, depth, index, rowPath, rowIndexPath, and groupingKey for more flexible ID generation. →
- ⚡ Improved OnRowGroupExpandProps.rowIndexPath now contains ONLY numeric indices (no mixed string keys). Use rowIdPath for stable ID-based navigation. →
- 🐛 Fix Fixed skeleton loaders with pagination and external sorting with row grouping. →
- 🐛 Fix Virtualization now auto-disabled when height/maxHeight not provided. →
2.2.7
Jan 25, 2026
- 🚀 New Added sortingOrder property to HeaderObject for customizing the sort cycle per column. Define custom sort sequences like ['desc', 'asc', null] for numbers/dates or ['asc', 'desc', null] for text. This allows different columns to have different sort behaviors based on their data type. →
- 🚀 New Pagination footer now displays first page button with ellipsis when navigating to far pages (e.g., '1 ... 78 79 80'). This provides quick access to the beginning of the dataset without excessive scrolling through page numbers. →
- ⚡ Improved tableRef.setPage() now triggers onPageChange callback. Programmatic page changes via the table ref API now properly invoke the onPageChange callback, making it consistent with UI-triggered page changes. →
- 💥 Breaking tableRef.setPage() is now async and returns Promise<void>. Update your code to use await tableRef.current?.setPage(3) for consistency with other async API methods. →
2.2.6
Jan 24, 2026
- 🚀 New Added nested tables feature that allows each level of row grouping to have its own independent grid structure with completely different columns. Configure via the nestedTable property on expandable HeaderObjects to define custom column layouts for child levels. →
- 🚀 New Added support for dynamic nested tables with independent onRowGroupExpand handlers at each nesting level. Each nested table can specify its own handler in the nestedTable config, enabling complex lazy-loading patterns with clear, separate logic for each level. →
- ⚡ Improved Nested tables now automatically inherit certain props from the parent table (rows, state renderers, and icon props) for consistency and convenience. This ensures a unified experience across all nesting levels while reducing configuration overhead. →
- 💥 Breaking Moved rowHeight, headerHeight, footerHeight, and selectionColumnWidth props into the customTheme object. Use customTheme={{ rowHeight: 40 }} instead of rowHeight={40}. All properties are optional and will use default values if not specified. →
- 🐛 Fix Fixed a data flicker when using external sort →
2.2.1
Jan 13, 2026
- 🐛 Fix Fixed bug when re-ordering columns that could cause incorrect column positions or rendering issues.
2.2.0
Jan 13, 2026
- 💥 Breaking Removed getRowId prop - Simple Table no longer requires you to specify a unique identifier accessor. This simplifies configuration and reduces boilerplate. →
- 💥 Breaking Removed rowId parameter from onRowGroupExpand callback - Use row.id (or any property from your row object) instead of the internal rowId path string. →
2.1.7
Jan 7, 2026
- 🐛 Fix Fixed alignment when row grouping and siblings have children but one or more siblings does not have children - the collapse/expand icon won't show but the text in the rows will still align correctly
2.1.6
Jan 6, 2026
- 🐛 Fix Keyboard navigation bug fix
2.1.5
Jan 6, 2026
- 🚀 New Added hideHeader prop to hide the entire table header row while maintaining all table functionality →
2.1.4
Jan 4, 2026
2.1.3
Jan 4, 2026
- 🐛 Fix Fixed enum cell editing bugs that prevented proper value selection and updates
- 🐛 Fix Fixed datepicker cell editing bugs that caused incorrect date handling and display issues
2.1.0
Jan 4, 2026
- 🚀 New Added expandAll() method to expand all rows at all depths in hierarchical data →
- 🚀 New Added collapseAll() method to collapse all rows at all depths →
- 🚀 New Added expandDepth(depth) method to expand all rows at a specific depth level (0-indexed) →
- 🚀 New Added collapseDepth(depth) method to collapse all rows at a specific depth level →
- 🚀 New Added toggleDepth(depth) method to toggle expansion state for a specific depth level →
- 🚀 New Added setExpandedDepths(depths) method to set which depths are expanded, replacing current state - perfect for restoring saved expansion state →
- 🚀 New Added getExpandedDepths() method to retrieve currently expanded depths as a Set - useful for saving expansion state →
- 🚀 New Added getGroupingProperty(depth) method to get the grouping property name for a specific depth index →
- 🚀 New Added getGroupingDepth(property) method to get the depth index for a specific grouping property name →
2.0.9
Jan 3, 2026
- ⚡ Improved Enhanced screen reader support with improved announcements for table interactions, cell selection, and data updates
- ⚡ Improved Improved keyboard navigation - Tab and Shift+Tab now properly apply and remove filters, sorting, and other table actions
- ⚡ Improved Added comprehensive ARIA attributes throughout the table for better accessibility compliance and assistive technology support
2.0.8
Dec 26, 2025
- 🚀 New Added components prop to HeaderRendererProps containing sortIcon, filterIcon, collapseIcon, and labelContent - allowing custom positioning of header elements →
2.0.6
Dec 22, 2025
- 🚀 New Added autoExpandColumns prop to scale all column widths proportionally to fill the container - perfect for responsive tables that adapt to their container size →
2.0.4
Dec 21, 2025
- 🚀 New Added maxHeight prop to enable adaptive height with virtualization - table shrinks to fit content when there are few rows →
2.0.3
Dec 16, 2025
2.0.2
Dec 15, 2025
- 🐛 Fix Bug fixes with strong border around row groups.
1.9.8
Dec 12, 2025
- 🐛 Fix Row index now accounts for pagination
1.9.7
Dec 11, 2025
- ⚡ Improved Enhanced CellRendererProps with rowPath property to access the path through nested data structures →
- ⚡ Improved Updated CellRendererProps.formattedValue to support string[], number[], and boolean types for more flexible formatting →
- 🚀 New Added 'hovered' CSS class to cells, enabling custom hover state styling via CSS →
1.9.5
Dec 9, 2025
- 🐛 Fix Fixed bug with nested data that had the same ID as the parent row
1.9.4
Dec 8, 2025
- 🚀 New Added canExpandRowGroup callback prop to conditionally control which row groups can be expanded →
- 🚀 New Added getAllRows() method to TableRefType for retrieving all flattened rows including nested/grouped data →
- 🚀 New Added getHeaders() method to TableRefType for retrieving the table's current header/column definitions →
- 🚀 New Default skeleton loading state now appears automatically for dynamic row groups when no custom loadingStateRenderer is defined →
- 🚀 New Accessor type now supports nested array paths (e.g., 'albums[0].title' or 'awards[0]') for accessing array data →
- 🚀 New initialSortColumn now supports nested array paths (e.g., initialSortColumn='awards[0]') →
- ⚡ Improved ValueFormatter return type extended to support string[] and number[] for array formatting →
- ⚡ Improved ComparatorProps enhanced with valueA, valueB, and formattedValue properties for more flexible sorting logic →
- 🐛 Fix CSV export with pagination now exports all data instead of only the current page →
1.9.3
Dec 4, 2025
- 🐛 Fix Horizontal scrollbar showing up when it shouldn't
- 🐛 Fix Filter input on click on mobile sometimes closes the filter dropdown
- 🐛 Fix Height undefined should not use virtualization
1.9.2
Dec 3, 2025
- 🚀 New Added copyHeadersToClipboard prop to include column headers when copying selected cells to clipboard →
- 🚀 New Added includeHeadersInCSVExport prop to control whether headers are included in CSV exports (defaults to true) →
- 🚀 New Added tableEmptyStateRenderer prop to customize the display when the table has no rows (e.g., after filtering or with no data) →
1.9.0
Dec 1, 2025
- 🚀 New Added setLoading, setError, and setEmpty helper functions to OnRowGroupExpandProps for managing row-level states during async data fetching →
- 🚀 New Added rowIndexPath to OnRowGroupExpandProps - provides array path to navigate nested data structure (e.g., [0, 'teams', 1] for rows[0].teams[1]) →
- 🚀 New Added groupingKeys array to OnRowGroupExpandProps - provides all grouping keys from the hierarchy for better context awareness →
- 🚀 New Added loadingStateRenderer, errorStateRenderer, and emptyStateRenderer props for customizing state displays during dynamic loading →
- ⚡ Improved Enhanced dynamic row loading example with comprehensive three-level hierarchy (Departments → Teams → Employees) showcasing state management →
- ⚡ Improved Improved OnRowGroupExpandProps documentation with detailed examples of rowIndexPath usage for direct nested data updates →
1.8.9
Nov 29, 2025
- 🚀 New Added onRowGroupExpand callback prop for handling row expand/collapse events with detailed context →
- 🚀 New OnRowGroupExpandProps interface provides row, depth, groupingKey, and isExpanded for flexible data loading →
- ⚡ Improved Enhanced row grouping documentation with lazy-loading patterns and best practices →
1.8.8
Nov 28, 2025
- 🐛 Fix excludeFromRender does not affect copied values anymore.
1.8.6
Nov 25, 2025
- 🚀 New Added initialSortColumn and initialSortDirection props to set default sorting on table load →
- 🚀 New Added collapseDefault attribute to start collapsible/expandable columns in collapsed state →
- 🚀 New Added excludeFromRender to hide columns from table while keeping them in CSV exports (perfect for ID columns) →
- 🚀 New Added excludeFromCsv to hide columns from CSV exports while showing in table (perfect for action buttons) →
- 🚀 New Enhanced CellRendererProps with value and formattedValue props for easier custom rendering →
- ⚡ Improved useFormattedValueForClipboard and useFormattedValueForCSV now default to true when valueFormatter exists (reduces boilerplate) →
- ⚡ Improved Added distinct CSS variables for sub-column hover (--st-sub-cell-hover-background-color), dragging sub-headers (--st-dragging-sub-header-background-color), and selected sub-cells (--st-selected-sub-cell-background-color, --st-selected-sub-cell-color) →
1.8.5
Nov 24, 2025
- ⚡ Improved Improved virtual scrolling performance with improved memory usage and faster rendering of large datasets.
1.8.4
Nov 24, 2025
- 🚀 New Added comparator attribute to HeaderObject for custom sorting based on row-level metadata or complex logic →
- 🚀 New Added valueGetter attribute to extract values from nested objects or compute values dynamically for sorting →
- 🚀 New Added useFormattedValueForClipboard attribute to control whether cells copy formatted values (with symbols, formatting) or raw data →
- 🚀 New Added useFormattedValueForCSV attribute to use formatted values in CSV exports instead of raw data →
- 🚀 New Added exportValueGetter attribute to provide completely custom values for CSV export, different from both raw and formatted display values →
- 🚀 New Exported new TypeScript types: Comparator, ValueGetter, ExportValueGetter with full IntelliSense support
- ⚡ Improved Enhanced HR and Sales examples to showcase new clipboard and CSV formatting capabilities →
1.8.2
Nov 23, 2025
- ⚡ Improved Improved chart width calculations for better responsive behavior →
- ⚡ Improved Optimized virtualization engine for faster rendering and smoother scrolling
1.8.1
Nov 22, 2025
- 🚀 New Added lineAreaChart and barChart column types for inline data visualization →
- 🚀 New Smart copy/paste for chart columns: arrays format as comma-separated values (e.g., '10, 15, 12, 18, 25') →
- 🚀 New Chart cells can be pasted with comma-separated values that automatically parse to number arrays →
- ⚡ Improved Enhanced Infrastructure example with live-updating CPU history chart visualization →
1.7.9
Nov 22, 2025
1.7.6
Nov 19, 2025
- 🐛 Fix Fixed nested data accessors (e.g., accessor: 'latest.rank') to work correctly
1.7.5
Nov 19, 2025
- 🚀 New Added isLoading prop to display skeleton loaders while data is being fetched →
- 🚀 New New CSS variable --st-loading-skeleton-bg-color for customizing skeleton appearance →
- 🚀 New New st-loading-skeleton CSS class for advanced styling customization →
- ⚡ Improved Enhanced pagination demo to showcase loading states during page transitions →
1.7.0
Nov 13, 2025
- 🚀 New Added server-side pagination support with new props: onPageChange, serverSidePagination, and totalRowCount →
- 🚀 New Enable cell selection using keyboard shortcuts (Shift + Arrow keys, Ctrl/Cmd + A, etc.) →
- ⚡ Improved Improved cell selection while scrolling for a smoother experience →
- ⚡ Improved Pagination now shows overflow visible when no height is specified, eliminating unnecessary scrolling →
1.6.7
Nov 9, 2025
- ⚡ Improved Reduced bundle size for improved loading performance
1.6.6
Nov 9, 2025
1.6.1
Oct 27, 2025
- ⚡ Improved Enhanced footer pagination controls for better usability and performance →
1.5.0
Oct 19, 2025
1.4.7
Oct 18, 2025
View full release notes and download packages: