Release 0.23.0 ยท maxGraph/maxGraph
Version 0.23.0 released on 2026-03-30.
โก This new version improves modularity, fixes important memory leaks, and adds utilities for better configuration management. โก
Breaking changes
Tooltip API moved to TooltipHandler
The tooltip-related methods have been moved from AbstractGraph to the TooltipHandler plugin.
This change improves modularity and tree-shaking, and clarifies responsibilities by removing tooltip logic from the core graph.
getTooltipgetTooltipForCell
are no longer available on AbstractGraph.
Note
Moving these methods out of AbstractGraph means they are no longer included in the bundle unless TooltipHandler is used. This reduces the minified bundle size by about -0.7 kB.
Important
If you were overriding these methods in a subclass of AbstractGraph, you must now extend TooltipHandler instead.
This change mainly impacts advanced usages where tooltips are customized.
Note
See PR #640 for full details and migration examples.
xmlUtils.getViewXml moved
The function xmlUtils.getViewXml has been moved to xmlViewUtils.getViewXml.
This change helps clarify responsibilities around XML view utilities and prepares for better modularization.
Note
The impact should be very limited, as this function was not widely used. It was mainly used internally in the Editor class.
If you were using this function, you only need to update the import path.
Highlights
Reset functions for global configurations
New helper functions are available to reset global configuration objects:
resetGlobalConfig()resetStencilShapeConfig()
These functions restore default values, including internal instances like NoOpLogger and NoOpI18n.
They are especially useful for:
- testing scenarios
- Storybook environments
- applications that need to isolate configuration state between runs
Note
See PR #979 for more details.
Fix memory leaks in destroy methods
This release includes an important fix for memory leaks during graph destruction.
Some resources were not properly released, especially in plugins like PanningManager, but the issue was more general.
This update:
- standardizes destruction flows across components
- ensures base class cleanup is always executed
- stops active timers and processes
- removes event listeners (panning, gestures, etc.)
Important
If you use maxGraph in UI frameworks (React, Angular, etc.), make sure to call graph.destroy() when your component unmounts.
This fix makes teardown more reliable and prevents hidden memory issues in long-running applications.
Resources
- npm package: @maxgraph/core 0.23.0
- Fixed issues: milestone 0.23.0
- Documentation: maxgraph_0.23.0_website.zip
- Examples: maxgraph_0.23.0_examples.zip
- Changelog (only includes a summary and breaking changes): changelog
What's Changed
๐ New Features
- feat(config): add reset functions for global configurations by @tbouffard in #979
๐ Bug Fixes
- fix: fix memory leaks in destroy methods by @redfish4ktc in #1023
๐ Documentation
- docs(HiearchicalLayout): fix copy pasted JSDoc for cache attributes by @le-codeur-rapide in #975
- docs: improve library presentation in README and website by @tbouffard in #1006
- docs: improve JSDoc of UndoManager by @tbouffard in #1007
- docs: fix JSDoc refs pointing to CellRenderer instead of ShapeRegistry by @tbouffard in #1010
- docs: fix orthogonal projection description and add cross-links by @redfish4ktc in #1030
โ๏ธ Refactor
- refactor!: move tooltip methods to TooltipHandler by @tbouffard in #640
- refactor: introduce internal log() shortcut function by @tbouffard in #974
- refactor(stories): migrate HelloWorld story to TypeScript by @tbouffard in #984
- refactor: use singular and kebab-case for source folder names by @tbouffard in #985
- refactor: simplify the implementation of
isNullishby @tbouffard in #989 - refactor!: move getViewXml from xmlUtils to xmlViewUtils by @tbouffard in #992
- refactor: use parseXml instead of direct call to DOMParser by @tbouffard in #991
- refactor(typescript): fix SonarQube issues on extensible string types by @tbouffard in #1009
- refactor(typescript): introduce the Constructor utility type by @tbouffard in #1011
- fix: parse HTML instead of XML in SvgCanvas2D.convertHtml by @tbouffard in #1012
- refactor: improve type guard for domUtils.isNode by @tbouffard in #1000
๐ Chore
- chore(deps-dev): bump storybook from 9.1.1 to 10.1.0 by @tbouffard in #981
- chore: add storybook patterns to dependabot configuration by @tbouffard in #987
- ci: ensure that all workflows define permissions of the GITHUB_TOKEN by @tbouffard in #990
- ci: attach examples and website assets to GitHub releases by @tbouffard in #996
- chore: improve Claude Code configuration by @redfish4ktc in #1029
New Contributors
- @le-codeur-rapide made their first contribution in #975
- @redfish4ktc made their first contribution in #1023
Full Changelog: v0.22.0...v0.23.0