Skip to content

v1.10.0 — Configs, teleports and leaderboards

Back to all updates
v1.10.0September 25, 2026

Six new modules cover configs, asynchronous work, pooling, cross-server budgets, teleports and leaderboards, and player data can refuse a bad save.

Four changes can reach existing code.

  • Admin.Cmdr is Cmdr v1.13.0. Calling a registry method on the Cmdr object, such as Admin.Cmdr:RegisterCommandsIn, logs a deprecation warning. Call it through Admin.Cmdr.Registry instead.
  • DefaultCommands = true also registers Cmdr’s ban, unban and exit, at MinimumRank unless Commands names them.
  • Data.SaveNow confirms only a save that read the data after the call. Code that relied on an earlier save landing first now waits for its own.
  • Code that matches every Data.Edit or Data.Reset outcome should expect refused once a scope has a Validate check.
ModuleWhat it does
AsyncGives yielding work a deadline (Timeout), runs several calls together (All), and retries with randomised backoff (Retry). Every call returns an answer.
PoolHands out copies of a part or model, parked out of the world instead of cloned and destroyed.
ConfigReads experience configs without yielding. Every key has a default, which also stands in for a value of the wrong type.
SharedPublishes, subscribes and uses memory store maps within one budget per server.
TeleportSends groups in calls of 50, keeps a group on one reserved server, brings parties along, and keeps carried data off the client.
BoardShows an ordered data store leaderboard from a cache, and writes gathered changes within the write budget.
local sent, code = Twill.Teleport.Send(ARENA_PLACE, squad, {
Reserve = true,
Party = true,
Data = { Mode = "ranked" },
})

A bug that sets Coins below zero used to be saved like any other change. A Validate check now stops it: a save the check refuses is skipped, and the last good data stays stored.

Twill.Data.Configure({
Store = "PlayerData",
Template = { Coins = 0 },
Validate = function(data)
return data.Coins >= 0, "coins cannot go below zero"
end,
})

Admin edits go through the same check. Data.Edit and Data.Reset try the change on a copy, and return refused without touching the live data when the check fails. See Store and save player data.

  • A burst of saves for one key costs one write. A save asked for while another still waits to read the key joins it.
  • When a server begins shutting down, calls that are already retrying stop at two attempts, so the final saves are not left waiting behind them.
  • Data.SaveNow now returns at its timeout, and counts only a save that read the data after the call.

Twill’s test suite, 1115 checks, passes with Workspace.AuthorityMode set to Server. A two-sided playtest also delivered Replication writes, Net pushes, and Ask replies under the deferred signals that mode requires.

  • Tree.Build takes an owner bag, which destroys the tree and its events when it closes.
  • A Navigation agent is destroyed along with its model, and an agent for a player’s own character no longer takes network ownership of parts added to it later.
  • Mail on a key written by ProfileStore keeps that format’s count of letters sent, so a new letter never reuses an old number.
  • Store sends and listens for release requests through Shared, so they count against the same budget as the game’s own messages.

Every change in this release is listed in the changelog.