# Ice Hockey > A three-dimensional ice hockey rink in the browser, built from the IIHF Official Rule Book > 2024/25 and from three published physical mechanisms that browser sports games normally > replace with a number: an anisotropic skate blade, a stick shaft integrated as a real beam > against the published definition of its flex rating, and a puck whose sliding and spinning > are frictionally coupled so that they stop at the same moment. URL: https://ice-hockey.skillsafe.ai/ Licence: MIT for the software (LICENSE.txt). The sport, its rules and the IIHF's marks are not covered by it. Cost: free. The app is entirely client-side, calls no model and can never spend a credit. Requirements: a browser with WebGL2. The page reads without it; only the rink needs it. ## What it is An independent reimplementation of the sport, not of any video game. Ice hockey is older than any of its leagues and nobody owns it, so there is no original author to credit - what is credited is the International Ice Hockey Federation, which publishes the rink and the rules, and the researchers whose papers the physics is built on. No league, team, crest, logo or player appears anywhere in it. No code, art, audio or data from any commercial hockey game was used. ## The three mechanisms 1. THE BLADE IS ANISOTROPIC. Along its length it glides at a coefficient of about 0.006; across its length it does not slide at all until the edge lets go. The ratio is about 290, which is not a friction ratio - it is a constraint with a bound. This is why a skater cannot push backwards to go forward and has to push sideways against an edge instead, and it is why a stride is a V. There is no top-speed constant: the ceiling falls out of the stride's own kinematics at about 13.4 m/s. 2. THE SHAFT IS A BEAM. A stick's flex rating is published as the pounds-force that deflects the shaft one inch, and the design formula quoted with it is the stiffness of a beam simply supported at both ends and loaded at midspan - a three-point test, not a cantilever, and a cantilever of the same span is sixteen times softer. The app integrates a Galerkin expansion in the exact mode shapes and the build fails if a shaft labelled 85 does not deflect exactly one inch under 85 pounds-force. Sweeping the flex finds an interior optimum near 45, so the slider is a trade-off rather than a knob. 3. THE PUCK SLIDES AND SPINS AT ONCE. Every patch of the face slides in its own direction, so the drag on the centre of mass depends on the spin and the spin-down torque depends on the slide. The app integrates that over the face on a polar grid and knows nothing about the closed form. The published closed form - Farkas et al., Phys. Rev. Lett. 90, 248302 (2003) - was used only to check it, and the engine reproduces the paper's universal ratio e_0 = 0.653 to under a per cent from initial conditions spanning four decades. ## Two findings from the build, both printed on the page - The English Wikipedia article "Ice hockey rink" says the blue lines are 15.0 m apart and cites the IIHF Official Rule Book 2024/25. That document contains no such figure. Its rule 1.5 divides the ice between the goals into three zones, and the IIHF's own older rink document says those parts are equal - which on a 60 m rink with goal lines 4.0 m from each end makes a zone 17.3333 m, not 15.0 m. This app builds the equal-thirds rink. - The e >= 1 branch of the torque in Farkas et al., as printed, is a factor of e^2 too small. The paper's own stated derivative, a quadrature of its own defining integral, this app's independent engine and continuity at e = 1 all say so. It survives casual checking because T(1), T(infinity) and even the published e_0 are invariant under the error. ## How the app was verified A build harness runs 984 assertions in 20 sections against the engine, including four independent oracles that share nothing with it: the Euler-Bernoulli beam in closed form; the ice friction coefficient recovered from an emitted puck track by two estimators that see only positions and times; the published Farkas result; and the published flex definition checked against published bench measurements. Controls that must fail are run and must fail: the blade is made isotropic and swept across thirteen coefficients from 0.001 to 3 (none of them can skate), the skater is made to push straight back along the blade, and the puck's friction is decoupled. A second harness checks the page itself. The harnesses caught four engine bugs before release, and the author's own predictions that failed are printed on the page rather than quietly dropped. ## How to play Arrow keys or WASD skate and lean. Space is a slap shot, E a wrist shot, shift or Q a pass to the nearest team-mate. On a touch screen, on-rink buttons do the same (lean left/right, skate, pass, wrist, slap). Three periods. You are the skater in the yellow helmet. Steering is a lean, not a steering wheel: the arc you carve is the blade's rocker radius divided by the sine of the lean, and below 5.42 m/s a blade cannot carve at all. ## Files - index.html - the whole page, including a section that states every constant's provenance - js/spec.js - every constant, each labelled with the rule or paper it came from - js/rink.js js/puck.js js/shaft.js js/skate.js js/shot.js js/game.js - the engine - js/render.js js/mat4.js - the renderer, hand-written WebGL2, no library - CREDITS.txt - every source, with exactly what was taken from it and what could not be reached