← Back to changelog

gp-grid v1.0.0

·GitHub release

gp-grid 1.0.0 is the first stable major release. React, Vue, Angular, and the framework-agnostic core share the new capabilities, with zero external runtime dependencies and no feature paywalls.

Layout and navigation

  • Column pinning keeps start/end columns visible, with horizontal column virtualization, overscan, and RTL-aware input.
  • Column layout resolves widths and geometry centrally. Immutable definitions and identity-keyed state preserve user widths, order, visibility, and pins when schemas change.
  • Frozen rows keep a leading prefix visible below the fixed header.
  • Row heights follow record identity and preserve scroll anchors.
  • Auto-fit and row resizing add edge handles, one-shot measurement commands, and keyboard shortcuts.
  • Column groups provide nested headers, configurable band heights, and shared group renderers.

Data and writes

  • Zero-copy columnar sources borrow column arrays for read-only access without materializing a row-object dataset.
  • Row grouping and aggregation add hierarchical views, expansion commands, group labels, aggregates, and totals.
  • Server grouping pages groups and leaves through an application service, with lazy expansion, placeholders, explicit budgets, and retryable errors.
  • Read-only pivot tables support a local engine or precomputed results, with generated column identities and schema helpers.
  • Write commands and history report one onWriteCommitted event per edit, paste, fill, or programmatic write. Optional bounded undo/redo operates by record identity; rejected writes report their reason and operation.
  • Update-only transactions redraw changed rows without a new query. Call core.refresh() when a changed sort/filter field must immediately move the row; additions and removals reload as before.

Fixes and qualification

This release fixes data-source replacement at runtime, grouped headers on the first render, editor focus restoration, numeric edit coercion, and scroll corrections during wheel and touch motion. It also reduces unnecessary React renders for column-window-only batches.

The repository's release qualification covers React, Vue, and Angular on Chrome, Firefox, and WebKit. Headers and cells expose row/column indices, and hierarchical views use role="treegrid". Sorting, filter popups, and pin toggles remain pointer-only header actions in 1.0.

Migrating from 0.23.x

Upgrade every installed @gp-grid/* package together. Choose your wrapper:

bun add @gp-grid/react@^1.0.0

Keep your existing @gp-grid/<package>/dist/styles.css import. Vue now requires ^3.5.0; React ^18 || ^19 and Angular >=18 requirements are unchanged.

The main application changes are:

  • Move imperative calls into namespaces: core.getRowCount() becomes core.rows.getCount(), core.startEdit() becomes core.edit.start(), and core.setSort() becomes core.sortFilter.setSort().
  • Update interaction callbacks to receive one identity-bearing object. Column moves use { columnId, fromViewIndex, toViewIndex }, resizes use { columnId, width, viewIndex }, and row drags use { rowId, fromViewIndex, toViewIndex }.
  • Read and restore column state through core.columns; definitions are no longer mutated during interaction.
  • Use core geometry for bounds and scroll targets. Visible windows have exclusive end indices, and ARIA row counts include header bands.
  • Replace removed Vue/Angular internal exports with public component, renderer, and data APIs. Import shared helpers from @gp-grid/core where documented.
  • Account for numeric edit coercion, read-only group/total rows, new full-label fields, and update-only transactions that preserve row position until the next query.

Follow the React, Vue, or Angular migration guide for wrapper-specific changes. The shared core reference covers the complete imperative API mapping, custom adapters, filters, and geometry.

Source: upstream 1.0.0 changelog, upstream migration guide, and release comparison.