Releases / v0.91.1
v0.91.1 Your Own Data
2026-09-12 Engine
A script can read and write its own data files now. A rhythm chart, a dialogue
tree, a table of enemy stats — anything you would rather author as JSON than
as a Lua table — is a file under Assets/, and a script gets it in one call.
Data files, in and out
json.encode and json.decode have been here since v0.20.0, but a script had
no way to open a file: assets.getFile answers a path, which is what a model
or a material wants and nothing a script can read. So a chart authored outside
the game had to be rewritten as Lua, or pushed through save.* a kilobyte at
a time. Four calls close that gap:
local chart, why = assets.readJson("charts/neon.json")
if not chart then return log("no chart: " .. why) end
for _, note in ipairs(chart.notes) do
spawnNote(note.t, note.lane)
end
assets.readJson(path)— a JSON file decoded straight to a Lua value, byjson.decode's rules: objects are tables, arrays are 1-based lists that stay lists on the way back out,nullisnil.assets.writeJson(path, value [, { pretty = true }])— the reverse.prettyindents it for a person, or for a git diff.assets.readText(path)/assets.writeText(path, text)— the same for any text file, when the format is your own.
Writing back is the half that makes a chart editor a scene in your game
rather than a tool outside it: record the hits, call assets.writeJson, and
the file it wrote is one the Asset Browser shows, git diffs and the export
ships. A write creates the folders on the way.
Every one of them answers value, why rather than raising — a data file is
content, and a file that is missing, not text, or not JSON is a message in the
Console and a nil the script can handle, never an error that stops the
script loading. Paths are relative to Assets/ and stay inside it, the same
rule assets.getFile follows; a path that would leave the project is refused
and says so. The same calls work in an exported build and in a browser, where
a read comes from the bundle and a write lands in the page's own storage.
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.