Each node reuses the same single spring update (velocity += (target − pos) × stiffness; velocity *= damping; pos += velocity), except its target isn't a fixed point — it's the current position of the node right before it. Node 1 chases a leader (a cursor, an auto-path); node 2 chases node 1; node 3 chases node 2, and so on down the chain.
When the leader changes direction sharply, the next node can't follow instantly — it carries the spring's usual lag and overshoot. That lag compounds with each index down the chain, so a sudden move at the head reads as a large, loose whip by the time it reaches the tail. Keep stiffness and damping identical across nodes for a uniform rope feel; lower stiffness toward the tail for something softer and more tail-like.
With many nodes (20+) the per-frame work grows linearly, but each update is independent, so it parallelizes easily. The real tuning problem isn't performance — it's finding the smallest node count that still reads as a chain, usually somewhere around 6–10.
When to use
Use it for cursor trails, a character's tail or hair, or rope sims — anywhere lag increasing toward the back reads as natural. Not a fit for UI elements that need to respond instantly.