A viewer that computes its own forward kinematics can't be trusted anywhere else, and can't be tested without a browser. So I pulled the maths out into a library and left the viewer to render.

A URDF is a transform tree. Forward kinematics walks it; the Jacobian differentiates it; inverse kinematics inverts that. None of it needs a renderer, and none of it should live inside one. gluon-kinematics is that maths, written clean-room from the public Mintasca GLUON model and standard robotics formulae: SE(3) transforms, a 6×6 geometric Jacobian, and damped-least-squares inverse kinematics.

The core is no_std, with hand-rolled small-matrix linear algebra down to a Jacobi-eigenvalue SVD. That was a deliberate constraint: no dependency does the interesting part, and the whole thing compiles to a 9 KB WebAssembly module.

Measure, then claim.

Kinematics is easy to write and easy to get subtly wrong, so correctness is the headline feature, not a footnote. Three checks, each an independent oracle:

forward kinematics   vs a separate pure-Python implementation   < 1e-6 m
analytic Jacobian    vs finite differences of FK                every column
inverse kinematics   FK(IK(pose)) round-trip, 256 random poses  < 1e-4 m

The Jacobian is checked against a numerical derivative of the forward model; the IK is checked by solving a pose and asking the forward model whether it was reached. Nothing marks itself as correct.

The same code runs the arm.

The viewer at /arm now loads that library as WASM. Each frame it writes six joint angles into the module, which returns every link's world transform and the tool-centre position; three.js only applies them and draws. The tcp readout under the model is the library's own output, computed in the browser by the same Rust that the tests run against.

A number displayed in a UI is worth more when the thing that computed it has a test suite somewhere else.

Stop where the evidence stops.

This is the public GLUON description: a six-axis serial arm with a square Jacobian. The library does not claim collision checking, dynamics, trajectory planning, or anything about a specific piece of hardware. It computes where the tool centre is, and where to send the joints to move it — and it can prove both.

A robot's maths should outlive the interface that first drew it. Putting it in a library, with its own tests, is how that happens.

Open the arm viewer Public source ↗