What is a Grasshopper Component?

This guide also explains the hierarchy of all assemblies involved with the Grasshopper plugin. This is important for component developers so they know which Assembly References they need to have in order to compile a Grasshopper Component Library. It also provides some background information which is useful when communicating with other developers.

Rhino Plugin Architecture

Grasshopper is a .NET (RhinoCommon) plugin for Rhino 6 for Windows and later (a version for Rhino 5 for Mac is currently in beta). It was written using Microsoft Visual Studio Professional using both VB.NET and C# source compiled against the .NET Framework. It is recommended, though not required, that you target the same framework when developing Grasshopper Component Libraries.

Our aim is to keep Grasshopper dependencies as conservative as possible. However, it is possible that we will switch to a higher version number of Rhino or .NET if this new version fixes crucial bugs or exposes useful functions.

.NET Component Library

The Grasshopper project type is Class Library, meaning it cannot be run as a stand-alone application. Grasshopper.dll is loaded by a Rhino plugin called GrasshopperPlugin.rhp.

Assembly References

As a Class Library, Grasshopper references namespaces in addition to RhinoCommon.dll, some of these are standard namespaces provided by the .NET Framework, others are 3rd-party assemblies and others still are written by McNeel developers but are shipped separately for technical reasons. Some of these assemblies need to be referenced by Component developers, while others can be safely ignored. The following table lists all assemblies referenced by Grasshopper.dll:

Assembly Author Purpose Required
RhinoCommon.dll McNeel Rhinoceros .NET SDK Yes
GH_IO.dll McNeel Grasshopper Input/Output library required to read and write Grasshopper files. Yes
GH_Util.dll McNeel Grasshopper utility library containing some peripheral algorithms. Optional
QWhale.*.dll Quantum Whale Syntax highlighter functionality. Contains a total of 5 dlls. Optional
System Microsoft Base .NET Namespace. Yes
System.Drawing Microsoft .NET namespace involved with drawing shapes and text. Yes
System.Windows.Forms Microsoft .NET namespace involved with dialogs and controls. Yes
System.Collections.Generic Microsoft .NET namespace containing useful list classes. Yes