Releases: terrastruct/d2
v0.6.8
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 ⛑️
v0.6.7
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
andfont-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
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
D2 0.6.5 has a hotfix for 0.6.4 breaking plugin compatibility. Also includes 2 compiler fixes regarding substitutions/vars.
Bugfixes ⛑️
v0.6.4
Features 🚀
style.underline
works on connections #1836none
is added as an accepted value forfill-pattern
. Previously there was no way to cancel thefill-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
D2 0.6.3 allows you to make your own and customize existing D2 themes. Here's an example with some random color codes.
See docs
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
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.
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.
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
near
s, 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
insql_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
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.
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 #1546font-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
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