Rope Bridge
← Portfolio

Rope Bridge Designer

View source
Why

My parents have a pond on their land with a small island in the middle, and I want to build a real rope bridge so my kids can cross over to it. Rather than eyeballing rope diameters and hoping for the best, I figured I'd properly work out the sag, tension, and required rope rating first — and since I was doing the maths anyway, it turned into this tool.

About

The problem: given a rope strung between two points — a handline, a monkey bridge, an improvised crossing — how much does it actually sag under a person's weight, and is the rope even rated for the tension that puts on it? Those two questions (sag/tension geometry, and rope selection) are usually answered by looking up tables or reaching for a spreadsheet.

My approach was to build the underlying math as a small, standalone, fully unit-tested package (@jsfc/bridge-physics) rather than baking it into a component: an exact catenary solve for when the rope's own weight dominates, a closed-form parabolic approximation for a loaded deck, and a rope-sizing step that applies a 10:1 safety factor — the life-safety rigging convention for rope that directly supports a person, rather than the lower factors used for general lifting gear. That package has no UI dependencies at all, so it's just as usable from a script or a test as it is from this tool.

Conclusion

The outcome is this interactive designer: adjust the span, sag, crossing load, and safety factor, flip between the catenary and parabolic models, and see the resulting tension, the required minimum breaking strength, and a recommended rope diameter update live. It's shipped as its own federated micro-frontend — a separately deployable app that this page loads at runtime — proving out the same Module Federation setup the rest of this site's portfolio pieces can plug into.

Loading rope-bridge...

The maths
SymbolMeaning
L, SSpan, sag at midspan
W, dBridge width, V-depth (V-rope only)
P, wCrossing load, load per unit length (rope self-weight/deck weight)
t, ρ, gPlank thickness, softwood density (500 kg/m³), 9.81 m/s²
θV-rope lean angle

Sag and tension. Catenary treats the load as uniform per unit of rope (arc) length — the exact shape a rope's own weight pulls it into — solving implicitly for a parameter a from S = a·(cosh(L/2a) − 1), then y(x) = a·cosh(L/2a) − a·cosh((x−L/2)/a), horizontal tension H = w·a, and maximum tension at the supports T = H·cosh(L/2a). Parabolic treats the load as uniform per unit of horizontal span instead — the standard small-sag approximation for a loaded deck — with a direct closed form: y(x) = 4Sx(L−x)/L², H = wL²/8S, T = √(H² + (wL/2)²). Both converge as sag/span shrinks, so either is valid for a shallow crossing; catenary is exact when the rope's own weight dominates.

Rope sizing. The required minimum breaking strength is T × safety factor — 10:1 by default, the life-safety rigging convention for rope that directly supports a person. The catalog match then picks the lightest rope rated at or above that figure.

Deck load sharing. Both deck types model two identical ropes sharing the crossing load P, not one. A plank floor's edge ropes each take the load essentially vertically, so it's a flat 50/50 split. A V-rope crossing instead leans each rope outward at angle θ = atan2(d, W/2), so each rope's share is P/(2·sinθ) — a shallower, wider V (smaller θ) makes each rope work harder.

Plank deck weight. Estimated as w = W·t·ρ·g, assuming a continuous solid softwood slab and ignoring gaps between boards — added to whichever rope's share of the crossing load it sits under.

Rope length. The shopping-list total uses each model's exact arc length, not the straight-line span: catenary's is s = 2a·sinh(L/2a), and parabola's is s = (L/2)·√(1+M²) + (L²/8S)·asinh(M), where M = 4S/L. A V-rope bridge's total is the two guide ropes' arc length, plus a walking rope of the same arc length (a constant vertical offset doesn't change it), plus the diagonal netting bracing the guide ropes down to it — each brace a real 3D diagonal of length √(spacing² + (W/2)² + d²), both sides. A plank-floor bridge's total is the two floor ropes' arc length, plus two separate handrail ropes above them (approximated as the same arc length — they aren't load-bearing in this model), plus their own braces (√(spacing² + height²) each, both sides). Both totals get a further +10% on top, a rough allowance for knots and anchoring.

Changelog
VersionDateChanges
1.4.02026-07-26Added a walking rope and adjustable diagonal netting to the V-rope deck (reusing brace spacing, previously plank-floor-only) and both their rope lengths to the total estimate, plus a new "The maths" section documenting the formulas behind every calculation.
1.3.02026-07-25Added handrail height and diagonal brace spacing (tying the handrails to the floor ropes along the span) to all three visualizations, plus a rough total rope-length estimate covering floor ropes, handrails, and braces.
1.2.02026-07-18Added a 3D visualization (three.js, via react-three-fiber) that unifies the span-wise sag, width, and deck type into one orbit-controllable model, with a toggle back to the original 2D views. Loaded lazily, so it adds no bundle cost until switched on.
1.1.02026-07-12Added bridge width and a choice of deck type — a V-rope crossing (two ropes, load-shared by the V's angle) or a plank floor (adds an estimated deck self-weight) — with a new cross-section visualization and per-rope tension/rope sizing.
1.0.02026-07-11Replaced the placeholder with a working interactive designer — live sag/tension calculator, an SVG bridge curve visualization, and a rope diameter/material recommendation, all backed by a fully unit-tested physics package.