Changelog
Release history and updates for Simple Table.
4.2.7
Aug 30, 2026
- 🐛 Fix Resizing the window or the table's parent no longer lags. Columns settle with the layout instead of jumping after you stop.
- 🐛 Fix Cells no longer slide around while you are still resizing.
- ⚡ Improved The table fills its parent width, so you do not get a leftover gap or overlapping columns when the layout grows or shrinks.
4.2.6
Aug 29, 2026
- ⚡ Improved Header and body stay lined up when you scroll sideways. They no longer drift apart on wide tables.
4.2.4
Aug 29, 2026
- 🚀 New Angular: import SimpleTableImports and write stCell, stEmpty, and stHeader in the page template. Columns stay in TypeScript. Buttons in the empty state stay clickable. →
- 🚀 New Listen with (sortChange), (rowSelectionChange), (cellClick), and the other Angular outputs. The older [onSortChange] inputs still work. →
4.2.3
Aug 29, 2026
- ⚡ Improved Opening or closing a row group is much faster, especially when the table has many rows and animations are off. →
- 🐛 Fix Custom cells in grouped rows no longer keep the previous row's content after you expand, collapse, or scroll. →
- 🐛 Fix Editing a cell after you scroll now saves on the row you see, not an earlier row that cell was reused for.
- ⚡ Improved Angular tableEmptyStateRenderer can take a component class. You no longer need to wrap it with wrapAngularRenderer first. →
4.2.2
Aug 28, 2026
- 🐛 Fix With autoExpandColumns and more than one pinned column, dragging an earlier pinned column wider now grows that column. Before, only the last pinned column next to the main grid would widen. →
4.2.1
Aug 28, 2026
- 🐛 Fix Switching languages now updates the column editor button, search placeholder, and Reset columns label, not only the headers and editor row names. →
- 🚀 New resetText option on columnEditorConfig. Set the label on the Reset columns button. →
- 🐛 Fix Changing className, columnBorders, hideHeader, or hideFooter now updates the table that is already on the page.
- 🐛 Fix Turning on header editing, column dragging, or column resizing after the table is on the page now adds those controls. Turning them off removes them. →
- 🐛 Fix Turning pin controls on or off in the column editor, changing the editor row layout, or passing new icons now updates the table that is already on the page. →
4.2.0
Aug 26, 2026
- 🐛 Fix Changing a column label now updates the names in the column editor, not only the table headers. →
- 🐛 Fix Changing a column tooltip, formatter, custom cell, filter settings, sort, or alignment now updates the table that is already on the page.
4.1.9
Aug 24, 2026
- 🐛 Fix Changing a column label, such as when you switch languages, now updates the header as well as the cells.
- 🐛 Fix Unpinning a column and pinning it again no longer leaves a custom header blank. →
4.1.8
Aug 22, 2026
- 🚀 New modern-black theme. Near-black background, hairline borders, and the Simple Table blue for selection and charts →
- 🐛 Fix Auto-width columns now leave room for the sort arrow before you sort, so the header label doesn't get cut off on the first click. →
- 🐛 Fix Auto-width columns that can be filtered now leave room for the filter icon even when that column is scrolled out of view. →
- 🐛 Fix Search boxes and other inputs inside the table now use the theme text color instead of staying black.
4.1.7
Aug 16, 2026
- ⚡ Improved Dragging a column now slides the headers and the cells under them into their new places as you drag. →
- ⚡ Improved Dragging a column now drops it into the new spot and shifts the columns in between, instead of swapping with only the column you drop on. →
- ⚡ Improved The column you are dragging stays highlighted. Neighboring headers stay see-through so labels don't cover each other as they pass.
- 🐛 Fix Header tooltips no longer appear while you drag a column. →
- 🐛 Fix If you put more than one table on a page, including a nested table, each one keeps its own selection, filter menus, editors, and column widths.
- 🐛 Fix Hiding or pinning a column no longer changes the column objects you passed in. Two tables can share the same columns list without one affecting the other. →
- 🐛 Fix Table styles no longer change the text color of inputs outside the table.
4.1.6
Aug 8, 2026
- 🚀 New enablePivotPanel option. Open the column editor to move fields into Rows, Columns, and Values, pick how numbers are totaled, and see the table update right away. →
- ⚡ Improved If you put more than one field in Rows (for example Quarter and Product), the table shows a full row for each pair — not a collapsed group you have to expand. →
- ⚡ Improved Pivot panel text, buttons, and dropdowns match the size and look of the rest of the column editor.
4.1.5
Aug 8, 2026
- 🐛 Fix Vue: changing rows, columns, or handlers after the table first appears now updates the table instead of keeping the first data.
- 🐛 Fix Vue, Solid, Angular, and Svelte: custom header UI no longer resets when you sort or filter. Open menus and toggles stay as they were.
- ⚡ Improved Vue, Solid, Angular, and Svelte: columns that size to their content update correctly after custom cells or headers load, including when loading finishes.
4.1.4
Aug 6, 2026
- 🚀 New cellClass on a column applies a CSS class to every body cell in that column. →
4.1.3
Aug 5, 2026
- 🐛 Fix Pinning or unpinning a column in the column editor now moves that row into the left, middle, or right list even when the overall column order does not change. →
4.1.2
Aug 1, 2026
- 🐛 Fix Angular 19+ apps can import the table in a standalone app without a compiler error about standalone components.
- 🐛 Fix Svelte: TypeScript now finds the SimpleTable types when you install the package.
- 💥 Breaking Svelte: the table now requires Svelte 5 or newer.
4.1.1
Jul 29, 2026
- 🚀 New getRowClass option lets you add CSS classes to a row from its data — for example to highlight a search match. →
- 🐛 Fix In row grouping, rows that cannot expand now line up with rows that can, instead of sitting indented differently. →
- 🐛 Fix Nested checkboxes in the column editor on large tables now toggle on the first click. →
- 🐛 Fix Hiding and showing columns quickly no longer leaves leftover slide animations, especially on pinned columns. →
4.1.0
Jul 28, 2026
- 🚀 New Group checkboxes in the column editor can be empty, mixed (minus mark), or fully checked when every child column is visible. →
- ⚡ Improved Clicking a mixed group checkbox shows every column in that group, instead of snapping back to mixed.
- 🐛 Fix React: custom column-editor rows keep tooltips and other local UI when the list refreshes. →
- 🐛 Fix Sticky headers stay opaque while you scroll, so rows no longer show through them (most noticeable on the modern-light theme).
4.0.9
Jul 26, 2026
- 🚀 New Column definitions, table props, helpers, and cell/header functions can take your row type. Works in React, Solid, Vue, Svelte, Angular, and vanilla. If you skip the type, nothing changes.
- 🚀 New getVisibleRows() and getAllRows() now return your row type, so you do not need to cast.
- ⚡ Improved Live updates, filters, pivot, and row grouping autocomplete column names from your row type.
- 🐛 Fix A nested table can use a different row type than the parent table, without extra casts.
- ⚡ Improved Filter and date pickers match the table's compact or roomy spacing. Calendar clipping and picking a month or year in the cell editor are fixed.
4.0.8
Jul 26, 2026
- ⚡ Improved Built-in header icons are a matching set (the filter icon is a stack of bars). They follow the table text color. →
- ⚡ Improved Checkboxes, select menus, the column-editor drag handle, pagination, and date-picker arrows use the same icon style.
4.0.7
Jul 25, 2026
- 🐛 Fix When you scroll past the first or last row, the table background stays solid instead of showing whatever is behind it.
4.0.6
Jul 25, 2026
- 🚀 New updateData now accepts rowId (from getRowId) as well as rowIndex. If you pass both, rowId is used. Updates still hit the right row after sort or filter. →
4.0.5
Migration Guide →Jul 22, 2026
- 💥 Breaking Renamed: defaultHeaders → columns, HeaderObject / *HeaderObject → ColumnDef / *ColumnDef, editColumns → enableColumnEditor, shouldPaginate → enablePagination, onGridReady → onTableReady, useHoverRowBackground / useOdd* → hoverRowBackground / odd*, and isSortable / isEditable / isEssential → sortable / editable / essential (including values you read back from columns). →
4.0.3
Jul 21, 2026
- 🐛 Fix Columns with excludeFromRender: true no longer leave a gap, shove neighbors after a resize, or take space from flexible columns. They are skipped the same way as hidden columns, including in pinned areas. →
- 🚀 New footerRenderKey refreshes a custom footer when outside state changes (for example a loading flag), without rewriting the footer function. Updating rows also refreshes the footer even if the row count stays the same. →
4.0.1
Jul 20, 2026
- ⚡ Improved isLoading keeps existing rows visible and adds skeleton rows below. An empty table still shows a full skeleton page. Clear the rows if you want a full reload. Useful for pagination and infinite scroll. →
4.0.0
Jul 20, 2026
- 🚀 New pivot prop and helpers (setPivot, getPivot, getPivotHeaders, getPivotedRows). Turn a flat list into rows, columns, totals, and nested headers — no drag-and-drop panel required. →
- 🐛 Fix In row grouping, sticky parent rows now show the right group after you sort or reorder, instead of keeping an old label while you scroll. →
3.9.9
Jul 15, 2026
- 🚀 New enableVirtualization (default true). Set it to false to draw every row and column, while height and maxHeight still work.
- 🐛 Fix When isLoading is true and there are no rows, every placeholder row shows a skeleton. Before, they could share the same getRowId (for example "undefined") so only the first row looked like a skeleton. →
3.9.8
Jul 14, 2026
- 🐛 Fix Rebuilding columns or copying rows on every render no longer flickers header menus or breaks column resizing.
- 🐛 Fix Live cell updates now follow filters and sort — rows hide, show, or reorder when an updated value no longer matches. →
3.9.7
Jul 11, 2026
- 🐛 Fix The selectableColumns prop works again.
3.9.6
Jul 10, 2026
- 🐛 Fix Shift+Arrow now contracts cell ranges.
- 🚀 New Added rowSelectionMode (single | multiple), selectRowOnClick, and showRowSelectionColumn for flexible row selection UX. →
- 🚀 New Keyboard support for row selection: Space toggles; Arrow/Home/End move focus (and selection in single mode); Shift expands ranges in multiple mode when selectableCells is off. →
- 🚀 New TableAPI: getSelectedRows, getSelectedRowsData, getRow, selectRow, deselectRow, toggleRowSelection, clearRowSelection. →
- 🐛 Fix Row expand arrows stay in sync when collapseAll() and expandDepth() run one after the other (for example Only Divisions). →
- 🐛 Fix Hovering a row no longer highlights the same rowId in other tables on the same page.
- 🐛 Fix Expandable columns in row-grouped tables now show and clear loading placeholders when isLoading turns on and off, instead of staying on old content or skeletons. →
3.9.5
Jul 10, 2026
- 🐛 Fix Empty tables show a full-width empty message again, and still scroll horizontally when headers are too wide.
- 🐛 Fix Custom header UI (pins, popovers, and similar) no longer resets when you sort or filter.
- 🐛 Fix Auto-sized columns with custom cell layouts no longer stay too wide after data finishes loading.
3.9.3
Jul 8, 2026
- 🐛 Fix Empty tables show the horizontal scrollbar when headers overflow, while the empty message stays full-width.
- 🐛 Fix body rows failing to remount after a filter briefly matched zero rows (e.g. typing a smart-filter negation).
- 🐛 Fix Column editor strip uses a pointer cursor across the full bar, and opening the popout no longer thins the table's right border along the sticky label.
- 🐛 Fix Double-click to fit a column no longer freezes React tables that use custom cells.
3.9.2
Jul 8, 2026
- 🐛 Fix Tooltips and popovers in custom headers (for example Radix) now close after you sort, instead of staying open with no way to dismiss them.
- 🐛 Fix "auto" width now sizes collapsible headers correctly, reserves collapse-icon space, and shows the horizontal scrollbar when headers overflow an empty table.
- 🐛 Fix "auto" width no longer over-allocates for multi-line valueFormatter output.
- 🐛 Fix blank rows after resize and scrolling back up.
3.9.1
Jul 6, 2026
- ⚡ Improved If the table's container is animating (for example a collapsing sidebar), the table resizes once at the end instead of on every frame.
- 🐛 Fix Expanding a lazy-loaded group again no longer uses an old row, which used to cause extra fetches, loading flashes, and jumpy sibling rows.
3.9.0
Jul 5, 2026
- 🐛 Fix Sorting while scrolled no longer slides empty spacer rows across the table.
- 🐛 Fix Pinned cells no longer go blank after you sort while scrolled.
- 🐛 Fix The first visible row now moves on sort like the other rows.
3.8.9
Jul 4, 2026
- ⚡ Improved With autoExpandColumns, columns still stretch to fill extra space, but when there isn't enough room they keep their size and the table scrolls sideways instead of squishing them. →
3.8.7
Jul 1, 2026
- ⚡ Improved Bar and line charts render crisper. →
- 🐛 Fix The expandable column in row-grouped tables now shows a loading skeleton while isLoading is true, instead of staying blank.
- 🐛 Fix resetColumns() resets to the configured column definitions instead of the table's mount-time state, so resets are consistent across sessions.
- 🐛 Fix If you change a handler like onSortChange after the table first appears, the table uses the new handler.
- 🐛 Fix "auto" width measures custom headerRenderer content instead of falling back to a default width.
- 🐛 Fix "auto" width reserves space for the sort icon, so sorted headers no longer clip.
- 🐛 Fix "auto" width measures custom cell content at its natural size, so cells that clip long text no longer make the column too narrow. Use maxWidth if you want a cap and truncation. →
- 🐛 Fix "auto" widths are computed from content only — the same columns and data produce the same widths regardless of container size or scroll position.
- 🐛 Fix "auto" width falls back to the header label when a custom headerRenderer can't be measured in an empty table, so headers stay readable instead of collapsing.
3.8.6
Jun 28, 2026
- ⚡ Improved Sticky column editor label.
- 🐛 Fix Collapsing a column group no longer animates unrelated columns, and multiple groups can stay collapsed at once.
- 🐛 Fix empty cells after sorting.
3.8.5
Jun 27, 2026
- 🐛 Fix When the page or another box scrolls the table, rows now appear correctly as you scroll.
- 🐛 Fix Clicking sort many times in a row no longer breaks animations.
- ⚡ Improved Smoother sort animations when the page scrolls the table.
- 🐛 Fix Live updates start working again after you click sort many times.
3.8.4
Jun 27, 2026
- 🐛 Fix A table with maxHeight can still scroll when server-side rows are empty.
- 🐛 Fix Custom footers load the right page when you use server-side pagination.
- 🐛 Fix Wide tables only draw columns you can see, instead of every column.
- 🐛 Fix If the scroll parent isn't ready when the table first appears, the table still picks it up.
- 🐛 Fix When the page scrolls the table, the first screen of rows fills in correctly.
- ⚡ Improved The table does less work when cell data hasn't changed.
- 🚀 New Limit which filter operators a column offers.
- 🐛 Fix toggleColumnEditor() closes the editor if it is already open.
3.8.3
Jun 25, 2026
- 🐛 Fix Old cell content no longer stays on screen after data changes.
- 🐛 Fix maxHeight set with CSS calc() now scrolls correctly.
3.8.1
Jun 23, 2026
- 🐛 Fix Export-only columns no longer add extra empty horizontal scroll.
- 🐛 Fix Auto-expand no longer leaves space with collapsed groups.
- 🐛 Fix Clicks on links and buttons inside cells now work.
- 🐛 Fix The header row still appears if the table starts with no columns.
- 🐛 Fix "auto" columns now size per page when paginating.
3.8.0
Jun 22, 2026
- 🚀 New Added width: "auto" to size columns to their content.
3.7.3
Jun 13, 2026
- ⚡ Improved License changes.
3.7.2
Jun 13, 2026
- 🐛 Fix Mobile horizontal scroll fix.
3.7.1
Jun 13, 2026
- 🐛 Fix General improvements
3.7.0
Jun 13, 2026
- 🐛 Fix Accessibility improvements
3.6.8
Jun 13, 2026
- 🐛 Fix Bug fixes.
3.6.4
Jun 8, 2026
- ⚡ Improved Row and column motion works when the footer is above the table (footerPosition: "top").
- 🐛 Fix Custom header content renders correctly.
3.6.3
May 31, 2026
- 🚀 New footerPosition prop ("top" | "bottom", default "bottom") controls placement of the pagination footer. →
- 🚀 New Every row gets a st-row-position-{n} class (body, empty/loading rows, and nested tables), so you can style a specific row in CSS — for example .st-row-position-3 { ... }.
3.6.2
May 16, 2026
- 🚀 New You can use enableStickyParents with scrollParent. Grouped parent rows stay under the sticky header when the page (or another box) scrolls the table. →
- ⚡ Improved No more console warning when enableStickyParents and scrollParent are used together.
3.6.0
May 15, 2026
- 🚀 New scrollParent prop (HTMLElement | "window" | () => HTMLElement | null). Use it when you do not set height or maxHeight; the parent’s scroll loads rows as you move. →
- 🚀 New With scrollParent, onLoadMore fires based on how close the bottom of the table is to the parent’s scroll position. →
- 🚀 New infiniteScrollThreshold prop (default 200px) is how close to the bottom onLoadMore fires. →
- 🚀 New In scrollParent mode, the header sticks to the top of the parent. Extra padding at the top of the parent is accounted for. →
- ⚡ Improved Pulling past the edge of the scroll parent no longer rubber-bands the sticky header out of place. Normal overscroll returns when the table unmounts.
- ⚡ Improved enableStickyParents does nothing and logs a warning if you also set scrollParent (they could not work together yet; this was fixed in 3.6.2).
3.5.3
May 9, 2026
- 🐛 Fix Dragging a nested header under a pinned parent treats it as pinned, like the parent.
- 🐛 Fix Resizing auto-expand columns uses the widths on screen, so the drag matches the layout.
- 🐛 Fix Auto-expand width limits use the real pinned and main areas, and only cap growth when that area actually gets wider.
3.5.2
May 3, 2026
- ⚡ Improved Row grouping expand/collapse animates row heights instead of snapping.
- ⚡ Improved Hiding and showing columns, and pinning or unpinning, now slides sideways. Reordering columns still slides neighbors into place.
- ⚡ Improved Scroll fast path keeps row separators in sync with cells—no visual lag.
- 🐛 Fix Nested tables: unstable keys broke slide animations after sort/sibling expand; expand chevrons could toggle wrong row after sort—stable keys + live DOM refs.
- 🐛 Fix Nested-row expansion shifted rows vertically but separators cached only flatten index—stuck wrong until another redraw.
- 🐛 Fix Pinned-left body was appended after main in flex—pinned cells sat past the viewport; fixes DOM insert order for left/main/right.
- 🐛 Fix Pinned viewport width missing from render cache—separators/layout could mismatch the pinned strip.
- 🐛 Fix Scrollbar gutter measured on wrong element misaligned header filler; header height no longer adds stray border padding.
- 🐛 Fix Sticky overlay blocked clicks; sticky column indices didn’t match virtualized body cells—selection drifted.
- 🐛 Fix Fast hovers stacked tooltip timeouts—duplicate/stray header tooltips.
- 🐛 Fix Selection used stale col/row indices after hide/reorder; header aria-colindex now matches body columns.
3.4.2
Apr 26, 2026
- 🐛 Fix Horizontal scrollbar bug fixes.
3.0.10
Apr 12, 2026
- 🐛 Fix General bug fixes and improvements.
3.0.0
Migration Guide →Mar 29, 2026
- 💥 Breaking Import from @simple-table/react (or /vue, /angular, /svelte, /solid) instead of simple-table-core
- 💥 Breaking simple-table-core is now plain JS — no framework components exported
- 🚀 New Column virtualization for tables with many columns
- ⚡ Improved Framework-agnostic core with dedicated adapters for each framework
2.6.3
Mar 28, 2026
- 🐛 Fix copy-paste issues in table cells.
2.6.2
Mar 22, 2026
- 🚀 New columnEditorConfig.allowColumnPinning — hide L/R pin controls in the editor (default true) →
- 🚀 New ColumnDef.essential →
- 🚀 New tableRef.getPinnedState and applyPinnedState for left / main / right accessor lists →
- 🚀 New icons.pinnedLeftIcon and icons.pinnedRightIcon for column editor pins →
- 🚀 New customRenderer: pinnedLeftList, unpinnedList, pinnedRightList plus listSection →
- 🚀 New rowRenderer: panelSection, essential, canToggleVisibility, allowColumnPinning, pinControl →
- ⚡ Improved Default column editor can list left, main, and right sections when pins apply →
2.5.7
Mar 16, 2026
- 🐛 Fix a bug where the table height was not being calculated correctly when there were no columns.
2.5.6
Mar 9, 2026
2.5.3
Feb 25, 2026
2.5.0
Feb 22, 2026
- 🐛 Fix column resizing when pinned sections reach max width →
- 🐛 Fix double-resize issue on chart columns →
- 🐛 Fix pinned columns behavior with nested headers →
- 🐛 Fix pinned columns compatibility with autoExpandColumns →
- ⚡ Improved Enhanced column auto-sizing logic and constraints →
- ⚡ 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 hover effects on sticky parent rows →
- 🐛 Fix horizontal scrolling on sticky rows →
- 🐛 Fix Removed resize handle from last column when autoExpandColumns is enabled →
2.4.4
Feb 11, 2026
- 🐛 Fix a drag/drop bug in the column editor popout.
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 ColumnDef 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 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 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 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 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 ColumnDef 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 ColumnDefs 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 a data flicker when using external sort →
2.2.1
Jan 13, 2026
- 🐛 Fix 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 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 enum cell editing bugs that prevented proper value selection and updates
- 🐛 Fix 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 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 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 TableAPI for retrieving all flattened rows including nested/grouped data →
- 🚀 New Added getHeaders() method to TableAPI 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 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 virtual scrolling performance with improved memory usage and faster rendering of large datasets.
1.8.4
Nov 24, 2025
- 🚀 New Added comparator attribute to ColumnDef 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 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 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 CSS variable --st-loading-skeleton-bg-color for customizing skeleton appearance →
- 🚀 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 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: