Fair play and anti-cheat: how every score is verified
How fair play works on League of Keyboards: the server rebuilds every run from your keystrokes, flagged runs stay off the board and league, and how to report.
Published: 5 min read
Your browser sends keystrokes, never a score
The single most important rule on the site is that your browser does not decide your score. There is no message in which it can say I typed 140 WPM. What it sends instead is a timeline: the keys you pressed, in order, with the time between them.
Everything you see on a result screen is computed from that timeline on the server: net WPM, raw WPM, accuracy, consistency, your longest correct streak and, in league matches, the match score. If someone edits the page to show a bigger number, the only person who sees it is them. The leaderboard, the league and your opponent all read the number the server computed.
How the server rebuilds a run
A run starts on the server, not in your browser. The server chooses the text and issues a signed, single-use ticket for it, and the timing window for that run opens when the text is handed out. Your browser cannot choose an easier text or claim it started later than it did.
When you submit, the server checks the ticket, replays your keystrokes against the original text, rebuilds what you actually typed, character by character, and computes the metrics itself. The ticket is consumed in the same step, so the same run cannot be submitted twice. Only after that do the anti-cheat checks run on the rebuilt result.
Live matches: progress is cosmetic, the result is not
In a 1v1 or a Battle Royale lobby you see your opponents' lanes move in real time. Those live updates carry progress only, never a score. They exist to make the race feel alive and have no say in who wins.
When the 30 seconds are up, each player's run goes through the same submit path as a solo run and is rebuilt on the server. The winner is decided from the stored results, not announced by anyone's browser, and your opponent's WPM is not shown to you until the match has closed. The server also records when each run actually arrives. A run that reaches it after the window allowed for a rated match still counts as a run, but the match becomes unrated, and the result screen tells you why.
What happens to a flagged run
Some runs look wrong: speeds no person sustains, timing that does not add up, rhythm that is too perfect. The server checks for patterns like these and can flag a run. The exact checks and limits are deliberately not published; a list of thresholds is mainly useful to someone trying to stay just under them.
What is public is what a flag does. A flagged run is kept, but it does not reach the leaderboard, the league, the ghost pool or your personal bests. In a league match, a run with clear evidence of cheating loses by forfeit. A run that is only under review puts the match under review, and no LP is written until a decision is made, with one exception: a flag never helps the player who was flagged, so if that player lost, the loss stands.
Flags are reviewed by people, and the evidence is kept rather than deleted, so every decision can be checked later. An honest player with an unusual run is not supposed to be caught by a single weak signal, and that principle is built into how flags are raised.
Macros and robotic rhythm
Real typing is uneven. Even very skilled typists speed up on familiar words and slow down on awkward ones, so the gaps between their keys vary. A macro or an auto-typer tends to produce gaps that are far more regular than any hand.
That is why consistency appears in two places. In the match score it is a small reward for an even rhythm, but that reward stops growing well before the point where rhythm starts to look mechanical, so there is never a reason to sound like a machine. Separately, rhythm that is too perfect is one of the things anti-cheat looks at. The site's own bots are generated to stay below that line too, and they are always labelled.
Why new accounts start off the board
A brand-new account needs 3 publishable tests before it appears on the public leaderboard. Without that rule, anyone could open an account, send one fake score and land at the top of a global board in seconds.
Nothing is lost while you wait. Your score is saved and shown to you, and it counts toward your personal best. Once the lock opens, your earlier runs join the rankings too. Only real tests count toward the 3: runs too short to say anything, and flagged runs, do not. Custom texts never enter the leaderboard at all.
Rated matches against people need an established account
Rated 1v1 matches between two people ask for a little more: both accounts must be established. That means an account at least 7 days old with 30 clean runs spread over at least 3 different days, or a linked Google or email account. Until then, human matches are played unrated and the screen says one of the accounts is not established yet.
Two more rules keep the league honest. The same two players can play a rated match against each other only once in 7 days, so two friends cannot trade wins back and forth. And LP is never printed: what the winner gains is limited by what the loser actually loses.
Reporting a player or a text
If something looks wrong, you can report a player from their public profile, which you reach from their row on the leaderboard. The reasons cover cheating, macro or auto-typing suspicion, an inappropriate username, toxic behaviour, spam, an inappropriate test text and other.
To send reports, sign in with email or Google, or use an account that is at least 24 hours old with at least 3 clean tests. You cannot report yourself, and the same report can be sent only once a day. A report about a test text is treated as a problem with the text, not with a person: the text is fixed or removed from the pool, and nobody is punished for having typed it.