Grasshopper 2 Naming Conventions Need Rethinking

As both a Grasshopper user and teacher, I am concerned about how GH2’s terminology will affect existing users, new students, and how Grasshopper is perceived as a computational-design tool. GH2 can open GH1 definitions, which is excellent, but preserving more of GH1’s established language would make the transition much easier.

Terms such as Parameter, Domain, Index, Construct, Deconstruct, and Reparameterize are not language problems; they are core computational concepts. Tooltips can explain them in plain English, while component names remain compact, precise, and computationally meaningful.

What I have noticed, however, is that GH2 often replaces this established terminology with names shaped more by linguistic consistency and descriptive English than by computational-design logic. Some of the names feel as though they were chosen primarily for linguistic neatness rather than by people deeply familiar with how Grasshopper users think and work.

Below are some areas I believe need to be reconsidered.

1. Component names should behave like operators, not miniature tooltips

GH1 names such as:

Arc 3Pt
Arc SED
Circle CNR
Vector 2Pt
Cull Index
List Item
Set Difference
etc

are short, but they are not meaningless abbreviations. They communicate operations, signatures, and relationships.

Several GH2 names instead read like English instructions:

Arc 3 Points
Arc From Tangent
Circle From Normal
Vector From 2 Points
Cull By Index
Item From Index
Dissect Plane

The extra words often add no computational distinction.

Vector 2Pt already tells a Grasshopper user exactly what it does. Vector From 2 Points only uses more canvas space to explain something already visible through the inputs and tooltip.

The same principle exists in Rhino commands. A command such as OffsetSrf is compact because users run it repeatedly. Writing it as a complete English phrase may help for the first few seconds, but after the tool is understood, that extra wording becomes permanent clutter.

Grasshopper components are also scanned repeatedly across large definitions. A name should be learned once and read efficiently thousands of times. Semantic compression is a feature, not an accessibility failure.

2. Grasshopper should preserve reusable naming conventions

GH1 teaches a clear relationship:

Construct Point   <-> Deconstruct Point
Construct Vector  <-> Deconstruct Vector
Construct Plane   <-> Deconstruct Plane
Construct Path    <-> Deconstruct Path
Construct Mesh    <-> Deconstruct Mesh

This is not merely wording. It communicates that structured data can be assembled and decomposed.

GH2 replaces this convention with Dissect across many types:

Dissect Arc
Dissect Rectangle
Dissect Path
Dissect Date
Dissect Complex
Dissect Mesh
Dissect Box
Dissect Interval
Dissect Plane
Dissect Point
Dissect Vector
Dissect Quaternion

Dissect is a physical or biological metaphor. It does not form a clear inverse relationship with the various From constructors. As a result, constructor components are now scattered across unrelated naming patterns, with no shared language connecting them.

It also loses the direct connection to decomposition, destructuring, fields, tuples, and structured data in programming.

New types such as Gradient or Quaternion are a reason to extend the established Construct/Deconstruct convention—not abandon it.

Deconstruct Gradient
Deconstruct Quaternion

would preserve a naming pattern users already understand.

3. Boolean predicates should look like predicates

Programming systems commonly use Is, Has, and Contains because those names predict a Boolean result:

Is Planar
Is Closed
Is Valid
is - something? 

Names such as:

Curve Planarity
Surface Planarity
Curve Closedness
Mesh Closedness

name properties, but they do not clearly indicate whether the component returns a Boolean, measurement, deviation, or classification.

Once a student learns that an Is... component performs a predicate test, that knowledge transfers across the system.

If the result is Boolean, Is Planar is clearer than Curve Planarity. If the result is a measurement, a name such as Planarity Deviation would communicate that difference.

Naming should help users predict output type and behaviour.

4. Reparameterization should not be hidden

In GH1, the logic is direct: a curve has a domain, and Evaluate Curve evaluates it at parameter (t). When needed, the user can reparametrize the domain to ([0,1]).

Reparameterization is not always easy to teach, but it is an essential computational concept. Once users understand it, they understand that a curve domain can be changed to any useful interval.

