Fact-checked by Grok 2 weeks ago

Graphviz

Graphviz is open-source graph visualization software that represents structural information as diagrams of abstract and networks. It accepts descriptions of graphs encoded in the simple text format and renders the corresponding diagrams in a variety of useful formats such as images, , PDF, or . Graphviz provides a range of layout engines, including hierarchical, spring, and radial drawings, along with options for customizing colors, fonts, line styles, hyperlinks, and custom shapes for nodes. The software includes web and interactive graphical interfaces, auxiliary tools for graph manipulation, and bindings for various programming languages to facilitate integration into larger applications. It finds widespread use in fields such as networking for visualizing topologies, bioinformatics for pathway diagrams, for dependency , database and for schema representations, for model architectures, and visual interfaces for data exploration. Originally developed at AT&T Bell Laboratories in , Graphviz traces its origins to a by Eleftherios Koutsofios and Stephen North published in September 1991, focusing on drawing graphs related to . The project has since evolved through contributions from a global community, with its hosted on and maintained as a mature codebase over 30 years old. Graphviz is distributed under the Common Public License Version 1.0, which grants open-source rights for reproduction, distribution, and derivative works while requiring availability.

Introduction

Overview

Graphviz is an open-source package of tools designed for representing structural information as diagrams of abstract graphs and networks. It automates the layout and rendering of graphs described in textual input languages, such as the language, enabling the creation of visual representations from simple script files, typically with a .gv extension. The software supports both directed and undirected graphs, hierarchical layouts, and a range of visual attributes including shapes, styles, and colors to enhance diagram clarity and expressiveness. Initially developed at AT&T Labs Research by engineers including Emden R. Gansner and Stephen C. North, Graphviz provides layout engines like for hierarchical drawings and neato for symmetric layouts, facilitating automated visualization without manual positioning. As an open-source project, Graphviz is freely available and widely distributed, with its code hosted on under an open license. It finds primary applications in for generating diagrams like call graphs, database schemas for visualizing relationships, and visualizations for mapping connections in systems such as bioinformatics and .

History

Development of Graphviz originated at Bell Laboratories in the late , where researchers sought tools for visualizing complex graph structures, particularly in contexts. A precursor to the core layout engine emerged in 1988, marking the initial efforts in automated . Key contributors during this period included Ellson, who extended and build systems; Emden Gansner, responsible for the layout and much of the core implementation; Eleftherios Koutsofios, who developed interactive tools; and Stephen North, who led the overall project and contributed to multiple layout algorithms. The software's initial public release predated 1991, building on foundational work documented in early technical reports from the lab. In the early 1990s, Graphviz saw significant milestones that solidified its capabilities. The DOT language was formalized as a plain-text specification for describing directed and undirected graphs, enabling precise control over nodes, edges, and attributes; this was first detailed in a 1991 AT&T technical report and later published in 1993. Concurrently, integration with the lefty programmable graphics editor allowed for interactive visualization and editing, powering tools like dotty for real-time graph manipulation. These advancements expanded Graphviz beyond batch processing, facilitating its use in research and development environments at AT&T. Graphviz transitioned to open-source status in 2000, initially under the Common Public License, shifting maintenance from to a broader of contributors. The project later adopted the in the mid-2000s to align with collaborative development practices. Stable releases evolved from the 1.x series in the 1990s—such as version 1.8.0 in February 2002—to the 2.x series in the , exemplified by 1.18 on , 2004, which introduced enhanced layout engines like fdp for force-directed drawings. More recent milestones include version 12.1.2 on September 28, 2024; 13.0.0 on June 8, 2025; and 14.0.4 on November 15, 2025 (as of November 2025), each refining core functionality and compatibility. Development dynamics shifted further with the repository's migration to GitLab in 2019, enabling more streamlined collaboration and issue tracking. Post-2020 efforts have emphasized long-term stability through bug fixes and performance optimizations, alongside innovations like WebAssembly ports that allow browser-based rendering without native installations, and expanded integrations with contemporary languages and frameworks.

Graph Description

DOT Language

