Skip to content

v1.8.0 — Player data on Twill's own store

Back to all updates
v1.8.0September 2, 2026

Data runs on Twill’s own Store, and the console reads a key’s history and holder.

  • Nothing changes for Data. Its API, its behaviour and the format of what it stores are unchanged.
  • Token now produces standard HMAC-SHA256, so tokens issued before this release read as forged. Reissue any that are still in circulation.

Data used to hand its storage work to the bundled ProfileStore package. That package is removed. Store holds a DataStore key for one server at a time, saves it while it is held, and releases it on the way out.

A key written by ProfileStore still reads. Its format is recognised and raised to the current one on the first save.

Store also works on its own, for keys that are not player data, such as a guild or a shared world:

local keep = guilds:StartSessionAsync("guild-4812")
keep.Data.Level += 1

Reading the new module end to end turned up eight faults.

  • A refused write reported success. The code checked that the call had not raised, rather than that anything was stored. With packing enabled, a failure to pack took exactly this path: nothing was stored, LastSaved was updated, and OnAfterSave fired.
  • Nothing was saved on shutdown. The closing handler wrote to the frozen module table on its first line and raised there.
  • Shutdown had no time limit. Each write kept four attempts with backoff climbing to 30 seconds, so keys later in the queue could not finish before the server closed.
  • A replaced handle kept accepting writes. Taking a key this server already held left the earlier handle looking alive. It accepted writes that could never be stored.

The full list is in the changelog.

Two commands join playerdata:

  • status names the server holding each scope, how many sessions the key has had, how long since it was written, and whether storage is reachable.
  • versions reads up to five earlier versions of a scope, newest first.

Both are also available in code, as Data.Inspect and Data.Versions.

Every change in this release is listed in the changelog.