Skip to content

Releases: terrastruct/d2

v0.6.8

07 Nov 21:49
47ff87e
Compare
Choose a tag to compare

Features 🚀

  • Render: SVG files render in non-browser contexts (e.g. Inkscape, LaTeX) #2147

Improvements 🧹

  • Lib: removes a dependency on external slog that was causing troubles with installation #2137
  • CLI: attempts writing to path atomically, falling back to non-atomic if failed #2141
  • Export: pptx has "created at" metadata removed, so successive runs yield the same result #2169
  • Formatter: empty board keywords (e.g. layers) are removed #2178
  • Render: a tooltip or link by itself will not expand width of shape #2183

Bugfixes ⛑️

  • Render: fixes edge case of a 3d shape with outside label being cut off #2132
  • Composition: labels for boards set with shorthand x: y was not applied #2182
  • Globs: double globs (**) were erroring when used with multiple scenario boards #2195

v0.6.7

28 Sep 23:27
8223e86
Compare
Choose a tag to compare

Features 🚀

  • Vars: Variable definitions can refer to other variables in the current scope #2052
  • Composition: Imported boards can use underscores to reference boards beyond its own scope (e.g. to a sibling board at the scope its imported to) #2075
  • Autoformat: Reserved keywords are formatted to be lowercase #2098
  • Misc: support for characters in the Latin-1 and geometric shapes unicode range #2100
  • Imports: can now import from absolute file paths #2113
  • Render: linear and radial gradients are now available for fill, stroke and font-color #2120

Improvements 🧹

  • Sequence diagram: edge groups account for edge label heights #2038
  • Sequence diagram: self-referential edges account for edge label heights #2040
  • Sequence diagram: The spacing between self-referential edges and regular edges is uniform #2043
  • Compiler: Error on multi-line labels in sql_table shapes #2057
  • Sequence diagram: Image shape actors can use spans and notes #2056
  • Globs: Filters work with default values (e.g. &opacity: 1 will capture everything without opacity explicitly set) #2090
  • Render: connection label fills have a bit of padding and border-radius for better aesthetics #2094
  • Sequence diagram: the padding between message labels and message endpoints are slightly increased #2096
  • Render: code syntax highlighter dependency upgrade caused some slight subtle color changes in code snippets #2119

Bugfixes ⛑️

  • Sequence diagram: multi-line edge labels no longer can collide with other elements #2049
  • Sequence diagram: long self-referential edge labels no longer can collide neighboring actors (or its own) lifeline edges #2050
  • Sequence diagram: fixes layout when sequence diagrams are in children boards (e.g. a layer) #1692
  • Globs: An edge case was fixed where globs used in edges were creating nodes when it shouldn't have #2051
  • Render: Multi-line class labels/headers are rendered correctly #2057
  • CLI: Watch mode uses correct backlinks (_ usages) #2058
  • Vars: Spread variables are inserted in place instead of appending to end of scope #2062
  • Imports: fix local icon imports from files that are imported #2066
  • CLI: fixes edge case of watch mode links to nested board that had more nested boards not working #2070
  • CLI: fixes theme flag not being passed to GIF outputs #2071
  • CLI: fixes scale flag not being passed to animated SVG outputs #2071
  • CLI: pptx exports use theme flags correctly #2099
  • Imports: importing files with url links is fixed #2105
  • Composition: linking to invalid boards no longer produces an invalid link #2118

v0.6.6

02 Aug 04:02
5b6143f
Compare
Choose a tag to compare

Features 🚀

  • Glob inverse filters are implemented (e.g. *: {!&shape: circle; style.fill: red} to turn all non-circles red) #2008
  • Globs can be used in glob filter values, including checking for existence (e.g. *: {&link: *; style.fill: red} to turn all objects with a link red) #2009

Improvements 🧹

  • Opacity 0 shapes no longer have a label mask which made any segment of connections going through them lower opacity #1940
  • Bidirectional connections are now animated in opposite directions rather than one direction #1939

Bugfixes ⛑️

  • Local relative icons are relative to the d2 file instead of CLI invoke path #1924
  • Custom label positions weren't being read when the width was smaller than the label #1928
  • Using shape: circle for arrowheads no longer removes all arrowheads along path in sketch mode #1942
  • Globs to null connections work #1965
  • Edge globs setting styles inherit correctly in child boards #1967
  • Board links imported with spread imports work #1972
  • Fix importing a file with nested boards #1998
  • Fix importing a file with underscores in links #1999
  • Replace a panic with an error message resulting from invalid link usage #2011
  • Fix globs not applying to scenarios on keys that were applied in earlier scenarios #2021
  • Fix edge case of invalid SVG from code blocks #2031

