Visual Programming For Revit
C# C HTML C++ FLUX F# Other
Pull request Compare This branch is 2498 commits behind DynamoDS:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Image Image

Image Dynamo is a visual programming tool that aims to be accessible to both non-programmers and programmers alike. It gives users the ability to visually script behavior, define custom pieces of logic, and script using various textual programming languages.

Get Dynamo

Looking to learn or download Dynamo? Check out!


Create a Node Library for Dynamo

If you're interested in developing a Node library for Dynamo, the easiest place to start is by browsing the DynamoSamples.
These samples use the Dynamo NuGet packages which can be installed using the NuGet package manager in Visual Studio. NuGet
The API Changes document explains changes made to the Dynamo API with every version.

You can learn more about developing libraries for Dynamo on the Dynamo wiki.

Build Dynamo from Source

You will need the following to build Dynamo:

Directions for building Dynamo on other platforms (e.g. Linux or OS X) can be found here.

Find more about how to build Dynamo at our wiki.


Dynamo is an open-source project and would be nothing without its community. You can make suggestions or track and submit bugs via Github issues. You can submit your own code to the Dynamo project via a Github pull request.



Dynamo Core

  • Direct manipulation: Sometimes numerical manipulation isn’t the right approach. Now you can manually push and pull Point geometry when in navigating in the background 3d preview.
  • Freeze Functionality: When you have long running portions of your graph, or don’t want to export data to other applications, or want to debug some logic, don’t unplug your nodes. Now you can suspend execution of specified nodes in the graph by using Freeze in the right-click contextual menu
  • Search Enhancements: Only look at the node libraries you want to with new filtering tools. See more options at once by using a compact view, or get more information with the detail view.
  • Zoom re-center: Select a node, then zoom and recenter your orbit on it in the 3d Preview Navigation
  • CNtrl-drag: Copy/Paste nodes in a familiar way
  • Add comments to custom node inputs and full default states for complex data types
  • More forgiving DesignScript syntax: Users can now write instance methods (ex. MyCurve.PointAtParameter(0.5)) as Static Methods (ex. - Curve.PointAtParameter(MyCurve, 0.5))

Known issues

  • No backwards compatibility with 0.9.0 and before

Dynamo Studio

  • Share your work online: Share interactive parametric models online. Just publish your Dynamo graph and send a link to your colleagues or the whole world. People can view and interact with your designs in a regular web browser with no Dynamo installed
  • ImportExport: Read directly from DWG files and only pull out those pieces of the file that you want.

Known issues

  • Customizer not using Display.SurfaceGeometry

Dynamo for Revit

  • Batch placement of adaptive components : Huge improvements to the speed and reliability of placing large numbers of adaptive components.

Known issues:

  • In some situations, placement of Adaptive components requires a change in list structure. The AC placement nodes now expect to receive lists of lists of placement coordinates. In the past, the nodes expected to only place one AC, now it expects to place many. If you are going to only place a single component, it needs to be nesting into a list.


Create DirectShape Elements in Dynamo

  • You can now wrap meshes, solids, and surfaces in a DirectShape and place it into your Revit Model

Library Enhancements

  • The library is now organized in a tree view to make it easier to find the nodes you want. Node types have also been color-coded to make it easier for you to locate create, action, and query nodes in the library

Manage Custom Node and Package Paths

  • Add paths to makes nodes and packages show up in the library

Node Layout Cleanup Improvements

  • Clean up layouts considering groups as a whole or clean up layouts within groups

Background Preview works on Remote Desktop and Parallels

  • For remote systems with GPUs and virtual machines with hardware-acceleration, background preview is now visible.

Additional Updates and Improvements

  • New Chapters and expansion of the Dynamo Primer
  • Easier to read Search Results
  • Node to Code Stabilization
  • Improved 'Canvas Snapshot' functionality
  • Move to .NET 4.5
  • Lots of bug fixes


Local Network Package and Definition location

  • use a common shared network folder within an office environment.

Preset Graph States

  • Keep track of different states of your graph and develop design options with Presets, found in the Edit menu

Color on surfaces

  • Square arrays of color can now be applied to surfaces with the Display.BySurfaceColors node


  • Select groups of nodes and automatically create Code Block Nodes from the selection
  • Known issues that we will continue to work on


  • Tooltips and search algorithm improvements for in canvas search (via right click)


  • Now localized to 12 languages (Dynamo for Revit and Dynamo standalone)
  • Define the localization for Dynamo standalone Instructions here


