Alternative Chess. Written from the code, 22 August 2026.
Signing in is never required to play. A player who never makes an account plays a whole game the same way they always did.
An account, if one is made, stores an email address, a display name, and a password on the accounts server at chess.furkankucuk.net/accounts/. The password is stored as bcrypt and is never returned. The server also records when the account was created and last changed, and whether the address has been verified. It is kept until the player deletes it. Delete my account, in Settings, is the control that does that. The games kept on this device are a different store and are not removed with the account. The finds a player earns are worked out on this phone from the games kept on it, are kept only on this phone, and are sent nowhere.
Signing in with Google opens a browser at Google's own address. This app never sees the Google password: Google returns a one-time code to the accounts server, and the accounts server exchanges it. What Google is asked for is the email address, the name and the account identifier, and nothing else. An account made that way has no password on the accounts server. Delete my account removes it the same way, and removes nothing at Google.
A game against someone on another device is a websocket to the play server at chess.furkankucuk.net. The messages are the variant, the time control, a six-character game code, a private token that proves a seat after a dropped connection, a board square when choosing a hidden queen, a request for the squares that queen could move to, a move as two squares and an optional promotion, a reveal, a resignation, and a draw offer or refusal. A signed-in player also sends the account token once, when taking a seat, so the other player can be shown the display name. Nothing else.
The play server keeps the network address a connection came from in memory, so it can refuse too many connections from one address. The count lasts only while the connection is open. A record of new games from that address is cleared within about two minutes of the last one, whether or not that address is ever seen again. Neither is written to disk, and neither is printed. A signed-in player's display name is held in memory for the length of a room and forgotten with it. A signed-in player's account id is held the same way, for the length of a room, and is used for one thing beyond seating that player: the rating in the next paragraph. The play server never holds an email address. Games themselves live in memory; restarting the server ends them.
A finished game between two signed-in players is the one thing that outlives the room. The play server works out both new ratings itself and sends the accounts server, for each of the two players, that player's account id, which mode it was, and four numbers: the rating, how far out it might be, how erratic that player's results have been, and how many games it rests on. Who won is not sent, no moves are sent, and no record of the game itself is kept anywhere. Anyone may read a rating; only the play server may write one. A game against the computer, a game between two people on one phone, and any game where either player is not signed in change nothing and are never sent.
A build given a crash-report address at compile time sends a report when the app or the play server fails. Reports go to a collector the operator runs at glitchtip.furkankucuk.net, not to a third-party company. A build that was not given that address reports nothing at all.
A crash report can carry the variant, whose turn it is, how far the game has gone, who was playing, both clocks, and the moves — except while a queen is still hidden, when the moves are held back. It also carries the kind of device and the size of the screen, which the reporter adds itself. Hidden queens' squares and whole board positions are stripped before a report leaves, or the report is dropped. Email addresses, display names, and account tokens are stripped too. The reporter is not told the device's network address.
The web server in front of the app keeps an ordinary access log: the date, the address that was asked for, the network address it was asked from, the browser identification string, and the page it was come from. That is written to disk on the server and kept about a month before it is deleted. It is not sent anywhere else and it is not joined to anything.
Crash reports are kept for ninety days and then deleted.
Settings, finished games, and the token for a game still going stay on this device and are not uploaded by this app. So does the sign-in of a player who signed in: it is kept in the device's own credential store — the iOS Keychain or the Android Keystore — and in a browser in this site's own storage. It is removed from the device when the player signs out, and nothing else signs a player out. A sign-in stops working three years after it was made, so each time the app opens while somebody is signed in it sends that sign-in once to the accounts server, which answers with a fresh one and puts the three years back. Nothing else is sent with it, and nothing at all is sent for a player who is not signed in. If that server answers that the sign-in is no longer good — the account was deleted, or its password was changed — the player is signed out and it is removed from the device. If the server cannot be reached, nothing changes.
There are no adverts and no analytics. The chess piece font, the typeface, and the drawing engine are bundled and served from this site. A share button hands a join link to the phone's own share sheet: that is you sending a link, not the app sending data to a company. The Share it button on the screen after a game does the same with one line of text: the result, the rule played, the clock, the move the game ended on and this site's address. It carries no name, no moves and no hidden square, and it goes nowhere until you choose where in the phone's own share sheet.