Releases / v0.117.0-rc19

v0.117.0-rc19 Whole Worlds

2026-10-26

Everything in rc16, plus saves that never stall a frame or lose a player's data, a warm-up that prepares a level without crowding it, and terrain answers that stay true once they say they are final.

Saves

  • Saving no longer costs the frame. A save is encoded and written in the background, and only the keys that changed are encoded again. save.set of a large table is about twice as fast.
  • A save is written to a temporary file and moved into place, so a crash or a killed game leaves the previous save whole. user:// files are written the same way.
  • A save slot that cannot be read is kept beside it as save/<slot>.ron.unreadable with a Console error, instead of being written over by the next save.
  • save.flush() hands the save off and returns at once. save.flush({ wait = true }) returns once it is on disk. Stopping Play and quitting always wait.
  • A slot still holds up to 4 MB. For larger player-made data, write user:// files with assets.writeJson or assets.writeBytes; the slot's error now says so.

Warming a level

  • assets.warm prepares pictures on a few workers and shaders one at a time, instead of a thread per asset, so warming a large level no longer crowds the frames around it.
  • An asset used while it is still warming is finished, never prepared a second time.
  • UI and screen shaders can be warmed as well as material shaders. Sky and distance-field shaders cannot yet, and come back in the call's failed list with the reason.
  • Warmed shaders are installed one a frame, and the time shows as shaderInstall and materialBind in perf.parts.

Terrain answers that stay true

  • terrain.raycast says exact only when nothing along the ray could still change, and a ray that misses over ground not yet made answers nil, "unknown" instead of "air".
  • terrain.prepare works on a moving world, waits for a world that is not loaded yet instead of being dropped, and keeps all the ground it asked for. terrain.ready then stays true there.
  • A paint over coarse stand-in ground makes that ground for physics and queries too.

Upgrading

Projects upgrade themselves; nothing to do. What upgrading cannot change for you:

  • assets.getContents and assets.getFile return paths relative to the project (levels/one.ron), not full paths on disk, so a listed file can be passed straight to assets.readText. A script that worked out the project folder from these paths needs another way.
  • save.flush() returns before the save is on disk. A script that reads the save file itself right after flushing should call save.flush({ wait = true }).

Floptle Hub

Linux x86_64 10.7 MB Download → sha256 1df937c21990d9cc98234afcfdf5cb7a3d95f4dd4ce98cd7e527983114f633d3
macOS Apple Silicon 7.4 MB Download → sha256 ca164f47114be6ce468d520f98ab0c81f028b6fce8e101237a7d494e8fd39acf
macOS Intel 8.0 MB Download → sha256 293ab2f3432ae58f538d9a7082a5f1c07b43f50c93166a002543f6cc3b3f05f3
Windows x86_64 9.1 MB Download → sha256 b8c800568cf9023f2007463a0d5b567a897ba12b084ebea410f07fc4d30a9f66

Engine

Linux x86_64 58.2 MB Download → sha256 e2347c07f439040970f556ddc88e92b57f121a8a2abb1a64fe7694f9416eace3
macOS Apple Silicon 45.7 MB Download → sha256 43a12e59fb21fdc6946bd48a85a49380264f0555c20cbb383fc5071449b03691
macOS Intel 49.2 MB Download → sha256 a4ac71b9888b237b076c5ddf0e21e2fabbe567eef9f1f72670669aaaec912041
web 5.5 MB Download → sha256 038fc25953a3b46ad0c9fbc936e1152d75a72f05f320713d41a567bfdaa5beb8
Windows x86_64 55.5 MB Download → sha256 c329a4715eedede2613ba209bd79aac05854c8acecf79dc13b70178fb5c9cc7f

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.