GH2 places evaluation behind Locus and options such as:

Natural
Normalized
Length

These options may make the immediate operation convenient, but they hide the relationship between parameters, domains, normalized factors, and arc length.

Users may learn which option produces the desired result without understanding what is being computed.

This may feel simple to experienced users who already understand parameterization, but it can be more confusing for beginners because several different concepts are now combined into one workflow and hidden behind multiple clicks.

The old system taught a transferable concept. Reparameterization connected directly to curves, surfaces, NURBS mathematics, scripting, derivatives, and computational geometry.

I also could not find an equivalent direct surface-reparameterization option in the current version. If surface domains can no longer be explicitly reparameterized in both (u) and (v), an important computational workflow has been hidden or removed.

5. Some expanded names are longer but less informative

Consider:

Arc 3Pt     -> Arc 3 Points
Vector 2Pt  -> Vector From 2 Points
Arc SED     -> Arc From Tangent
Circle CNR  -> Circle From Normal

Expanding Pt to Points adds no computational meaning. It could be handled through search aliases without replacing the compact name.

More importantly:

  • SED means Start, End, and Direction.

  • CNR means Centre, Normal, and Radius.

Arc From Tangent mentions only one part of the constructor and hides its two point inputs.

Circle From Normal mentions only the normal and omits the centre and radius.

The new labels are longer but contain less of the component signature.

The same issue appears in names such as:

Polyline -> Polyline From Points
Loft     -> Loft From Curves

A polyline is already defined by connected points. Anyone who understands the term Polyline already knows it must be created from points. Likewise, curves are the normal inputs of a loft, so From Curves add no useful distinction.

Descriptive naming is helpful when the operation is unfamiliar or when it identifies a specific variation, such as Control Point Loft. In that case, the additional words provide information the basic term Loft does not.

Full explanations belong in tooltips and documentation.

6. Standard mathematical and algorithmic terms should remain standard

Set Difference is the established set-theory term for (A \setminus B).

Changing it to Set Subtraction replaces a precise mathematical operation with arithmetic language. Subtraction can imply numbers, vectors, or other behaviours. Difference is the more transferable term.

Algorithm names also matter:

Circle Fit
Sphere Fit
Fit Line
Plane Fit 

tell users that the result is fitted to a collection of samples.

Names such as:

Circle N Points
Sphere N Points
Line N Points
Plane N Points

only describe the input form. They do not tell users whether the operation interpolates, approximates, regresses, or exactly satisfies those points.

Fit is the important computational information.

There are good changes in GH2. Power becoming Exponentiation improves mathematical precision, and correcting Carthesian Product to Cartesian Product is clearly worthwhile.

The objection is not to change itself. It is to changes that reduce precision, predictability, or continuity.

7. Name the data being changed, not the selector

Replace Items -> Replace Indices

is particularly misleading.

The indices are not being replaced. They select the items that will be replaced.

Replace Items already identifies the operation correctly and does not need to become a longer English sentence.

The same principle should apply throughout the interface: name the operation and the data it affects accurately.

8. Prepositions should add meaning, not merely complete a sentence

Examples include:

Cull Index       -> Cull By Index
Cull Pattern     -> Cull By Pattern
Divide Distance  -> Divide By Distance
Divide Length    -> Divide By Length
Divide Curve     -> Divide By Count

By does not add a computational distinction. It mainly makes the label sound more like ordinary English.

The old names are faster to scan and already communicate the operation.

A compact family remains clearer:

Divide Count
Divide Distance
Divide Length
Divide Ratio
Divide Span

Grasshopper component names do not need to form complete sentences.

9. Established verbs should keep their computational meaning

Move Seam uses the wrong verb.

In Grasshopper, Move already means spatial translation. Changing the seam of a closed curve does not translate geometry through space. It changes the curve’s start location or parameterization.

The old name, Seam, was already sufficient. If a verb is required, Adjust Seam or Set Seam would at least avoid suggesting a Euclidean transformation.

Similarly:

XZ Plane -> World XZ

