One link, no server
Start a race and the game gives you an invite link. Send it however you like; your friend opens it and drops into your lobby. From that moment the two browsers talk directly to each other over WebRTC — there is no game server relaying the race. A public signalling broker (PeerJS) is used once, to introduce the two peers; after the handshake it sees none of the traffic.
Two channels carry the race. A reliable, ordered one handles the lobby handshake, the clock sync, the start and the finish. An unreliable one carries the opponent's position about fifteen times a second — a lost snapshot is stale the moment the next one lands, so retransmitting it would only add delay. That is why a bad connection makes the other rider jittery rather than making the race lag.
The same mountain, twice
Both browsers run a complete simulation of their own rider. Nothing about the terrain is sent, because nothing needs to be: the mountain is deterministic, so two machines asked for the same coordinates build the identical slope, ice patch for ice patch and kicker for kicker. The only shared state in the whole race is the two riders.
Each rider is authoritative over themselves. What you see of your opponent is where they said they were, smoothed over the gaps between snapshots and carried forward by the time those snapshots spent on the way, so they are drawn where they are now rather than a few metres back up the hill. What they see of you is the same.
A new course every race
The mountain never ends, so a race does not have to start at the top. When the host presses start, their game picks a fresh stretch of hill anywhere in the first 30 km of the mountain and sends that one number to the other rider with the countdown. Both games then build that same stretch, so the course is new every race and identical for the two of you, down to the last tree and ice patch.
Wherever the course lies, it rides like a run from the top: the snow starts easy and gets rougher and faster the further down the course you go, never because of where on the mountain it was drawn. The start line and the finish are kept clear of trees, rocks, kickers and other riders, and the finish gate stands on the course's own snow. A rematch draws a new course again.
Contact
The two riders collide. Each browser checks its own rider against the opponent exactly as it draws them, and moves only its own rider. Whichever side sees the touch first tells the other, so both of you feel the same bump even when one view missed it by a hair.
Lean into someone and you both get shoved apart and lose a little speed. Cut hard across their line, or ram them from behind much faster, and you both go down, so ramming costs the rammer as much as the victim. Jump high enough and you fly clean over them.
A rider who has just dropped back in after a wipeout cannot be hit for a moment. Once one of you has crossed the finish, the other can no longer be knocked about.
The start
GO is announced as a relative delay — "in this many seconds" — rather than a timestamp, because the two pages' clocks are not the same clock. The guest corrects for the message's travel time using half the best round trip it has measured, which leaves a residual of a few milliseconds on any reasonable connection. The countdown is 3.5 seconds, long enough to absorb the latency either way.
The finish
The finish is a physical gate across the corridor 1500 metres down the course. Progress is measured in metres down the mountain from the course's start line, which is what makes the race robust: a crash, a respawn or the world's own coordinate housekeeping never moves the finish and never resets your distance. Wipe out and you lie in the snow for most of a second, then drop back in where you fell — behind, but still racing.
Each rider reports their own elapsed time on crossing the gate; the smaller time wins. A rematch is one tap, on a new course, and again the same one for both of you.
There is also a trick battle, where the clock is the gate instead of a line: ride for the time and the higher score wins. It gets a course of its own too; the race is for points.
Practicalities
- Both players need a modern browser; nothing is installed on either side.
- Most connections link directly. Networks that block direct peer connections, such as some offices and mobile carriers, fall back to a relay. It adds a little delay, but the race still runs.
- Your cosmetics are sent to your opponent once at the handshake, so they see what you are wearing.
- The race runs on wall-clock time above everything else: pausing, slow-motion and the wipeout card on your side never stop the opponent's rider.
Your first run starts in seconds
Free in your browser on a laptop, a phone or a gamepad. No download, no sign-up.
PLAY FREE