Hello world of Dynamo,

As we bask in the sun of a Northern Hemisphere summer, we have been hard at work on the Dynamo 2.15 release, an absolutely epic release that contains a bunch of awesome changes that make Dynamo work better, perform faster, and enable you to hone in on problem areas at a glance! Come download it, give it a spin, and let us know what you think!

 

TL:DR

In Dynamo 2.15, we introduce the Graph Node Manager and Graph Footer features to swiftly show you your graph state, introduce Trusted Locations to the world of Dynamo to ensure you are trusting the graphs you work with, and release the Getting Started tour to help new users orient themselves. We also now graphically represent function states on nodes, and we added in alignment icons. Once again, we now also dynamically resize the Watch node as well as show color output based on Object Types that matches the Code Block Node, so a string (text) representation of numbers is no longer confusing. Additionally, we massively streamlined Dynamo’s performance and balanced memory consumption across live modification of graphs, repeated calls, and more.

As always, this is but a taste rather than the full experience, so please do check out the release notes!

What is Dynamo and its flavors?

What is Dynamo Core?

Dynamo Core is a collection of bundled components that consist of the graphical interface, the compute engine, the scripting language DesignScript, and the out-of-the-box nodes that are not specific to another program like Revit or Civil 3d.

What is Dynamo for <INSERT HOST HERE>?

Dynamo for [Revit, Civil 3d, FormIt, Advance Steel, Alias or Robot Structural Analysis] is a collection of host-specific nodes that work with Dynamo Core and runs inside of said host.

What is Dynamo Sandbox?

Dynamo Sandbox is for package developers and other folks working with Dynamo code who want to stay up to date with the latest and greatest stuff coming out. Sandbox is Dynamo’s “Core” functionality distributed in a way that doesn’t interfere with other Dynamo installations and doesn’t require any other applications (except for a few windows components and some optional extras). You can read more about this distinction here.


So, what’s dropping with Dynamo 2.15?

Better ways to see your Graph Node States at a glance:

Large Dynamo graphs can be… rather intimidating. So, we decided to help you out with a couple of funky tools that get you right to the salient parts of your graph, at speed!

Introducing our two new features that enable a macro, birds-eye view of your overall graph state: the Graph Node Manager, an extension that captures all nodes in your graph along with their respective states and enables searching of the entire workspace; and the Graph Footer, an extension of the run messages and overview buttons capturing and counting all nodes in Error, Warning, or Information states. We are rather chuffed to get these out into the hands of you, hoping they streamline your Dynamo experience and allow you to be more effective with your time.

A huge shout-out to Deyan Nenov from Archilizer for all his hard work on these epic new features, and expect some more improvements to come in a future release. Oh hello workspace node search! #winning.

Graph Footer

If you’re in need of a quick-hit look at only the most serious of node states, then look no further than our brand new Graph Footer. At a glance, you will see expanded, more verbose run messages and counters of Error, Warning, and Info states, which you can click to cycle through, focusing in on those nodes so that you can contextually explore them and resolve. Pretty nifty eh?

  • [ 1 ] Warning run message styled with bold yellow outline.
  • [ 2 ] All Error, Warning, and Info counters have hover tooltips.
  • [ 3 ] Error run message styled with bold red outline and new error message.
  • [ 4 ] Errors counter button with the number of nodes in an Error state. Click this button to cycle through and zoom to nodes in an Error state.
  • [ 5 ] Info counter button with the number of nodes in an Information state. Click this button to cycle through and zoom to nodes in an Info state.
  • [ 6 ] Warnings counter button with the number of nodes in a Warning state. Click this button to cycle through and zoom to nodes in a Warning state.
  • [ 7 ] Run completed message shown in neutral grey.
  • [ 8 ] Run blocked message showing bold yellow outline demarcating a warning, as the graph is currently blocked – refer to the Trusted Locations section for more information.
  • [ 9 ] Run started message shown in neutral grey.
  • [ 10 ] Run completed with dismissed warnings message styled with a bold yellow outline.

Graph Footer run messages and state counter buttons

Graph Node Manager

