roblox-server-data
Use for Roblox server or cross-server data: OrderedDataStore leaderboards, MessagingService, world state, seasons, or guilds.
Install
npx skills add https://github.com/tabooharmony/roblox-brain --skill roblox-server-dataSKILL.md
Roblox Server & Shared Data
When to Load
Load for server-level or cross-server data: leaderboards (OrderedDataStore), cross-server messaging (MessagingService), queues and sorted maps (MemoryStoreService), shared world state, non-player persistence, season or guild data. For player data, use roblox-data; for Open Cloud, use roblox-cloud.
Quick Reference
OrderedDataStore (Leaderboards)
- Sortable DataStore. Keys are strings (
tostring(UserId)); values are integers used for sorting. GetSortedAsync(ascending, pageSize, minValue, maxValue)→ sorted pagesBatchGetAsync(keys): multi-key read, ordered stores only; missing keys are omitted- Budget: poll
GetRequestBudgetForRequestType(OrderedWrite)before bursts (per server: 30 + numPlayers x 5 writes/min) - For leaderboards only, never for player saves
- Keep the user ID a static substring in keys (
player_<UserId>) so RTBF templates match; hashed keys make erasure manual
MessagingService (Cross-Server)
SubscribeAsync/PublishAsync; no delivery or ordering guarantee, so design for idempotency.
GlobalDataStore (Shared State)
- Persistent non-player state (guilds, seasons, counters). Use
UpdateAsync; never for player session data.
MemoryStoreService (Temporary Coordination)
- Queues and sorted maps for expiring matchmaking, leases, coordination.
- Remove a read batch only after successful, idempotent processing.
Cross-Server Patterns
- Register servers with expiring heartbeats; use MessagingService for notifications.
User Identity
- New code identifies users with
player.User(User.Id,DomainType,DomainId);UserIdstays valid. Domain IDs are per-experience, so keep cross-server keys onUserIdand never mix the two.
Pitfalls
- MessagingService: fire-and-forget, unordered, cross-server latency; not for time-critical work
- GlobalDataStore: same rate limits as player DataStores
- Never store Instances; serialize to primitives first
SetAsyncoverwrites without reading; useUpdateAsyncfor shared counters
Need more detail? Load references/full.md for the complete reference with code examples, API tables, and edge cases.
Related skills
godot-gdscript-patternswshobson16KMaster Godot 4 GDScript patterns including signals, scenes, state machines, and optimization. Use when building Godot games, implementing game systems, or learning GDScript best practices.game-enginegithub13KExpert skill for building web-based game engines and games using HTML5, Canvas, WebGL, and JavaScript. Use when asked to create games, build game engines, implement game physics, handle collision detection, set up game loops, manage sprites, add game controls, or work with 2D/3D rendering. Covers techniques for platformers, breakout-style games, maze games, tilemaps, audio, multiplayer via WebRTC, and publishing games.unity-ecs-patternswshobson11KMaster Unity ECS (Entity Component System) with DOTS, Jobs, and Burst for high-performance game development. Use when building data-oriented games, optimizing performance, or working with large entity counts.msw-defaultplayermsw-git7.9KMSW DefaultPlayer (character) management. Use the msw-general ModelBuilder to inspect/patch DefaultPlayer.model and Player.model, add/remove components, configure movement speed / jump force / HP / camera, and per-map-mode movement components. Use for DefaultPlayer model, player components, movement speed, jump force, HP, camera, physics. Keywords: player, DefaultPlayer, speed, jump, HP, camera, gravity, revive, respawn, character.