v0.6.5

18 Apr 05:18
8101580
Compare
Choose a tag to compare

D2 0.6.5 has a hotfix for 0.6.4 breaking plugin compatibility. Also includes 2 compiler fixes regarding substitutions/vars.

Bugfixes ⛑️

  • Fix executable plugins that implement standalone router #1910
  • Fix compiler error with multiple nested spread substitutions #1913
  • Fix substitutions from imports into different scopes #1914

v0.6.4

11 Apr 06:03
e6e5fea
Compare
Choose a tag to compare

Features 🚀

  • style.underline works on connections #1836
  • none is added as an accepted value for fill-pattern. Previously there was no way to cancel the fill-pattern on select objects set by a theme that applies it (Origami) #1882

Improvements 🧹

  • Dimensions can be set less than label dimensions #1901
  • Boards no longer inherit label fields from parents #1838
  • Prevents near targeting a child of a special object like grid cells, which wasn't doing anything #1851

Bugfixes ⛑️

  • Theme flags on CLI apply to PDFs #1894
  • Fixes styles in connections not overriding styles set by globs #1857
  • Fixes null being set on a nested shape not working in certain cases when connections also pointed to that shape #1830
  • Fixes edge case of bad import syntax crashing using d2 as a library #1829
  • Fixes style.fill not applying to markdown #1872
  • Fixes compiler erroring on certain styles when the shape's shape value is not all lowercase (e.g. Circle) #1887

v0.6.3

16 Dec 23:27
2419876
Compare
Choose a tag to compare

D2 0.6.3 allows you to make your own and customize existing D2 themes. Here's an example with some random color codes.

Screen Shot 2023-12-16 at 3 13 04 PM

See docs

Playground link

Features 🚀

  • Themes can be customized via d2-config vars. #1777

Improvements 🧹

  • Icons can be added for special objects (sql_table, class, code, markdown, latex). #1774

Bugfixes ⛑️

  • Fix importing files that override an existing value with an array. #1762
  • Fixes missing unfilled triangle arrowheads when sketch flag is on. #1763
  • Fixes a bug where the render target could be incorrect if the target path contains "index". #1764
  • Fixes ELK layout with outside labels/icons. #1776
  • Fixes a bug where an edge could become disconnected with dagre layout and direction right. #1778

v0.6.2

07 Dec 00:19
e377e79
Compare
Choose a tag to compare

D2 0.6.2 makes grid diagrams significantly more powerful. Namely, connections can now be made from grid elements to other grid elements. This enables diagrams like the following.

vector-grid

Source code

Playground link

Credit: this diagram is based off of a manually-drawn one from a blog post

In addition, another significant feature is that using the ELK layout engine will now route SQL diagrams to their exact columns.

Screen Shot 2023-12-06 at 3 26 39 PM

Playground link

Note that all previous playground links will be broken given the encoding change. The encoding before 0.6.2 used the keyword set as compression dictionary, but it no longer does, so this will be the last time playground links break.

Features 🚀

  • ELK routes sql_table edges to the exact columns (ty @landmaj) #1681
  • Unfilled triangle arrowhead is available. #1711
  • Grid containers customize label positions. #1715
  • A single board from a multi-board diagram can be rendered with --target flag. #1725

Improvements 🧹

  • Grid cells can contain nested edges #1629
  • Edges can go across constant nears, sequence diagrams, and grids, including nested ones. #1631
  • All vars defined in a scope are accessible everywhere in that scope, i.e., an object can use a var defined after itself. #1695
  • Encoding API switches to standard zlib encoding so that decoding doesn't depend on source. #1709
  • currentcolor is accepted as a color option to inherit parent colors. (ty @hboomsma) #1700
  • Grid containers can be sized with width/height even when using a layout plugin without that feature. #1731
  • Watch mode watches for changes in both the input file and imported files #1720

