Skip to content
ARTINEXT

BIM & Revit

A custom Revit ribbon for Dynamo scripts: from a folder of graphs to an office menu

A button that looks simple is compressed history. The menu is where an office's Dynamo work stops being one person's folder and becomes a tool the whole team can find.

Digital Systems StudioPublished

The team that builds Dynamo scripts and custom Revit plugins, and turns them into tools a whole architecture, structural or MEP office can use.

Contents
  1. The short answer
  2. Where Dynamo Player stops
  3. Four ways to build it
  4. Preparing a graph
  5. Organising the tab
  6. Rolling it out
  7. When to move to a plugin
  8. Conclusion
  9. FAQ

A custom Revit ribbon for Dynamo scripts is a tab of its own in Revit where each of the office's Dynamo graphs is a named button, grouped into panels, with an icon and a tooltip. A user clicks the button, fills in a short dialog if the graph has inputs, and the graph runs. Nobody opens Dynamo. Nobody has to know which folder the file lives in.

There are four ways to build it: Dynamo Player's folder, a free add-in such as Relay, pyRevit, or a custom C# add-in. Which one fits depends on how many graphs there are, how many people run them, and how often they change.

One plugin the founder built took a process that normally ran about two weeks, sometimes closer to a month, down to roughly 10 minutes. What the user sees is one button. A simple interface is compressed history, not a lack of depth. A menu of Dynamo buttons works the same way. What makes it usable is everything decided before each button was added.

A dim wall of control panels with switches and gauges in rows, like a ribbon that gathers an office's tools in one place

Why Dynamo Player isn't a menu yet

Dynamo Player runs graphs without opening Dynamo, and it's installed with Revit. Point it at a folder and it lists every graph in it. For the person who wrote the graphs, that's enough.

For a team of ten it's a list of file names. There's no grouping by task, the names are whatever the author typed, and the graph a user needs sits next to three old versions of itself. A ribbon tab puts each graph where users already look for tools, under a name that says what it does.

Before any of that, the graph has to run for someone other than its author. Custom Dynamo script development covers what that takes.

Four ways to build the menu

From the least work to the most:

  1. A Dynamo Player folder. Nothing to install. One shared folder, one list. It's the baseline, and for a handful of graphs it may be all the office needs.
  2. Relay, a free, open-source add-in. Subfolders of its graph folder become ribbon panels and each .dyn file becomes a button. Icons are optional PNGs named with _16 and _32 suffixes. Nodes marked Is Input become a dialog before the graph runs, and nodes marked Is Output show their results afterwards. Its documentation lists current builds for Revit 2025 to 2027, and v1.5.2 for Revit 2021 to 2024.
  3. pyRevit, an open-source framework that builds ribbon tabs from folders: an .extension folder holds .tab folders, which hold .panel folders, which hold .pushbutton folders, each with a script and an icon.png. Its buttons run Python against the Revit API. It suits offices whose graphs already do most of their work inside a Python node.
  4. A custom C# add-in. When Revit starts, the add-in creates the tab and panels through UIControlledApplication's CreateRibbonTab and CreateRibbonPanel, and each button runs the office's own code. Full control over dialogs, validation, installers and updates, at the price of writing and maintaining it.

Preparing a graph to become a button

A graph that runs from a button has no author standing next to it. Before it goes on the ribbon:

  • Every value the user should choose is a node marked Is Input, with a name the user understands. Everything else is fixed inside the graph.
  • Results the user needs to see, a count of changed elements or a list of skipped ones, are marked Is Output.
  • No file path points at someone's desktop. Shared paths only.
  • The packages it uses are installed, in the same version, on every machine that has the button.
  • It has been run on a real project model, not only the one it was written in.

The last point matters most. A graph that works on its author's model and fails on the next one turns the button into a support request.

Organising the tab and its panels

Spanners and screwdrivers arranged by type on a dark pegboard

Group panels by stage of work, not by who wrote the graph: Modelling, Documentation, Sheets, Checks. A user looking for the tool that renumbers sheets looks under Sheets, and doesn't need to remember which colleague wrote it.

Name buttons as actions, Renumber sheets, Place wall posts, Export schedules, short enough to fit under the icon. The tooltip says which elements in the model the graph changes.

Retire graphs nobody runs. A tab with a button for every graph ever written is the same folder again, with icons.

Rolling the menu out to the office

Keep one copy of the graphs on a shared network folder and point every machine's menu at it. When a graph is fixed, everyone gets the fix on their next run. One or two people can write to that folder. Everyone else reads.

New buttons go on a test panel first, used by the person who asked for the graph, before they move to the main panels.

Plan for Revit releases. Revit 2025 shipped Dynamo 3.0 on .NET 8, and a package migrated to .NET 8 no longer loads in older Dynamo, so an office running two Revit versions may need two folders. The sheet sorting and wall post articles describe two graphs that often end up as buttons on a menu like this.

When the menu should become a plugin

A ribbon of Dynamo buttons is the right tool for a long time. The signs a graph has outgrown it:

  • It takes minutes on a large model, and users run it several times a day.
  • Users need a real dialog: choices that depend on the model, validation before anything changes, a clear report afterwards.
  • It breaks at every Revit release, and the fix is always the same person's job.
  • It's used across offices that don't share a network.

At that point the graph is the add-in's specification. Revit API development covers how it becomes one, the cost article covers the price, and it's the kind of work our custom Revit plugin development covers.

If the office has a handful of graphs and one person who runs them, a Relay or pyRevit tab set up in an afternoon is enough, and you don't need us, or anyone like us.

Conclusion

A custom Revit ribbon for Dynamo scripts turns a folder of graphs into a menu the whole team uses: graphs that run without their author, panels grouped by stage of work, one shared copy, and a test panel for anything new. The button looks simple. Behind it are the decisions that made it simple. What's the first thing you'd want to change? Tell us about the workflow.

FAQ

Can you add Dynamo scripts to the Revit ribbon?

Yes. Relay turns .dyn files directly into ribbon buttons, pyRevit builds buttons that run Python, and a custom C# add-in can put any logic behind a button.

Is there a free way to build a custom Revit tab?

Relay and pyRevit are both free and open source. Dynamo Player is installed with Revit too, but it shows graphs as a list rather than building a tab of its own.

How does a graph get its inputs from the user?

Nodes marked Is Input become a dialog before the graph runs. Every other value stays fixed inside the graph.

How are button icons set?

In Relay, PNG files named after the graph with _16 and _32 suffixes. In pyRevit, an icon.png inside each button's folder.

What happens to the menu when Revit is upgraded?

Each Revit release ships a specific Dynamo version. Packages and graphs have to be tested on the new one, and an office running two Revit versions may need two folders.

When should a Dynamo graph become a plugin?

When it's slow on large models, users need a full dialog with validation, it breaks at every Revit release, or it's used across offices without a shared network.

When don't you need development help?

When the office has a handful of graphs and one person who runs them. A Relay or pyRevit tab covers that.

Back to top

Next step

Tell us the process you'd change first

Bring the workflow, not the spec. If a tool is the wrong answer, we'd rather tell you that in the first conversation than at the end of a build.

We are not a fit if you want an off-the-shelf template or a generic plugin installed without a process review.