Skip to main content
Use this guide when a Grasshopper script produces multiple versions of the same design — different heights, configurations, densities, or any other parameter — and each version has numeric properties you want to compare. It covers marking Data Objects as design options, structuring metrics, publishing to Speckle, and reading results in a dashboard.
This guide assumes familiarity with the Data Object and Send components in Grasshopper. If you are new to Speckle in Grasshopper, start with the Grasshopper connector and Data Objects guides.

Tag design options in Grasshopper

1

Create a Data Object for each design variant

Use a Data Object component for each variant. Connect the variant’s geometry to the Geometries input and set a descriptive Name (e.g. "Option A", "Variant · H2.0 · N4").Each variant appears as a named object on the canvas.
2

Mark the Data Object as a design option

Right-click the Data Object component and select Mark as Design Option.The component displays a Design Option label to confirm it is enabled.
This sets the isDesignOption flag on the object automatically. Data Objects without this flag are ignored by the widget.
Grasshopper Data Object component right-click menu showing Mark as Design Option
3

Add numeric properties as performance metrics

In the Properties input, add numeric values that describe each variant’s performance or characteristics. Properties shared across all design option objects become the chart axes — any property present on some options but not others is excluded from the parallel coordinates chart.Group related values under a parent key. The widget flattens nested properties using :: as a separator and uses the last segment as the axis label.For example, this structure:
produces chart axes labelled material, fabrication, score, efficiency, height_m, and panel_count. Keep leaf names short — they appear as axis labels and in the properties panel.The component preview shows all property keys and values alongside the Design Option label.

Publish to Speckle

1

Connect the list to a Send component

Connect the merged list to a Send component. Set the project and a model name that reflects the study (e.g. facade-study, tower-options).The Send component preview shows the correct object count.
2

Publish and verify

Click Publish. Open the model in the Speckle web viewer and confirm each variant appears as a separate selectable object with its properties visible in the properties panel.All variants are published and ready to connect to a dashboard.

Add the widget to a dashboard

1

Open or create a dashboard

From your Speckle workspace, open Intelligence and create a new dashboard, or open an existing one in edit mode.The dashboard editor opens with the widget panel visible on the left.
2

Drag a Design Explorer widget onto the canvas

In the widget panel, open the Grasshopper group and drag a Design Explorer widget onto the canvas.An empty Design Explorer widget appears on the canvas.
3

Connect to your Grasshopper model

Click the widget to open its sidebar. Under Data sources, click Add data source and select the project and model you published to.The widget loads and displays a thumbnail card for each design option.

Read the results

The widget shows three views simultaneously.

Parallel coordinates chart

One line per option runs across all metric axes. Hover a line to highlight the matching tile in the grid. Click a line to open that option in detail view. The chart makes trade-offs visible: options that score well on one axis often score worse on another.

Grid

The grid shows a thumbnail card for each option. Thumbnails are captured automatically from the live 3D model — no screenshots needed. Use the Sort by dropdown to rank cards by any metric.
Design Explorer grid view showing thumbnail cards with rank badges and sort dropdown

Detail view

Click any tile or chart line to open detail view for that option:
  • Properties panel (left): all metrics as key-value pairs
  • 3D viewer (centre): the selected option’s geometry in isolation, with fit-to-view and orthographic toggle
  • Filmstrip (right): the full ranked list for switching between options without returning to the grid
Click the option name in the header bar to return to the grid.
Design Explorer detail view with properties panel, 3D viewer, and options list
In detail view, the divider between the 3D viewer and the options list is draggable. Drag it to give more space to whichever panel you need.

FAQ

The widget checks the source application of the connected model and expects Grasshopper. Re-publish the model from Grasshopper, or connect a data source that was. If you are producing design options from somewhere else, see Under the hood.
Check that each Data Object has been marked as a design option via the right-click menu (Mark as Design Option). Also confirm the objects are at the top level of the model, not nested inside Collections.
Only properties that are present on all design option objects appear as chart axes. If a property is missing on even one object, it is excluded. Check that every Data Object has the same set of numeric property keys.
Thumbnails are recaptured from the live model on each load. They are not stored between sessions. Cards are interactive immediately; thumbnails fill in progressively in the background.

Under the hood

Nothing exotic — it writes a property. The menu item sets a boolean at the dotted path DesignOption.isDesignOption on the Data Object, which lands on the wire as:
The marker is excluded from the metrics, so it never appears as a chart axis.See SpeckleDataObjectPassthrough.cs#L208-L213 (pinned at dd06520).
Not officially — but nothing about the marker is Grasshopper-specific, and the only thing stopping you is a source-application check on the widget.Build the Data Objects with the marker in their properties, then set the version’s source application so the widget accepts the model:
Two things to watch that the Grasshopper component handles for you:
  • The widget isolates the marked object itself, not its children. All geometry for a variant must sit on that object’s displayValue.
  • Every marked object needs the same numeric property keys, or the odd ones out are dropped from the chart.
This is unsupported and misreports how the version was produced. It works, but treat it as a hack rather than an integration: the source-application check may be relaxed or replaced, and this workaround will not be preserved deliberately. If you are relying on it, say so on the forum — a real use case is what would justify supporting design options outside Grasshopper properly.

See also

Last modified on August 5, 2026