Skip to content

Dynamo 2.0

Ian Keough edited this page Apr 27, 2016 · 19 revisions

It took nearly 3 years for Dynamo to get to 1.0. Getting from 1.0 to 2.0 should take far less time. This document will track the proposed changes to this repository and to the Dynamo API to achieve Dynamo 2.0. For the foreseeable future, Dynamo will be the engine behind

Goals for Dynamo 2.0

  • A coherent, idiomatic, API with tooling to enforce that standard.
    • Example: To create a new DynamoModel currently, you must call DynamoModel.Start(...). This is not idiomatic c#. The creation of a new DynamoModel should be available by calling new DynamoModel(...).
  • Documentation of all APIs with links to code samples where necessary.
  • Decouple the VPL from the current Design Script implementation. Separate AST generation from the NodeModel implementation. By having AST generation on each NodeModel, we've coupled Dynamo to one language, Design Script.
  • Strict layering. All functionality not specifically related to the creation or execution of the workspace should be moved to another layer.
    • Example: We currently have the methods DynamoModel.Cut() and DynamoModel.Paste(). Cut and paste functionality should be in the view layer.
    • Example: Our RecordableCommand types wrap method calls for the purpose of enabling command playback. But command playback is only used in the context of an application. The wrapped methods should be made public and the recordable command infrastructure should be moved to a separate assembly.

Proposed Changes to the Dynamo Repository

The Dynamo repository has grown to include DynamoCore, the WPF UI used in Dynamo Studio and Dynamo for Revit, and all of the node libraries shipped with those products. The focus in Dynamo 2.0 will be in making the repository slimmer, representing only Dynamo's core: the graph and the Design Script language, and not all the bits that are parts of Dynamo-based applications. The Dynamo NuGet packages will be the primary mechanism by which associated projects consume the Dynamo APIs.

  • Remove all build errors in Dynamo.All.sln
  • Remove all node library projects from Dynamo.All.sln.
  • Each node library currently residing in core should be moved, along with its testing libraries to individual repositories which are formatted as packages.
  • Enable automated build and testing of all node library repositories.
  • A Readme and Documentation for all node libraries should be provided in a consistent manner. For documentation, consider using the same framework in place to generate the documentation for the core API.
  • Move the DynamoManipulation extension to a separate repository.
  • Move the DynamoPackages extension to a separate repository.
  • Move DynamoSandbox and DynamoCoreWpf to a separate repository.
  • Move the UpdateManager to a separate assembly, UpdateManager.dll
  • Move DynamoApplications to a separate assembly.
  • Move all issues associated with specific node libraries or Dynamo for Revit to their respective repositories.
  • Transfer wiki pages as required.
  • Create automatic builds of Dynamo NuGets during build.

Proposed Changes to the Dynamo API

  • Make methods called by the RecordableCommand types public, where appropriate, and move RecordableCommands to a separate assembly.
  • Remove all InternalsVisibleTo except for testing projects from DynamoCore.
  • Move EngineController into Workspace.
  • Remove "current" workspace distinction. Enable multiple home workspace support.
  • Relocate or internalize all members not defined in the interfaces.

Interfaces

There is a half-complete set of interfaces currently available for Dynamo. The goal for 2.0 is to complete these interfaces, and make all existing Dynamo code use these interfaces.

  • Rename DynamoCore to Dynamo
  • Create Dynamo.Interfaces assembly. Move interfaces for the model here. Reference Dynamo.Interfaces in Dynamo
    • IDynamo
    • INode
    • IWorkspace
    • IConnector
    • IGroup
    • INote
  • Replace all references to DynamoCore types with references to their interface.

Releases

Roadmap

How To

Dynamo Internals

Contributing

Python3 Upgrade Work

Libraries

FAQs

API and Dynamo Nodes

Clone this wiki locally