Bugfixes ⛑️

  • Fixes a bug calculating grid height with only grid-rows and different horizontal-gap and vertical-gap values. #1646
  • Grid layout accounts for each cell's outside labels and icons #1624
  • Grid layout accounts for labels wider or taller than the shape and fixes default label positions for image grid cells. #1670
  • Fixes a panic with a spread substitution in a glob map #1643
  • Fixes use of null in sql_table constraints (ty @landmaj) #1660
  • Fixes ELK growing shapes with width/height set #1679
  • Adds a compiler error when accidentally using an arrowhead on a shape #1686
  • Correctly reports errors from invalid values set by globs. #1691
  • Fixes panic when spread substitution referenced a nonexistant var. #1695
  • Fixes incorrect appendix icon numbering. #1704
  • Fixes crash when using --watch and navigating to an invalid board path #1693
  • Fixes edge case where nested edge globs were creating excess shapes #1713
  • Fixes a panic with a connection to a grid cell that is a container in TALA #1729
  • Fixes incorrect grid cell positioning when the grid has a shape set and fixes content sometimes escaping circle shapes. #1734
  • Fixes content sometimes escaping cloud shapes. #1736
  • Fixes panic using a glob filter (e.g. &a) outside globs. #1748
  • Fixes glob keys with import values (e.g. user*: @lib/user). #1755

v0.6.1

26 Sep 18:45
7c1d806
Compare
Choose a tag to compare

The globs feature underwent a major rewrite and is now almost finalized.

Before

Previously, globs would evaluate once on all the shapes and connections declared above it. So if you wanted to set everything red, you had to add the line at the bottom.

x
y

*.style.fill: red

Now

*.style.fill: red

x
y

We still have one more release in 0.6 series to add filters to globs, so stay tuned.

You might also be interested to know that grid cells can now have connections between them! Source code for this diagram here.

267854495-bc0a5456-3618-4d46-84db-f211ffb5246a

Features 🚀

  • UTF-16 files are automatically detected and supported #1525
  • Grid diagrams can now have simple connections between top-level cells #1586

Improvements 🧹

  • Globs are lazily-evaluated #1552
  • Latex blocks includes Mathjax's ASM extension #1544
  • font-color works on Markdown #1546
  • font-color works on arrowheads #1582
  • CLI failure message includes input path #1617

Bugfixes ⛑️

  • d2 fmt formats all files passed as arguments rather than just the first non-formatted (thank you @maxbrunet) #1523
  • Fixes Markdown cropping last element in mixed-element blocks (e.g. em and strong) #1543
  • Adds compiler error for non-blockstring empty labels #1590
  • Prevents multiple constant nears overlapping in some cases #1591
  • Fixes crash from empty nested grid #1594
  • d2fmt with variable substitution mid-string is formatted correctly #1611
  • Fixes certain shape IDs not working with dagre #1610
  • Fixes font-size adjustments missing from rendered code shape #1614

v0.6.0

31 Jul 05:41
c2dea55
Compare
Choose a tag to compare

D2 v0.6 introduces variable substitutions and globs. These two were the last of the features planned in the initial designs for D2, and v1 is now very close!

The power of variables and globs in a programming language need no introduction, so here's two minimal examples to get started:

Variables:

vars: {
  color: aquamarine
}

x.style.fill: ${color}

Globs:

x
y
z

*.style.fill: aquamarine

Both are live on D2 Playground so give it a try! Looking forward to your issues and iterating

Layout capability also takes a subtle but important step forward: you can now customize the position of labels and icons.

Features 🚀

  • Variables and substitutions are implemented. See docs. #1473
  • Configure timeout value with D2_TIMEOUT env var #1392
  • Scale renders and disable fit to screen with --scale flag #1413
  • null keyword can be used to un-declare. See docs #1446
  • Develop multi-board diagrams in watch mode (links to layers/scenarios/steps work in --watch) #1503
  • Glob patterns have been implemented. See docs. #1479

Improvements 🧹

  • Display version on CLI help invocation #1400
  • Improved readability of connection labels when they overlap another connection #447
  • Error message when shape is given a composite #1415
  • Improved rendering and text measurement for code shapes #1425
  • The autoformatter moves board declarations to the bottom of its scope #1424
  • All font styles in sketch mode use a consistent font-family #1463
  • Tooltip and link icons are positioned on shape border #1466
  • Tooltip and link icons are always rendered over shapes #1467
  • Boards with no objects are considered folders #1504
  • DEBUG environment variable ignored if set incorrectly #1505

Bugfixes ⛑️

  • Fixes edge case in compiler using dots in quotes #1401
  • Fixes grid label font size for TALA #1412
  • Fixes person shape label positioning with multiple or 3d #1478

v0.5.1

10 Jun 03:35
320f809
Compare
Choose a tag to compare

This is a hotfix to 0.5.0, imports weren't working on Windows.

Improvements 🧹

  • Improves compiler's tooltip URL check. #1390