For those looking for a deeper dive into the full gamut of node states, check out our brand new Graph Node Manager Extension! This extension provides a one-stop-shop solution for management of the nodes within your workspace, revealing insights into a number of different areas, including a list of all current nodes in the graph, with information displayed for each node across the categories of:

  • Type, showing Function (a node that is only partially fulfilled) and whether the node is set as Input or Output,
  • State, showing the nodes in Frozen (blocks execution of that node and all downstream nodes), Preview Off (with no icon meaning Preview is on), and Info (a kind of FYI message),
  • Issues, showing Errors (failing to even register to execute in the Dynamo Engine), Warnings (may or may not be problematic), and Missing Content (most definitely problematic!), and
  • Outputs, showing whether or not the results from your node contain either a Null value or Empty List so that you can effectively triage a graph.

 

  • [ 1 ] Search bar, allowing you to search all nodes placed into your graph workspace.
  • [ 2 ] Node state filters, helping you hone in on what truly matters.
  • [ 3 ] Node Name column, showcasing names of node. Note, if a node is renamed, it will show up here as renamed (Blue renamed indicator dot to come in a future release).
  • [ 4 ] Inspected node, focusing and zooming in on that node, showing the library node path when it can locate it, and any Error, Warning, or Info message.
  • [ 5 ] Export extension contents to CSV or JSON file formats.
  • [ 6 ] Type column, showcasing FunctionIsInput, and IsOutput node types.
  • [ 7 ] State column, showcasing Frozen, PreviewOff, and Info node states.
  • [ 8 ] Outputs column, showcasing Null value and Empty Lists nodal outputs.
  • [ 9 ] Issues column, showcasing Error, Warning, and Missing Content nodal issues.

Graph Node Manager extension overview

Diving a little deeper into the Graph Node Manager extension, users can also export this data to CSV or JSON to use elsewhere, inspect each node for its node pathzoom in to the selected node (in reality, not truly zooming but rather a focusing… we don’t touch your zoom levels unless you are super zoomed in!), use a series of filters and the node search to quickly find all relevant nodes, and copy to clipboard Errors/Warnings/Info direct from each inspected node.

  • [ 1 ] Typing into the Search bar will return only node results that have the matching node name. Note: This will not capture renamed nodes based on their original node name.
  • [ 2 ] When the Search bar is active, it will have a blue activity line underneath.
  • [ 3 ] When you start typing into the Search bar, you get the option to wipe that search with a pop-up "X".
  • [ 4 ] The node state filters are additive (a logical AND), allowing you to quickly cycle down to a subset of nodes. In this case, the nodes have to be both returning Null values, and have their Preview Off. Any other column state is a freebie.
  • [ 5 ] When you click on a node name, it will focus in on that node and also provide the nodal path if it can. This can either be from a package, or on out-of-the-box nodes.
  • [ 6 ] Inspected nodes will show a hierarchical framing border: Errors in red, Warnings in yellow, Info in blue, and all other states in grey.
  • [ 7 ] Error, Warning, or Info messages will show the same message if you hover over the node, allowing you to inspect the graph state from your one-stop-shop. Mmm, focus!
  • [ 8 ] You can Copy to Clipboard any Error, Warning, or Info state information and paste it into a Code Block node, or anywhere else of your choosing.

Graph Node Manager extension details

 

Learning how to Trust where your Dynamo graphs live

Let’s talk about security for a moment. Dynamo graphs can live anywhere on your computer! Which is awesome. We are very democratic in that sense, and we empower you to put them where you think is best. #powerToThePeople

But certain parts of your machine are also more secure than others, like those that require admin rights (elevated privileges), while others are bit more “Wild West.” It’s those Wild West locations that are a tad tricky, as they become theoretical attack vectors for bad actors and their malicious attacks. So, we wanted to put some guardrails in place to help you better control your Trusted Locations, noting that while to date, there haven’t been any bad actors we are aware of, if that were to happen in the future, moving fast wouldn’t, err, be fast enough… so we ran ahead of the problem and proactively implemented Trusted Locations into Dynamo.

This manifests in two ways. One, as a new Trust dialog upon opening a graph with four options:

  • The ability to say “Yes” and temporarily trust the file,
  • to say “No, close file”, which will exit out of the graph,
  • “Settings”, which will take you to the Preferences Panel (see the second way, below),
  • and a tick box enabling you to “Trust this file’s location in the future”, should you select the Yes option.

Two, as the new Security tab in the Preferences Panel, giving you a few options to control what locations you trust. Inside the Security tab, you can set, add, or remove any file location as a trusted location, which also recursively trusts any sub-folders within your chosen location. You can also choose to forgo the Trust system entirely by turning it off – albeit we don’t recommend this and would encourage you to lean in to the stronger guardrails by selecting those file locations you do, indeed, trust.

