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.