The DOT language is a plain-text, abstract grammar-based specification for describing and directed (digraphs) in Graphviz, enabling the definition of , , , and associated attributes without specifying details. It supports both undirected (using the graph keyword) and directed (using digraph), with the basic structure given by [strict] (graph | digraph) [name] '{' stmt_list '}', where stmt_list comprises , , attribute, or statements, and semicolons or commas between statements are optional for readability. Keywords such as graph, digraph, [node](/page/Node), [edge](/page/Edge), and [subgraph](/page/Subgraph) are case-insensitive, allowing flexible textual input that Graphviz engines process to generate visual representations. Key elements in DOT include node declarations, edge specifications, and graph-level structures. Nodes are identified by unique IDs and can be declared explicitly with attributes, as in node_id [attr_list], or implicitly through edge statements; for example, A [shape=box]; defines a node labeled "A" with a rectangular shape. Edges connect nodes using -- for undirected graphs or -> for directed ones, supporting multi-edge connections like A -> {B C}; which implies A -> B and A -> C, and can include ports for attachment points, such as north:A -> B. Subgraphs group related statements for scoping attributes or layout hints, defined as subgraph [ID] '{' stmt_list '}'; when the ID begins with cluster_ (e.g., subgraph cluster_0 { ... }), it forms a visual cluster, a special subgraph treated by layout engines to draw bounding boxes around contained elements. The attributes system provides fine-grained control over appearance and behavior, categorized into graph, node, edge, and subgraph types, set via statements like (graph | node | edge) [attr_list] or directly on elements (e.g., A -> B [label="edge label"];). Representative graph attributes include rankdir (e.g., rankdir=LR; for left-to-right layout direction) and bgcolor (e.g., bgcolor=lightblue; for background color); node attributes encompass color (e.g., color=red;), fontsize (e.g., fontsize=10; in points), shape (e.g., shape=ellipse;), and style (e.g., style=filled;); edge attributes cover style (e.g., style=dashed;), color, label, and arrowhead (e.g., arrowhead=diamond;). Attributes inherit from enclosing scopes (e.g., graph-level settings apply to all nodes unless overridden), with defaults like color=black and fontsize=14.0 ensuring consistent rendering; values are case-sensitive and support strings, numbers, or booleans. Lexical rules define valid tokens: identifiers (IDs) are alphanumeric strings starting with letters, underscores, or digits (e.g., A1_), or quoted strings (e.g., "node name"); HTML-like strings use angle brackets for rich labels (e.g., <b>bold</b>), while double-quoted strings support escapes like \" for quotes and \n for newlines. Numbers can be integers or floats (e.g., 3.14), and comments use C++-style /* block */ or // line, with lines starting with # treated as discarded preprocessor output. Semantically, a single DOT file may contain multiple independent graphs, each processed separately by Graphviz tools (e.g., via the -O option for multiple outputs), and strict graphs prohibit duplicate edges between the same nodes. A simple example of a directed graph is:
digraph G {
  rankdir=LR;
  node [color=blue, style=filled];
  A -> B [label="connects"];
  subgraph cluster_0 {
    label="Group";
    C -> D;
  }
}
This defines a left-to-right digraph "G" with blue filled nodes, an edge from A to B with a label, and a clustered subgraph containing C and D.

Other Input Formats

In addition to the primary DOT language, Graphviz provides support for several auxiliary input formats through built-in and external converters that transform graph data into for subsequent layout and rendering. These formats facilitate importing graphs from other modeling tools or data serialization methods, enabling broader without native in the core engine. One key auxiliary format is the Graph Modeling Language (GML), a plain-text standard for storing and exchanging graph structures. Graphviz includes the gml2gv command-line tool to convert GML files directly into GV () format, preserving nodes, edges, and basic attributes where possible. GML support was introduced in the early to aid integration with network analysis tools like Pajek. Similarly, the graphml2gv tool handles conversion from , an XML-based format that supports rich metadata and hypergraphs, approximating the translation due to differences in the underlying models. These converters are part of the standard Graphviz distribution and are invoked separately before feeding the output to layout engines like dot or neato. Similarly, the gxl2gv tool converts from GXL, an XML-based graph exchange format. For modern data formats like and , Graphviz does not offer built-in native input parsers; instead, support relies on custom scripts or third-party libraries that parse these formats and generate equivalent representations. For instance, packages such as yaml2dot or NetworkX can ingest YAML or graph descriptions—often used in files or —and output for Graphviz processing. This approach is common in workflows involving data pipelines or web applications, where structures represent hierarchical or networked data. As of 2023, enhancements in ports of Graphviz, such as Viz.js, have improved handling by allowing direct ingestion of objects (serializable as ) as graph inputs, bypassing full string generation for faster browser-based rendering. These alternative input methods are primarily designed for data import and preprocessing, with all graphs ultimately translated to DOT internally for layout computation and output generation. Limitations include potential loss of format-specific features during conversion, such as advanced styling in or nested structures in , making them suitable for simple to moderately complex graphs rather than as direct substitutes for native DOT authoring. Use cases often involve migrating legacy graphs from research tools (e.g., GML from ) or integrating with DevOps pipelines (e.g., from infrastructure-as-code).

Layout and Rendering

Layout Engines

Graphviz provides several layout engines, each implementing distinct algorithms to position nodes and route edges in a graph for visualization. These engines transform abstract graph descriptions into spatial arrangements, balancing aesthetic criteria such as edge crossing minimization, node overlap avoidance, and symmetry preservation. The choice of engine depends on the graph's structure—directed versus undirected, acyclic versus cyclic—and scale, with selection specified via the -K command-line flag or the layout attribute in DOT language. The primary engine, , generates hierarchical or layered layouts for directed graphs, organizing nodes into ranks based on edge directions to produce top-to-bottom or left-to-right drawings that emphasize flow and reduce edge lengths and crossings. It begins with a topological sort to assign nodes to initial ranks, ensuring no backward edges within layers, followed by the barycenter method to order nodes within each rank by minimizing edge crossings through iterative median calculations. This approach, rooted in the Sugiyama framework, excels for acyclic directed graphs like hierarchies or workflows, offering fast computation for moderate-sized graphs (up to thousands of nodes) due to its linear-time components, though performance can be tuned via attributes like mclimit for crossing minimization iterations. For undirected graphs, neato employs a force-directed model, simulating physical forces to minimize a global energy function and achieve balanced layouts without preconceived hierarchies. It primarily uses stress majorization, an iterative optimization technique that adjusts positions to match ideal pairwise distances derived from shortest paths, with an optional Kamada-Kawai mode applying steepest descent for similar force balancing. Suitable for small graphs (around 100 ), neato produces aesthetically pleasing results for general undirected structures but can be computationally intensive for larger inputs, limited by counts set via maxiter. Additional engines extend these capabilities for specific needs. fdp, an evolution of neato's spring model, uses the Fruchterman-Reingold heuristic with a multigrid solver to apply repulsive and attractive forces more efficiently, reducing forces directly rather than energy minimization, which improves handling of clustered or medium-sized undirected graphs (hundreds to thousands of nodes) while maintaining comparable aesthetics. sfdp, a multiscale variant of fdp, incorporates multilevel coarsening and refinement for scalability, enabling layouts of graphs with millions of nodes by approximating forces via quadtrees and adjustable levels, though results are approximate to prioritize speed over precision. For non-hierarchical arrangements, twopi creates radial layouts by placing nodes on concentric circles determined by their graph distance from a central root node, promoting outward expansion from the root to visualize tree-like or star-shaped structures with minimal crossings in radial directions. circo produces circular layouts ideal for cyclic or biconnected components, such as networks with loops, by identifying clusters and arranging them in circles using barycentric ordering to minimize intra-circle crossings, drawing from frameworks that partition graphs into biconnected subgraphs. Attributes like overlap=scale can post-process any engine's output to resolve node overlaps by uniform scaling, while engine-specific parameters, such as rankdir for dot or damping for neato, allow fine-tuning trade-offs between quality and performance. Overall, dot remains the fastest for directed acyclic graphs, while sfdp scales best for massive undirected datasets, ensuring Graphviz accommodates diverse visualization demands.

