Releases / v0.86.2

v0.86.2

2026-09-09

Five fixes, four of them found by running a game on a real server for a week and one by measuring a fighting match.

The player who joined a rollback match was getting a worse game

Two people play a rollback match. The host sees a clean game. The person who joined has every single one of the host's actions arrive as a correction — a press that lands as a small pop instead of a motion, on every input, for the whole match, even on a perfect connection. Both machines agree about everything, so nothing anywhere says this is happening. It reads as "rollback feels worse for my friend than for me", which is not something anybody would report.

The two machines never started counting from the same moment. The clock banks real time and spends it in fixed steps, and the person joining arrives at the starting gun having banked their whole scene load — then spends it at once, and runs up to eight steps ahead of the host for the rest of the match. Raising the input delay could not touch it, because the gap was bigger than the delay.

A match now starts when it starts. If you have been tuning input delay to fix a joiner's experience, try it again from scratch.

A server on Floptle Cloud comes back by itself

Restarting a relay destroyed every lobby on it, and the servers hosted through it never noticed. They did not reconnect, they said nothing at all, and they carried on handing out the six-character code they were given when they started — which the site published, your game page showed, and your shipped build was told. Everybody who typed it was turned away, and there was nothing anywhere to explain why.

A server now takes the relay's word for its own lobby code rather than remembering one. If the relay goes away the code goes with it, the server says so, and it re-hosts itself and tells you the new code when it is back. Your game can see this too: net.joinState() reads "reconnecting" while the relay is unreachable, and net.lobbyCode() is nil rather than a code that does not work.

An empty server is not a player

A dedicated server counted itself as somebody playing. Your game's page said "1 in this game right now" about a server nobody was on, and one of your plan's player slots was spent for as long as it ran — so a game with room for twenty seated nineteen people and told the twentieth it was full.

Shipping a server is one command

floptle export <PROJECT> ~/builds/my-game-server.tar.gz server --scene scenes/lobby.ron

Name the output as an archive and you get the file you upload. Before this you got a folder and then ran a tar line copied off the website, which is the step that assumes you have a shell and is easy to get wrong. Naming a folder still gives you a folder.

A port that was never listened on

A dedicated server given both a port and a relay used the relay and ignored the port, without saying so. It says so now, at startup, and it reports where it can actually be reached, so nothing publishes an address that leads nowhere.

Upgrading

Nothing to do. If you run a region box, take the new server and fleet binaries the way you took the last ones.

Floptle Hub

Linux x86_64 7.5 MB Download → sha256 883f99ad2bd430c06664a9a3a19254c44cbd38a1e352be8f969451cd21060079
macOS Apple Silicon 5.7 MB Download → sha256 c61ca44cf73cf1a631d81d15e0efd6a98acd7145f757e2cf81000e1c367e17ce
macOS Intel 6.2 MB Download → sha256 39766e2ecb252e74136789fd0b70e8099207e6f96d8d829018817091e0db3eb6
Windows x86_64 7.1 MB Download → sha256 6db90e781600020aa8c6ec34b38b92506157b2c355fe80e6bd44f63bc86d4eb7

Engine

Linux x86_64 33.4 MB Download → sha256 f8c4287ef43e0e03cbfce56207115a57675a25a47dd1d36eda9c9bdd2d67f391
macOS Apple Silicon 27.2 MB Download → sha256 adf0bedf3dfabbc64bd5280ac6ebf56af6cb446208b7beba7c35769db19a7577
macOS Intel 29.3 MB Download → sha256 91b01254eaddd53ffd1d3c3ee60e5687bf1722244a43196725cdb736e9b6709e
web 4.2 MB Download → sha256 0fd50f1610457544f95222c1ae7486fc397f0987536507ede850122de6593215
Windows x86_64 33.1 MB Download → sha256 313b2ba4ae788f2a11c6baddbae6734aca124f80c6c3e09ba6ab398d42cf066a

The binaries are not signed yet. On macOS, right-click the app and pick Open the first time. On Windows, if SmartScreen appears, pick More info then Run anyway.