Studio Matrx Monthly · Volume 1 · Issue 3 · August 2026
Amogh N P
 In loving memory of Amogh N P — Architect · Designer · Visionary 
Wiring Data & FlowLesson 2.3
CPD for Architecture, Planning & Urban Design/Module 2 · Grasshopper Basics

Lesson 2.3 · Grasshopper Basics

Wiring Data & Flow

Connecting outputs to inputs, and the golden rule that data flows one way

13 min Interactive lessonFree · open lessonByAmogh N P· Architect & interior designer
The hook

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.

DATA FLOWS ONE WAY: OUTPUT -> INPUTDivide CurvePCirclePthe wireoutput nub (right side)input nub (left side)You cannot drag input-to-input or output-to-output. Data only travels output -> input, left to right.
Zoom
A wire runs from an output nub (right side of a component) to an input nub (left side of the next), and data travels along it one way only, left to right. Grasshopper forbids output-to-output or input-to-input connections.

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.

READING A WIRE BY ITS DISPLAYFaint / dashedsingle item (or empty)Default / thina list of itemsBold / doublea data tree (branches)The wire tells you the shape of the data before you even open a Panel. Learn to read it at a glance.
Zoom
Read the data by the wire. A faint or dashed wire carries a single item; a thin solid line carries a list; a bold double line carries a data tree. The wire shows the shape of the data before you open a single Panel.

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.

Wiring terms you'll meet in this lesson

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).

Hands-on workshop

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.

Given & goal
Goal: confident wiring and reading data flow by wire appearance
Inputs: Grasshopper open, one curve referenced from Rhino
Time: ~25 minutes
  1. 1Place a Slider, a Divide Curve, and two Panels. Wire the curve into C and the Slider into N.
  2. 2Wire the P (points) output into one Panel. Note the wire is a thin solid line - a list - and the Panel shows many points.
  3. 3Fan out: from the same P output, drag a second wire into the other Panel. Confirm one output can feed two inputs.
  4. 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.
  5. 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.
  6. 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.

The worked example

Three altitudes on the same idea

Read the band that fits you — or all three.

For the architectDesign intent, geometry & delivery

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.

For the interior designerParametric interiors, pattern & furniture

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.

For the studentSkills, portfolio & jobs

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.

Misconception check

Wiring is just joining boxes together, like connecting nodes in a diagram.

Wires carry live, directional, structured data - they are not neutral connectors. A wire always flows one way (output to input), the graph can never loop back on itself, and the wire's own appearance encodes whether it carries a single item, a list, or a data tree. Treating a wire as a static join misses all three facts, and every one of them is a debugging tool: direction tells you where to look for a cause, the no-loop rule explains why iteration needs special components, and wire weight reveals data-shape bugs at a glance.
Try it

Do it yourself

Test the ideas - mostly reasoning, no software required.

  1. 1In which direction does data always flow along a wire?
  2. 2Can one output feed several inputs? Can one input hold several wires - and if so, how?
  3. 3What does a bold, double-line wire tell you about the data it carries?
  4. 4Why can't you build an iterative loop with ordinary wires, and what handles iteration instead?
  5. 5A downstream component misbehaves. How does following wires help you find the cause?
Take this with you

The one line to carry out

Wires carry live data one way, from outputs to inputs, in a graph that never loops - and their weight (faint single item, thin list, bold tree) shows the data's shape at a glance. Master connecting, fanning out and rewiring, keep the flow left-to-right, and the canvas stays readable and debuggable.
Take it further
References & further reading

Peer-reviewed journals & authoritative standards

  1. 01Rhino Developer - Grasshopper Data TreesRobert McNeel & Associates, 2026.
  2. 02Mode Lab - The Grasshopper Primer (Third Edition)grasshopperprimer.com (free online edition), 2020.
  3. 03Rutten, D. - The Guide to Grasshopper (community)grasshopper3d.com, 2026.
  4. 04Grasshopper - Algorithmic modeling for Rhino (official)Robert McNeel & Associates, 2026.
Related lessons
Recap
You wire by dragging from an output to an input; one output can fan out to many inputs, while an input holds one wire unless you Shift-add. Data always flows one way and never loops, which is what keeps the graph solvable and makes debugging a walk upstream. Wire weight - faint, thin, or bold - reveals whether the data is a single item, a list, or a tree.
Carry forward →

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.

A

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 →