Output Formats

Graphviz provides a range of output formats for rendered graphs, encompassing vector graphics for scalable and printable representations, raster images for pixel-based displays, and specialized formats for interactive web integration or data interchange. These formats enable graphs to be embedded in documents, websites, or further processed by other tools, with the choice determined by the application's needs for quality, interactivity, or file size. Vector formats preserve resolution independence, making them suitable for printing and zooming. PostScript (PS), specified via the -Tps flag, generates Adobe PostScript files for high-fidelity printing on PostScript-compatible devices. PDF output, invoked with -Tpdf, produces portable documents that embed the graph layout and fonts, ensuring consistent rendering across viewers. Scalable Vector Graphics (SVG), generated using -Tsvg or variants like -Tsvgz for compressed files, are optimized for web applications due to their scalability and support for hyperlinks (via the URL attribute) and embedded metadata such as tooltips (via the tooltip attribute for mouse hover text). Additionally, Vector Markup Language (VML), output with -Tvml, provides legacy support for rendering in older Internet Explorer browsers. Raster formats produce bitmap images, ideal for quick web display or when vector scalability is unnecessary. These include Portable Network Graphics () via -Tpng for , Joint Photographic Experts Group () with -Tjpg or -Tjpeg for smaller file sizes with , Graphics Interchange Format () using -Tgif for simple animations or indexed colors, and Windows Bitmap () through -Tbmp for legacy compatibility. WebP (-Twebp), an efficient format optimized for web devices like tablets with superior compression for both lossy and lossless modes. Specialized outputs cater to interactive or data-oriented uses. Map files, such as client-side image maps generated with -Tcmapx, enable clickable regions in when paired with raster images. formats like -Tjson or -Tdot_json export graph structure and layout data in JavaScript Object Notation, facilitating programmatic manipulation or integration with web applications. The output format is selected using the command-line flag -Tlang, where lang specifies the desired type (e.g., -Tsvg); compatibility with layout engines varies, as certain engines like circo perform optimally with formats such as for circular graph representations.

Tools and Interfaces

Command-Line Tools

Graphviz provides a suite of command-line tools for rendering and manipulating graphs described in the DOT language, enabling users to generate visualizations from input files without graphical interfaces. These tools are invoked via standard shell commands, typically processing one or more input files and producing output in various formats such as SVG, PNG, or PDF. The primary renderer is dot, which uses a hierarchical layout engine suitable for directed graphs and serves as the default tool for most rendering tasks. For example, to convert a DOT file to an SVG image, the command dot -Tsvg input.gv -o output.svg reads the input graph, applies the layout, and writes the rendered output. Other executables target specific layout paradigms: neato employs a spring model for undirected graphs, fdp uses force-directed placement for scalable layouts, and twopi arranges nodes radially around a central point, as in twopi -Tpng graph.dot -o graph.png. Additionally, tcldot integrates Graphviz's directed and undirected graph facilities into Tcl scripts, allowing interpreted processing and potential interactivity within Tcl environments. Utility tools extend functionality beyond basic rendering. gvpr, a graph stream editor analogous to awk for text processing, scans and transforms graphs using a ; for instance, gvpr -f script.gpr input.gv applies a custom script to filter or modify the graph before output. For LaTeX integration, dot2tex converts Graphviz output to code, facilitating inclusion of graphs in documents, such as by piping dot -Txdot output through dot2tex -t tikz to generate embeddable snippets. Common flags across tools allow customization without altering input files. Graph attributes are set with -Gname[=value], such as -Gfontcolor=red to change text color globally; node attributes via -Nname[=value], like -Nshape=[box](/page/Box) for rectangular nodes; and edge attributes with -Ename[=value], e.g., -Ecolor=[blue](/page/Blue) for colored arrows. The -v flag enables for layout issues, while -Tformat specifies output (e.g., -Tpdf:cairo for PDF using the Cairo renderer) and -o outfile directs the result. Batch processing supports efficient handling of multiple files or pipelines. For example, dot -Tsvg -O input1.gv input2.gv generates corresponding output files like input1.gv.svg alongside each input. Tools can chain with external utilities, such as combining Graphviz output with for image composites: dot -Tpng graph.gv -o temp.png && convert temp.png overlay.png +append final.png, merging the rendered graph with another image.

