algorithmic modeling for Rhino

We don't like to make promises, as we're very bad at estimating. Basically Grasshopper releases follow one of two patterns. There are slow releases that roll minor version number (0.6, 0.7, 0.8 etc.). These sometimes take weeks or even months. One of these is usually followed by a flurry of revisions (0.8.0001, 0.8.0002, 08.0003) where reported bugs are fixed.

Current version 0.8.0066 and was released on January 22, 2012 (yes, a long time ago).

The next version will be 0.9.0001 and will hopefully be released in late May or Early June. I pasted the release notes below, as they were on May 18th:


  • Data Trees are now constructed differently in some cases, this may break files that depend on specific data tree layouts.
  • File format forwards compatibility has been broken. You may not be able to open files saved with 0.9.0001 on earlier versions.
  • Parts of the Grasshopper SDK have been broken. You may not be able to load GHA files compiled for earlier versions.
  • Component Data Matching menu items are no longer available, please use the dedicated Shortest-List/Longest-List components.

New features:

  • Grasshopper will now load GHA files that are part of RHI installer packages.
  • Moved a lot of components into the dropdown panels, reducing the default tab layout.
  • Added Preview Mesh quality settings to the Canvas Toolbar and Solution menu.
  • Shift+Click on a tab component icon now starts a component aggregate.
  • Clicking on the canvas instantiates the oldest component in an aggregate.
  • Shift+Clicking on the canvas instantiates all components in an aggregate.
  • Press Escape to destroy a component aggregate.
  • Alt+LeftClick on the canvas now starts the Split tool which pushes apart the objects on either side of the mouse.
  • MultiSave exit dialog now closes automatically when all documents have been saved.
  • Added Data Dam object to delay data across a network (Params.Special dropdown).
  • Added Sift Pattern component for splitting data without messing with the item index (Sets.List panel).
  • Added Combine Data component for merging multiple streams with nulls (Sets.List panel).
  • Added Partition List component for breaking up lists into smaller lists (Sets.List dropdown).
  • Added Match String component for comparing strings against patterns (Sets.String dropdown).
  • Added String Distance component for computing Levenshtein distances between strings (Sets.Strings dropdown).
  • Added Format component for creating formatted strings (Sets.Strings dropdown).
  • Added Cloud Display component for displaying point data as fuzzy clouds (Vector.Point dropdown).
  • Added Sort Along Curve component for sorting points using curves as guides (Vector.Point dropdown).
  • Added Barycentric Point component for creating points using barycentric coordinates (Vector.Point dropdown).
  • Added Point Groups component for finding proximal clusters in point collections (Vector.Point dropdown).
  • Added Populate Geometry component for distributing points on different shapes (Vector.Grid dropdown).
  • All Population components now use a faster algorithm.
  • Added Project Point component (Vector.Point dropdown).
  • Added Blend Curve component for G0~G2 blends (Curve.Spline panel).
  • Added Connect Curves component for blending multiple curves into one (Curve.Spline dropdown).
  • Added Curve Length Domain component for measuring lengths of sub-domains (Curve.Analysis panel).
  • Added Curve Length Parameter component for measuring lengths to and from parameters (Curve.Analysis dropdown).
  • Added Containment Ex component for testing a point against multiple regions (Curve.Analysis dropdown).
  • Evaluate Curve component has been replaced with another one that outputs kink angles rather than lengths (Curve.Analysis panel).
  • Curve Derivatives component has been replaced with another one that has variable output parameters (Curve.Analysis dropdown).
  • Curve Derivatives component now displays the derivative vectors in the Rhino viewport.
  • Added Pull Curve component for pulling curves onto surfaces (Curve.Util dropdown).
  • Added Intersect Multiple Curves component (Intersect.Physical dropdown).
  • Added Matrix Data Type and Matrix Parameter (Params.Primitive dropdown).
  • Added Field Data Type and Field Parameter (Params.Geometry dropdown).
  • Added Point Charge component (Vector.Field panel).
  • Added Line Charge component (Vector.Field panel).
  • Added Vector Force component (Vector.Field dropdown).
  • Added Spin Force component (Vector.Field dropdown).
  • Added Merge Fields component (Vector.Field panel).
  • Added Break Field component (Vector.Field panel).
  • Added Evaluate Field component (Vector.Field panel).
  • Added Field Line component (Vector.Field panel).
  • Added Field Direction Display component (Vector.Field dropdown).
  • Added Field Perpendicular Display component (Vector.Field dropdown).
  • Added Field Scalar Display component (Vector.Field dropdown).
  • Added Field Tensor Display component (Vector.Field dropdown).
  • Added Adjust Plane component for modifying plane z-axes (Vector.Plane dropdown).
  • Added Evaluate component to replace all old expression components (Math.Script panel).
  • Added Expression component which evaluates an internal expression (Math.Script panel).
  • Added Short List component for equalizing list lengths (Sets.List dropdown).
  • Added Long List component for equalizing list lengths (Sets.List dropdown).
  • Added Inside Multiple component for testing point inclusion with multiple breps (Surface.Analysis dropdown).
  • Added Collision component for testing one-to-many collisions (Intersect.Physical dropdown).
  • Added Collision component for testing many-to-many collisions (Intersect.Physical dropdown).
  • Added Mesh Inclusion component for testing point|mesh inclusion (Mesh.Analysis panel).
  • Added Mesh Closest Point component for finding the point on a mesh closest to another point (Mesh.Analysis panel).
  • Added Evaluate Mesh component for sampling position, normal and colour at a mesh parameter (Mesh.Analysis panel).
  • Added Face Boundaries component for converting mesh faces into polylines (Mesh.Analysis panel).
  • Added Mesh Edges component for extracting mesh edge lines (Mesh.Analysis panel).
  • Replaced Mesh Plane component with one that takes a rectangle (Mesh.Primitive panel).
  • Added Blur Mesh component for averaging mesh vertex colours (Math.Util dropdown).
  • Added Simple Mesh component for creating a minimal Brep representation (Mesh.Util dropdown).
  • Added Knot Style input for the Interpolate Curve component.
  • Added Knot Style input for the Interpolate Tangents Curve component.
  • Added four different display styles to the Legend object (accessible via the component menu).
  • Double clicking the Legend object toggles discrete vs. smooth display styles.
  • Added an extra input to the legend component which allows legend drawing in 3D.
  • Replaced Containment component with more sensible values for inside/coincident/outside.
  • Replaced the Recursive Voronoi component with a better one.
  • Convex Hull component will now solve for 2 points.
  • MultiDimensional Sliders can now be part of states.
  • Geometry Pipeline object now has a Locked filter, available via the popup menu.
  • Geometry Pipeline object now has a Hidden filter, available via the popup menu.
  • Geometry Pipeline object now has a 'Group By Layer' option, available via the popup menu.
  • Geometry Pipeline object now has a 'Group By Type' option, available via the popup menu.
  • In Rhino5, the Zoom Extents command will now include Grasshopper geometry.
  • Expression input parameters can now have names like "Name (n)", where the text in brackets becomes the variable name.
  • Script input parameters can now have names like "Name (n)", where the text in brackets becomes the variable name.
  • Script output parameters can now have names like "Name (n)", where the text in brackets becomes the variable name.
  • VB/C# script components now have tooltip override fields in the context menu.
  • Parameter nicknames that collide with language keywords are now automatically modified in Script components.
  • Added Wrap option to Text Panel entries. When Wrap is off, items will be trimmed using ellipses.
  • Added NickName support to Knobs.
  • Added a grip region for Knob tuning.
  • Added a specific window for changing Knob settings.
  • Copy to Windows Clipboard now tries a total of 10 times if there's an access failure.
  • Copy to Windows Clipboard now copies to internal Grasshopper clipboard on prolonged failure.
  • Aborted solutions now clear whatever data is stored inside whatever component was solving when the Escape key went down.
  • The state of the Escape key is now also monitored during data conversions, making Escape behaviour more reliable.
  • Rearranged the Params.Special panel into Input and Util panels.
  • Rearranged the Sets.String panel.
  • File Reader component now reads per line files in a more efficient manner.
  • Parameter modifier icons are now drawn as vectors rather than bitmaps.

