Lesson 2.3Lesson 2.3 · Grasshopper Basics
Wiring Data & Flow
Connecting outputs to inputs, and the golden rule that data flows one way
A wire is not a cable - it is a stream of data flowing one direction, and its very look tells you what is inside it.
If components are the vocabulary, wires are the grammar. They connect one block's output to another block's input and carry data between them - and they do it in one direction only.
Beginners think of wiring as 'joining boxes'. It is better to think of it as plumbing a stream: data pours out of an output, along the wire, into an input, and onward. Once you see wires as flowing data rather than static connections, rewiring, debugging and reading a definition all get much easier.
Wires flow one way, never loop. Weight = data shape. Layout = left to right, always.
How to connect: output nub to input nub
You make a wire by dragging from an output nub to an input nub - always from the right edge of one component to the left edge of another. Click and hold on the output, drag, and release on the target input. A curved wire appears, and data immediately begins to flow; the downstream component re-solves on the spot.
Several practical moves are worth knowing early. An output can feed many inputs - drag from the same output to several targets and it fans out; one slider can drive a dozen components. An input normally holds one wire: dragging a second wire to an occupied input replaces the first. To add a second wire into one input (combining sources), hold Shift while you release. To remove a wire, hold Ctrl and drag from the input as if disconnecting (on Mac, Command). And you can grab a wire's end and drag it to a new nub to rewire without deleting anything.
Grasshopper also stops you making nonsense connections. It will not let you wire an output to an output, or an input to an input; the shape of the interaction enforces 'output feeds input'. If a wire refuses to attach, you are usually aiming at the wrong side of a component.
Type compatibility is quietly forgiving here. Grasshopper will happily let a wire connect two nubs even when the types are not identical, then attempt a conversion on the fly - a number into a component expecting a curve fails and goes red, but a number into an input expecting a point, or an integer into a float input, often just works. That leniency is a feature: it means you rarely have to insert explicit converters, and it is why hovering a nub to learn its expected type matters, because the conversion the wire attempts depends entirely on that type. When a freshly made wire turns the target red, the very first thing to check is whether the data type you are supplying can sensibly become the type the input wants.
One output -> many inputs = fine. Two wires into one input? Hold Shift, or it replaces.
The golden rule: data flows one way
This is the law that governs the whole canvas: data flows in one direction, from outputs to inputs, and the graph can never loop back on itself. You cannot wire a component's output into anything that feeds it upstream - Grasshopper forbids the cycle. The result is what mathematicians call a directed acyclic graph, and it is precisely what lets the canvas re-solve predictably left to right, every time, as we saw in the canvas lesson.
Why does this matter to you as a designer? Because it means a definition always has a clear direction of cause. Every piece of geometry can be traced back, wire by wire, to the inputs that produced it - there is no hidden feedback, no 'which came first'. When something is wrong, you follow the wires upstream from the broken result until you find the block that went red or produced odd data. Debugging is literally walking against the flow.
It also means loops and feedback need special tools. Iterative processes - relaxing a mesh, growing a pattern, simulating physics - cannot be done with ordinary wires precisely because wires cannot cycle. That is exactly why plug-ins like Kangaroo (physics) and components like the data recorder exist: they package iteration safely so the main graph stays acyclic. You will meet Kangaroo in Module 7; for now, just trust the one-way rule.
The one-way flow has one more happy consequence: the wire is the documentation. Because every dependency in a definition is a visible wire pointing from cause to effect, a reader can reconstruct the entire logic just by following the strands, without any hidden state or side effects to worry about. This is a real advantage over text code, where a variable can be changed from anywhere. In Grasshopper, if a value reaches a component, there is a literal wire you can trace back to its source. That visible, traceable causality is a big part of why the visual approach is so learnable - and why keeping your wiring tidy, the subject of the last section, is not just neatness but readability.
One-way, no loops = a directed acyclic graph. That is what makes it always-solvable.
Reading a wire: faint, default, bold
Here is a detail that turns you from novice to fluent: the appearance of a wire tells you the shape of the data inside it, before you open a single Panel. Grasshopper draws wires in three styles based on the data structure they carry.
A faint, thin (often dashed) wire carries a single item - one number, one point, one curve - or is empty. A normal solid line carries a list of items - many points, a set of curves. A bold, double line carries a data tree: a list-of-lists organised into branches, the structured data we tackle in Module 3. So at a glance across a busy canvas you can tell that this wire holds one value, that one holds a list, and the bold one holds a tree - which is enormously useful, because most beginner bugs are really 'my data is the wrong shape' problems.
You can turn these display styles on explicitly (right-click canvas > Draw Fancy Wires) and you can also change how a specific input renders its incoming wires. Reading wire weight becomes second nature fast, and it saves you from constantly dropping Panels to check structure. When a downstream component misbehaves, glance at the incoming wire: a bold wire arriving where the component expected a single item is a classic, instantly-spotted cause.
Why does data shape matter so much? Because Grasshopper's behaviour changes with it. A component fed a single item runs once; fed a list, it runs once per item; fed a tree, it runs per branch and keeps the branches separate. So the very same wiring produces wildly different results depending only on whether the data is one item, a list, or a tree - and the wire's weight is your early warning of which case you are in. This is the doorway to Module 3, the make-or-break topic of the whole tool. For now, the takeaway is modest but powerful: learn to see wire weight, and you can predict how a component will behave before it even runs.
Faint = one item. Thin line = a list. Bold double = a tree. Read weight before you read data.
Rewiring and keeping the flow legible
Definitions grow, and messy wiring is the fastest way to a canvas you cannot read. A few habits keep the flow legible. Rewire by dragging wire ends rather than deleting and re-drawing - you keep the rest intact. Use the input's right-click to disconnect cleanly when you need to. And lay components out roughly left to right in the order data flows, so the graph physically mirrors its logic; a definition that reads left-to-right on screen is one you can debug months later.
When wires cross into spaghetti, Grasshopper offers relief. You can hide a wire's visible path by setting an input's wire display to hidden, keeping the connection but decluttering. Better, you can insert data-passing shortcuts: components or scribbles that carry data across the canvas without a long visible wire. But do not over-hide - a wire you cannot see is a dependency you can forget, which is its own kind of bug.
The deeper point is that wiring is where your logic becomes visible, so treat it as communication, not just connection. A tidy, left-to-right, well-grouped definition is readable by a collaborator - or by you next year. That readability is not cosmetic; in a professional setting a definition nobody can follow is a liability, however clever it is. In the next lesson we put all of this together and build a real, tidy definition end to end.
Lay it out left-to-right in flow order. Future-you is the collaborator you are helping most.
Wire
A live, directional data connection
Runs from an output nub to an input nub; carries whatever data the output produced, one way only.
One-way flow (acyclic graph)
Data moves outputs-to-inputs and never loops
Makes the canvas re-solvable left to right; iteration needs special tools like Kangaroo, not ordinary wires.
Wire display (faint / default / bold)
The visual weight that encodes data structure
Faint = single item, thin line = list, bold double = data tree. Read it before opening a Panel.
Shift / Ctrl wiring
Modifier keys for adding and removing wires
Shift-release adds a second wire into one input; Ctrl-drag removes a wire (Command on Mac).
Workshop - wire, fan out, and read the flow
You will practise the mechanics of wiring - connecting, replacing, adding, removing and rewiring - and train your eye to read wire weight. Small definition, big payoff in fluency.
Rhino 3D with Grasshopper. No plug-ins.
Goal: confident wiring and reading data flow by wire appearance Inputs: Grasshopper open, one curve referenced from Rhino Time: ~25 minutes
- 1Place a Slider, a Divide Curve, and two Panels. Wire the curve into C and the Slider into N.
- 2Wire the P (points) output into one Panel. Note the wire is a thin solid line - a list - and the Panel shows many points.
- 3Fan out: from the same P output, drag a second wire into the other Panel. Confirm one output can feed two inputs.
- 4Replace vs add: drag a new wire into an input that already has one and watch it replace; undo, then hold Shift while releasing to add a second wire into a single input instead.
- 5Remove a wire by Ctrl-dragging from the input (Command on Mac). Then rewire by grabbing a wire end and dropping it on a different nub.
- 6Right-click an input and graft its data (Module 3 preview). Watch the incoming wire thicken into a bold, double line - a data tree - and note how the display changed even though you added no component.
You’ll walk away with
A short screen recording or three screenshots showing a single-item wire, a list wire, and a bold tree wire, with one sentence on how you produced each.
Three altitudes on the same idea
Read the band that fits you — or all three.
Wiring discipline is what makes a definition survive a project. A massing or facade definition you will revisit through design development must read left-to-right and be groupable, or it becomes unmaintainable exactly when the client asks for a change. Treat the one-way flow as a debugging superpower: when a review throws up a wrong result, walk the wires upstream from the output and you will find the cause faster than any amount of staring.
Fan-out wiring is how one control drives a whole coordinated scheme. Wire a single 'density' slider out to the screen, the reflected pattern and the schedule count at once, and everything moves together - no risk of the drawing and the cut-list disagreeing. Keep the wires legible and you can hand the file to a fabricator or colleague who has never seen it and they can still follow the intent.
Learn to read wire weight this week - it is a genuine shortcut. Most of the bugs that stall beginners are data-shape problems, and the wire literally shows you the shape. Practise until a bold wire arriving at a single-item input jumps out at you. And build the left-to-right layout habit now; tutors and reviewers judge a definition partly on whether they can read it, not only on what it makes.
“Wiring is just joining boxes together, like connecting nodes in a diagram.”
Do it yourself
Test the ideas - mostly reasoning, no software required.
- 1In which direction does data always flow along a wire?
- 2Can one output feed several inputs? Can one input hold several wires - and if so, how?
- 3What does a bold, double-line wire tell you about the data it carries?
- 4Why can't you build an iterative loop with ordinary wires, and what handles iteration instead?
- 5A downstream component misbehaves. How does following wires help you find the cause?
The one line to carry out
Peer-reviewed journals & authoritative standards
- 01Rhino Developer - Grasshopper Data Trees — Robert McNeel & Associates, 2026.
- 02Mode Lab - The Grasshopper Primer (Third Edition) — grasshopperprimer.com (free online edition), 2020.
- 03Rutten, D. - The Guide to Grasshopper (community) — grasshopper3d.com, 2026.
- 04Grasshopper - Algorithmic modeling for Rhino (official) — Robert McNeel & Associates, 2026.
You can now build the room, place the blocks and connect them. In the final lesson of this module we put it all together and build a real, working first definition - a curve divided into points, circles placed along it, all driven live by sliders and tidied into a group.
The author
Amogh N P
Architect, interior designer, and creative polymath. Studio Matrx began in his notebooks — his vision of design made honest, useful, and open to everyone. Its Academy is written and taught in his memory, and free, forever.
More about Amogh →