Graphical Interfaces

Graphviz provides several graphical user interfaces (GUIs) that enable interactive editing, visualization, and exploration of graphs described in the language. These tools leverage Graphviz's engines as a backend for rendering while offering visual manipulation capabilities. Among the built-in GUIs, gvedit is a simple graph editor and viewer that allows users to create, edit, and visualize files with basic interface for and edge manipulation, preview, and export options. It is included in Graphviz distributions for systems and supports integration with the command-line tools for rendering. Dotty is an X11-based customizable editor for DOT files, allowing users to create, edit, and preview graph layouts in . It supports adding and deleting nodes and edges via interactions, modifying attributes such as and color through right-click menus, and switching between normal (1:1 scale) and bird's-eye (auto-scaling) views for navigation. Users can trigger layout computations on demand, undo changes, and cut/copy/paste elements, with multi-window support for handling multiple graphs simultaneously. Developed in the , dotty integrates with the dot layout engine via and is implemented using the lefty toolkit, though it is now deprecated in favor of more modern alternatives. Lefty serves as the foundational programmable set for building custom graphical interfaces in Graphviz, including dotty. It is a two-view editor that uses a procedural language similar to or to define pictures, bind user events (e.g., clicks and inputs) to operations, and handle structures like tables for representations. In dotty, lefty manages the and editing logic, enabling extensible behaviors without hardcoded layouts, and facilitates communication with external processes like for dynamic rendering. Third-party graphical viewers extend Graphviz's capabilities for interactive exploration. ZGRViewer is a Java-based tool that visualizes large DOT-generated SVG graphs with a zoomable (ZUI), supporting smooth panning, zooming, and advanced navigation features such as overview-detail views, graphical fisheye lenses, and link sliding for efficient traversal of complex structures. It processes files by converting them to via Graphviz engines like or neato, making it suitable for handling graphs with thousands of nodes. , an open-source network analysis platform, includes plugins for Graphviz integration, such as the Graphviz plugin, which imports graphs for layout computation using Graphviz algorithms and supports export back to or other formats, enabling attribute editing and visual exploration within Gephi's interactive workspace. Web-based tools have gained prominence since the for accessible, browser-native interaction with Graphviz. GraphvizOnline is an online editor that allows real-time DOT code editing, immediate rendering of graphs with customizable engines (e.g., , circo), and export options including , , and formats. It supports features like attribute modification for nodes and edges directly in the interface. Viz.js, a and port of Graphviz, enables client-side rendering of DOT graphs in web browsers without server dependencies, providing an for embedding interactive visualizations with zoom, pan, and animated transitions via libraries like d3-graphviz. These tools emphasize and programmatic integration for modern applications. Common features across these interfaces include interactive navigation ( and ), in-place attribute editing for visual customization, and export to various formats like or from the . While command-line tools handle , these graphical options prioritize user-friendly, real-time interaction for graph design and analysis.

Integrations and Applications

Programming Language Bindings

Graphviz offers libraries and wrappers that integrate its graph generation and rendering capabilities into various programming languages, facilitating programmatic construction of graphs using the language and execution of layouts without manual command-line invocation. These bindings typically handle DOT string assembly, invocation of layout engines, and output rendering, often via subprocess calls to Graphviz binaries or direct use of core libraries. In Python, the graphviz package, installable via pip install graphviz, provides classes for building DOT descriptions of undirected (Graph) and directed (Digraph) graphs, with methods to add nodes, edges, and attributes before rendering outputs like PNG or SVG through subprocess calls to Graphviz tools. A common usage pattern involves creating a graph object, defining elements, and rendering:
python
from graphviz import Digraph

g = Digraph()
g.node('A')
g.edge('A', 'B')
g.render('output', format='png')  # Produces output.png
This package also includes a Source subclass for representing and rendering raw DOT source code directly. Complementing it, PyGraphviz offers a higher-level interface that wraps Graphviz's C libraries for in-memory graph manipulation and direct rendering without external processes. For Ruby, the ruby-graphviz gem serves as an interface for generating DOT-based graphs and producing images in formats such as or by leveraging Graphviz executables. In Perl, the GraphViz.pm module enables the creation, layout, and image generation of directed and undirected graphs, supporting various output formats through integration with Graphviz tools. Java developers can use the graphviz-java , a pure implementation that parses and renders files to outputs like without requiring native Graphviz installations. JGraphT, a , provides adapters including GraphvizExporter for serializing JGraphT graphs to format, enabling subsequent rendering with Graphviz. The Go language has the go-graphviz package, which supplies bindings for parsing , executing layouts, and rendering to or ; recent versions operate as a pure Go library without external Graphviz dependencies. At the core, Graphviz's C libraries—such as gvc for context and rendering management, cgraph for graph representation, and functions like gvRender for layout computation and output generation—allow C and C++ applications to embed full Graphviz functionality directly. These libraries support programmatic DOT construction and rendering, for instance, by initializing a graph context, populating nodes and edges, laying out with engines like dot, and exporting via renderers. In the 2020s, WebAssembly bindings like @hpcc-js/wasm-graphviz have emerged, compiling Graphviz to WASM for seamless integration in browser or Node.js environments, allowing DOT rendering without native binaries.

Notable Software Using Graphviz