Command Line Interface

  • DynamoCLI now available for executing non-Revit Dynamo graphs

Package Manager

  • Publish a package locally from Dynamo for Revit

Known Issues


New Graphics pipeline

Graph Management


  • Improved handling of Excel.Read, including more robust management of null values and ragged lists
  • Excel.Read now has a ReadFromFileAsString toggle, to preserve text imputs if desired
  • Excel.Write now has the option to completely overwrite data in a sheet, or only the affected cells
  • Excel.Write ignores popup messages


  • List.Transpose now keeps indices of lists consistent
  • List.Clean removes null and empty lists from a given list, with or without preserving indices
  • IF nodes will now lace over test input. Example, list with inputs {true, false, true}, {1,2,3}, {a,b,c} will result in {1,b,3}. Previously, result would be {{1,2,3},{a,b,c},{1,2,3}}. See submission


  • FamilyInstance.SetRotation node


  • Dynamo for Revit is now localized based on the Operating System locale.


  • Control the preview state of multiple nodes at once in right-click menu
  • Node port tooltips now show default inputs
  • In canvas search available via Shift-DoubleClick and Right-Click
  • Drag and drop nodes from the browser
  • ExportToSAT now has units control
  • Backup files are now created to recover lost work. Backup folder location available in the Start page

Known Issues


New Features

User interface:

  • More visually understandable and scannable node functionality with icons in the node library
  • Expanded tooltip information in the node browser
  • Improved keyword search capabilities

Custom Nodes:

  • Lacing for Custom Nodes
  • Default Values for Custom Nodes
  • Type input tooltips for Custom Nodes


  • Unicode (Special Character) handling in Code Block Nodes and Data exchanged with other applications (like getting and setting Revit parameters)


  • Fillet and Chamfer for Solids and Polysurfaces
  • New Mesh tools available on the Package Manager from MeshToolkit


Run Auto

  • default state for new documents
  • Run state is now saved per file (rather that set per session)



Namespace Collisions:

  • Existing Code Block Nodes no longer affected by name collisions with functions that come from installed packages. For instance, Point.ByCoordinates in a Code Block Node was affected by a collision with a Point. operation in the popular Rhynamo package and would throw an error saying “Warning: Dereferencing a non-pointer. Dereferencing a non-pointer.”

Hardware Acceleration in Revit 2015

  • Hardware Acceleration was turned off when running in Revit 2015. Graphic speed and clarity is greatly improved


  • 0.8 is in a new folder structure to enable side by side installs with 0.7. There is a one time only copy/paste of existing Packages from the 0.7 folder to 0.8 for your convenience

Known Issues


New Features

  • SAT files read from disk can be automatically updated in Dynamo graph using Geometry.ImportFromSAT
  • Floor creation for structural types is now supported


  • Element.Geometry and Element.Face no longer crashes when used in Revit 2015 when executed on large groups of Revit geometry.
  • Upgraded Excel.Write nodes no longer show as “Unresolved”.
  • View.ExportAsImage will now export views other than default {3d}
  • Dynamo does not conflict with other addins. Previously, Dynamo would fail to launch in Revit when Unifi, Maxwell, Enum, or Kiwi Bonus Tools or a few other add-in were installed on Revit 2015.
  • Users can now run Dynamo as an external program for debugging libraries in Visual Studio
  • Better error messaging in Code Block Nodes
  • modelcurve.bycurve no longer creates duplicate elements when adding to an array
  • Copy/Paste of nodes now maintains lacing setting
  • Many more bug fixes

Known Issues


New features

  • Automatic update of Dynamo from changes to files on disk. Use File.FromPath nodes to drive changes from external files like Excel, images, and text files. Files being read from disk are not locked, so you can edit them on the fly.
  • Added hooks to allow for Dynamo for Structural Analysis (additional Package) workflows with Autodesk Robot.
  • LoopWhile node for iterative workflows
  • Package Manager sync and display improvements
  • Easier to use Structural Framing nodes
  • List.UniqueItems now works on Revit elements, strings, numbers, and geometry and also handles null values.
  • Migration tools for 3rd party Library loading
  • View selection via a dropdown

