NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
TypeScript/JS lib for dashboard layout and creation, responsive, mobile support, no external dependencies, with many wrappers (React, Angular, Vue, Ember, knockout...)
Last release 23 days ago
21 Sep 2026
Release timing varies
gaps range from 9 days to 4 months
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
141 releases · first in 2015
fix 1229 staticGrid no longer disable oneColumnMode
fix 1229 staticGrid no longer disable oneColumnMode
fix 1195 options broken with ember hash helper - thanks @btecu
fix 1250 don't remove item from another grid
fix 1261 init() clones passed options so second doesn't affect first one
fix 1276 addWidget() ignores data attributes
fix 1187 IE support for CustomEvent polyfill - thanks @phil-blais
fix 1187 IE support for CustomEvent polyfill - thanks @phil-blais
fix 1204 destroy drag&drop when removing node(s) instead of just disabling it.
fix 1181 Locked widgets are still moveable by other widgets.
fix 1217 If I set cellHeight to some vh, only first grid will take vh, rest will use px
include SASS source files to npm package again 1193
One column per quarter.
add minRow and row grid options (which set minRow=maxRow=N) 1172 - thanks @RadoiAndrei
add minRow and row grid options (which set minRow=maxRow=N) 1172 - thanks @RadoiAndrei
fix 1166 resize not taking margin height into account - thanks @awjae
fix 1155 maxRow now limit initial item placement if out of bound, preventing broken drag behavior
fix 1171 added event support to call grid.on('added removed change', callback) again even with native events.
breaking : (1084) jquery was removed from the API and dependencies (initialize differently, and methods take/return GridStack or HTMLElement instead o
breaking : (1084) jquery was removed from the API and dependencies (initialize differently, and methods take/return GridStack or HTMLElement instead of JQuery ), so your code will need to change. See Migrating to v1.0.0
setColumn(N) is now column(N) (matches other set/get methods) and getColumn() to get current column number
add grid.on(eventName, callback) / grid.off(eventName) to hide native JQ events mix
add grid.getRow() to get the current grid row number
fix #540 WebComponent support: CSS file now insert before grid instead of 'head'
fix #540 WebComponent support: CSS file now insert before grid instead of 'head'
fix #1143 nested grids with different acceptWidgets class
fix #1142 add/remove widget will also trigger change events when it should.
optimized change callback to save original x,y,w,h values and only call those that changed 1148
delete bower since dead for a while now
fix #1132 oneColumnMode missing CSS to do layout
fix #1132 oneColumnMode missing CSS to do layout
del oneColumnModeClass / .grid-stack-one-column-mode and associated code. If you depended on this, use class .grid-stack-1 instead since it is 1 column layout anyway 1134
add oneColumnModeDomSort true|false to let you specify a custom layout (use dom order instead of x,y) for oneColumnMode column(1) #713
add oneColumnModeDomSort true|false to let you specify a custom layout (use dom order instead of x,y) for oneColumnMode column(1) #713
fix oneColumnMode to only restore if we auto went to it as window sizes up #1125
editing in 1 column (or few columns) does a better job updating higher layout (track before and after and move items accordingly). Tracking item swap would be even better still. #1127
fix #37 oneColumnMode (<768px by default) now simply calls column(1) and remembers prev columns (so we can restore). This gives us full resize/re-orde
fix #37 oneColumnMode (<768px by default) now simply calls column(1) and remembers prev columns (so we can restore). This gives us full resize/re-order of items capabilities rather than a locked CSS only layout (see prev rev changes). #1120
fix responsive.html demo #1121
add float(val) to set/get the grid float mode, which will relayout #1088
add float(val) to set/get the grid float mode, which will relayout #1088
add compact() to reclaim any empty space and relayout grid items #1101
add options.dragOut to let user drag nested grid items out of a parent or not (default false) and jQuery UI draggable.containment can now be specified in options. You can now drag&drop between 2 nested grids #1105
add % as a valid unit for height #1093 . thank you @trevisanweb @aureality @ZoolWay
fix callbacks to get either added, removed, change or combination if adding a node require also to change its (x,y) for example. Also you can now call batchUpdate() before calling a bunch of addWidget() and get a single event callback (more efficient). #1096
removeAll() is now much faster (no relayout) and calls removed event just once with a list #1097
column() complete re-write and is no longer "Experimental". We now do a reasonable job at sizing/position the widgets (especially 1 column) and also now cache each column layout so you can go back to say 12 column and not loose original layout. #1098
fix addWidget(el) (no data) would not render item at correct location, and overlap item at (0,0) #1098
you can now pre-define size of dragable elements from a sidebar using standard data-gs-width and data-gs-height - fix #413 , #914 , #918 , #922 , #933 thanks @ermcgrat and others for pointing out code issue.
min files include rev number/license #1075
min files include rev number/license #1075
npm package fix to exclude more temporary content #1078
removed jquery-ui/* requirements from AMD packing in gridstack.jQueryUI.js as it was causing App compile missing errors now that we include a subset of jquery-ui
fix for griditems with x=0 placement wrong order (regression by #1017 ) ( #1054 ).
fix for griditems with x=0 placement wrong order (regression by #1017 ) ( #1054 ).
fix cellHeight(val) not working due to style change (regression by #937 ) ( #1068 ).
add gridstack-poly.js for IE and older browsers, removed core-js lib from samples (<1k vs 85k), and all IE8 mentions ( #1061 ).
add jquery-ui.js (and min.js) as minimal subset we need (55k vs 248k), which is now part of gridstack-h5.js . Include individual parts if you need your own lib instead of all.js ( #1064 ).
changed jquery dependency to lowest we can use (>=1.8) ( #629 ).
add advance demo from web site ( #1073 ).
grid options width is now column , height now maxRow , and setGridWidth() now column() to match what they are. Old names are still supported (console
grid options width is now column , height now maxRow , and setGridWidth() now column() to match what they are. Old names are still supported (console warnings). Various fixes for custom # of column and re-wrote entire doc section ( #1053 ).
fix widgets not animating when animate: true is used. on every move, styles were recreated-fix should slightly improve gridstack.js speed ( #937 ).
fix moving widgets when having multiple grids. jquery-ui workaround ( #1043 ).
switch to eslint ( #763 ) thanks @rwstoneback .
fix null values addWidget() options ( #1042 ).
fix undefined x,y position messes up grid ( #1017 ).
fix undefined x,y position messes up grid ( #1017 ).
changed code to 2 spaces.
fix minHeight during onStartMoving() ( #999 ).
add gridstack.d.ts TypeScript definition file now included - no need to include @types/gridstack , easier to update ( #1036 ).
add addWidget(el, options) to pass object so you don't have to spell 10 params. ( #907 ).
reduced npm package size from 672k to 324k (drop demo, src and extra files)
emit dropped event when a widget is dropped from one grid into another ( #823 ).
emit dropped event when a widget is dropped from one grid into another ( #823 ).
don't throw error if no bounding scroll element is found ( #891 ).
don't push locked widgets even if they are at the top of the grid ( #882 ).
RequireJS and CommonJS now export on the exports module fix ( #643 ).
automatically scroll page when widget is moving beyond viewport ( #827 ).
removed lodash dependencies ( #693 ).
don't overwrite globals jQuery when in a modular environment ( #974 ).
removed z-index from .grid-stack-item-content causing child modal dialog clipping ( #984 ).
convert project to use yarn ( #983 ).
widgets can have their own resize handles. Use data-gs-resize-handles element attribute to use. For example, data-gs-resize-handles="e,w" will make th
widgets can have their own resize handles. Use data-gs-resize-handles element attribute to use. For example, data-gs-resize-handles="e,w" will make the particular widget only resize west and east. ( #494 ).
enable sidebar items to be duplicated properly. Pass helper: 'clone' in draggable options. ( #661 , #396 , #499 ).
fix staticGrid grid option ( #743 )
preserve inline styles when moving/cloning items (thanks @silverwind )
fix bug causing heights not to get set ( #744 )
allow grid to have min-height, fixes ( #628 ) thanks @adumesny
widget x and y are now ints (thanks @DonnchaC )
allow all droppable options (thanks @vigor-vlad )
properly track mouse position in getCellFromPixel (thanks @aletorrado )
remove instance of !important (thanks @krilllind )
scroll when moving widget up or down out of viewport ( #827 )
remove placeholder when dragging widget below grid (already worked when dragging left, above, and to the right of grid).
remove placeholder when dragging widget below grid (already worked when dragging left, above, and to the right of grid).
prevent extra checks for removing widget when dragging off grid.
trigger added when a widget is added via dropping from one grid to another.
trigger removed when a widget is removed via dropping from one grid to another.
trigger removed when a widget is removed via dropping on a removable zone ( #607 and #550 ).
trigger custom event for resizestop called gsresizestop ( #577 and #398 ).
prevent dragging/resizing in oneColumnMode ( #593 ).
add oneColumnModeClass option to grid.
remove 768px CSS styles, moved to grid-stack-one-column-mode class.
add max-width override on grid-stck-one-column-mode ( #462 ).
add internal function isNodeChangedPosition , minor optimization to move/drag.
drag'n'drop plugin system. Move jQuery UI dependencies to separate plugin file.
update requirements to the latest versions of jQuery (v3.1.0+) and jquery-ui (v1.12.0+).
update requirements to the latest versions of jQuery (v3.1.0+) and jquery-ui (v1.12.0+).
fix jQuery size() ( #486 ).
update destroy([removeDOM]) call ( #422 ).
don't mutate options when calling draggable and resizable . ( #505 ).
update _notify to allow detach ( #411 ).
fix code that checks for jquery-ui ( #481 ).
fix cellWidth calculation on empty grid
update names to respect js naming convention.
update names to respect js naming convention.
cellHeight and margin can now be string (e.g. '3em', '20px') (Thanks to @jlowcs).
add maxWidth / maxHeight methods.
add enableMove / enableResize methods.
fix window resize issue #331 ).
add options disableDrag and disableResize .
fix batchUpdate / commit (Thank to @radiolips)
remove dependency of FontAwesome
RTL support
'auto' value for cellHeight option
fix setStatic method
add setAnimation method to API
add column method ( #227 )
add removable / removeTimeout (experimental)
add removeDOM parameter to destroy method ( #216 ) (thanks @jhpedemonte)
add useOffset parameter to getCellFromPixel method ( #237 )
add minWidth , maxWidth , minHeight , maxHeight , id parameters to addWidget ( #188 )
add added and removed events for when a widget is added or removed, respectively. ( #54 )
add acceptWidgets parameter. Widgets can now be draggable between grids or from outside (experimental)
fix closure compiler/linter warnings
fix closure compiler/linter warnings
add staticGrid option.
add minWidth / minHeight methods (Thanks to @cvillemure)
add destroy method (Thanks to @zspitzer)
add placeholderText option (Thanks to @slauyama)
add handleClass option.
add makeWidget method.
lodash v 4.x support (Thanks to @andrewr88)
add batchUpdate / commit methods
gridstack-extra.css
add support of lodash.js
add isAreaEmpty method
nested grids
add batchUpdate / commit methods
add update method
allow to override resizable / draggable options
add disable / enable methods
add getCellFromPixel (thanks to @juchi)
AMD support
fix nodes sorting
improved touch devices support
add alwaysShowResizeHandle option
minor fixes and improvements
Your coding agent can read these notes before it upgrades. Set up the MCP server →