Graphviz is widely adopted in documentation tools to enhance code analysis and visualization. Doxygen, a popular code documentation generator, leverages Graphviz's DOT tool to produce call graphs that illustrate function relationships and dependencies in source code. PlantUML, an open-source tool for creating UML diagrams from textual descriptions, relies on Graphviz for layout computation, enabling the generation of sequence, class, and activity diagrams in formats like PNG and SVG. Similarly, AsciiDoc uses the Asciidoctor Diagram extension to embed and render Graphviz-based diagrams directly within documentation, supporting block-based syntax for flowcharts and entity-relationship models. In modeling software, Graphviz aids in visualizing complex structures. , an UML modeling tool, employs the argouml-graphviz module to automatically position and export diagram elements, including activity diagrams, using Graphviz's layout algorithms for improved readability. , HashiCorp's infrastructure-as-code platform, generates resource dependency graphs in DOT format via its graph command, which are then rendered with Graphviz to depict execution plans and module interdependencies. Graphviz extends to other domains through plugins and integrations. Graph databases like incorporate it via libraries such as neo4j-graphviz, allowing queries to be exported as files for visualizing and structures. Integrated development environments (IDEs) such as use Graphviz through the framework to render and debug internal data structures, such as object graphs during development workflows. Network protocol analyzers like support Graphviz via scripting extensions and plugins, enabling the creation of flow graphs to map packet interactions and protocol hierarchies. Notable case studies highlight Graphviz's versatility in specialized fields. In bioinformatics, Cytoscape—a platform for visualizing molecular interaction networks—integrates Graphviz through the dot-app plugin, facilitating the import and export of DOT files to analyze biological pathways and protein interactions. For web development, Graphviz provides a robust alternative to JavaScript-based tools like Mermaid.js, with libraries such as viz.js enabling serverless rendering of interactive diagrams in browsers for architecture and data flow representations. Graphviz's adoption has grown significantly in practices since 2010, driven by its utility in automating visualizations for pipelines and infrastructure management. In the 2020s, it powers automated diagram generation in Actions workflows, where scripts are processed to produce up-to-date visuals for repositories, often combined with bindings for seamless integration.

Development and Licensing

Licensing

Graphviz is licensed under the (EPL) version 1.0, a permissive open-source license administered by the . This license applies to the current versions of the software, providing a non-exclusive, worldwide, royalty-free grant of and licenses for use, reproduction, modification, and distribution. Key terms include the requirement that any modifications to the licensed code be made available in form under the same EPL terms, while allowing commercial distribution without mandatory disclosure of proprietary extensions or linked components. The license disclaims warranties and limits liability, with commercial distributors obligated to indemnify contributors against certain third-party claims. Historically, Graphviz was developed at in the late 1980s and early 1990s under proprietary terms governed by the AT&T Source Code Agreement. It was first open-sourced in 2000, initially under the Common Public License (CPL) version 1.0, which served as the predecessor to the . The project was under CPL as of 2005, with the license file updated to the EPL in the official repository in 2013. This shift maintained continuity in permissions while incorporating explicit patent protections and clarifying contributor obligations. The EPL's implications support flexible use in diverse projects: it permits commercial applications and modifications without strong copyleft enforcement on combined works, requiring only that derivative changes to core Graphviz files include attribution and availability. This makes it suitable for integration into both proprietary and , though it imposes one-way compatibility limitations with strong licenses like the GNU General Public License (GPL), necessitating separate distribution of EPL components to avoid conflicts. Overall, the license promotes community contributions while protecting intellectual property rights through its balanced terms.

Current Development

Graphviz's primary source code repository has been hosted on GitLab at gitlab.com/graphviz/graphviz since 2017, serving as the central hub for development and collaboration. The project is governed by a small team of core maintainers, including John Ellson (build and installation), Emden Gansner (graph layout issues), and Stephen C. North, alongside community volunteers who contribute through code reviews and issue triage. This structure ensures steady oversight while encouraging broad participation from the open-source community. Contributions to Graphviz follow a structured process outlined in the project's documentation. Bug reports and feature requests are submitted via GitLab issues, allowing developers to track and discuss problems systematically. For code changes, contributors submit merge requests (pull requests) that must pass the continuous integration test suite, adhere to C17 and C++17 standards, and include updates to the CHANGELOG.md for user-facing modifications; these are reviewed and approved by at least one maintainer. Discussions on usage, ideas, and non-code topics occur primarily on the official Discourse forum at forum.graphviz.org, though legacy mailing lists like graphviz-interest remain available for specific queries. In recent years, development efforts have emphasized performance enhancements and modern portability. The 14.x series, starting with version 14.0.0 released on , 2025, includes fixes for layout algorithms such as a resolution in sfdp for graphs containing cycles, improving reliability for large-scale visualizations. Community-driven ports, like the and integration via the @hpcc-js/wasm-graphviz package, enable browser-based rendering of DOT graphs without native dependencies, expanding Graphviz's reach to web applications. improvements in 2025 releases address potential vulnerabilities, including a dereference in gvpr. Graphviz maintains a release cadence of stable versions approximately every 6-12 months for major updates, supplemented by patch releases as needed; for instance, versions 14.0.1 (October 5, 2025) and 14.0.2 (October 19, 2025) followed closely after the initial 14.0.0 to resolve urgent issues. The 14.0.2 update specifically fixed issues including memory corruption in bindings for string rendering, enhancing compatibility. Development snapshots are available from the repository for early testing. The Graphviz community supports ongoing development through resources like the official for peer discussions and troubleshooting. Integration with containerization tools, such as official images on Docker Hub, facilitates easy deployment and experimentation in modern workflows. While formal annual hackathons are not a staple, volunteer-driven events and code sprints occasionally emerge via announcements to tackle specific challenges.

