For a detailed breakdown of items please refer to the detailed pipeline here.


Version 15.0.0 [13-DEC-2017]

For details of this release, check our dedicated blog post for v15.0.0.




Breaking changes


Version 14.2.0 [16-NOV-2017]

For details of this release, check our dedicated blog post for v14.2.0.


Bug Fixes

Version 14.1.0 [07-NOV-2017]


Bug Fixes

Version 14.0.0 [02-NOV-2017]

For details of this release, check our dedicated blog post for v14 aka Halloween.


Bug Fixes


Version 13.3.1 [04-OCT-2017]


  • AG-851: Added support for React 16
  • AG-698: Added support for row class rules
  • AG-754: The floating filter icon now can be configured.
  • AG-776: Aurelia now supports header components and header group components.
  • AG-815: Grid Api for scrolling has been improved so that api.ensureNodeVisible and api.ensureIndexVisible now take an optional second parameter to specify where the node/index should be positioned on the screen. The valid values are: top, middle and bottom. If not specified, would not scroll into the row if already visible in the current viewport.
  • Bug Fixes

  • AG-862: Double clicking a group cell was not expanding the group
  • AG-861: Fixed issue with expandAll when using hideOpenParents:true
  • AG-759: Clear button does not work well when also providing filterOptions
  • AG-547: Set filter tristate was not working
  • AG-842: Fix issue with autosize for the columns and the new matherial theme
  • AG-829: Fix error in CellComp.prototype.stopEditing in certain cases
  • AG-406: Fix issue on touch devices where sub menus and custom menu items wouldn't work.
  • 13.2.x

    Version 13.2.0 [21-SEP-2017]


    Bug Fixes

    Version 13.1.x

    Version 13.1.2 [11-SEP-2017]

    Bug Fixes

    Version 13.1.1 [08-SEP-2017]

    Bug Fixes


    Version 13.1.0 [01-SEP-2017]

    Revert of Breaking Change

    Bug Fixes

    Version 13.0.x

    Version 13.0.1 [29-AUG-2017]

    Bug Fixes

    Version 13.0.0 [25-AUG-2017]


    Bug Fixes

    Breaking Change

    Version 12.0.x

    Version 12.0.2 [26-JUL-2017]

    Bug Fixes

    Version 12.0.1 [25-JUL-2017]

    Bug Fixes

    Version 12.0.0 [21-JUL-2017]

    New Features



    Bug Fixes

    Breaking changes

    Changes to Refresh

    The multiple refresh methods in the grid were confusing. We reviewed all the methods and replaced them with two simple equivalents: api.refreshCells(params) and api.redrawRows(params). For 99% of the time, you will call api.refreshCells(params). However - given the grid now has change detection, you may find that you don't need to call refresh ever again.

    Other API And Property Changes

    The following API and property changes were done around the renaming of pinned rows and aligned grids. All this is done to make the grid API easier to understand and interface with.

    AG-591: Breaking Change to Cell Renderer - To Support TypeScript 2.4

    cellRenderer.refresh() is now a mandatory method and returns boolean (previously it was optional and returned void). This is to support TypeScript 2.4 that mandated a breaking change (TypeScript 2.4 doesn't allow interface with just optional methods). Check the cellRenderer Refresh documentation for details on how to now implement this method. In summary, if you implemented this method before, just make sure you return true. If you did not implement this method before, then implement an empty version of it that returns false.

    Breaking Changes

    Version 11.0.x

    Version 11.0.0 [26-JUN-2017]



    Bug fixes

    Breaking Changes

    Version 10.1.x

    Version 10.1.0 [08-JUN-2017]



    Bug fixes

    Breaking Changes

    Version 10.0.x

    Version 10.0.1 [24-MAY-2017]

    Version 10.0.0 [22-MAY-2017]


    Bug Fixes:

    Breaking Changes:

    Version 9.0.x

    Version 9.1.0



    Version 9.0.3



    Version 9.0.2

    Bug Fix: Fixed Web Components issue, error "Cannot redefine property: infiniteBlockSize" solved.

    Version 9.0.1

    Bug Fix: License key was broken.

    Version 9.0.0

    Big Feature: Client Side Pagination (AG-91)

    ag-Grid 9.0.x introduces client side pagination. This replaces the old 'pagination row model' which forced you to bring back pagination pages one page at a time from the server. The client side pagination works with all row models and paginates on the client side. This means you have pagination work with the default in memory row model (and do filtering, sorting, grouping, pivoting etc on the data on the client side), or you can also put pagination in front of the viewport row model or infinite scrolling row model.

    Big Feature: Improved Column Groups (AG-315)

    ag-Grid 9.0.x also introduces multiple columns for groups and multi columns while grouping.

    Enhancements Bug Fixes: Refactoring:

    Version 8.2.x

    Enhancements: Bug Fixes:

    Version 8.1.x

    Small Breaking Change:

    For Angular 2+ users only: ag-grid-ng2 repository renamed tp ag-grid-angular. So in your dependencies (package.json), reference ag-grid-angular, not ag-grid-ng2.

    Enhancements: Bug Fixes:

    Version 8.0.x

    ag-Grid 8.1.1, ag-Grid-Enterprise 8.1.1

  • Bugfix: Fixed bug where the export to Excel will not export numerical cells
  • ag-Grid 8.1.0, ag-Grid-Enterprise 8.1.0

    Enhancements: Small Breaking Changes: Bug Fixes:

    Version 7.2.x

  • Enhancement: Excel Export.
  • Enhancement: Date Filter.
  • Enhancement: richSelect cell editor now works with empty strings.
  • Enhancement: new property enableGroupEdit, Set to true to allow editing of the group rows.
  • Enhancement: RTL verified to work with For Print.
  • Enhancement: New API getDocument() for overriding what document is used. Currently used by Drag and Drop (may extend to other places in the future). Use this when you want the grid to use a different document than the one available on the global scope. This can happen if docking out components (something which Electron supports).
  • Enhancement: Context menu now has CSV Export and Excel Export.
  • Enhancement: New api.onSortChanged(), call it if you update a cell with a new value and you want to apply the sort order again.
  • Enhancement: New property embedFullWidthRows.
  • Breaking Change: IAfterFilterGuiAttachedParams now called IAfterGuiAttachedParams (impacts TypeScript users only)
  • Bugfix: callback processCellForClipboard was not getting used when copying just one cell (ie not a range).
  • Bugfix: gridOptions.onItemsRemoved was incorrectly called gridOptions.onItemsRemove.
  • Bugfix: Column menu was disappearing while doing vertical scroll. Now it only disappears for horizontal scroll. This impacted when filtering changed the v scroll position (eg if everything filtered, scroll set back to top)
  • Bugfix: api.isAyFilterPresent() was returning true after api.setRowData() was called with new data and newRowsAction was not 'keep'.
  • Bugfix: horizontal scroll was sometimes not possible when no rows, now it is (so you can access column menu on RHS even if no rows).
  • Bugfix: classes ag-row-group-expanded and ag-row-group-contracted were not getting applied as group expanded and contracted.
  • Bugfix: if doing popup editing, and you click outside the grid, the edit is lost, which is different to click on another cell, where the edit is kept. Now they are in sync, clicking outside the pop always keeps the edit.
  • Bugfix: headerCellTemplate had classes in agText element removed. Now they are left alone.
  • Bugfix: rowIndex was missing from cellEditor params
  • Bugfix: CSS class ag-row-focus class was not getting applied to right row when rows were ordered or filtered
  • Bugfix: event selectionChanged was not getting fired when you had more than one row selected, then just clicked one row (all other rows get deselected).
  • Bugfix: api.sizeColumnsToFit() was incorrectly working out the vertical scroll value - meant it was out by the scroll width sometimes in its calculations.
  • Version 7.1.x

  • Enhancement: RTL support, so now you can support languages that go from right to left.
  • Enhancement: new events: rowEditingStarted, rowEditingStopped, cellEditingStarted, cellEditingStopped.
  • Enhancement: new property suppressClickEdit.
  • Enhancement: added api.clearFocusedCell()
  • Enhancement: added sendToClipboard
  • Enhancement: added custom keyboard navigation
  • Bug Fix: Sub menu was not working in Firefox, now fixed.
  • Bug Fix: Copy to clipboard was not copying focused cell then range selection was turned off.
  • Bug Fix: Pinned right header used to be mis-aligned by the scroll width. Now it's aligned.
  • Documentation: Angular 2 Examples Project now has examples for both SystemJS & SystemJS-Builder, Webpack and Angular-CLI
  • ag-grid-angular-7.1.2

    Bug Fixes

    Version 7.0.x

    ag-grid-7.0.2, ag-grid-enterprise-7.0.2

    Bug Fixes


    Version 7.0.x


    Bug Fixes

    Breaking Change

    Version 6.4.x

    ag-grid-6.4.2, ag-grid-enterprise-6.4.2

  • Enhancement - column group / pivot panels don't try and do anything if user rearranges, but leaves things in same order as the start.
  • ag-grid-6.4.0, ag-grid-enterprise-6.4.0, ag-grid-angular-6.4.0, ag-grid-react-6.4.0,


  • Big Enhancement - for grouping, pivoting and values, now you can reorder the columns in the drop zones.
  • Small Enhancement - added toolPanelClass so you can style tool panel items.
  • Small Enhancement - now if you scroll the grid, if a column menu or context menu are open, they will close, otherwise the menu gets out of line with the columns & cells.
  • Bug Fixes

  • Bugfix - for setFilter, setModel was not updating the 'Select All' button, is now
  • Bugfix - when using api.addItems() for standard row model (ie no virtual pagination or viewport) then items were added in reverse order.
  • Bugfix - in IE and Edge, when you edit a cell, then click another cell, the other cell doesn't get focus (eg navigation keys don't work) - appears to be a glitch in IE And Edge, this bug fix works around it
  • Breaking Change

  • Breaking Change - the following events now have the final list of columns, rather than those added / removed: columnRowGroupChanged, columnPivotChanged, columnValueChanged
  • Version 6.3.x


    Performance Enhancements

    In our tests the demo page used to take 1600ms to expand a row after grouping, it's now down to 600ms. We haven't tested teh other browsers, but you can expect these changes to at least have some positive improvements on them also. The changes we made were:

    Bug Fixes

    Version 6.2.1

    ag-grid 6.2.1, ag-grid-enterprise 6.2.1

  • Bugfix - range select threw error for virtual pagination when drag went below the available rows.
  • Bugfix - avg aggregation function was failing when value was undefined or null.
  • Bugfix - export to CSV was failing when doing count aggregation on data, now fixed.
  • Version 6.2.x

  • New Feature - Touch support.
  • New Feature - Default column and column group definitions. So instead of declaring common properties in each column, define them once in the default.
  • New Feature - Angular 2 Grid Creation via Markup. Option to create Grids with Markup (declaratively).
  • Enhancement - When using checkbox selection in groups, the property cellRendererParams.checkbox can be a function, so you can be selective on which rows have checkboxes.
  • Enhancement - Viewport row model now works with getRowNodeId(), so selection can now work with business keys.
  • Enhancement - Removed sorting the order of value columns when in pivot mode - now value columns displayed in order added.
  • Enhancement - Added 'pivotComparator' to allow defining order of pivot columns.
  • Enhancement - Added 'suppressToolPanel' to column definitions, so suppress columns from appearing in the toolpanel.
  • Enhancement - headerValueGetter now also works for column groups.
  • Enhancement - Added processSecondaryColDef and processSecondaryColGroupDef for pivoting, to allow modification of the pivot columns.
  • Enhancement - Added onlySelectedAllPages to CSV export - so if doing pagination, exports selected across all pages.
  • Bugfix - suppressSorting in Set Filter was not getting used, now fixed.
  • Bugfix - export to CSV was failing when doing avg aggregation on data, now fixed.
  • Bugfix - single click editing was resetting the edit when you clicked on an edited cell. This was introduced in the last release with 'fullRowEdit'. Now fixed.
  • Bugfix - when grouping, full width rows were not getting mouse scroll events processed, noe fixed.
  • Bugfix - when pasting, the cells did not get refreshed if first row was not editable.
  • Bugfix - when editing, the grid was working on ctrl+v, ctrl+c, ctrl+x, ctrl+d, which messed up the edit. Now the grid ignores these if you are editing the cell.
  • Version 6.1.1

    ag-grid-angular 6.1.1

  • AOT support - AOT is now an option when using ag-grid-angular.
  • Version 6.1.x

  • New Feature - Full Row Editing - to enable all cells in a row to be editable at the same time.
  • New Property - colDef.suppressNavigable - set to true (or function to return true) to stop the cell getting focus when tabbing around.
  • New Event - rowValueChanged - gets fired after a full row is updated.
  • ag-grid-angular - Upgrade to Typescript 2
  • Version 6.0.x

    ag-Grid 6.0.1, ag-Grid-Enterprise 6.0.1, ag-Grid-React 6.0.1, , ag-grid-angular 6.0.1

    Version 6.0.x brings the following changes:

    1. Bug Fixes and Improvements
    2. Improved React and Angular 2 Support
    3. Refactored Filters
    Below goes through each of these in turn.

    1 - Bug Fixes and Improvements

  • Breaking Change: React now uses props directly for the init params in filters, cellRenderers and cellEditors.
  • Breaking Change: Filter interface now called IFilter.
  • Breaking Change: api.getFilterApi() is now api.getFilterInstance().
  • Breaking Change: setColumnVisible() no longer accepts ColDefs as an argument. colIds or Columns are the available options now.
  • Enhancement: Tooltips now don't show if null or undefined.
  • Enhancement: Added api.getFloatingTopRowCount(), api.getFloatingBottomRowCount(), api.getFloatingTopRow(index), api.getFloatingBottomRow(index) for accessing pinned rows
  • 2 - Improved React and Angular 2 Support

    Lots of work has been done to support natively React and Angular 2, to allow you to plug in React and Angular 2 cellEditors and cellRenderers simply. Now, instead of using cellRenderer, you use cellRendererFramework as follows: // when not using React or Angular 2 colDef.cellRenderer = MyCellRenderer; // in v6, you can use React or Angular 2 components directly colDef.cellRendererFramework = MyReactCellRenderer; // for React colDef.cellRendererFramework = MyAngular2CellRenderer; // for Angular Full details on how get this all working are in the updated React and Angular 2 sections of the docs. If you are using Angular 2 or React, it's best you read these sections to see how to do things in the new improved way.

    3 - Changes to Filters

    How filters were working were out of line with how cellRenderers and cellEditors were working. This is because filters were done as one of the first items in ag-Grid and the interface has not changed. The changes in this release bring them in line with the newer 'Component Model' that is in ag-Grid, so they now behave in the same way as cellRenderers and cellEditors, including fitting in with React and Angular 2 components, the same way the renderers and editors do. The main core changes are as follows:

    1. If you were providing a Filter API then be aware the API is no longer a separate part of the component. Instead it is now possible to get a reference to the filter component directly via api.getFilterInstance(colKey). From here you can access all methods on the filter component. So if you want to add extra items to (what used to be) the API, now you just add them directly to your filter component. // eg if your filter was like this: function MyFilter() {} MyFilter.prototype.getApi = function() { return { getModel: function() { ... }, setModel: function(model) { ... }, } } // it should now be like this: function MyFilter() {} MyFilter.prototype.getModel = function() { ... } MyFilter.prototype.setModel = function(model) { ... }
    2. If you were providing custom params to your custom filters then these used to be passed to the filter embedded into the filter params. Now the custom params are added to the main params. // eg when you define this: colDef = { ... filter: MyFilter, filterParams: {a: 'A', b: 'B'} } // the old way resulted in: params = { column: Column, ... filterParams: { a: 'A', b: 'B' } } // but now it results in: params = { column: Column, ... a: 'A', b: 'B' }
    3. The constants for Number and Text filters are now strings and not numbers. If you were storing user preferences for these filters, you need to map the old numbers to the new string values.

      For Number filter, the mapping is as follows:

      • 1 => 'equals'
      • 2 => 'notEqual'
      • 3 => 'lessThan'
      • 4 => 'lessThanOrEqual'
      • 5 => 'greaterThan'
      • 6 => 'greaterThanOrEqual'

      For Number filter, the mapping is as follows:

      • 1 => 'contains'
      • 2 => 'equals'
      • 3 => 'notEquals'
      • 4 => 'startsWith'
      • 5 => 'endsWith'

    All the examples are up to date with the new way of doing things.

    Version 5.4.x

    ag-Grid 5.4.0, ag-Grid-Enterprise 5.4.0, ag-Grid-React 5.4.0, , ag-grid-angular 5.4.0

  • Enhancement: added API for startEditing().
  • Enhancement: now rememberGroupStateWhenNewData works when inserting/removing rows, ie group open/closed state is now kept when updating rows.
  • Enhancement: added columnKeys to api.copySelectedRowsToClipboard(), so you can choose which columns get used.
  • Enhancement: columns can now be reordered when in pivot mode (previously they were static).
  • Enhancement: ag-grid-react - now you pass in parent component to React cellRenderer - makes cellRenderer work with React Router and also should give performance improvements.
  • Enhancement: export to csv now allows you to specify particular columns.
  • Enhancement: export to csv now includes floating top and floating bottom rows.
  • Enhancement: toolPanel has lazy intialisation, so now if toolPanel not showing, it doesn't initialise.
  • Bugfix: copy range to clipboard was not taking in group values when group key was using valueGetter.
  • Bugfix: removed styles from border layout templates, used css classes instead. Fixed bug where chrome complained about 'styles violate Content Security Policy #1093'
  • Bugfix: for menus, sub menu was appearing in wrong place when normal 'display to right' position was off screen.
  • Version 5.3.x

    ag-Grid 5.3.1, ag-Grid-Enterprise 5.3.1

  • Enhancement: added 'Copy with Headers' option to context menu, to copy header values when copying to clipboard.
  • Enhancement: added 'Flower Nodes' concept, to allow easy mechanism for providing expandable rows for master / detail and fullWidth.
  • Bugfix: onDragStopped was getting called on header button clicks, even if not dragging was taking place.
  • ag-Grid 5.3.0, ag-Grid-Enterprise 5.3.0

  • Enhancement: new feature - Full Width Rows and Master / Details
  • Enhancement: setFilter - now the search box is focused when you open setFilter
  • Breaking Change: if using groupUseEntireRow=true, you will notice the group row is now a fullWidth row, hence will span pinned sections and not scroll horizontally. This is by design. Functionality should be the same, just the grid will look a big different.
  • Bugfix: Aggregation function 'count' was only working with number values. Now works with any value type.
  • Bugfix: forPrint was broken with last release, now fixed again.
  • Version 5.2.x

    ag-Grid 5.2.0, ag-Grid-Enterprise 5.2.0, ag-grid-angular 5.2.0

    Bug Fixes and Angular 2 Cell Rendering

  • Enhancement: Now you can create cellRenderers using Angular 2. See Getting Started Angular 2
  • Enhancement: Now context menu appears when you click outside of the rows, including when no rows present.
  • Enhancement: Added columnApi.autoSizeAllColumns().
  • Enhancement: Allowed following methods to work with pagination: forEachLeafNode, forEachNodeAfterFilter, forEachNodeAfterFilterAndSort.
  • Enhancement: Callbacks getRowStyle and getRowClass get called after the data is set as well as when the row is created. Helps viewport and infinite pagination, to add styles and classes after the rows are loaded.
  • Enhancement: external filter present can not be true when grid initialises
  • Enhancement: updated virtual pagination example, to show graceful deletion
  • Bugfix: setFilter was not removing entries correctly when other filters were set if filterParams was missing.
  • Bugfix: when browser was vertically scrolled, the ghost icon while dragging was not positioned correctly.
  • Bugfix: when groupSelectsChildren=true, was failing to update top parent rows when 3 or more columns grouped.
  • Bugfix: api.getVirtualPageState() was returning undefined, now works.
  • Bugfix: case issue with iDatasource, it was getting imported as iDataSource in places.
  • Version 5.1.x

    ag-Grid 5.1.2, ag-Grid-Enterprise 5.1.2

  • Enhancement: Adding and removing of rows now allowed in normal row model. See new documentation page on 'Insert & Remove'.
  • Enhancement: Virtual Pagination engine is rewritten. New and improved allowing inserting of rows and refreshing of the cache and other smaller pieces. See the documentation page on virtual pagination for details.
  • Breaking Change: Removed datasource properties maxConcurrentDatasourceRequests, maxPagesInCache, overflowSize and pageSize. Replaced with grid properties maxConcurrentDatasourceRequests, maxPagesInCache, paginationOverflowSize, paginationInitialRowCount, paginationPageSize.
  • Enhancement: node id's are now strings, not numbers. This is to allow you to give nodes the same id's as your data store.
  • Enhancement: new callback getRowNodeId(), for setting node ids to what you want. Useful for pagination and virtual pagination to allow for selection of rows when doing server side sorting and filtering.
  • Version 5.0.x

    ag-Grid 5.0.7, ag-Grid-Enterprise 5.0.7

  • Enhancement: cellRenderer for richSelect is no longer mandatory, now default text renderer used in richSelect if no cellRenderer specified
  • Enhancement: renamed all 'aggregation' (eg getAggregationColumns) method to 'value' (eg getValueColumns), the documentation was right, methods were out of sync
  • Enhancement: now colId's can be numbers, not just strings
  • Enhancement: added gridOption.autoSizePadding, to allow wider columns after autosize if default is to narrow
  • Bugfix: api.setHeaderHeight() was not working, now fixed.
  • Bugfix: fixed issue where hidden grid (it not visible) was not rendering all rows it should.
  • Bugfix: columnApi.getColumnState() was setting aggFunc on columns that were aggregated but then later removed.
  • Bugfix: largeTextCellEditor - when value was undefined was displaying 'undefined', now displays blank.
  • Bugfix: api.deselectAll() was not deselecting groups when gridOptions.groupSelectsChildren=true.
  • Bugfix: tab navigation was not working with virtual columns when column been tabbed onto was not visible.
  • ag-Grid 5.0.6, ag-Grid-Enterprise 5.0.6

  • Enhancement: added columnApi.getAllDisplayedVirtualColumns(), so you can check what columns are rendered due to column virtualisation.
  • Bugfix: Angular 1 was compiling row multiple times, meant angular listeners were firing more than once. Now it compiles each cell exactly once when cell is created.
  • ag-Grid 5.0.4, ag-Grid-Enterprise 5.0.4

  • Bugfix: hitting space sometimes (noticed on firefox) sent grid scrolling down when it should select the row
  • ag-Grid 5.0.3, ag-Grid-Enterprise 5.0.3

  • Bugfix: pivot was not working with groupUseEntireRow=true
  • ag-Grid 5.0.2, ag-Grid-Enterprise 5.0.2

  • Enhancement: changed comparison (or sorting) to use localeCompare for strings
  • Enhancement: now pivot shows 'n/a' when no value columns is enabled
  • Enhancement: now 'autosize cols' considers the header width, not just the row content
  • Bugfix: cellRenderer with text field was not allowing editing in text field
  • ag-Grid 5.0.1, ag-Grid-Enterprise 5.0.1

  • Major Enhancement: Enterprise feature - Pivoting
  • Major Enhancement: Free feature - Column Virtualisation
  • Breaking Change: colDef.suppressAggregation and colDef.suppressRowGroup are gone, replaced with enableRowGroup, enablePivot and enableValue
  • Enhancement: added events dragStarted and dragStopped
  • Enhancement: new property suppressUseColIdForGroups
  • Enhancement: Safari now uses animation frames for scrolling (Chrome doesn't need it!!)
  • Enhancement: when no using cellRenderer, node.textContent used instead of element.innerHTML, for security reasons to prevent malicious injection of Javascript.
  • Enhancement: new property 'suppressCopyRowsToClipboard' so selected cells will be copied to clipboard and not the selected row, if that's what user wants.
  • Enhancement: popups are restricted to inside the grid when they appear - eg 'richSelect' doesn't appear outside of grid
  • Enhancement: now get/set column state takes into consideration column order
  • Enhancement: column virtualisation, with property suppressColumnVirtualisation to turn it off
  • Enhancement: eGridCell added to params of cellEditor
  • Enhancement: added property layoutInterval, to allow overriding of the layout interval.
  • Enhancement: added property 'suppressFocusAfterRefresh', so grid doesn't set focus back on focused cell if not required.
  • Enhancement: added properties toolPanelSuppressRowGroups, toolPanelSuppressValues, toolPanelSuppressPivots, toolPanelSuppressPivotMode
  • Enhancement: pivot panel now on top alongside group panel
  • Enhancement: new property colDef.openByDefault - set to true on column groups to have them open be default if expandable
  • Enhancement: new grid property functionsReadOnly - makes the gui for group, pivot and values read only
  • Enhancement: added suppressFilter to colDef, to allow turning filtering off for a particular column
  • Bugfix: AngularJS 1.x bindings were not getting cells updated when columns added and removed
  • Bugfix: Popups were triggering a scrollbar to flicker on and off when showing (eg show column menu, a scrollbar appeard and then dissappeared in the grid)
  • Bugfix: rowSelectionChanged was not firing on shift select
  • Bugfix: isCancelBeforeStart and isCancelAfterEnd were not working for popup editors
  • Bugfix: virtual pagination was not working when setting datasource as a property (it worked if setting datasource via api.setDatasource())
  • Version 4.2.x (ag-Grid 4.2.7, ag-Grid-Enterprise 4.2.11)

  • Bugfix: group selection was selecting groups when 'groupSelectsChildren=false' giving strange behaviours
  • Version 4.2.x (ag-Grid-Enterprise 4.2.10)

  • Bugfix: aggregation type 'sum' was giving incorrect results
  • Version 4.2.x (ag-Grid 4.2.6, ag-Grid-Enterprise 4.2.9)

  • Enhancement: For Enterprise, License message no longer printed to screen when license is correct.
  • Enhancement: Added colDef.tooltipField, so tooltip can be set on the cell.
  • Enhancement: Icons for drag and drop of columns are now all configurable.
  • Enhancement: quickFilter is now a property, so can be set during initialisation.
  • Enhancement: new API method forEachLeafNode()
  • Enhancement: added suppressQuotes option to csv export
  • Enhancement: added colDef.keyCreator, to allow grouping and set filter on complex objects
  • Enhancement: pagination datasource now gets context as a parameter
  • Enhancement: added largeText cell editor as an 'out of the box' editor
  • Enhancement: enhancements to Material Design look and feel
  • Enhancement: added api.stopEditing()
  • Bugfix: SetFilter was failing when you loaded more data into the grid - filter didn't populate with new values correctly.
  • Version 4.2.x

    Big Changes

  • Enhancement: New theme for Bootstrap
  • Enhancement: New theme for Material Design
  • Enhancement: Dark theme revised
  • Enhancement: you can now move groups of columns (only makes sense when grouping your columns):
    • Drag groups of columns from within table to move
    • Drag groups of columns from column toolPanel
    • Drag groups of columns to 'row group panel' to row group by multiple columns
  • Enhancement: Shift multi-select - a range of rows can be selected together by holding down shift (does not work with virtual pagination or viewport, only normal 'in memory row model').
  • Breaking Change

  • Enhancement: groupAggFunction is gone, replaced with providing your own colDef.aggFunc functions - this was needed to pave the way for pivoting functionality. See docs for details on how to use.
  • Small Changes

  • Enhancement: better default icons for row groups and checkbox selection
  • Enhancement: row selection 'checked' icons are now icons and not browser checkbox. they are now also customisable via changing icons.
  • Enhancement: changed icons for drag pinning, now when you drag a column to the edge, the drag icon changes to 'pinned' so use knows the column is about to be pinned.
  • Enhancement: new property for column group called 'marryChildren', when true then group cannot be split up by moving children.
  • Enhancement: toolpanel now has icon beside column group to show visibility of the group. icon is also clickable to set visible / hidden all children of the group
  • Enhancement: editing now has methods isCancelBeforeStart() and isCancelAfterEnd() to help with lifecycle.
  • Enhancement: new property suppressDragLeaveHidesColumns, so when columns dragged out of grid, they are not hidden.
  • Enhancement: new method api.refreshInMemoryRowModel, does a complete refresh of the in memory row model. Useful if you need to get the groups worked out again.
  • Enhancement: default text editor - now 'right' and 'left' key presses do not loose focus on current cell
  • Enhancement: added ag-row-hover class for when mouse is over row, so you can highlight rows when mouse is over them
  • Enhancement: new property 'suppressMiddleClickScrolls', so you can listen or 'middle mouse clicks' if you want (otherwise middle mouse click is taken by browser to scroll)
  • Enhancement: new property 'suppressPreventDefaultOnMouseWheel' so you can allow browser to handle mouse wheel events - useful if your grid has no vertical scrolls and you want the mouse to scroll the browser page
  • Enhancement: build in renderer 'animiateShowChange' now highlights changes when values are not numbers (eg strings).
  • Bug Fixes

  • Bug fix: when dragging columns out of rowGroupPanel, GUI wasn't redrawing correctly and crashing, causing inconsistent state and console error messages
  • Bug fix: disabled menu items were still allowed to be clicked
  • Bug fix: you can now tab into and out of the grid.
  • Bug fix: default text editor was displaying 'undefined' when initial value was missing. now showing blank.
  • Version 4.1.x patch (ag-Grid 4.1.5, ag-Grid-Enterprise 4.1.4)

  • Bug fix: when setting columns directly on gridOptions, the groupByPanel was not initialised correctly.
  • Bug fix: row group panel was not initialising correctly.
  • Version 4.1.x patch (ag-Grid 4.1.4, ag-Grid-Enterprise 4.1.3)

  • Bug fix: api.deselectAll() was not calling onSelectionChanged, it is now.
  • Bug fix: defaultExpanded setting was not been used, it is now.
  • Bug fix: popup editor was not working, init() was not called.
  • Version 4.1.x

    Big changes
  • Vamped up Cell Editing and Rendering. See new documentation pages for Cell Editing and Cell Rendering
  • New row model called Viewport. Designed for views over large data and pushing out updates from server to client.
  • Breaking Change
  • If you are using the built in groupCellRenderer, check the examples on how to configure it. The colDef.cellRenderer property is broken up into cellRenderer and cellRendererParams.
  • Small changes
  • Enhancement: New event - viewportChanged - gets called when the rendered rows changes, either due to scrolling, new data or grid resize. Using this, you know exactly what divs will be rendered in the DOM.
  • Navigation: When not editing, tab moves between cells. Shift+tab goes backwards.
  • Editing: Hitting any key started editing.
  • Enhancement: New api methods: showColumnMenuAfterButtonClick(colKey, buttonElement), showColumnMenuAfterMouseClick(colKey, mouseEvent)
  • Enhancement: new function colDef.valueFormatter - value formatting responsibility used to tie in cellRenderer, now it's broken out into valueFormatter, allows reusing cellRenderer's against different formats.
  • Enhancement: added 'destroyFilter' api
  • Enhancement: columnApi.addRowGroupColumn() and columnApi.removeRowGroupColumn() now work off colKey and not columns, so you can pass in colDefs, colIds or columns (previously was just columns)
  • Enhancement: New methods: columnApi.addRowGroupColumns(), columnApi.removeRowGroupColumns(), columnApi.setRowGroupColumns()
  • Enhancement: When you refresh the grid, doing a refresh doesn't loose the focused cell if a cell has browser focus.
  • Bugfix: Row grouping was not working when colId was provided.
  • Bugfix: api.setFocusedCell() method now sets browser focus (previous was just graphically highlighting the cell)
  • Version 4.0.x (ag-Grid 4.0.5, ag-Grid-Enterprise 4.0.7)

  • Bugfix: Status bar was not calculating 'min' correctly.
  • Enhancement: Now ctrl+d will copy down the selected range, similar to Excel
  • Deprecated: cellRendererParams.addRenderedRowListener() is now deprecated. If you want callback methods for cellRendering, use the cellRenderer Component pattern.
  • Version 4.0.x (ag-Grid 4.0.4)

  • Bugfix: Firefox was showing native context menu on top of grids context menu.
  • Bugfix: Drag event is only cancelled if source is image, allows user to implement custom drag event.
  • Bugfix: Angular compiling is now done after row is inserted into the DOM.
  • Bugfix: Fixed horizontal scroll on trackpads when mouse over pinned column.
  • Version 4.0.x (ag-Grid 4.0.2, ag-Grid-Enterprise 4.0.4)

  • Bugfix: When filter was 'zero' (for number filer) is was not saving correctly when using 'getFilterModel()'.
  • Bugfix: Event 'gridSizeChanged' was not getting called when width of grid changed, only height.
  • Bugfix: Renamed 'PopupService.js' to 'popupService.js -> caused issued for some import styles.
  • Bugfix: Bug in virtual pagination, grid was not initialising when datasource set in gridOptions.
  • Bugfix: Mouse double click was not working correctly in firefox.
  • Bugfix: Enterprise filters were not getting params in the 'afterGuiAttached' method.
  • Enhancement: setColumnState() now returns a boolean, false if one or more columns could not be found.
  • Enhancement: added API methods copySelectedRowsToClipboard() and copySelectedRangeToClipboard().
  • Enhancement: changed how auto-range aggregations work - blank cells not counted in count, and non-number cells not used for avg
  • Version 4.0.x

    New Features

  • The grid has moved to Enterprise vs Free.
  • Enterprise Feature: Enhanced enterprise column menu, in addition to filtering there is now a menu and also column management.
  • Enterprise Feature: Row group panel on top of grid, so you can drag columns to here to group.
  • Enterprise Feature: You can now drag columns from the tool panel into the grid to make them visible.
  • Enterprise Feature: Row grouping and aggregation are no longer in the tool panel as they can be done bia column menu (grouping and aggregation) or dragging to the row group panel (grouping).
  • Enterprise Feature: Context Menu
  • Enterprise Feature: Range Selection
  • Enterprise Feature: Enterprise column menu
  • Enterprise Feature: Clipboard interaction
  • Enterprise Feature: Status bar
  • Tool panel, set filter, row grouping and aggregation are now only available in Enterprise version of ag-Grid.
  • Enhancements & Changes

  • Performance improvements - no longer attaching listeners to each cell, so when scrolling, the dom is not been ripped up with adding and removing listeners. Instead the grid has one listener (eg for mouse click), and when the click happens, the grid then works out which cell it was for.
  • rowNode is now a class object with methods (previously it only have properties, a simple data object). Methods now include: setSelected(), isSelected(), addEventListener(), removeEventListener(), resetQuickFilterAggregateText(), depthFirstSearch(callback).
  • RowNode now has method 'setSelected'. This should now be used for row selection over the gridApi.selectXXXX() methods.
  • api.getSelectedNodesById gone, use api.getSelectedNodes instead
  • Event rowDeselected gone, now event rowSelected gets fired for both selected and deselected. Check node state to see if row is selected or not.
  • Event selectionChanged no longer contains the selected rows or nodes. Use the API to look these up if needed. Preparing these lists took CPU time, so it's best they are only prepared if needed.
  • Concept of 'suppressEvents' was dumped for row selection. No other event event type had this feature, and it was out of sync with how web components work in general. If you don't want to be notified of an event, then remove your event listener.
  • api.addVirtualRowListener is gone. Instead for row selection/deselection listening, use node.addEventListener(), and for virtual row removed, use api.addRenderedRowListener()
  • New API methods: getFirstRenderedRow() and getLastRenderedRow(), to know the first and last rows in the DOM (the grid only renders enough rows (plus a buffer) to show what's visible for performance reasons).
  • Introduced property modelType, set to 'pagination' or 'virtual' for pagination and virtual pagination. This replaces virtualPaging, as virtual was a boolean when in fact we need to distinctly model three modes of operation: Normal, Pagination and Virtual Pagination.
  • rowsAlreadyGrouped replaced with getNodeChildDetails. If you are providing already grouped data to the grid, see the new section 'Tree Data' on how this is now done. It had to change because Node is now an object with functinality, so you can't just pass in JSON an expect them to be treated like nodes.
  • Renamed: columnApi.getState()/setState()/resetState() to columnApi.getColumnState()/setColumnState()/resetColumnState()
  • Floating rows can now be selected and navigated.
  • processRowPostCreate callback, so you can process the grid row after it is created. Handy for adding attributes or other stuff to the row after create.
  • Now CSV export allows you to format cells on their way out. Handy if you want to import into Excel and need to make dates, for example, into Excel formatted dates.
  • New colDef properties suppressAggregation and suppressRowGroup for suppressing aggregation and row group for particular columns
  • Added new property: suppressFieldDotNotation
  • Took out property groupHideGroupColumns, if you don't want a column to be shown, just hide it. This feature was not necessary and caused complexity in the design.
  • Removed api.refreshRowGroup() -> it wasn't documented, and I can't remember why I put it in, refreshing the grid has the same effect.
  • api.getValue(colKey, node) replaces api.getValue(colDef, node, data), the colDef and data were 'old design', newer method works much better.
  • api.getFocusedCell() -> now returns rowIndex and Column (used to return colDef and rowNode, colDef not needed as you can get from Column, rowNode not needed as you can lookup using rowIndex)
  • rowNode attributes floatingTop and floatingBottom removed, now floating is no longer a boolean, it's a string that can be 'top' or 'bottom' if floating.
  • setFocusedCell(rowIndex, colId) is now setFocusedCell(rowIndex, colKey, floating).
  • Bug Fixes

  • Text filter 'ends with' was not working correctly if search string appeared twice in the text.
  • forPrint was occasionally given 'Uncaught TypeError: Cannot read property 'appendChild' of undefined'. now fixed.
  • RIP Virtual DOM

    Took out virtual dom. This was an implementation detail, no change in how you interface with the grid. It only made an improvement on IE, and now that we are using delayed scrolling, IE is working fast enough now. In addition, I have now tested with Windows 10 and Edge (the IE replacement) and it's working very fast. So the virtual DOM was giving very little benefit and was 'getting in the way' of a clean design. So I've favored a clean design rather than a more complex design just to get it faster in IE. If you want to see how little difference a virtual DOM made, see the Angular Connect 2015 talk I gave.

    Version 3.3.3

  • Bug fix: Pinned rows were not colored correctly
  • Version 3.3.2

  • Bug fix: Was not exporting initialiseAgGridWithAngular1() and initialiseAgGridWithWebComponents() with CommonJS
  • Buf fix: Period in fields (ie address.line1) was not working for editing.
  • Version 3.3.0

  • Minor: headerClass (column definition) can now be provided for column groups.
  • Major: If using Pure JavaScript "new ag.grid.Grid()", it's now "new agGrid.Grid()".
  • Major: Event 'ready' is now called 'gridReady'
  • Major: Angular 1 - you now need to initialise the grid via agGrid.initialiseAgGridWithAngular1(angular)
  • Major: Web Components - you now need to initialise the grid via agGrid.initialiseAgGridWithWebComponents()
  • Major: Angular 2 - Dropped support for UMD version of Angular
  • Major: Angular 2 - Now supports CommonJS and ECMA 6 module loading
  • Minor: BugFix: forPrint was not sizing headers correctly when doing grouped columns.
  • Major: Added sorting to groups
  • Minor: Added minColWidth and maxColWidth grid properties. Impacts all columns if set.
  • Major: Column no longer has 'index' attribute, as the columns moving now has no meaning. Use 'colId' to identify columns.
  • Major: api.ensureColIndexVisible(index) replace with api.ensureColumnVisible(colKey)
  • Major: Focused cell not longer has attribute colIndex, instead has attribute colId.
  • Major: Movable columns via dragging the column header.
  • Major Build Changes:
    • CSS now bundled in ag-Grid.js file
    • Took out TypeScript internal modules
    • Moved to ECMA 6 style imports (instead of require)
    • Moved to WebPack for bundling
    • Moved Angular 2 component to new project
  • Version 3.2.0

  • Minor: New event rowGroupOpened, for when row groups are opened / closed.
  • Minor: Bug fix - pinning was not saved during columnApi.getState()
  • Minor: Added 'typings' to package.json, so TypeScript can pick up typings from node module
  • Minor: groupDefaultExpanded must be number (used to be number or boolean). Set to -1 instead of 'true' for same effect.
  • Minor: addVirtualRowListener - now takes an event type and a function, so has similar pattern to normal event listeners.
  • Minor: New method 'destroy' added to custom filters. If you need to do cleanup, put it in the destroy method.
  • Minor: Took out 'agGridGlobalFunc()', should use ag.grid.Grid() instead.
  • Version 3.1.2

  • Minor: New column API methods: getLeftDisplayedColumnGroups(), getCenterDisplayedColumnGroups(), getRightDisplayedColumnGroups(), getAllDisplayedColumnGroups()
  • Version 3.1.1

  • Minor: Added 'columnSeparator' to CSV Export
  • Minor: Added starting character of '\ufeff' to CSV Export (for Excel compatibility)
  • Minor: Bug fix - gridOptions.isEnableSorting && colDef.suppressSorting were not used in 3.1.0, fixed.
  • Version 3.1.0

  • Minor: New allColumns property for export to csv
  • Minor: API method deselectNode() now takes 'suppressEvents' parameter.
  • Minor: Now colDef.field can had deep references, eg colDef.field = 'owner.firstName'
  • Minor: New event gridSizeChanged, gets fired when grid changes size, due to window resize or other application state change. Useful if you want to lay out the grid, eg call api.sizeColumnsToFit()
  • Minor: Bug fix - since v3 columnDefs was mandatory and threw error if missing. Is now optional again.
  • Major: Implemented auto-size for column. Now columns can be told to fit their content.
  • Minor: New property: suppressParentsInRowNodes - if you don't want parents in the row node tree structure.
  • Minor: Fixed up placement of menu icon, it was hitting the header border.
  • Major: Rows can have variable heights with new getRowHeight() callback.
  • Minor: bugfix - setColState was not restoring 'visible' correctly
  • Minor: New APi - columnApi.resetState()
  • Major: Implemented column header templates
  • Version 3.0.0

    Version 3 is a major version and has breaking changes. Where possible, the grid will hint if you are using an old property.

    Version 2.3.7

  • Minor: Updated AngularJS 1.x 2 to version Beta 0. Example updated to show changes.
  • Version 2.3.5

  • Minor: Overlays can now be disabled via new properties suppressLoadingOverlay and suppressNoRowsOverlay.
  • Version 2.3.4

  • Bug fix: Template cache now working with IE9
  • Bug fix: forEachNodeAfterFilter and forEachNodeAfterFilterAndSort were not working properly when grouping.
  • Minor: Now set filter can take a comparator.
  • Bug fix: Was not possible to add event listeners or set attributes to virtual elements after binding. This is now possible.
  • Version 2.3.3

  • Bug fix: Setting rowBuffer to zero did not work.
  • Bug fix: Export to csv was not managing large exports.
  • Minor: Moved Angular 2 examples to alpha 44.
  • Version 2.3.2

  • Bug fix: 'no rows' overlay was blocking column headers, so if showing, couldn't change filter.
  • Version 2.3.1

  • Bug fix: Angular 2 - EventEmitter for rowDeselected was missing.
  • Major: Added getBusinessKeyForNode() method, to allow easily identifying of rows for automated testing.
  • Minor: Removed declaration of 'module' and 'exports' in main.ts, so no longer clashes with node.ts typics.
  • Minor: Fixed headerClass, array of classes was not working
  • Version 2.3.0

  • Major - Introduced 'no rows' message for when grid is empty.
  • Major - Introduced custom overlays for 'no rows' and 'loading', so now they can be what you like.
  • Major - Moved to AngularJS 1.x 2 alpha 38.
  • Major - Took out auto loading of AngularJS 1.x 2 module with JSPM.
  • Minor - Exposed global function for initialising Angular 1.x, to use if Angular not available on the global scope, eg using JSPM
  • Minor - Bugfix - rowRenderer was not working when useEntireRow=true
  • Version 2.2.0

  • Major - Implemented 'destroy' API method, to release grids resources. Needed for Web Components and native Javascript (AngularJS 1.x lifecycle manages this for you).
  • Major - Column resize events now have 'finished' flag, so if resizing, you know which event from a stream of 'dragging' events is the final one.
  • Major - New event: rowDeselected.
  • Major - Now have 'customHeader' and 'customFooter' for export to csv.
  • Minor - Now filters are positioned relative to their actual size instead of assuming each filter is 200px wide. Now wide filters don't fall off the edge of the grid.
  • Minor - Bug fix #459 - getTopLevelNodes was called for not reason during filter initialisation which resulted in 'undefined' error for server side filtering
  • Version 2.1.3

  • Minor - Added header to Typescript definitions file and included in Definitely Typed
  • Minor - Removed unused 'require' from agList - was conflicting when require defined elsewhere

  • 23rd Sep ag-Grid 2.0 released - AngularJS 1.x 2 and Web Components supported

    13th Sep First pass on AngularJS 1.x 2

    6th Sep Floating headers and footers

    31th Aug Column API, External Filtering, Excel Like Filtering

    16th Aug Master & Slave Grids.

    26th July minWidth and maxWidth for columns. Chaining of cell expressions.

    18th July Expressions implemented. Grid now works like Excel!!

    5th July Typescript, Values on Tool Panel, Column API

    21st June First version of Tool Panel, showing / hiding / reordering / grouping columns.

    14th June Server side sorting and filtering, headerValueGetter, newRowsAction, suppressUnSort & suppressMultiSort'.

    7th June New features: Ensure Col Index Visible, No Isolated Scope, API for Sorting, API for Saving / Setting Filters

    31st May New features: Default aggregation, filtering API, de-selection, foeEachInMemory.

    25th May Keyboard Navigation and general improvements

    17th May Revamp of Grouping, ensureIndexVisible, ensureNodeVisible, Multi Column Sort (thanks Dylan Robinson), Fixed Width Cols.

    26 April - Volatile Columns, Soft Refresh, Cell Templates.

    25 April - Bug fixes: Pinned Blank Space, Group Sorting, Cell Templates, Expand / Collapse

    20 April - Value Getters, Context and Expressions. Will be available in 1.3, or take latest. All documented in relevant sections.

    18 April - Gulp! Thank you Tanner Linsley for implementing Gulp.

    16 April - Checked in column opening & closing column Groups. Now you can show and hide columns in groups. Will be available in 1.3, or take latest. Documentation page 'Grouping Headers' updated.

    13 April - Checked in 'tab navigation for editing', so when you hit tab while editing a cell, it goes into editing the next cell. Will be available in 1.3, or take latest.

    12 April - Checked in datasources, pagination, virtual paging, infinite scrolling. Will be available in 1.3, or take latest. Documentation pages 'Datasource', 'Pagination' and 'Virtual Paging' created.

    09 April - Checked in support for 'Refresh Aggregate Data'. Will be available in 1.3, or take latest. Documentation page 'Grouping and Aggregating Rows' updated.

    06 April - Checked in support for 'Loading Panel' to show when fetching data. Will be available in 1.3, or take latest. Documentation page for loading created.

    05 April - Checked in support for custom icons in the headers. Will be available in 1.3, or take latest. Documentation page for icons created.

    04 April - Checked in support for footers while grouping. Will be available in 1.3, or take latest. Documentation for grouping and example in 'test drive' updated to show.

    31 March - DailyJS covers launch of Angular Grid.