Type safety
TypeScript-style annotations and structured paths across server and client.
ProfileStore persistence, Replica sync, path-based access, and a server-authoritative model built for serious games.
Created by bellaouzo β Powerful player data tooling that pairs ProfileStore with Replica replication.
Use a Server root and ServerOnlyRoots when data should persist but never reach any client Replica. Server-only player data Β· Data visibility model
On the server, connect PlayerState.Init to PlayerAdded. After that, use Set / Get on the server and Get / OnChanged on the client.
local PlayerState = require(ReplicatedStorage.Libraries.PlayerState.PlayerStateServer)
game.Players.PlayerAdded:Connect(function(player)
PlayerState.Init(player)
PlayerState.Set(player, "Coins", 1000)
end)local PlayerState = require(ReplicatedStorage.Libraries.PlayerState.PlayerStateClient)
local coins = PlayerState.Get("Coins")
PlayerState.OnChanged("Coins", function(newValue, oldValue)
print("Coins updated:", newValue)
end)Ready to go
The Roblox model ships with dependencies β download it from Get Model in the nav when you are ready to integrate.
DefaultDataPlayerStateConfig, performance, and leaderboardsLooking for a specific task? Use the βI want toβ¦β shortcuts on the Guides hub.
See What's new for migrations, Shared Session, server-only roots, session data, and other highlights.
If you have existing player data, Legacy Data Migration can import from an old DataStore during profile load (opt-in).
Optional support β This documentation is free. You do not need to pay anything to use PlayerState or these docs. If you would like to leave a tip, it is genuinely appreciated, but completely optional and never expected.
In PayPal, use Send and enter joelbriskpro@gmail.com. Open PayPal