Docs
How the game works
Lopsy is a lopsided bedsheet that escaped the wash and runs a three-lane night backyard. The run never ends; it only gets faster, until something gets you.
Controls
- Phone: swipe left or right to change lane, up to jump, down to duck. Tapping jumps. Optional on-screen buttons can be switched on.
- Computer: arrow keys or WASD, space to jump. P or Escape pauses.
- The run pauses by itself when you leave the tab.
What is on the track
- Laundry baskets: jump over them.
- Washing machines: you cannot jump them; switch lane.
- Laundry lines: duck under them.
- Graves: jump over them, like baskets.
- Lost socks: run through them to collect. Each sock is worth 10 points.
Score is whole meters plus 10 per sock. Rankings use your best single run.
The Iron
From about 250 m a steam iron can close in from behind. It does not come all the time. First you see heat shimmer and steam at the screen edges. Then it slams down at spots marked by a shadow. Be in another lane, or in the air, when the shadow lands. If it catches you, that is its own kind of defeat.
The first run starts with a short guided tutorial. A defeat during the tutorial leaves no grave and does not count as a run.
Graves
Every time you go bwoop, the game stores a grave: your name, the lane and the distance. Other runners meet it in their own later runs. Guests leave graves too. If you are logged in with X, your avatar is shown on the stone.
A grave keeps two counts: how many runners cleared it and how many it caught. Each grave has a public page you can share.
The track would be unplayable with thousands of graves, so each run shows a selection: the six built-in legend graves, your own latest ones, the deadliest ones, then recent ones. At most one grave per lane per 5 m, with a cap per stretch of track, so there is always a way through.
Any grave page has a Report button. The team can hide graves that break the rules, such as offensive names or impersonation.
Seasons
A season is 14 days, and a new one starts when the last one ends. Leaderboards have three views: today (UTC), the season, and all time. Only validated runs from players logged in with X appear on them. Guests play but are not listed.
Current season: 2026-10-12 to 2026-10-26 (UTC), 14 days left.
A season may carry a cosmetic theme, such as a sheet colour. It never changes how the game plays. The rules page has the details. The team plans to freeze the standings at season end and publish a SHA-256 hash of them so anyone can check them later; that step is not automated yet.
The team may recognise top players. Nothing here is a promise of payment or value.
Fair play
When a run starts, the server hands out a signed, short-lived run ticket with a seed that shapes the track. When it ends, the result is checked before it counts:
- the ticket is genuine and has not expired;
- the distance and the number of socks are possible;
- the run took at least as long as that distance physically needs, measured by the server’s own clock;
- the graves a run reports having jumped or hit are real, on that stretch, and not repeated;
- an Iron defeat happened where the Iron could actually have caught you.
A run that fails is not saved and does not reach a leaderboard. Rates are limited, one person should use one account, and accounts that break the rules can be banned. We do not publish more detail than this on purpose.
Identity and privacy
Guests
A guest gets a random id in a cookie called lopsy_guest (kept for a year) and a random name. It lets us attach your runs and graves to you. Your personal best and settings also stay in your browser’s local storage.
Logging in with X
- We use X’s OAuth 2.0 login with PKCE, with the scopes
tweet.readandusers.read. X requires both to read your own profile. We never read your posts. - We make one request, for your own profile, at login. X sends your id, name, username and profile image address.
- We keep your X id and your username (shown as your player name). We download your profile image once, re-encode it to a small 128×128 picture, and store our own copy. Your name from X is not stored.
- The access token is used for that one request and then thrown away. We do not ask for a refresh token and we cannot post for you. Sharing uses the public tweet link, which you confirm on X.
- Logging in keeps a signed session cookie for 30 days. Runs and graves you made as a guest on that browser are moved onto your account.
Wallet
Linking a wallet is optional. You sign a message that says it links the wallet to your Lopsy player, with no transaction and no gas. We store the address. We never ask for a private key or a seed phrase.
Analytics
We count a short, fixed list of our own events: page view, run start, run finish, share click, login, wallet link. Each can carry one number and one short tag. They are stored in our own database, attached to your guest or player id. We store no IP addresses with them; an IP is only turned into a salted hash used as a rate-limit key. There are no third-party trackers.
What $LOPSY will and won’t do
The game is the product. $LOPSY is an idea for a later layer on top of it. Everything in this section is a plan, not a promise: no dates, nothing is committed, and plans can change or never happen.
What we plan
- Cosmetics and status: sheets, grave styles and trails, shown in the shop.
- Items there that are meant for $LOPSY are marked “Coming with $LOPSY” and are switched off.
What it will not do
- It will never be required to play. Guests play the full game, free.
- It will not change speed, jumping, collisions or score. The shop is built and tested so that cosmetics cannot touch those.
- Nothing on this site offers or implies financial gain, and $LOPSY is not a financial product.
- Payment stays disabled until a token contract exists. The site will show a contract address only once there is one.
See the roadmap for what is live, in progress and next.