Prior to selecting any of these options, you can still navigate around your graph and make modifications, but the run mode will be blocked until you select an option, and as you saw above, a funky new Run blocked message tells you this. #clearArticulation

  • [ 1 ]  Selecting the “X” on the notification pop-up will exit it.
  • [ 2 ] There are two scenarios that pop up the notification upon exit: one, if you select the tick box and click “Yes”, informing you that you have trusted this file’s location and showing you that path, and two, if you select the tick box but click “No, close file”, informing you that even though you selected the tick box, nothing was saved. This is to safeguard against inadvertent clicks as, theoretically, clicking No means you do not trust this file.
  • [ 3 ] Hover tooltips are available for each question mark, giving you extended information.
  • [ 4 ] The Trust dialog tick box that enables you to quickly save this Dynamo graph's location into your Trusted Locations.
  • [ 5 ] Clicking on the Settings button takes you to the Security tab of the Preferences Panel.
  • [ 6 ] Graph run is blocked when opening a graph not stored under a trusted location, or until you select an option in the Trust dialog. This means no data will pass to the Dynamo Engine to be executed, but you are still able to navigate around and make edits to your graph.
  • [ 7 ] Clicking the No, close file button will exit the graph, prior to any form of run being executed.
  • [ 8 ] Clicking the Yes button will temporarily allow you to work with this graph, but will not save the graph’s location unless you also select the tick box [ 4 ].
  • [ 9 ] Toggle that allows you to disable Dynamo's Trust features entirely.
  • [ 10 ] Hover tooltips are available for each question mark, giving you extended information.
  • [ 11 ] New Security tab in the Preferences panel.
  • [ 12 ] Add Path button allows you to add new paths that you trust. This will recursively add any sub-folders inside your chosen path.
  • [ 13 ] All trusted locations will show up in a list under the Add Path button.
  • [ 14 ] You can modify or delete any path that you have put here. Deleting a path will once again trigger the Trust dialog when opening a graph from that location.

Trust dialog and Security tab in the Preferences panel

 

How to get started in Dynamo

New to Dynamo and want to better understand how to get started? Or you’ve used it for a long time and just want to play with a fun new Interactive Guide? Then let’s take a journey through the Getting Started interactive guide we’ve just introduced, which teaches you about the basic building blocks of Dynamo. The cool thing about this is it’s interactive and hands-on… rock on kinesthetic learning! This guide will walk you through a handful of steps that explains the nodal workspace, how graphs power Dynamo, how nodes are the building blocks of Dynamo and how to place them, how to connect nodes together with wires and how to run a Dynamo graph. 

Getting Started interactive guide

Improving the nodal landscape

Upon adding resizable toggles to the Watch node in Dynamo 2.11, we also had to give them a default size. This turned out to be… rather bigger than desired for most of you, so we’re improving them! Watch nodes are now the best of both worlds, being dynamic with single items and stretching to a cap (think behavior of Dynamo 2.10 and earlier) in conjunction with resizability for lists of items (behavior introduced in Dynamo 2.11) and a more appropriate default size, giving you back screen real-estate #iteratingTowardsPerfection. We’ve also introduce a new hotkey, F1, that triggers the Help… menu on any selected node to bump up our extended node help’s ease of access, and expanded the help menu to now provide full coverage of all Dynamo Core nodes.

We’re also super excited to bring you recolored data types in Preview Bubbles and Watch Nodes that can at a glance tell you if your number is really a number, or a string in disguise. Historically, you had to either understand your data, get really good at reading warnings, or use an Object.Type node to figure out why your graph logic was somehow failing. Pesky blighters. Now, all you need to do is take a quick glance at the outputs to check for numbers in blue, or strings in brown.

You’ll note that this isn’t exhaustive, missing nulls and other richer data types. Nulls needed some technical untangling, and we decided to skip richer data types, as they are both self-explanatory and harder to define when you get into the myriad of different combinations… what would get special treatment, and what would not, how quickly would we run out of colors, and would it be more confusing than leaving it alone? All good questions pointing towards keeping the status quo.

  • [ 1 ]  A single item will be shrunk-wrapped by the Watch node.
  • [ 2 ] Single items over a certain length will cap horizontally and reintroduce the scroll bar. We tried forever expanding lines… it wasn’t pretty.
  • [ 3 ] Lists will show as the new default-size Watch node, complete with resizable toggle. Note: You can make them smaller than their default size.
  • [ 4 ] Primitive data types are now represented in color and match their Code Block node equivalents in DesignScript.
  • [ 5 ] The default Watch Node size is now smaller vertically.
  • [ 6 ] The Help… menu can now be triggered with F1.

Watch node dynamics, F1 hotkey to access Node Help and Output color

 

All nodes continue their journey towards visual clarity at a glance as we introduce an indicator of Function state on nodes. A function bar on a node’s output port indicates that that the node is, well, in a function state. Nodes that behave as a function tell us two things: one, that the node in question is not fully satisfied (working in tandem with the input port red color bar), or two, that that node is used in function passing. This is a special case that also changes all input ports to a grey bar to indicate that while the node may be in a function state, the graph itself is fully functioning. Now say fully functioning function state ten times quickly…. #dynamoTongueTwister.

