# graphviz changelog > Graph Visualization Tools - Vendor: graphviz - Category: Developer Tools - Official site: https://gitlab.com/graphviz/graphviz - Tracked by: What's New (https://whatsnew.fyi/product/graphviz) - Harvested from: Blog (https://gitlab.com/graphviz/graphviz/-/tags?format=atom) - Entries below: 15 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 15.1.1 - Date: 2026-08-05 - Version: 15.1.1 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/15.1.1 - Permalink: https://whatsnew.fyi/product/graphviz/releases/15.1.1 See the CHANGELOG . - **changed** — When using dl_iterate_phdr to discover the plugin directory, the default compiled-in plugin directory is only overridden if dl_iterate_phdr successfully discovers the plugin directory, instead of being set to empty string on search failure - **changed** — HTML table cells are now emitted after the table border and rules to improve Z-ordering when post-styling tables with CSS ###### Changed - When using `dl_iterate_phdr` to discover the plugin directory, the default compiled-in plugin directory is only overridden if `dl_iterate_phdr` successfully discovers the plugin directory. Previously if the `dl_iterate_phdr` search failed, the plugin directory would be considered the empty string. - The cells of an HTML table are now emitted _after_ the table border and rules. The main effect of this is, when post-styling a table with CSS, cell content remains visible. I.e. Z-ordering is more intuitive. ### 15.1.0 - Date: 2026-06-18 - Version: 15.1.0 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/15.1.0 - Permalink: https://whatsnew.fyi/product/graphviz/releases/15.1.0 See the CHANGELOG . - **added** — Support new command line option `-Lm…` for controlling the m-limit when using the fdp layout algorithm - **added** — Add new vt plugin option `-Tvt-8up2` for using Unicode octant characters to render 8-pixels-per-cell output - **fixed** — Restore ability to build from source with `--disable-python` or `--disable-python3` flags - **fixed** — Prevent Gvedit from leaving temporary files on disk when previewing ###### Added - When using the fdp layout algorithm (`dot -Kfdp …` or `fdp …`), a new command line option `-Lm…` is supported for controlling the “m-limit”. See the man page for details about this option. #954 - The vt plugin has a new option for using Unicode octant characters to render 8-pixels-per-cell output, `-Tvt-8up2`. ###### Fixed - When building from source from a Git checkout, builds with `--disable-python`/`--disable-python3` once again work. This was a regression in Graphviz 14.1.3. #2839 - Gvedit no longer leaves temporary files on disk when previewing. ### 15.0.0 - Date: 2026-05-23 - Version: 15.0.0 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/15.0.0 - Permalink: https://whatsnew.fyi/product/graphviz/releases/15.0.0 See the CHANGELOG . - **changed** — The MinGW packages no longer have libgd-dependent components enabled - **removed** — The diffimg utility has been removed ###### Changed - The MinGW packages no longer have libgd-dependent components enabled. - **Breaking**: The `diffimg` utility has been removed. ### 14.1.5 - Date: 2026-04-11 - Version: 14.1.5 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.5 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.5 See the CHANGELOG . - **fixed** — The JSON renderer of the core plugin now understands a cluster to be indicated by the common rules, including the "cluster" prefix being case insensitive and the `cluster=true` attribute as an alternative - **fixed** — The description of what defines a cluster subgraph in the `gc` man page has been updated - **fixed** — When rendering multiple files at once, page numbering state from previous jobs no longer leaks into the current job - **fixed** — Logic to determine whether a rendered page is non-first has been corrected - **fixed** — gvpr modulo expressions with an out-of-range modulo operand are now detected and result in an error message - **fixed** — When gvpr dumps switch statements as text, they are now printed as switch statements instead of an if-else ladder - **fixed** — An out-of-bounds read access during gvpr type checking has been fixed - **fixed** — A null pointer dereference when freeing xdot objects has been fixed ###### Fixed - The JSON renderer of the core plugin now understands a cluster to be indicated by the common rules, including the “cluster” prefix being case insensitive and the `cluster=true` attribute as an alternative. #2187 - The description of what defines a cluster subgraph in the `gc` man page has been updated. #2187 - When rendering multiple files at once (e.g. `dot -Tsvg -O file1.dot file2.dot`), page numbering state from previous jobs no longer leaks into the current job. This was a regression in Graphviz 2.40.0. #2827 - Logic to determine whether a rendered page is non-first has been corrected. - gvpr modulo expressions with an out-of-range modulo operand are now detected and result in an error message. - When gvpr dumps switch statements as text, they are now printed as switch statements instead of an if-else ladder. This avoids incorrect interpretation of `break` statements in error messages. #2822 - An out-of-bounds read access during gvpr type checking has been fixed. - A null pointer dereference when freeing xdot objects has been fixed. ### 14.1.4 - Date: 2026-03-21 - Version: 14.1.4 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.4 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.4 See the CHANGELOG . - **changed** — Enable ascii plugin to be built using autotools - **fixed** — Processing concentrate=true graphs no longer crashes Graphviz ###### Changed - Enable ascii plugin to be built using autotools. #2828 ###### Fixed - Processing `concentrate=true` graphs no longer crashes Graphviz. Processing of `concentrate=true` graphs still often errors out. #2825 ### 14.1.3 - Date: 2026-03-03 - Version: 14.1.3 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.3 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.3 See the CHANGELOG . - **changed** — Using long node names in combination with the fdp layout algorithm no longer results in truncated generated names - **changed** — Vertical centering of text within HTML-like table cells has been improved - **changed** — The existing ability to provide a numeric parameter to -v to specify verbosity level is newly documented in dot --help - **fixed** — gvmap no longer dereferences a null pointer when reading position-less graphs - **fixed** — gvmap no longer crashes when adding coordinate data - **fixed** — mm2gv no longer accepts input matrices with non-real element type - **fixed** — The Tcldot_Init, Tcldot_builtin_Init, and Tcldot_SafeInit symbols in tcldot.dll are externally visible on Windows - **fixed** — The Tclpathplan_Init and Tclpathplan_SafeInit symbols in tclpathplan.dll are externally visible on Windows - **fixed** — The Autotools build system more consistently uses $PYTHON3 instead of python3 when invoking Python - **fixed** — The Autotools build system explicitly links against libglu libraries when linking against libglut - **fixed** — Corrected time formatting in verbose info/debug messages to show HH:MM:SS instead of HH:SS - **fixed** — Further parts of the network simplex algorithm have been rewritten in a non-recursive style to allow processing larger graphs that previously caused stack overflows - **fixed** — Canonicalizing an empty string or a string entirely made up of characters needing escaping no longer triggers an out-of-bounds memory write - **fixed** — An off-by-one error in the network simplex algorithm has been corrected ###### Changed - Using long node names in combination with the fdp layout algorithm no longer results in truncated generated names. - Vertical centering of text within HTML-like table cells has been improved. - The existing ability to provide a numeric parameter to `-v` to specify verbosity level are newly documented in `dot --help`. ###### Fixed - `gvmap` no longer dereferences a null pointer when reading position-less graphs. - `gvmap` no longer crashes when adding coordinate data. - `mm2gv` no longer accepts input matrices with non-`real` element type. Previously these would be accepted but processed incorrectly leading to out-of-bounds memory reads and writes. - The `Tcldot_Init`, `Tcldot_builtin_Init`, and `Tcldot_SafeInit` symbols in `tcldot.dll` are externally visible on Windows. #2809 - The `Tclpathplan_Init` and `Tclpathplan_SafeInit` symbols in `tclpathplan.dll` are externally visible on Windows. #2809 - The Autotools build system more consistently uses `$PYTHON3` instead of `python3` when invoking Python. This ensures developers are more easily able to control the Python installation in use from the top level. - The Autotools build system explicitly links against libglu libraries when linking against libglut. - Corrected time formatting in verbose info/debug messages (enabled by -v). Previously, minutes was missing, showing HH:SS instead of HH:MM:SS. - Further parts of the network simplex algorithm have been rewritten in a non-recursive style. This allows processing larger graphs that previously caused stack overflows. #2782 - Canonicalizing an empty string or a string entirely made up of characters needing escaping no longer triggers an out-of-bounds memory write. This was a regression in Graphviz 13.0.1. #2743 - An off-by-one error in the network simplex algorithm has been corrected. This could have led to suboptimal layout in some edge cases. This was a regression in Graphviz 13.0.0. ### 14.1.2 - Date: 2026-01-24 - Version: 14.1.2 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.2 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.2 See the CHANGELOG . - **removed** — Support for HP-UX has been removed - **fixed** — On MinGW, Smyrna consistently uses `/` as a path separator - **fixed** — In the CMake build system, building a statically linked `dot` with the Quartz plugin enabled has been repaired - **changed** — The configuration files exported by the CMake build system have an additional install interface of `include`, adding to the existing `include/graphviz`, allowing code to prefix include paths with `graphviz/` such as `#include ` - **fixed** — The `colorscheme` attribute when applied to edge labels works once again - **fixed** — The `dpi` and `resolution` graph attributes are now constrained to a minimum value of `0.0` - **fixed** — Compilation from source no longer fails on Solaris with symbol conflicts due to `lock_t` usage - **fixed** — When compiling Graphviz from source, `_FILE_OFFSET_BITS` is set consistently in all compilation jobs ###### Changed - Support for HP-UX has been removed. ###### Fixed - On MinGW, Smyrna consistently uses `/` as a path separator. - In the CMake build system, building a statically linked `dot` with the Quartz plugin enabled has been repaired. - The configuration files exported by the CMake build system have an additional install interface of `include`, adding to the existing `include/graphviz`. The effect of this is that code using these files to access Graphviz headers can now prefix their include paths, e.g. `#include ` instead of `#include `. #2798 - The `colorscheme` attribute when applied to edge labels works once again. This was a regression in Graphviz 11.0.0. #2801 - The `dpi` and `resolution` graph attributes are now constrained to a minimum value of `0.0`. This was already stated in the documentation but not enforced by the code. - Compilation from source no longer fails on Solaris with symbol conflicts due to `lock_t` usage. #2802 - When compiling Graphviz from source, `_FILE_OFFSET_BITS` is set consistently in all compilation jobs. #2803 ### 14.1.1 - Date: 2025-12-13 - Version: 14.1.1 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.1 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.1 See the CHANGELOG . - **changed** — When seeding random number generators with time(NULL), the result of getpid() is no longer also mixed in on non-Windows platforms - **fixed** — In the CMake build system, when WITH_SMYRNA is AUTO or unset, Smyrna enabling depends on the presence of Pangocairo - **fixed** — In the CMake build system, versions of dot with plugins built in are only linked against enabled plugins ###### Changed - When seeding random number generators with `time(NULL)`, the result of `getpid()` is no longer also mixed in. Previously this was the case on non-Windows platforms, impeding reproducibility and portability. ###### Fixed - In the CMake build system, when `WITH_SMYRNA` is `AUTO` or unset, Smyrna enabling depends on the presence of Pangocairo. - In the CMake build system, versions of `dot` with plugins built in are only linked against enabled plugins. #2795 ### 14.1.0 - Date: 2025-12-06 - Version: 14.1.0 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.1.0 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.1.0 See the CHANGELOG . - **added** — Add option neato -n3 for fit ends of edges to nodes' borders when edge trajectory is set - **added** — Orthogonal edges now support rounded corners via the radius edge attribute, rendering corners as smooth arcs instead of sharp angles when splines=ortho is set and radius > 0 - **fixed** — Remove some Undefined Behavior in sparse matrix calculations - **fixed** — In the Autotools build system, disable PHP bindings build when PHP interpreter is available but php-config is not ###### Added - Added option `neato -n3` for fit ends of edges to nodes' borders when edge trajectory is set. #2736 - Orthogonal edges now support rounded corners via the `radius` edge attribute. When `splines=ortho` is set and an edge has `radius > 0`, corners are rendered as smooth arcs instead of sharp angles. The radius value controls the size of the corner arc. Default is 0 (square corners). ###### Fixed - Some Undefined Behavior in sparse matrix calculations has been removed. - In the Autotools build system, when the PHP interpreter (`php`) is available but `php-config` is not, building the PHP bindings is no longer enabled. This was a regression in Graphviz 2.42.0. #2788 ### 14.0.5 - Date: 2025-11-29 - Version: 14.0.5 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.0.5 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.0.5 See the CHANGELOG . - **fixed** — Smyrna no longer accesses out of bounds memory or misses results when filtering attribute lists - **fixed** — osage now handles clusters that become empty when nodes are incorrectly assigned to sibling clusters ###### Fixed - When filtering attribute lists, Smyrna no longer accesses out of bounds memory or misses results. - osage should now handle clusters that become empty when nodes are incorrectly assigned to sibling clusters. #2721 ### 14.0.4 - Date: 2025-11-15 - Version: 14.0.4 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.0.4 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.0.4 See the CHANGELOG . ###### Changed - Internal timing operations now use `clock()` on all platforms (previously this was only used on Windows). This should result in more accurate timing in verbose informational messages. - Building Graphviz with expat < 2.2.8 is no longer supported on MinGW. ###### Fixed - `diffimg` now notices failures when calling Ghostscript to convert PS images to PNG and exits instead of continuing. - `dtstat` no longer reads/writes out of bounds memory on platforms where `sizeof(int) < sizeof(size_t)`. This was a regression in Graphviz 7.0.1. - Some incorrect variable types in the libcdt man page have been corrected. - `gvgen` no longer triggers Undefined Behavior when asked to generate a binary tree with depth ≥ 32 (e.g. `gvgen -t32`). - `gvgen` no longer triggers Undefined Behavior when asked to generate a hypercube with depth ≥ 32 (e.g. `gvgen -h32`). - A null pointer dereference in edge pair analysis within the circo algorithm has been fixed. ### 14.0.2 - Date: 2025-10-19 - Version: 14.0.2 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.0.2 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.0.2 See the CHANGELOG . ###### Changed - Quartz plugin code paths to support older macOS and iOS versions have been restored. Their removal was a regression in Graphviz 13.0.0. - In the CMake build system, whether Quartz-dependent components are built or not can now be controlled by the `-DWITH_QUARTZ={AUTO|ON|OFF}` option. - `dot_builtins`, when compiled with the CMake build system, now supports the Quartz plugin if it is enabled at build time. ###### Fixed - Memory corruption when using the Java bindings to render to a string has been corrected. This was a regression in Graphviz 2.49.0. - A minor typo in the `gvpr(3)` man page has been fixed. - Calling `gvpr(…, NULL)` no longer causes null pointer dereferences. ### 14.0.1 - Date: 2025-10-06 - Version: 14.0.1 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.0.1 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.0.1 See the CHANGELOG . ###### Changed - The pre-built macOS package for Autotools is now a .pkg file instead of a tarball of binaries. #2726, !4348 - In the CMake build system, whether Ghostscript-dependent components are built or not can now be controlled by the `-DWITH_GHOSTSCRIPT={AUTO|ON|OFF}` option. #2735 ###### Fixed - Points generated as curves by the dot layout algorithm are once again placed correctly. This was a regression in Graphviz 14.0.0. #2734 ### 14.0.0 - Date: 2025-09-21 - Version: 14.0.0 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/14.0.0 - Permalink: https://whatsnew.fyi/product/graphviz/releases/14.0.0 See the CHANGELOG . ###### Changed - In the CMake build system, whether GTK-dependent components are built or not can now be controlled by the `-DWITH_GTK={AUTO|ON|OFF}` option. #2714 - The CMake build system now includes man pages for the `circo`, `dot2gxl`, `fdp`, `gv2gml`, `gv2gxl`, `gvmap.sh`, `gxl2dot`, `neato`, `sfdp`, and `twopi` aliases. #1753, #2530 - In the CMake build system, whether Poppler-dependent components are built or not can now be controlled by the `-DWITH_POPPLER={AUTO|ON|OFF}` option. #2714 - The gvpr `-a` option is no longer limited to 100 arguments. It is limited now only by available memory. - In the CMake build system, whether librsvg-dependent components are built or not can now be controlled by the `-DWITH_RSVG={AUTO|ON|OFF}` option. #2714 - In the CMake build system, whether libwebp-dependent components are built or not can now be controlled by the `-DWITH_WEBP={AUTO|ON|OFF}` option. #2714 - **Breaking**: The `CDT_VERSION` macro has been updated to reflect the last time an API-breaking change was made. This should have happened in Graphviz 9.0.0 and then multiple other releases since then. #2722 - In the CMake build system, whether X11-dependent components are built or not can now be controlled by the `-DWITH_X={AUTO|ON|OFF}` option. #2714 - The graphviz_version.h header includes macros `GRAPHVIZ_VERSION_MAJOR`, `GRAPHVIZ_VERSION_MINOR`, `GRAPHVIZ_VERSION_PATCH` for compile-time discrimination based on the Graphviz version. #2716 - The CMake build system no longer allows overriding the Graphviz version with `-DVERSION=…`. - **Breaking**: The `agcanonStr` function has been removed. ###### Fixed - The CMake build system no longer installs an `sfdp` alias when SFDP is disabled (`-Dwith_sfdp=OFF`). - The plugin version in pre-built Fedora and Rocky Linux packages has been corrected 6 → 8. This change should have happened in Graphviz 13.0.0. - Empty HTML-like labels (`<>`) are once again processed successfully. This was a regression in Graphviz 13.0.0. #2727 - Some typos in the cgraph man page have been fixed. ### 13.1.2 - Date: 2025-08-08 - Version: 13.1.2 - Original notes: https://gitlab.com/graphviz/graphviz/-/tags/13.1.2 - Permalink: https://whatsnew.fyi/product/graphviz/releases/13.1.2 See the CHANGELOG . ###### Changed - `DFLT_GVPRPATH`, a `$PATH`-like variable that gvpr uses to locate user-referenced files, is now computed at runtime instead of build time. This removes a barrier to relocating a Graphviz installation from one directory to another. - In the CMake build system, whether GDK-dependent components are built or not can now be controlled by the `-DWITH_GDK={AUTO|ON|OFF}` option. #2714 ###### Fixed - Gvedit and Smyrna on MinGW can now correctly locate their supporting runtime data directories. - The gvpr options `-v` for printing verbose messages is documented. This has been supported since Graphviz 2.30 but undocumented. - When using the CMake build system, `DFLT_GVPRPATH` is no longer incorrectly missing a ".:" prefix. - On macOS, processing graphs involving URLs with the Quartz plugin is once again possible. Previously this would crash. This was a regression in Graphviz 13.0.1. #2712 - In gvpr, updating a map or deleting items from the map no longer triggers a use-after-free. #2707