Bug fixes:

  • Components with Preview=Off would not display in selected only mode, this is fixed.
  • Instantiating number sliders via the popup box would not work if the first number was negative, this is fixed.
  • Copy to Windows Clipboard would not fail gracefully on error, this is fixed.
  • Interpolate Curve component would not warn on invalid degrees, this is fixed.
  • Knob menu control was not correctly initialized, this is fixed.
  • Knob menu control did not correctly respond to Limit On/Off, this is fixed.
  • Curve Discontinuity component would sometimes return invalid results for C1 discontinuities, this is fixed.
  • Certain exotic cases of Data Matching and Input Access would yield faulty output data trees, this is fixed.
  • Expressions in Point parameters would affect shared instances of points, this is fixed.
  • Editor window would not reflect saved/unsaved state of the loaded document, this is fixed.
  • MultiDimensional Slider would not undo on grip drags, this is fixed.
  • Image Sampler would not behave nicely when an image file went missing sometimes, this is fixed.
  • Upgrader for Null Item component generated an invalid result, this is fixed.
  • Text Panels would not display a scrollbar for local text, this is fixed.
  • Vector Display component would remain visible after disconnecting, this is fixed.
  • Vector Display Ex component would remain visible after disconnecting, this is fixed.
  • Adding or removing output parameters from VB/C# script would not update the script, this is fixed.
  • A CCX overlap intersection would sometimes result in erroneous parameters, this is fixed.
  • The tooltip over the abort icon would not show, this is fixed.
  • The canvas wouldn't always redraw when the solver was locked, this is fixed.
  • Transform Parameter Set menu items did nothing, they are now greyed out.
  • Occlusion Component would always return a null topology, this is fixed.
  • Group crossing selection would fail on concave group outlines, this is fixed.
  • Transform input parameters on components would have an empty transform by default, this is fixed.
  • Sweeps sometimes outputted surfaces with internal kinks, this is fixed.
  • Output parameters that output lists now have tooltip suffixes indicating them as such.