The List.RemoveIfNot node, an unsung hero of messy data filtering, has been made more sensible; instead of just allowing DesignScript types, such as “int” and “string”, it will now also allow the equivalent C# types such as “System.Int64” and “System.String”. This means that you can use an Object.Type node, and all of its outputs, be they primitives or complex data structures, will now work. Use this node to quickly filter out a messy input (such as the Revit selection nodes) to get to the good stuff fast. Rockin’! We have also added an icon to the String.GetNumber node and added node selection to the undo/redo stack.

  • [ 1 ]  A Code Block node full of messy input data: strings and integers.
  • [ 2 ] The Object.Type node showcasing each object's type, returned as C# types.
  • [ 3 ] A Code Block node pulling out our desired index. Note – this isn’t the smartest way to do things if you want robustness. It’s the quick and dirty method…
  • [ 4 ] The List.RemoveIfNot node that will remove anything that is not your specified data type and discard it.
  • [ 5 ] The existing DesignScript types still work: int, string, bool, double.
  • [ 6 ] Greyed-out color bar on the input port. Typically, this would be red, but here it is satisfied as a special case for Function Passing.
  • [ 7 ] All nodes that are returning a Function will how have a vertical grey bar on the output port.

List.RemoveIfNot improvements and Function States

Getting faster and more responsive

Dynamo is fast in some areas, but slow in others, and because we know that time == money, we want to put some calories into making Dynamo sing. Massive performance and memory enhancements drop in Dynamo 2.15, bringing cross-product replication optimization to the Callsite class (not something you truly need to know, but there for the technically curious), taking a specific test graph from 2.3 seconds to 1.3 seconds, and dropping its temporary memory allocation by 1 GB… that’s an epic 43% performance boost.

We have also removed a performance bottleneck that affected graphs with large node counts, taking a test graph from 2.26 seconds down to 0.87 seconds, and reducing its memory allocation by 272MB, removing a lot of overhead costs. Boom, another 61% time reduction! Not to be understated is the fact that overhead costs used to be the largest in this test graph, and now user content is. Rock on lean (Dynamo) machine. We’ve also refactored and optimized part of the VM executions’ cleanup, dramatically reducing temporary memory allocation, with our test graph clocking in at a 68% less memory, and reducing overall run time by 35%. Work it harder, make it better, do it faster… #daftPunkVibes.

Beyond execution speed gains, we’ve also optimized the live execution of modified graphs with inputs whose primitive values change, improved the performance when dragging or moving annotations by adding support for batch operations and reducing under-the-hood notification collection, and improved the performance of point projection, up to five times faster in our test case.

 

Smaller buckets of work

Beyond all the epic stuff above, we have also improved the default group styles experience by adding in localization support, allowing single character names, and visually improving the layout. We’ve also added in a keep alive option to the WPFCLI for all you headless Dynamo junkies out there, added in Launch Darkly support to enable us to turn on features leveraging server-side work after a release (i.e., when they are ready), and integrated the Customer Error Reporting (CER) tool to better help us stop crashes and improve stability by logging crash data. We’ve also added internal API support for Library modification for all integrations of Dynamo and updated CPython3 to version 3.9.12.

We also added in icons for node alignment so you can better understand what each option does, enabled new workspaces to inherit the current workspace’s scale factor setting, removing the need for you to choose the same thing over and over, prevented users from entering special characters as part of a package name to prevent downstream Windows problems, added links to the Package Details view (whoops, missed this one back in Dynamo 2.13), and allowed Dynamo packages to partially load if any of the assemblies are good.

  • [ 1 ] Node alignment icons in both the right-click Context menu and via Edit --> Align Selection describe what each option does visually.
  • [ 2 ] Package links to both the Website and Repository now show up under the Package Details extension. These are currently at the base of the extension, but will be moved up above Versions in the next release.

Node alignment icons and package links

Epic stuff! So where can I grab Dynamo 2.15?

Dynamo 2.15 will be made available in our host integrations at a future date and can be explored right now through the dynamobuilds.com website or the Github build page – available in the Sandbox version of Dynamo.

 

If you’re curious, you can also read our Release Notes

In order to keep a semblance of propriety to this blog post, we’ve skipped a few things! For more information on other minor features, bug fixes, and known issues in Dynamo 2.15, go check out our release notes!

A big shout-out to everyone who contributed to the release and the entire Dynamo community for continuing to support our work. As always, please let us know if you have any feedback or suggestions.

 

The Dynamo Team