Data Shapes 2026.4.0 : Migrated to CPython / Pythonnet

Hey everyone !

It’s been a minute since I last posted here. I definitely don’t get to speed as much time as I used to in the forum , but still working very hard to spread the love for Dynamo by making it’s awesomeness accessible to anyone through Orkestra .

This post is to announce a new release of the Data Shapes package with the long awaited full migration to CPython (no need to install IronPython for it to work anymore). And it actually is a bit more than just a migration : I really wanted to seize the opportunity to refactor the code base in a way that makes it more maintainable, and also bring some improvements that I’ve been wanting to bring for quite some time .

I also cleaned up the github repo , where bug reports and contributions are always welcome!

Important note : This new version will remain fully compatible with your old graphs. I made sure to not modify input/output signatures of nodes so that the update is as painless as possible. This version works with CPython - pythonnet 2.5 (and works around all it’s quirks :sweat_smile:) AND pythonnet 3 , because for the sake of simplicity I wanted it to be compatible with as many versions as possible and not introduce some type of version specific logic.

Here’s a quick overview of what’s new in 2026.4.0:

No more Ironpython dependency , cpython3 pythonnet2.5 and 3 compatible

I guess this is the most important point here :slight_smile: . You can ship this new version of Data-Shapes with Revit 2023 + without the need for DynamoIronPython2.7 packages.

Better code base - better dispatched across nodes

In old Data-Shapes, most of the code used to live inside the MutlipleInputForm++ node, which made it very large, very messy, and hard to maintain / troubleshoot/ update.

In new Data Shapes, I did my best te regroup the code for each input within it’s constructor node. MultipleInputForm++ is still pretty big :laughing: , but much more readable and with a better organization.

Stretchable - butter UI and readability

The inputs and form sizing used to be very hardcoded / calculated. As a result , the forms were very static, which always bugged me a bit . In the new version, I leveragle the dynamic logics of Winforms (docks, flow tables and panels), and forms are now stretchable , with inputs that adapt seamlessly!

Stretchable

Better Conditional input

I was never happy with the conditional input. Whenever you had more than two options, it would pretty much become unreadable. Also the display of all options made the layout super mmessy, not a great experience for users. In this new version, instead of picking options from radiobuttons, there’s a dropdown => much cleaner and more readable. And instead of disabling / enabling options, we simply only display the selected option!

conditionalInput

Re introduction of charts

Due to the fact that Microsoft discontinued System.Windows.Forms.DataVisualization in .net8 , the previous implementation of charts couldn’t be used anymore at all in Revit 2025+.

I didn’t want to introduce new dependencies to manage aside from the package either , for a more robust standalone functionality - so I reimplemented charts from scratch. They’re pretty basic but rather robust! They get setup exactly like before. SO any script that used Data Shapes charts will still be working.

Charts

Use of url for icons and images

The Image Input as well as the form logo used ot require a filepath or an image. You can still do that, but I’ve also added the ability to use a url. I used to use this trick in a separate python node. It made it much easier to share scripts with people who did not have access to the needed images / logos etc.

All other Data Shapes utility nodes also migrated

I know people come ot Data Shapes for the forms :laughing: , but there’s a bunch of other very useful nodes! They’ve all been updated too for CPython and Ppythonnet (2.5 and 3).

Alright mery Christmas everyone :christmas_tree: !

21 Likes

Amazing work @mostafa.elayoubi.ds!

On behalf of the entire Dynamo community,

Thank You!


pinning this topic as I feel that it is important for folks to see.

6 Likes

Thank you so much @john_pierson !! :blush::blush::folded_hands::folded_hands:

2 Likes

Awesome! Thank you @mostafa.elayoubi.ds for your continued effort to support the Dynamo community with both Data Shapes and Orkestra.

1 Like

Data Shapes now has stretchable windows??? :heart_eyes:

1 Like

Great work!!

I am curious: if we look ahead to the release of Revit 2027, will DataShapes also be updated to support it?

1 Like

I tested it with PythonNet3 package and it works fine :slight_smile: . So It looks like it will be alright in Revit 2027 because PythonNet3 will likely be the default engine (I also tested the fallback to PythonNet3 with Dynamo 4.0) . Haven’t been able to get my hands on Revit 2027 but I will as soon as possible.

I have shared a little concern here though about auto migration of nodes that might migrate stuff forward and then make it incompatible with older versions.

1 Like

I might know someone who’s testing a few things in there today… That person might be able to put a cryptic message like you’d get from a magic 8 ball about the results of a new datashapes test into a message to me, which I could then pass onto an interested party along with a few hundred words stating “don’t use this to sway any purchasing decisions for software, services, tools, or investments”…

So if the package author were interested, they could send me a DM here and I’ll start the ball rolling. :slight_smile:

1 Like

The migration from PythonNet 2.5 to PythonNet 3 mainly concerns improvements. The break changes are minors.

When Revit 2025 becomes the minor version of the life cycle, it would be interesting to migrate the package to PythonNet3 to take advantage of the improvements and simplifications (LINQ extension, Net Interface, etc. ).

FYI, the method Marshal.GetActiveObject() to get the running COM instance of a specified object is no longer available with Net Core.

Resource

3 Likes

Mostafa, thank you so much for your continued support for your Data Shapes package!

I’ve been using the Data Shapes package to drive my Dynamo dialogs since before 2018, and I’m grateful that it’s now updated for the newer Python engines.

If there is a way I may show you some appreciation via a tip jar, I would gladly contribute for your valued efforts.

Thanks again, Mostafa, and I’ll look forward to seeing how the new Data Shapes update runs inside my tools.

1 Like

Mostafa, btw, I’m curious to see how the stretchable dialogs work with users who have font scaling greater than 100%, or ultra-wide monitors. I use a bit of python to collect the monitor resolution for the user’s display to establish the initial max height of the dialog, which works well. However, I’ve had to make a couple small modifications to the python script inside the UI node to help handle users who use ultra-wide monitors. Also, users with larger scale fonts cause the dialogs to be affected by this, making some parts difficult to see.

Any thoughts?

Thanks again for all of your efforts, Mostafa. I love the Data Shapes package, and every tool I’ve made uses it.

1 Like

That is so nice of you to offer @john.gray ! I really really appreciate it , and your kind works just made my day :slight_smile: truth is I’m really happy to do this as much a I possibly can. Dynamo and the Dynamo community have had a huge impact on my professional trajectory and I am really grateful for it. This is mostly my way to try and give back as much as I can :slight_smile: .

I have honestly not specifically tired working with different font scaling I’ll try and give it a shot. I do have some scaling logic going on mostly because of 4k screens , so that might handle that as well. I’ll give it a look and met you know .

3 Likes

There are some nodes not converted to CPython3 e.g. “SelectAutoCadObjects_Data” or “MultiLanguage IO“.

thanks for reporting. I may have made an error at package deployment :thinking: . I’ll take a look.

3 Likes