References

  1. [1]
    Graphviz
    ### Summary of Graphviz
  2. [2]
    The History of Graphviz
    Aug 5, 2021 · The initial kernel for Graphviz was the attempt to draw graphs related to software engineering. Stephen came across a paper addressing this.Missing: developers | Show results with:developers
  3. [3]
    DEVELOPERS.md · main - graphviz - GitLab
    Sep 20, 2025 · Graphviz is a 30+ year old code base written in memory unsafe languages. As such, there are many known out-of-bounds accesses, use-after-free, ...
  4. [4]
    License | Graphviz
    Jun 13, 2021 · The current versions of the Graphviz software are now licensed on an open source basis only under The Common Public License.
  5. [5]
    [PDF] An open graph visualization system and its applications to software ...
    SUMMARY. We describe a package of practical tools and libraries for manipulating graphs and their drawings. Our design, which aimed at facilitating the ...<|control11|><|separator|>
  6. [6]
    [PDF] Graphviz and Dynagraph – Static and Dynamic Graph Drawing Tools
    Graphviz is a collection of software for viewing and manipulating abstract graphs. It provides graph visualization for tools and web sites in domains such.
  7. [7]
    [PDF] Graphviz - Open Source Graph Drawing Tools - ResearchGate
    Graphviz is a heterogeneous collection of graph drawing tools containing batch layout programs (dot, neato, fdp, twopi); a platform for incremental layout ...Missing: original development
  8. [8]
    [PDF] Drawing graphs with dot - Graphviz
    Emden R. Gansner and Eleftherios Koutsofios and Stephen North. January 5, 2015. Abstract ... Technical Report 59113-. 921014-14TM, AT&T Bell Laboratories, ...
  9. [9]
  10. [10]
    Graphviz – Open Source Graph Drawing Tools
    Graphviz became Open Source in 2000, and was recently dis- tributed on about 500,000 CDROMs as an add-on package for the SUSE Linux release, and is ...
  11. [11]
    CHANGELOG.md · main · graphviz / graphviz - GitLab
    The baseline version of Autoconf required to build Graphviz from source has been upgraded 2.61 → 2.69. Building Graphviz from source now requires a C compiler ...
  12. [12]
    Graphviz - GitLab
    Sep 22, 2017 · Graphviz is open source graph visualization software. It has several main layout programs. See the gallery for sample layouts. It also has web and interactive ...Graphviz · GitLab · Graphviz 7 · Releases · CHANGELOG.md
  13. [13]
    graphviz-wasm - NPM
    Apr 4, 2024 · A port of Graphviz to WASM. Note: this is currently just a light wrapper around @hpcc-js/wasm, you might want to consider just using that directly.Missing: post- 2020
  14. [14]
    DOT Language - Graphviz
    Sep 28, 2024 · Abstract grammar for defining Graphviz nodes, edges, graphs, subgraphs, and clusters. Terminals are shown in bold font and nonterminals in italics.Missing: formalized | Show results with:formalized
  15. [15]
    Attributes - Graphviz
    Jul 28, 2024 · Further details concerning the setting of attributes can be found in the description of the DOT language. At present, most device ...Start | Graphviz · Splines · Fontname · Bgcolor<|control11|><|separator|>
  16. [16]
    Command Line | Graphviz
    gml2gv. GML-DOT converters. graphml2gv. GRAPHML-DOT converter. gv2gxl. GXL-GV converters. gvcolor. Flow colors through a ranked digraph. gvedit. Simple graph ...Gml2gv · Acyclic · Bcomps · Dotty
  17. [17]
    gml2gv - Graphviz
    GML-DOT converters. PDF Manual · Browse code. Last modified September 17, 2022: Add link to source code for all CLI tools (0361c44).
  18. [18]
    [PDF] GML2GV,GV2GML(1) - Graphviz
    Jun 24, 2011 · gml2gv converts a graph specified in the GML format to a graph in the GV (formerly DOT) format. gv2gml converts a graph specified in the GV ...
  19. [19]
    yaml2dot - PyPI
    The YAML to DOT Converter is a Python utility designed to transform YAML or JSON data into a visual graph representation.
  20. [20]
    JSON input for Viz.js - Show and Tell - Graphviz
    Aug 15, 2023 · The direction I've taken so far is to accept plain JavaScript objects (which could be serialized as JSON) as input for rendering.
  21. [21]
    graphml2gv: GRAPHML-DOT converter | Man Page | Commands
    graphml2gv converts a graph specified in the GRAPHML format to a graph in the GV (formerly DOT) format.
  22. [22]
    Layout Engines | Graphviz
    Oct 4, 2022 · Various algorithms for projecting abstract graphs into a space for visualization. dot hierarchical or layered drawings of directed graphs.Dot · Neato · Osage · Writing Layout Plugins
  23. [23]
    layout - Graphviz
    Jul 28, 2024 · Specifies the name of the layout engine to use, such as dot or neato. Normally, graphs should be kept independent of a type of layout.
  24. [24]
    dot | Graphviz
    Oct 2, 2022 · dot is the default tool to use if edges have directionality. The layout algorithm aims edges in the same direction (top to bottom, ...Missing: specification | Show results with:specification
  25. [25]
    [PDF] A Technique for Drawing Directed Graphs - Graphviz
    This paper describes a technique for drawing directed graphs in the plane. The goal is to make high-quality drawings quickly enough for interactive use. These ...
  26. [26]
    neato
    ### Summary of Neato Layout Engine
  27. [27]
    [PDF] Drawing graphs with NEATO - Graphviz
    Apr 26, 2004 · Its layout heuristic creates virtual physical models and runs an iterative solver to find low energy configurations. The intended appli- cations ...
  28. [28]
    fdp
    ### Summary of fdp Layout Engine
  29. [29]
    sfdp
    ### Summary of sfdp, Multiscale, and Scalability for Large Graphs
  30. [30]
    [PDF] Efficient and High Quality Force-Directed Graph Drawing - Yifan Hu
    In this paper we concentrate on drawing undirected graphs with straight-line edges, using force-directed methods (e.g., [7, 5, 24, 16]). Force-direct methods ...
  31. [31]
    twopi
    No readable text found in the HTML.<|control11|><|separator|>
  32. [32]
    NicheWorks: Interactive Visualization of Very Large Graphs - jstor
    This article is intended to describe both the methodology behind NicheWorks and our general approach to visualizing large, complex datasets; in this case, ...
  33. [33]
    circo | Graphviz
    Oct 2, 2022 · Layout Engines; circo. circo. circular layout. After Six and Tollis 1999, Kauffman and Wiese 2002. This is suitable for certain diagrams ...
  34. [34]
    A Framework for Circular Drawings of Networks - SpringerLink
    J. M. Six and I. G. Tollis, Circular Drawings of Biconnected Graphs, Proc. of ALENEX' 99, Baltimore, MD, To appear, 1999. Google Scholar.<|separator|>
  35. [35]
    Output Formats - Graphviz
    Jan 12, 2025 · Various graphic and data formats for end user, web, documents and other applications. The output format is specified with the -Tlang flag on the command line.DOT · SVG · PNG · PDFMissing: fig2dev | Show results with:fig2dev
  36. [36]
    tooltip - Graphviz
    Jul 28, 2024 · Tooltip (mouse hover text) attached to the node, edge, cluster, or graph.Missing: metadata | Show results with:metadata
  37. [37]
    WebP | Graphviz
    Produces output in the image format for the Web (WEBP) format, optimized for web devices such as tablets. See Wikipedia's WebP or Google's WebP pages.Missing: support | Show results with:support<|control11|><|separator|>
  38. [38]
    [PDF] tcldot(3tcl) - Graphviz
    tcldot converts dot and neato from batch processing tools to an interpreted and, if needed, interactive set of graph manipulation facilities. COMMANDS tcldot ...Missing: documentation | Show results with:documentation
  39. [39]
    gvpr - Graphviz
    gvpr. Graph pattern scanning and processing language. PDF Manual · Browse code. Last modified September 17, 2022: Add link to source code for all CLI tools ...
  40. [40]
    dot2tex - A Graphviz to LaTeX converter — dot2tex 2.11.3 ...
    The purpose of dot2tex is to give graphs generated by Graphviz a more LaTeX friendly look and feel. This is accomplished by converting xdot output from ...Missing: fig2dev | Show results with:fig2dev
  41. [41]
    [PDF] Editing graphs with dotty - Graphviz
    The lefty program that implements dotty starts up dot as a separate process to compute layouts. When the user asks for a new layout, lefty sends the graph to ...Missing: integration | Show results with:integration
  42. [42]
    dotty - Graphviz
    Sep 17, 2022 · A customizable graph editor. Deprecated. PDF Manual · User Guide. Last modified September 17, 2022: Move user guides to the page for their tool ...Missing: interfaces | Show results with:interfaces
  43. [43]
    [PDF] Editing Pictures with lefty - Graphviz
    We use an example that demonstrates how pictures are described and built using lefty. This example is too simple to take advantage of the editor's.
  44. [44]
    ZGRViewer, a GraphViz/DOT Viewer - ZVTM
    Mar 11, 2015 · ZGRViewer is a graph visualizer implemented in Java and based upon the Zoomable Visual Transformation Machine. It is specifically aimed at ...
  45. [45]
    [PDF] ZGRViewer: A GraphViz DOT Visualizer
    Mar 16, 2004 · ZGRViewer is a wrapper application between the GraphViz graphics suite. (citation) and the “Z Visual Transformation Machine” developed at. Xerox ...
  46. [46]
    Graphviz Layout - Gephi plugins
    Feb 20, 2023 · A simple plugin that calls graphviz at the command line and uses it to lay out a graph. Graphviz has a selection of very high-quality layout ...
  47. [47]
    Graphviz Online
    Engine: circo, dot, fdp, nop, nop2, neato, sfdp, twopi, osage, patchwork. Format: svg, png, json, xdot, plain, ps. Show raw output Download. process #1 process ...Missing: input | Show results with:input<|control11|><|separator|>
  48. [48]
    dreampuf/GraphvizOnline: Let's Graphviz it online - GitHub
    GraphvizOnline lets you edit and view GraphViz diagrams online. You can use GraphvizOnline online here.
  49. [49]
    Viz.js
    Viz.js · API · GitHub. Simple, Clusters, LR(1) Automaton. Load. Example Graphs. Copy ... dot, fdp, neato, nop, nop1, nop2, osage, patchwork, sfdp, twopi. Layout ...
  50. [50]
    mdaines/viz-js: Graphviz in your browser - GitHub
    The main package, viz, is a WebAssembly build of Graphviz with a simple JavaScript wrapper. With Viz.js, you can easily render a graph diagram as an SVG element ...
  51. [51]
    Library Usage - Graphviz
    Jul 29, 2023 · Graphviz can be used as a library with C libraries (cdt, cgraph, gvc, pack, pathplan, xdot), Tcl/tk libraries, and scripting APIs (gv.3guile, ...Missing: libgv | Show results with:libgv
  52. [52]
    User Guide — graphviz 0.21 documentation - Read the Docs
    The graphviz package provides two main classes: graphviz.Graph and graphviz.Digraph. They create graph descriptions in the DOT language for undirected and ...
  53. [53]
    GraphViz.pm download | SourceForge.net
    Mar 3, 2014 · Download GraphViz.pm for free. This module provides a Perl interface to layout and image generation of directed and undirected graphs in a ...
  54. [54]
    Use graphviz with pure java - GitHub
    graphviz-java contains all needed dependencies including one to J2V8 for the current platform (Linux, Mac OS X, Windows). This should be ok for most use cases.Missing: bindings | Show results with:bindings
  55. [55]
    goccy/go-graphviz: Go bindings for Graphviz - GitHub
    Go bindings for Graphviz. Features: Graphviz version is here. No need to install Graphviz library ( brew install graphviz or apt-get install graphviz ).
  56. [56]
    [PDF] Using Graphviz as a Library (cgraph version)
    Aug 21, 2014 · type The format of the image. The formats supported in Graphviz are FT BMP, FT GIF, FT PNG,. FT JPEG, FT PDF, FT PS and FT EPS. The value FT ...Missing: besides | Show results with:besides
  57. [57]
    Graphs and diagrams - Doxygen
    Doxygen can use the "dot" tool from graphviz to generate more advanced diagrams and graphs. Graphviz is an open-source, cross-platform graph drawing toolkit ...
  58. [58]
    graphvizdot Testing Graphviz/Dot installation - PlantUML
    GraphViz is software system that provides a program called dot. This dot program is able to generate a directed graph from a textual description.
  59. [59]
    Graphviz - Asciidoctor Docs
    Graphviz takes descriptions of graphs in a simple text language, and makes diagrams in useful formats, such as images and SVG for web pages.Missing: generation | Show results with:generation
  60. [60]
    This used to be located at http://argouml-graphviz.tigris.org.
    All UML diagrams which are stored in XMI format can be processed and exported to PDF, SVG, PNG, etcetera. This project delivers XSL transformations for each ...
  61. [61]
    terraform graph command reference - HashiCorp Developer
    The terraform graph command generates a visual representation of a configuration or execution plan that you can use to generate charts.
  62. [62]
    jexp/neo4j-graphviz: minimal javascript library/tool to ... - GitHub
    Minimal Javascript library/tool for generating dot and graphviz renderings from a Neo4j Cypher query. Uses these libraries. neo4j-driver; graphviz. Command ...
  63. [63]
    GEF/GEF4/DOT/User Guide - Eclipsepedia - Eclipse Wiki
    May 27, 2016 · ... Graphviz Export provide a simple way to visualize *.dot file output of any kind of program, e.g. to visualize and debug internal data ...
  64. [64]
    dot-app - Cytoscape App Store
    dot-app: a Graphviz-Cytoscape conversion plugin. Plugin that provides to Cytoscape import and export support of Graphviz files.
  65. [65]
    Top 6 Mermaid.js alternatives - Swimm
    Whether you choose an open-source tool like Graphviz, a text-based tool like PlantUML, or a cloud-based tool like Draw.io, the right diagramming tool can help ...
  66. [66]
    dbt4u/awesome-graphviz - GitHub
    A curated list of GraphViz related resources. Contribute to dbt4u/awesome-graphviz development by creating an account on GitHub.<|separator|>
  67. [67]
    LICENSE · main · graphviz / graphviz · GitLab
    - **License Type**: Eclipse Public License (EPL) v1.0
  68. [68]
  69. [69]
    (PDF) Graphviz - Open Source Graph Drawing Tools - ResearchGate
    Aug 7, 2025 · Graphviz is a heterogeneous collection of graph drawing tools containing batch layout programs ( dot, neato, fdp, twopi); a platform for ...
  70. [70]
    Re: why is graphviz package non-free? - Debian Mailing Lists
    ... graphviz is licensed under the Common Public License >Version 1.0 [1]. ... As explained at the top of the page, it has been recently relicensed. If this CPL is ...
  71. [71]
  72. [72]
    Contact | Graphviz
    Jan 28, 2023 · Join the Graphviz forum to ask questions and discuss Graphviz. If you have a bug or believe something is not working as expected, please submit a bug report.Missing: contribution | Show results with:contribution
  73. [73]
    Issues · graphviz - GitLab
    Issues · Issue Cygwin derives incorrect version numbers · Issue Vulnerability 47 – AddressSanitizer: heap-buffer-overflow lib/ortho/partition. · IssueMissing: process lists
  74. [74]
    CONTRIBUTING.md · main · graphviz / graphviz · GitLab
    ### Contribution Process Summary for Graphviz
  75. [75]
    Graphviz - Graph Visualization Software
    ### Summary of https://forum.graphviz.org/
  76. [76]
    Docker Image - graphviz
    Docker images with prerequisites for building Graphviz installed. Tag summary. Recent tags. windows-2019-mingw32. Recent tags. Content type. Image. Digest.