Releases / v0.101.0

v0.101.0 Always Answers

2026-09-28 Engine Latest

A dedicated server that had been up a while could stop letting anyone in: joins reached it and every reply was lost, while the server looked perfectly healthy. That's fixed. Text in fitted UI boxes is sized the way it's drawn, floptle shot photographs shader-drawn materials and UI, floptle check compiles every shader and reads every model, and a project opened through a folder link loads its assets. Surface shaders can light a normal of their own.

Dedicated servers keep answering joins

The reliable half of a network connection is a single stream. If one message was bigger than the other end would accept, that end stopped reading the stream without a word. The connection stayed up, keepalives and snapshots kept flowing, and from then on no join, welcome or refusal got through. A server whose world had grown large enough to send one oversized snapshot went deaf for good.

Messages up to 64 MB now go through. If a reliable stream fails for any reason, the whole connection closes, so both ends notice. A dedicated server on Floptle Cloud then reconnects to the relay within a second or two and keeps its lobby code and its players.

A dedicated server's log now records every join and every refusal, and what the relay tells it.

To get this on a running Cloud server, export its server build again on this version and deploy it. A server runs the engine version its build names.

Fitted UI text is sized the way it's drawn

h = "fit" on wrapped text measured one line and then drew three, so the text spilled over the rows above and below. Fitted text is now measured with the same wrapping, newlines, line height, case and tracking it's drawn with. A fixed-width column also measures its rows at its own width, so a column of fitted paragraphs stacks without overlap.

floptle shot shows shaders

A shot drew every mesh wearing a .flsl material, and every UI element drawn by a shader, in its plain fallback look. Materials, UI shaders and custom post-processing shaders are now in the picture.

shot --timing now draws a few frames untimed before it measures, then reports each pass's median over several. The first frame pays once for building pipelines and baking, and a single timed frame could read ten times slower than the game actually runs.

floptle check compiles shaders and reads models

floptle check now compiles every .flsl in the project the way the game does, and reports errors as file:line:col. It reports a shader that a node names and that doesn't exist, or that's the wrong kind for where it's used. It also reads every model a scene names: a model it can't load is an error, and a Draco-compressed .glb is named as such, with how to re-export it. It warns about a scene with a camera and no Skybox, which opens with a flat grey sky.

A model that fails to load now says why in the Console.

Surface shaders light their own normal

let n = normalize(normal + vec3(dx, 0, dz))
output color = vec4(litSurface(albedo.rgb, n), 1)

litSurface(albedo, normal) lights the normal you give it with the engine's sun, shadows and lights: waves on a flat sea, bumps on a flat panel. lightDir and lightColor give the key light's direction and colour for effects the engine doesn't do for you. From a script, node:material().shader reads which shader a material uses, and assigning a path swaps it.

Projects opened through a folder link

A project the Hub opens through a symbolic link refused every model, texture and sound as "outside the project". It now loads them. A linked folder inside a project, such as ui/, is also read like any other.

Smaller fixes

  • floptle run waits for background terrain generation instead of running past it, and says how long it waited.
  • A planet created during play no longer throws nearby bodies across the system on its first tick.
  • UI style transitions no longer start from a destroyed element's look when a new element takes its place, and they run under floptle run and floptle shot --after.
  • A Water Volume warns once when a body is more than 50 times lighter or denser than the water. Density is in your game's own mass units per cubic metre: with masses in tonnes, water is 1.0.
  • The docs now say that ui.make rows and columns start with 8 units of padding and gap, and overlapSphere names the option it reads (ignore).

Upgrading

A fitted text element that wraps may now be taller than before, which is its real size. Re-export and redeploy Cloud server builds to pick up the server fix.

Floptle Hub

Linux x86_64 9.0 MB Download → sha256 497be0c7b894a365844ecafd66d1d5c83defd0ff2180ce722135258d55bfa0fd
macOS Apple Silicon 5.9 MB Download → sha256 e5448e9b42b8c3530789f756ac9fb9136b97739147faffef6dea8c08924122f1
macOS Intel 6.4 MB Download → sha256 a4fa5dde4aaf7619e40d34c611f8affbd20b208f2415ee764f03c23964c09a31
Windows x86_64 7.3 MB Download → sha256 0d1d15f8edb001ef2ca94b553b2ef976c640931c8b7445674261dd64fb0e9360

Engine

Linux x86_64 36.8 MB Download → sha256 4a63f159bb320412541f0d25592b08405a57102cbdbfa0bc0db0eb6c4fe1ca16
macOS Apple Silicon 28.4 MB Download → sha256 06d751d2ee98657e2f0c7a40502b2032938f4156bd33c5370e1a99652034d96c
macOS Intel 30.6 MB Download → sha256 84980e8f0e858074f9b88c098ef9413056a85dc58151ac88a3906af7292e6631
web 4.5 MB Download → sha256 39b535286de9ea111c0602485ad0e05570948ec67f21920d6c71053b52effeb6
Windows x86_64 34.6 MB Download → sha256 c498943a0e9fc7a3bebc82792e4ef710df38dec7576c3fded05ccf8f2b93d85b

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.