adds the useful context World but removes Plane, the output type.

World XZ Plane would preserve both pieces of information. Names should not gain conversational clarity by dropping the data type they produce.

10. Data-tree names should preserve Grasshopper’s levels of abstraction

Stack Data  -> Stack Items
Repeat Data -> Repeat List

reduce broader data-tree operations to a single level.

Grasshopper behavior depends on whether data is structured as items, lists, or branches. Grafting, flattening, and tree structure can change how an operation behaves.

Data was broad, but that breadth was useful. It did not force the user to think only in terms of items or only in terms of lists.

Grasshopper’s item–list–tree distinction is foundational. Component names should support that mental model rather than collapse it.

11. The type system should use one consistent language

Constructors, deconstructors, parameters, inputs, outputs, and categories should expose the same relationships.

For example, mixing:

Mesh From Facets
Construct Facet
Dissect Facet
Facet category

forces users to learn several linguistic patterns for one type system.

A consistent relationship is easier to understand:

Construct Face <-> Deconstruct Face
Construct Mesh  <-> Deconstruct Mesh

The exact terminology can be debated, but the system should feel coherent rather than like a collection of independently named tools.

12. “Flip Matrix” communicates the operation; “Flip Tree” does not

Flip Matrix gives users a clear computational model: the data can be understood as a grid, and the component performs an operation similar to transposing that grid by exchanging rows and columns. The name explains how the structure is transformed, not merely what type of data enters the component.

Flip Tree removes that model. A tree could be “flipped” in several ways—by reversing branch order, reversing items within branches, exchanging path dimensions, or transposing a regular two-dimensional structure. The name identifies the data type but does not clearly describe the operation.

Matrix is useful here even though a Grasshopper data tree is not always a literal matrix. It provides the analogy that makes the operation understandable and connects it to transposition in mathematics, spreadsheets, arrays, and programming.

Final Thoughts

These changes may not prevent experienced users from working, but they make the transition harder for students and existing users. These are my thoughts based on what I have seen so far. Anyone who agrees, disagrees, or has additional examples is welcome to share their perspective.

The g2 tag should also be renamed to GH2…

I think you are making quite a few good point, but maybe also missing some major motivations behind those changes.

Overall, GH2 is a complete rewrite, to fix the limitations of the GH1 solver, UI, workflow, and many more. Complete rewrite here is not only a technical concern, but is also means we as users will have to relearn quite a few things. I believe you should not mistake the efforts in interoperability between GH1 and GH2 as a sign of smooth continuity between the two, but more as a favour to help us transition, for which we should be thankful for but not push it as a requirement. During this transition, we will necessarily have to let go of a lot of habit and concepts that we like and make sense in GH1, but potentially do not make sense in GH2.

Essentially, a lot of these changes are not cosmetic, but actually voluntary tweak the process and changes to how the users should approach and understand GH2 computational design. Meaning someone how starts on GH2, will probably never struggle with many of the confusions you’re listing, because the choices make sense from GH2 perspective. Just not from GH1.

Now point by point:

1. Component names should behave like operators, not miniature tooltips

Arc 3Pt vs Arc 3 Points
Arc SED vs Arc From Tangent
etc

The shortened names make sense, yes, but so do the longer ones.

Acronyms and abbreviations prevent out-of-the-box understanding, creating walls between the tool and users teaching themselves. So a longer for should be available, and should be default.

But you are right that there is value in a shorter name for advanced users, which I imagine could work like GH1 Name + Nickname. But refusing a longer more legible form because you yourself are used to and understand the shorter one is not productive for the software, since you also understand the longer one, plus many more people.

You maybe are also cherry-picking here, because plenty of other primitives actually do use the acronyms you want, and even introduce new ones which fit exactly what you are requesting such as “Point XYZ” which used to be “Construct Point” but the latter does not indicate from what at all.

2. Grasshopper should preserve reusable naming conventions

Construct Point   <-> Deconstruct Point
vs
Dissect 

For all the reasons you use in point 1 to justify namings of the components based on what they are made of, it becomes only natural to give up the abstract and general Construct.