The main focus of 0.9+ is to improve cluster GUI and implementation.


David Rutten

Poprad, Slovakia

Views: 4966

Reply to This

Replies to This Discussion

Yea, I think they are the only two components that are not so kangaroo specific but are really helpful in many definitions, I often find myself downloading kangaroo on other computers just for those two components, not that I don't also love the rest of kangaroo in general. and as I said before I think main functionality would be desired as

a:removing all the duplicates and keeping one (a sort of duplicate flattening)

b:put duplicates into lists with each other (a sort of duplicate grafting)

So, will this :

"Added Evaluate Mesh component for sampling position, normal and colour at a mesh parameter (Mesh.Analysis panel)."

involve somehow mesh parameterization ? Or it's just something that sounds to me familiar ?


Thanks for posting the list of changes early. When I finally finish going through the whole list the new version will be posted already.


"The main focus of 0.9+ is to improve cluster GUI and implementation."

Does this mean that 0.90001 will have improved clusters or you mean more serious cluster development will begin after the next release?

It means that 0.9.0001 should have better clusters.


David Rutten

Poprad, Slovakia

Hi David,

please would you consider also returning the edge valence (how many faces are connected to an edge) while returning the edge lines?


- Giulio

I would suggest merging the string compare into the equal function. Just like the add or subtract component, which worked for vectors now. I know vector can be considered math too.

But for beginners, strings compare seems legit to be considered "logic", despite I know it is wrong, I just think an auto-cast might be helpful for them.

Big appreciation to your hard work David, thank you.

I can't fall asleep tonight, more suggestions for you when you have time:

The graph mapper, very useful, but can never be precise to repeat. Could the four grips location be editable inside the double-clicked interface.

