Releases / v0.87.0
v0.87.0 Wide Awake
2026-09-10 Engine
A joining player can be told that a server is still waking up, rather than being told the game does not exist. Plus two flags that were always there and never written down.
A server that is starting is not a server that is missing
net.joinState() has a new answer: "starting".
Until now a join could only be going ("connecting"), done ("joined"), or
never going to work ("refused"). A dedicated server that has been asked for but
is not up yet is none of those, and the only honest-looking option was a refusal
— which tells somebody holding a perfectly good lobby code that their friend's
game is not there.
local state, why = net.joinState()
if state == "starting" then
find("Status").text = why -- "about 20 seconds"
elseif state == "refused" then
find("Status").text = why -- "no lobby QK7RM"
end
The second return carries words you can show a person, not a status word you have
to translate. Treat "starting" as a waiting state like "connecting" — with the
difference that "connecting" is one round trip to the relay and this one can
take tens of seconds, long enough that a bare spinner reads as a hung game.
Games already published keep working exactly as they do now. A build that has
never heard of "starting" sees "connecting" for the whole wait and draws the
spinner it already draws. Nothing to recompile, nothing to guard.
What is not in this release: nothing sends "starting" yet. Sleeping a server
and waking it on demand is being designed and is not here. This is the half a
game is written against, shipped early so that when the rest arrives your lobby
screen is already right.
Two server flags that were real and undocumented
floptle serve has always accepted --status-file and --max-players. Neither
appeared in floptle help, so the only way to know was to read the source.
--status-file PATHwrites live status as JSON on a timer — players connected, uptime, tick timing, the lobby code, and the port or relay the server is actually reachable on. It is how anything supervising a server learns the lobby code, because the relay hands that to the server and nowhere else.--max-players Nrefuses joins past a number you pick.
--budget was documented as a cap on entities per tick. It is a bandwidth
ceiling in bytes per second, and it only does anything alongside --interest.
If you set it from the old description, check the number.
Floptle Cloud sees a region filling up
Region relays now report their own load, so a busy region is something Floptle Cloud can see coming rather than something it learns about from complaints. A server running on a region also reports what it costs to run, which is what the per-region capacity is worked out from.
None of this changes how you host or what you pay. It is the difference between capacity planned on measurements and capacity planned on estimates.
Servers on a region are also told which deployment they are, so their logs can be matched to the right entry on your game's page.
Upgrading
Nothing to do. If you run a region box, take the new fleet agent and relay.
Floptle Hub
Engine
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.