Construct does not indicate which input data is used at all, and is replaced with the corresponding primitives and appropriately named components, such as Arc 3 points which makes it clear what you need to make it.

We got used to our default constructors, but if you really think about it they do not make sense, because there isn’t just one way of building something. So why should the Point XYZ be the default and not Points 2 angles ?

Then the Dissect is a natural consequence of this logical evolution of not choosing one input primitive as the main “construct”. If we don’t construct an object, then later we are not deconstructing it, and there is no reason to keep that term anymore.

3. Boolean predicates should look like predicates

Is Planar
vs
Curve Planarity

This one should normally be quite intuitive as an expert:

Planarity, closedness, and others, are not as simple as True or False most of the time.

And as a teacher, this might be a great opportuinity to reconsider how you have approached those concepts before.

First, they are always closely tied to a certain tolerance. GH1 makes this assumption for you, and Pufferfish or other plugins have had to introduce their own versions to let users define the tolerance. As it should have been.

Once you acknoledge that, it becomes way more sensible to not call this “Is Closed” but rather “What is the planarity of that curve?” because the proper and accurate answer does not only contain a yes or no.

I understand how those principles are harder to approach when teaching to beginners, but they are VERY necessary for any precise workflow which GH2 should be able to handle on its own without plenty of scripting or plugins fixing the GH1 assumptions. Those concepts are also needed to go from beginner to intermediate and so on, so better to introduce them early and have the workflow be explicit about them rather than hiding them in the background.

4. Reparameterization should not be hidden

On this one I am 100% agreeing with you, for the exact same reasons as the previous point.

Complex topics should be made approachable but not hidden!

I myself what randomly clicking “flatten”, “graft”, “simplify” randomly to get it to work, and figured “flatten” almost always worked, way before I actually learned about data trees.

Same thing applies here.

5. Some expanded names are longer but less informative

Polyline -> Polyline From Points

In this you somewhat contradict your point number 1, but requesting less explicit information in the names.

There is also a mix up, in your description you say that Polyline From Points does not provide any additional value because to anyone understanding Polylines it is clear that they are a list of point.

First, as a teacher I would find it better if this information can be learned naturally without having to do readings on the internal classes used in the SDK. The longer name makes that clear, allowing user self progression.

Secondly, you make the assumption that the from suffix is about what the resulting type is. It does not describe what Polylines are themselves made of. Instead, it makes it explicit what the GHC needs as an input, and what it will use to create the Polyline.
This naming is highly consistent and clear, way more than just “Construct Polyline” which does not tell you which kind of process will be used to create it, nor if that is the right component to chose. Maybe you needed something that creates a polyline from a nurbs curve, and so Polyline from Nurbs Curve would be more appropriate.

These longer names improve consistency to GH1 components which had no reason to omit which input data types they actually need. Those omissions create barriers to learners, they do not help them.

6. Standard mathematical and algorithmic terms should remain standard

Totally agree with you that Set Difference is the established term for (A \setminus B). and Set Substraction is not as clear.

But I dissagree for those:

Circle N Points
Sphere N Points
Line N Points
Plane N Points

The GH1 names also do not say if the operation interpolates, approximates, regresses, or exactly satisfies those points. So the new names don’t make it worse in that sense. They do have the benefit, like previously stated, that they make the input explicit while still not clarifying the method.

Maybe the best here would be Circle Fit N Point which would fulfill both requirements for a GHC name?

7. Name the data being changed, not the selector

Replace Items -> Replace Indices

Agree that it is more confusing.

It is also more correct though, since the operation seeks indices. Yes it changes the value at those indices, but indices themselves are immutable always

8. Prepositions should add meaning, not merely complete a sentence

Cull Index       -> Cull By Index
Cull Pattern     -> Cull By Pattern
Divide Distance  -> Divide By Distance
Divide Length    -> Divide By Length
Divide Curve     -> Divide By Count

Adding the “By” here is very valuable, for the exact point you are making in point 7.

