PackageTrack

npm

gridstack

13.2.0gridstack/gridstack.js

TypeScript/JS lib for dashboard layout and creation, responsive, mobile support, no external dependencies, with many wrappers (React, Angular, Vue, Ember, knockout...)

Release timeline

139 releases since 2015
20152026

One column per quarter.

Releases

  1. 13.2.020 Aug 2026
    Release notes3 sources agree
    • feat: #701 removed printMode as we support much better printing now that doesn't compromise.
    • feat: #3362 added PrintOptions.mode for app custom settings
    • fix: #3357 (react): drop type assertions on useGridStack add/remove helpers - thank you YOUNGHO8762
    • fix: #3358 (react): use wrapper widget types in registry callbacks - thank you YOUNGHO8762
    • fix: #3360 better north and west resize handles - thank you Ryan Peterson
    Open source →
  2. 13.1.226 Jul 2026
    Release notes3 sources agree
    • reg: #3340 regression: strict mode (v13.0.0) fails columnWidth without .breakpoints - thank you Daniel Cohen Gindi
    Open source →
  3. 13.1.126 Jul 2026
    Release notes3 sources agree
    • feat: #3336 printMode?: 'flow' | 'exact' to support 2 very differenrt options due to browser bug. uddated demos to showcase one vs the other (and mode toggle)
    Open source →
  4. 13.1.023 Jul 2026
    Release notes3 sources agree
    • feat: #701 major printing support for grids using PrintOptions (pageBreak, hide, orientation, ...)
    • feat: #3329 DOM matches the visual order when widgets are moved around (accessibility tabbing, regular printing)
    Open source →
  5. 13.0.226 Jul 2026
    Release notes2 sources agree
    • reg: #3340 regression: strict mode (v13.0.0) fails columnWidth without .breakpoints - thank you Daniel Cohen Gindi
    Open source →
  6. 13.0.122 Jul 2026
    Release notes3 sources agree
    • fix: #3325 preinstall script
    • fix: #3324 vue files missing from package
    Open source →
  7. 13.0.019 Jul 2026
    Release notes3 sources agree
    • NEW: React wrapper: re-did to follow the Angular pattern (drag&Drop between grid doesn't destroy content), events, lazyLoad support, fix memory leak, empty content, etc...
    • NEW: Vue wrapper: brand new wrapper follow same pattern as well
    • break: #3310 Angular wrapper using component+props (instead of selector+input)
    • feat: #662 added grid-lines.html demo (just CSS)
    • fix: #3154 Esc key doesn't restore subgrid
    • fix: #3231 drag broken in Firefox 147.0.4+ and Chrome 144+ due to navigator.maxTouchPoints > 0 now returning true on desktop (macOS trackpad)
    • fix: #3291 flicker nested grid demo when dragging between sub-grids
    • fix: #3085 Changing rows after init relays out if smaller
    • fix: #2823 Scrollbar appears prevents onChange being called
    • fix: #2948 dynamically created nested grid disappeared when dragging out
    • fix: #3269 cleanup old rtl residue - thank you Daniel Cohen Gindi
    • fix: #3270 dragging item from outside doesn't allow swap (weird change is layout especially when you move out as it doesn't restore)
    • fix: #2950 Angular: now support signal inputs (ng14.1+) like name = input<string>()
    Open source →
  8. 12.6.08 Apr 2026
    Release notes3 sources agree
    • feat: #3250 full RTL support - thank you Daniel Cohen Gindi
    • fix: #3261 prepareDragDrop() returns for disable after deletion
    • fix: #3262 DDDraggable fix to querySelectorAll(handle) for nested grid
    Open source →
  9. 12.5.05 Apr 2026
    Release notes3 sources agree
    • fix: #3237 updateOptions() fixes for columnOpts, maxRow. load() not cloning
    • fix: #3241 drifting rounding issue when cellHeight is small/fraction
    • feat: #2188, #2074 scroll speed too high, not animating, not using container parent
    Open source →
  10. 12.4.226 Dec 2025
    Release notes3 sources agree
    • regression: #3214 touch device with real mouse event fix (caused by #3191 in last release)
    Open source →
  11. 12.4.113 Dec 2025
    Release notes3 sources agree
    • feat: #3104 Custom resize div element target - thank you Marvin Heilemann
    • fix: #3181 re-initing from DOM missing x:0, y:0 messing layout
    • fix: #3191 touch issue on Linux
    • fix: #3194 updateOption() update lazyLoad
    • fix: #3201 updating higher column layout can cause negative values in layoutsNodesChange()

    DO NOT USE 12.4.0 as missing some export like 12.3.3, which was fixed in this release

    Open source →
  12. 12.4.012 Dec 2025

    Nothing published for this version

  13. 12.3.314 Aug 2025
    Release notes2 sources agree
    • fix: #3139 Utils:removeInternalForSave() to skip arrays
    Open source →
  14. 12.3.212 Aug 2025
    Release notes2 sources agree
    • fix: #3136 more tweaks to save(columnCount) option.
    Open source →
  15. 12.3.111 Aug 2025
    Release notes2 sources agree
    • fix: #2493 added save(columnCount) option. Nested grid now use container saved column count.
    Open source →
  16. 12.3.010 Aug 2025
    Release notes2 sources agree
    • feat: #3047 added .grid-stack-dragging to grid when child is being dragged so we can set cursor:grabbing . Updated demo.

    • feat: now using typedoc to generate doc (HTML and markup) from code. improved code examples and comments.

    • fix: #3099 scroll take into account ScrollContainer position

    • fix: #3102 React demo now support multiple grids

    • fix: #3021 correctly reset widget back (to last known position) when released outside

    Open source →
  17. 12.2.27 Jul 2025
    Release notes2 sources agree
    • fix: #3070 incorrect property name 'sizeToContent' when cleaning up invalid attributes

    • fix: #3077 incorrect node._id check

    • fix: #3054 Avoid reflows via explicitly setting minRow

    • fix: #3085 opts.minRow being updated

    Open source →
  18. 12.2.128 May 2025
    Release notes2 sources agree
    • fix: #3064 fix GridStack.updateCB(w) crash
    Open source →
  19. 12.2.027 May 2025
    Release notes2 sources agree
    • feat: #3061 added GridStack.updateCB(w) that gets called after a widget has been updated (eg: load() after initial layout) instead of created
    Open source →
  20. 12.1.27 May 2025
    Release notes2 sources agree
    • fix #3043 fix opts.animate again

    • fix #3048 nested grid resizeToContentCBCheck() fix

    Open source →
  21. 12.1.128 Apr 2025
    Release notes2 sources agree
    • fix #3038 updateOptions() fix opts.minRow being undefined
    Open source →
  22. 12.1.024 Apr 2025
    Release notes2 sources agree
    • feat #2671 subgrid now propagate events to topmost grid. Use el.gridstackNode.grid to know which (sub) grid.

    • fix #3028 updateOptions() no longer modifies passed in struct. only field we check are being handled too.

    • fix #3029 resizeToContent() fix for nested grid with content above

    • fix #3030 resizeToContentCheck() wasn't blocking _ignoreLayoutsNodeChange at end of the loop

    • rem #3022 removed ES5 support (IE doesn't support CSS vars needed now)

    • rem #3027 remove legacy code support for disableOneColumnMode, oneColumnSize, oneColumnModeDomSort

    Open source →
  23. 12.0.013 Apr 2025
    Release notes2 sources agree
    • feat: #2854 Removed dynamic stylesheet and migrated to CSS vars. Thank you lmartorella

    • feat: #3013 columns no longer require custom classes nor gridstack-extra.css as we now use CSS vars.

    • fix: #2978 Very slow operation in 11.2.0 and higher with large blocks

    • fix: #2947 loading responsive layout:'list' into smaller screen doesn't layout correctly.

    Open source →
  24. 11.5.124 Mar 2025
    Release notes2 sources agree
    • revert: #2981 Locked was incorrectly changed. fixed doc instead
    Open source →
  25. 11.5.017 Mar 2025
    Release notes2 sources agree
    • feat: #2975 prepareDragDrop(el, force) option to force re-creation of the drag&drop event binding

    • feat: #2989 new updateOptions(o: GridStackOptions) to update PARTIAL list of options after grid as been created

    • fix: #2980 dd-touch circular dependency

    • fix: #2667 sidebar items not honoring gs-w (enter-leave-re-enter)

    • fix: #2987 gs-size-to-content to support numbers

    • fix: #2981 Locked not working as expected

    Open source →
  26. 11.4.027 Feb 2025
    Release notes2 sources agree
    • fix: #2921 replace initMouseEvent with MouseEvent constructor and added composed: true

    • fix: #2939 custom drag handle not working with LazyLoad

    • fix: #2955 angular circular dependency

    • fix: #2951 shadow DOM dragging re-appending fix

    • fix: #2964 minW larger than column fix

    • feat: #2965 internal _prepareDragDropByNode(n) is now public as prepareDragDrop(el) so Angular, React, and others can call once the DOM content elements have been added (the outside grid item divs are always created before content)

    • break: #2959 Util.createWidgetDivs() has moved to GridStack.createWidgetDivs() to remove circular dependencies

    Open source →
  27. 11.3.017 Jan 2025
    Release notes2 sources agree
    • feat: added isIgnoreChangeCB() if changeCB should be ignored due to column change, sizeToContent, loading, etc...

    • feat: added responsive_none.html demo and fixed layout:'none' to bound check the layout (no-op unless it must change)

    Open source →
  28. 11.2.030 Dec 2024
    Release notes2 sources agree
    • feat: #2695 'Esc' to cancel now works on sidebar external items, also works dragging over trash.

    • feat: #2852 better React example. Thank you CNine

    • fix: #2852 grid in tabs correctly handles CSS. Thank you Luciano Martorella

    • fix: #2900 use attr data-gs-widget instead of gridstacknode (supported as well for backward compatibility)

    Open source →
  29. 11.1.29 Dec 2024
    Release notes2 sources agree
    • fix: #2877 angular wrapper uses standalone, while now being compatible down to ng14. thanks to andre-steudel

    • fix: #2886 added gs-size-to-content support

    • fix: #2887 mobile nested grid TypeError: e.currentTarget is null

    Open source →
  30. 11.1.126 Nov 2024
    Release notes2 sources agree
    • fix: #2878 make sure sub-grid inherit parent opts by default, with subgrid defaults.

    • fix: #2879 sub-grid item sizeToContent:true now handle content above/below sub grid.

    Open source →
  31. 11.1.018 Nov 2024
    Release notes2 sources agree
    • feat: #2864 added GridStackOptions.layout for nested grid reflow during resize. default to 'list'.

    • fix: #2859 re-enabled tests and fix numerous issues found (see CL). Also thank you Luciano Martorella for getting me going and starting it.

    • fix: #2851 added support for custom max layout saving - Thank you Luciano Martorella

    • fix: #2492 loading same layout with overlapping widget fix. v10.3.0 regression.

    Open source →
  32. 11.0.121 Oct 2024
    Release notes2 sources agree
    • fix: #2834 v11 angular missing package.json

    • fix: #2835 make sure we have unique USER id

    Open source →
  33. 11.0.020 Oct 2024
    Release notes2 sources agree
    • feat: #2826 Lazy loading of widget content until visible ( GridStackOptions.lazyLoad and GridStackWidget.lazyLoad )

    • feat: #2818 support for Angular Component hosting true sub-grids (that size according to parent) without requring them to be only child of grid-item-content.

    • fix: #2231 , #1840 , #2354 big overall to how we do sidepanel drag&drop helper. see release notes.

    • fix: #2736 safe practices around GridStackWidget.content no longer setting innerHTML

    Open source →
  34. 10.3.121 Jul 2024
    Release notes2 sources agree
    • fix: #2734 rotate() JS error

    • fix: #2741 resizeToContent JS error with nested grid

    • fix: #2740 nested grid drag fix

    • fix: #2730 resizing left from right most item works

    • fix: #2327 remove dataTransfer mention as not supported

    Open source →
  35. 10.3.026 Jun 2024
    Release notes2 sources agree
    • fix: #2720 load() now creates widgets in order (used to be reverse due to old collision code)
    Open source →
  36. 10.2.124 Jun 2024
    Release notes2 sources agree
    • fix: #2683 check for fixed grid maxRow during resize

    • fix: #2694 prevent 'r' rotation to items that can't resize (locked, noResize, fixed sizes)

    • fix: #2709 support for multiple drag targets - Thank you nickfulcher

    • fix: #2669 load() sometimes restore incorrectly

    Open source →
  37. 10.2.02 Jun 2024
    Release notes2 sources agree
    • feat: #2682 You can now press 'Esc' to cancel a move|resize, 'r' to rotate during a drag. added GridStack.rotate() as well - Thank you John B. for this feature sponsor.

    • fix: #2672 dropping into full grid JS error

    • fix: #2676 handle minW resizing when column count is less

    • fix: #2677 allow button as handle dragging

    Open source →
  38. 10.1.231 Mar 2024
    Release notes2 sources agree
    • fix: #2628 removeAll() does not trigger Angular's ngOnDestroy

    • fix: #2503 Drag and drop a widget on top of a locked widget - Thank you JakubEleniuk

    • fix: #2584 wrong sort order during 1 column resize - Thank you JakubEleniuk again.

    • fix: #2639 load() with mix of new item without coordinates

    • fix: #2633 Drop into full grid causes crash

    • fix: #2559 changed angular demos (support 1 column)

    • fix: #2453 recreated grid trash issue

    Open source →
  39. 10.1.13 Mar 2024
    Release notes2 sources agree
    • fix: #2620 allow resizing with sizeToContent:NUMBER is uses
    Open source →
  40. 10.1.04 Feb 2024
    Release notes2 sources agree
    • feat: #2574 Allow cell height in cm and mm units

    • feat: #2578 allow different scaling between drag toolbar and grid

    • fix: #2577 ui-resizable-s/-n style fix

    • fix: #2576 column('none') now ignores layouts

    • fix: #2560 nested grid fix (enter can call leave which can call enter again) - Thank you v1talii-dev

    • fix: #2596 prevent SSR crash

    • fix: #2610 using passive:true for mousemove events

    • fix: #2612 restrict vertical resize if sizeToContent:true

    • demo: nested.htm now has nested create and drag&drop example - Thank you fredericrous

    Open source →
  41. 10.0.110 Dec 2023
    Release notes2 sources agree
    • fix: #2552 DOM init doesn't sizeToContent

    • fix: #2561 issues with sizeToContent animation, cleanup, etc...

    • fix: #2427 sizeToContent supports rem/em cell height

    • fix: #2558 remove style node in shadow root

    • fix: #2556 make sure 'new GridStack(el)' set el.gridstack=this right away

    • cleanup: #2550 Optimize resize arrow (~88% lighter from 1.82 KB to 225B)

    Open source →
  42. 10.0.021 Nov 2023
    Release notes2 sources agree
    • feat #2542 we now support much richer responsive behavior with GridStackOptions.columnOpts including any breakpoint width:column pairs, or automatic column sizing.

    • disableOneColumnMode , oneColumnSize , oneColumnModeDomSort have been removed (see v10 migration doc)

    Open source →
  43. 9.5.111 Nov 2023
    Release notes2 sources agree
    • fix #2525 Fixed unhandled exception happening in _mouseMove handler

    • fix potential crash in resizeToContentCheck() if grid gets deleted by the time the delay happens

    • fix #2527 Incorrect layout on grid load in one column mode

    • fix #2496 animation on init, introduced in 8.1.1

    Open source →
  44. 9.5.026 Oct 2023
    Release notes2 sources agree
    • feat #1275 div scale support - Thank you elmehdiamlou for implementing this teh right way (add scale to current code)

    • fix #2489 moved the dropped event handler to after doing everything (no more setTimeout) - Thanks arnoudb for suggesting a fix.

    • fix #2497 Utils.parseHeight() fix

    • fix column(1) to not restore if disableOneColumnMode on size change

    Open source →
  45. 9.4.015 Oct 2023
    Release notes2 sources agree
    • revert #2263 div scale support - causing too many issues for now (#2498 #2491)

    • fix #2492 calling load() allows overlapping widgets

    Open source →
  46. 9.3.030 Sept 2023
    Release notes2 sources agree
    • fix #1275 div scale support - Thank you VincentMolinie for implementing this
    Open source →
  47. 9.2.227 Sept 2023
    Release notes2 sources agree
    • fix - sub-grid styles now look for immediate correct parent, not any depth above.

    • fix #2469 "Invalid height" error CSS minHeight

    • fix #2394 nested grid size issue when sub-items moved up/down

    Open source →
  48. 9.2.121 Sept 2023
    Release notes2 sources agree
    • fix _updateContainerHeight() to use height rather than min-height again (apart for nested grids which need it) and partial getComputedStyle CSS minHeight support
    Open source →
  49. 9.2.010 Sept 2023
    Release notes2 sources agree
    • feat: nested grids now support sizeToContent to size themselves to how many sub items they contain - Thank you @Helix for sponsoring this!

    • fix #2449 full grid maxRow fix

    Open source →
  50. 9.1.16 Sept 2023
    Release notes2 sources agree
    • fix #2435 directionCollideCoverage() tweaks

    • fix resizeToContent() to handle node.h (using when cellHeight changes or we resize) vs DOM sizing (rest of the time)

    Open source →
  51. 9.1.04 Sept 2023
    Release notes2 sources agree
    • renamed fitToContent to sizeToContent (API BREAK)

    • feat: sizeToContent now supports being boolean|number to limit the height but user can resize past that, unlike maxH.

    • feat: resizeToContentParent now on GridStackWidget for those widgets that need to resize differently.

    Open source →
  52. 9.0.230 Aug 2023
    Release notes2 sources agree
    • fix 'resizecontent' event fix not called.

    • partial fix #2427 sizeToContent when calling cellHeight()/addWidget()/MakeWidget()

    Open source →
  53. 9.0.127 Aug 2023
    Release notes2 sources agree
    • fix #2413 support touchscreen+mouse devices. Thank you @Ruslan207

    • tweak to sizeToContent from #2412 . Thank you @JonSohn

    Open source →
  54. 9.0.023 Aug 2023
    Release notes2 sources agree
    • feat #404 added GridStackOptions.sizeToContent and GridStackWidget.sizeToContent to make gridItems size themselves to their content (no scroll bar), calling GridStack.resizeToContent(el) whenever the grid or item is resized.

    • also added new 'resizecontent' event, and resizeToContentCB and resizeToContentParent vars.

    • fix #2406 inf loop when autoPosition after loading into 1 column, then 2.

    Open source →
  55. 8.4.020 Jul 2023
    Release notes2 sources agree
    • feat #2378 attribute DDRemoveOpt.decline to deny the removal of a specific class.

    • fix: dragging onto trash now calls removeWidget() and therefore GridStack.addRemoveCB (for component cleanup)

    • feat: load() support re-order loading without explicit coordinates ( autoPosition or missing x,y ) uses passed order.

    Open source →
  56. 8.3.013 Jun 2023
    Release notes2 sources agree
    • feat #2358 column(N, 'list'|'compact'|...) resizing now support reflowing content as list
    Open source →
  57. 8.2.312 Jun 2023
    Release notes2 sources agree
    • fix #2349 grid NoMove vs item NoMove support

    • fix #2352 .ui-draggable-dragging z-index for modal dialogs

    • fix #2357 NaN inf loop when using cellHeight rem/em

    • fix #2354 max-w cloning issue fix

    Open source →
  58. 8.2.212 Jun 2023

    Nothing published for this version

  59. 8.2.126 May 2023
    Release notes2 sources agree
    • fix: make sure removeNode() uses internal _id (unique) and not node itself (since we clone those often)

    • fix: after calling addRemoveCB make sure we don't makeWidget() (incorrectly) a second time

    • break: GridStackWidget.id is now string only (used to be numberOrString) as it causes usage to have to check and cast

    Open source →
  60. 8.2.024 May 2023
    Release notes2 sources agree
    • feat: makeWidget() now take optional GridStackWidget for sizing

    • fix: make sure GridStack.saveCB is call in removeWidget()

    • feat: angular wrapper: serialize custom data support, and making sure destroy() is called on ng components

    Open source →