Iso curve component: uv input, should be clearer to receive u and v in separated inputs. Point input are confusing since the Z component for the point is disregarded anyway. 

MultiDimensional Slider: If the curent value can be set via the double-clicked interface, it would be fantastic. Also if Galapagos could move it too.

Keyword search: Since 0.8.0052, loved the quick slider initiation. Cheers for the negative value fix, wanted it so long. However, I lost the ability to find 3Pt plane, Vector 2pt, Circle 3pt and some of my own user objects, by typing the number to start with. Because the slider is the only option. Can the other recommendation (apart of the slider)also shows in the list, so at least we could pick them?

Alt-click behavior is strange, I thought the norm to Alt-Drag to copy, is first press down Alt, then Drag. However, in GH, you need to start the drag first before pressing the Alt, otherwise doesn't work. I'm too used to the old Alt first gesture.

The offset by point function should be implemented. Right now I'm using the code from Andrew Heumann in this post This is very useful in general, and should be implemented on both offsetting curves and surfaces.

Have you considered a new connection type that is a "bus", not just a wire. Which can handle multiple in and out with only one wire. For example if I'm working with a "set" of input, mixed type, and wiring it to a lot of stuffs. It is a nightmare to manage the "set" now. I will sometimes wire them to a "Generic Data" component, one for each input. Another way I have tried is to place the set of input into 1 branch of a tree, and combine them, later accessing them by the index number inside the path. However, as design changes, often we need to add or subtract parameters, right now, it is quite difficult to manage.

A bus could be a labeled in, labeled out system. Allow quick change to another set of input. I dont know yet, I dont have the picture in mind. But I feel that something is missing.

MultiSave exit dialog should allow SaveAs. Sometimes I ran to that point and I realize I need a SaveAs. 

Save State is a pretty cool feature, esp for business, but need a better interface (Think about the layers panel in Rhino). Allow renaming and reordering. Allowing saving panels text, value list. Way of selecting all the inputs of a previously saved state, for generating a new Saved State. (Think about the "Select Objects" in the layer panel. Easier way of selecting which datatype to include, eg: Highlight selected datatypes on canvas indicate which one is included, also to easily spot/modify what is missing or needed. Clicking on canvas to choose what to include. (Same principle on the Stored views)

Nice if Export High Res dialog gives you an idea of the resulting resolutions (px X px) in advance. It is rare that I could find the right zoom setting in the first attempt.

I would be really professional software if the following window could be docked: data viewer, saved status panel, saved views panel, copy paste management (retains a few items of clipboard, since you have developed an internal clipboard now). 

Do you have ways of obtaining user statistics for yourself, so you know how users user GH, it will be more helpful for you I guess. I'm curious about them too. For eg, I always use the Clean Tree component with the Clean input = True, however the default is False, I wonder how many people use False verse True. 

I hope my suggestions are contributing to the developing of GH to a more professional future, not meant to add more work for you.

Thanks for the hard work again, David. Thank you.

Hi David,

Don't know if this is the place to add requests but hey here's mine..

1. Add an option to the tree branch component for user to output original paths in the same way as tree split works as currently i have to use a replace branch work around alot of the time to match the paths again.

2. Input options on the record component, such as reset and stop start , as the firefly recorder will only rec single numeric values.

3. Any chance of a Collapse Mesh Vertex Component for reducing heavy meshes.

Thanks for all the great work


  1. Done.
  2. I'd rather not, it is not obvious what should happen when multiple reset/start/stop values are provided.
  3. Maybe some day. Rhino has a Reduce mesh algorithm, is this the sort of thing you're looking for? What constitutes a "heavy mesh" in your opinion?


David Rutten

Poprad, Slovakia

hi david,

looking forward to next release and a big thank you for your stunning work.

i have got one little suggestion:

Since you announced that MultiDimensional Sliders can now be part of states, could you also include for "Value List" aka Pulldown Menu?

Would be a great help for a running project.




just found this wish in victor's list.

so: +1   ;-)

cheers, frank






  • Add Photos
  • View All

© 2019   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service