It is not the Index that is being culled, it is the object. Adding “by” here solves the comment you make about “Replace Items” vs “Replace Indices” since the last name is not what is *being *culled or divided, it is the control input.

9. Established verbs should keep their computational meaning

Agree for Move Seam likely using the wrong verb. It’s easy to grasp what it does, but not consistent with other names.

Not sure about the plane naming though, I feel like it is okay to make a different naming rule for global variables like world planes since they are such basic objects that people should get familiar with so fast.

10. Data-tree names should preserve Grasshopper’s levels of abstraction

Stack Data  -> Stack Items
Repeat Data -> Repeat List


Here it is a tricky one. While the abstract method works, it also puts hurdles in the way of learning the actual operations being performed.

Learning about data tree and how each components work is very tedious, and I personally hope that having components be more explicit about what they do or be less generalist, this can become easier.

The breath-first operations stay available with more advanced components anyhow, so I don’t see major downsides to also having more approachable ones with precise terms on how they work.

11. The type system should use one consistent language

Totally agree here, for same reasons as point 2.

It’s quite inconsistent to still have “construct” components in GH2 while most where removed for their explicitly typed input names.

I do disagree with needing to have “constructs” for each type, but see point 2 for that.

12. “Flip Matrix” communicates the operation; “Flip Tree” does not

Flip Tree is way more consistent because there is no such things as “matrices” in GH. It’s all trees, and so if someone is looking for a component to flip a tree that is what they would naturally look for, not Flip Matrix.

A tree could be “flipped” in several ways—by reversing branch order, reversing items within branches, exchanging path dimensions, or transposing a regular two-dimensional structure

The name Flip Matrix also does not solve this missing information. To exemplify your point you mention that a tree can be reversed by branch order, reversing lists, and you are very right. Which is why “Reversing” is always called “Reverse” when that is the operation done, not “Flip”. So there cannot be confusion there, since the two terms exist and describe two different operations

I think what is missing here is maybe Flip Tree Branches which would make it clear what is being flipped. Transpose Tree Branches would also work, but let’s be honest Flip sounds cooler

Final Thoughts

I feel like we should welcome the changes, even if they make it hard for us experts to transition. The softer we want to make the transition, the less ambitious GH2 can be. So my opinion is, break it all to dust and rebuild it as long as there is a logic to the choices.
If it is replacing a defect with another one, then we should probably just keep the original one, since there is no significant downside but the benefit of having existing users more comfortable.

Newbies will not have these limitations, they do not have all the built-up knowledge we do. And those choices will most likely sounds way better than the GH1 ones we’re used to to them. It’s hard to envision sure, but computers sound like black magic to previous generations while they are natural to us.

Thank you for the detailed response. I do not think it is useful to debate every individual name, because some choices may work well for one group and poorly for another.

However, I think there is a misunderstanding in the idea that beginners will avoid the transition problem. That would only be true if they could learn entirely from a complete GH2 learning ecosystem. In reality, they will still depend heavily on years of GH1 tutorials, definitions, and forum discussions.

Experienced users can translate between GH1 and GH2 because they already understand the underlying logic. Beginners cannot. In Grasshopper, the most valuable part of a lesson is not only the final geometry or definition, but the reasoning behind each step. When the same logic is expressed through completely different terminology, beginners must first decode the old language before they can understand the lesson.

If the developers want to continue with this naming direction, perhaps the community, or ideally McNeel, could create an alias mapping between GH1 and GH2. Search aliases or an optional display toggle showing legacy GH1 names would make the transition much easier without requiring the developers to abandon their chosen GH2 terminology.

+1 for search improvements and aliases. If I search for discontinuity GH2 should show relevant components> This would make transition much easier.

Aliases (which could potentially be turned on and off) would be great for sure !

Leaves the new logic intact while smoothing transition.

For example, searching “Construct Point” should show all primitives for points by default

It would be appreciated if GH2 component icons and naming could remain stable. Having already memorized existing icons and component names, I find frequent changes require repeated re‑memorization and raise the learning curve for GH2.