D2 0.9.0 turns text into 5 export formats
D2 reads a small diagram language and decides where objects and connections should go. The quick start writes x -> y -> z to a file, watches it, and opens a browser preview that reloads after edits. The same source can produce SVG, PNG, GIF, PDF, or PPTX output. That makes diagrams reviewable in a pull request and keeps the editable form next to the document or system it explains.
The language is compact enough for a simple flow, yet the README example also shows nested containers, labeled links, shape choices, repeated objects, and style properties. D2 ships Source Sans Pro and has official themes. Go programs can call it as a library, while the standalone CLI can render without a browser on a server.
Three bundled layout engines trade control for automatic placement
D2 0.9.0 includes Dagre, ELK, and TALA layout choices. Dagre is the default layered engine, ELK is aimed at directed node-link diagrams with ports, and TALA targets software architecture diagrams. Plugins can replace the layout stage or change rendering. Most authors can start with relationships and let an engine place them, then switch engines when the default produces awkward routing or grouping.
Automatic layout also means the renderer owns decisions that a canvas editor exposes directly. Themes and style properties change appearance, but D2 is designed around declared structure rather than manual pixel placement. This is a good fit for diagrams that change with code. A marketing illustration or a carefully art-directed poster will usually be faster in a visual editor, where every bend and label position can be adjusted by hand.
What happened when we ran it
Our run cloned commit 65a01bd into an unprivileged Debian container with 3 CPUs and 8 GB of RAM. The 102.5 MB checkout contained 4,533 files and about 314,100 lines of source. Installation succeeded in 31 seconds and added 60 packages. Our measurement setup found 8 CI workflow files, no Dockerfile, and no directory named tests.
The build succeeded in 75 seconds. That result matters for contributors and teams embedding the Go library because the repository compiled in the stated clean image without an extra system-package failure. It does not measure diagram rendering speed or output quality. We did not run a visual comparison, a large-graph workload, or any of the performance cases discussed in the release notes.
The test command failed with exit 1 after 98 seconds. The Go summary counted 136 passing packages and 2 failing packages out of 138. Its final lines show successful results for libraries including PDF, PNG, PPTX, SVG, text measurement, and animated GIF output before the overall FAIL. The supplied tail does not name the two failing packages or show their error messages, so we cannot say which behavior failed or why.
Source installs require Go 1.27, while release binaries need no account
The current installation guide offers a shell script, Homebrew, standalone archives, Windows MSI files, community Windows package managers, source installation, and a published container image. It recommends a package manager or go install over piping the script when possible. The script supports a dry run, selects an install prefix, and checks a GitHub-provided archive digest when one is available. Source installs now require at least Go 1.27.
D2 needs no API key or hosted workspace. A command takes the local source and output file, and watch mode adds a browser preview. The canonical container is d2lang/d2, with amd64 and arm64 images described in the docs, despite the repository having no Dockerfile in our scan. Teams embedding fonts, remote images, or LaTeX labels should still test those assets in the same offline build job that produces their documentation.
Version 0.9.0 bundles TALA, with a reported 120-node limit case
Release v0.9.0 was published on September 7, 2026 and made TALA open source and bundled, including in the JavaScript and WebAssembly package. It also added built-in rendering for PNG, GIF, PDF, and PPTX and changed several compiler and export paths. For users of the former separate TALA plugin, the simpler installation is meaningful because no additional plugin or license key is required.
Open issue #2891 documents a counterexample worth testing before migration. Its reproduction creates 120 nodes and 100 cross-container edges. The reporter says the old TALA 0.4.3 plugin rendered it, while bundled TALA in D2 0.9.0 stops at a route-search work limit. ELK rendered that same reproduction according to the report. This is one submitted case, yet it is specific enough to add to an architecture team's acceptance set.
September 2026 activity is high, and the queue is large
GitHub showed 25,353 stars and 525 open issues and pull requests, with the last push on September 9, 2026. Recent activity included fixes and proposals for TALA routes, keyword casing, environment-controlled output, sequence diagrams, and isometric exports. The v0.9.0 release landed 2 days before that push. Those dates show maintainers and contributors working through a large combined queue, not a project coasting on old popularity.
D2's editor story is less finished than its renderer. The parser can report multiple errors, and the project has an autoformatter plus syntax highlighting. Official VS Code, Vim, and Obsidian integrations are linked from the README. The same README says the team has plans for LSP support, so buyers should read that as an aspiration rather than a current language server they can install.
Mermaid and PlantUML suit platforms that already speak their syntax
D2's 5 output formats and multiple layout engines make it a strong standalone documentation tool. Mermaid is the easier choice when GitHub, a wiki, or a static-site pipeline already renders Mermaid blocks without another binary. PlantUML has a longer-established Java toolchain and many specialized diagram forms. Choose D2 when layout quality and direct file exports justify adding its CLI; choose the syntax your publishing system already understands when operational simplicity matters more.

