The geometry of river routing
[Excamera Labs is still shipping as usual. Orders from our store ship same day. The same applies to Electric Dollar Store. Thanks!]
For the new Gameduino 3X HDMI I've been using river routing extensively for the first time. In river routing signals are collected into a group, and routed together across the PCB, continuously preserving the trace-to-trace distance. Because of this strictness, you can set these distances for the minimums permitted by the board house. For example JLCPCB 4-layer boards have a trace width and separation of 89 microns -- that's 5 traces per millimeter, quite dense!
A river starts with a bundle of N traces. Here ten signals are the start of the river, with the minimum separation:

The one rule of river river routing is that traces must keep this separation. It follows that it's legal for the river to flow straight ahead. "forward(3)" moves the river "east" 3 mm:

The river can also turn without violating the trace separation rule, as long as it turns around some fixed point perpendicular to the river position. The tightest turn a river can make is when the center of turning is either the left- or right-hand trace. Here "left(90)" pivots all ten traces 90° around the left-hand trace, so the river now points "north":

The three primitives forward(), left() and right() are all the legal moves for a river. But they can be combined to make many more useful operations. (This will be quite familar to some people on this list.) For example shifting a river to the left can be done with two turns. For example executing "left(30)":

followed by "right(30)" results in the river direction unchanged, but shifted to the left by a small distance:
This is useful for aligning two rivers in order to get them to meet. The method "shimmy(d)" uses a little bit of trigonometry to compute the angle required for a given displacement.
The Gameduino 3X HDMI board is almost finished, and uses river routing throughout. Here's its top and bottom routing layers. There's a better-quality version here.

There are a couple of tweaks remaining. It should be going to the PCB house in a day or so.
Thanks for reading.