Bug fixes

  • Improvements to Autocomplete (Autocomplete is off for comment areas, better handling of conflicts with 3rd party library class names, commit for autocomplete only with tab, enter, dot and single left clicking)
  • Crash fixes for Package Manager
  • Libraries loaded from disk or packages now only exposed needed nodes
  • Changing Lacing triggers re-execcution of the graph
  • Consistent notation for booleans (true/false)
  • Import instance does not create multiple instances when regenerated
  • Code Block Node output port positioning improvements
  • GroupByKeys, List.Map, List.Scan fixes
  • Surface.byLoft and Solid.byLoft fixes
  • Error message improvements
  • Changing location in revit is not picked up as a document change in Dynamo
  • Custom node creation fixes (crash and bad input ports on creation)
  • Curve extraction from surfaces now works on all surfaces
  • Revit element creation and modification improvements, particularly around Views and Levels


New features

  • Autocomplete in Code Block Nodes
  • Share user-created binaries (.dll files) through the Package Manager
  • Share sample content (.rvt, .rfa, .dyn files and more) through the Package Manager

Bug fixes

  • Improvements to the core threading model (Scheduler)
  • Reduced incidence of unresponsive graph
  • Better error messages
  • clearing and updating error messages
  • Many small geometry improvements/fixes


Incremental Release with:

  • Significant Stability Improvements
  • More robust interaction with Revit elements
  • Fixes to many small geometry tools
  • Installer overhaul

Some specifics

  • Preview Geometry in Revit (2015 Sundial Release only)
  • Smaller download
  • Directly open Samples folder from Help menu
  • Object type is properly labeled on nodes for geometry outputs
  • Improved documentation for 3rd party developers
  • Advanced Tutorial Content
  • Vast Regression Testing overhaul
  • Solid.DifferenceAll(take one solid and get the Boolean difference with it versus a list of other solids0
  • Copy Lacing and Nickname settings when copy/pasting
  • List.UniquItems now works for geometry elements
  • Improved handling of large numbers of geometric elements
  • Improved Align Selection
  • Improved converting Revit Walls to Dynamo geometry
  • Improvements to search speed
  • Improved handling of updates to 0.6.3 packages
  • Improvements to If node uses in custom nodes
  • Fixed Vasari-specific compatibility issues
  • Fixed Model Line creations from Dynamo curves
  • Fixed Surface.ByPatch error with closed polycurve
  • Fixed Solid.ThinShell
  • Fixed crashes in Revit document switching
  • Fixed Mesh improperly scaled when extracted from Topography
  • Fixed Curve.TangentAtParameter on curve from offset Polycurve crashes Dynamo
  • Fixed crash using PolyCurve.Offset
  • Fixes to Curve.Project behavior
  • Fixes to Curve.PullOntoPlane behavior
  • Fixed StructuralFraming.Location
  • Fixed CBN not being parsed as a culturally invariant string
  • Fixed Background preview level of detail for curves
  • Fixed Copy/Paste of Code Block node problems
  • Fixed nested List.Map
  • Fixed Lacing issues on many nodes
  • Fixed for Integer/Double interactions
  • Fixed negative values in range expressions
  • Fixes to multi-output nodes (Raybounce node and others)
  • For more fixes, see

Back office Improvements:

  • Installer can now run silently for custom deployments
  • MVVM refactoring: Standard Code separation and formatting for greater legibility and code reusability
  • Separation from Revit dependencies for easier porting of Dynamo to new applications
  • Recursion: ScopeIf node for use in recursive custom node workflows (experimental)

Older Releases

Archive of Release Fixes and Improvements


Dynamo contains an instrumentation system that anonymously reports usage data to the Dynamo team. This data will be used to enhance the usability of the product. Aggregated summaries of the data will be shared back with the Dynamo community.

An example of the data communicated is:

"DateTime: 2013-08-22 19:17:21, AppIdent: Dynamo, Tag: Heartbeat-Uptime-s, Data: MTMxMjQxLjY3MzAyMDg=, Priority: Info, SessionID: 3fd39f21-1c3f-4cf3-8cdd-f46ca5dde636, UserID: 2ac95f29-a912-49a8-8fb5-e2d287683d94"

The Data is Base64 encoded. For example, the data field above ('MTMxMjQxLjY3MzAyMDg=') decodes to: '131241.6730208' This represents the number of seconds that the instance of Dynamo has been running.

The UserID is randomly generated when the application is first run. The SessionID is randomly generated each time Dynamo is opened.


Dynamo is licensed under the Apache License. Dynamo also uses a number of third party libraries, some with different licenses. You can find more information here.