roblox-data
Installation
SKILL.md
roblox data persistence
When to Load
Load when designing player saves, schema migrations, retries, shutdown handling, or session ownership. Use roblox-server-data for ordered leaderboards, messaging, and global world data; roblox-cloud for Open Cloud and external API access.
Quick Reference
- Define a serializable template and a version field before storing player state. Deep-copy templates so nested defaults are not shared between profiles, and run migrations before stamping the version.
- Use
UpdateAsyncfor read-modify-write operations and handle throttling or transient errors. - Prevent two servers from mutating the same player's profile at once, either with a well-understood wrapper or an equivalent session protocol.
- If using ProfileStore, use
StartSessionAsync,Profile.OnSessionEnd, andEndSessionas documented. Do not use itsStealoption for normal player loading. - Use
ProfileStore.Mockfor Studio tests that must not write live DataStore keys. - Save on meaningful changes and on lifecycle boundaries, but do not assume
PlayerRemovingalone is sufficient. - Use
BindToCloseto finish pending work within Roblox's shutdown window. - Store primitives, arrays, and dictionaries. Convert Instances, userdata, functions, and cyclic tables first. Before persisting client-influenced values: numbers must not be NaN or infinity, strings must pass
utf8.len, and any nested table must be re-validated, since one unsaveable value fails the whole key write.
Need the details? Load references/full.md for a framework-neutral persistence design.