Skip to content
Engine

Overview

Systems

EngineSystems are complete, ready-made game features built on top of Engine's services, such as an economy, inventories, moderation, leaderboards and password locks.

What a system is

An EngineSystem is a finished game feature: the kind of thing most experiences need and every team ends up building again. Systems are built from services and packages, save their own data, replicate to clients and work as soon as you get them.

local Engine = require(game:GetService("ServerScriptService"):WaitForChild("Engine"))

local EconomySystem = Engine:GetSystem("EconomySystem")
EconomySystem:CreateCurrency("Coins", { Leaderstat = true })

Like services, a system is loaded the first time you get it, and loading a system starts it: for example, ModerationSystem starts loading player records and hooking the chat.

All systems

SystemRealmWhat it does
EconomySystemServer, ClientCurrencies in player profiles, shops, timed rewards with streaks, trades, Robux products and offline transactions.
InventorySystemServer, ClientItems and containers in player profiles, Roblox Tools, equipment with stats, crafting, chests, world pickups, selling and item shops.
LeaderboardSystemServer, ClientGlobal leaderboards with daily, weekly and monthly resets, live in-server boards and leaderstats.
ModerationSystemServer, ClientSanctions that follow players across servers, roles, escalation, reports, chat moderation, commands and an audit log.
PasswordSystemServerPassword hashing, password rules, generated passwords and PINs, and locks that limit guessing.

Systems work together

Systems use each other where it makes sense, so you get the integrations for free:

  • EconomySystem uses LeaderboardSystem for Leaderstat and Leaderboard currencies, and DataService for balances.
  • InventorySystem uses EconomySystem for sell prices, item shops and recipe costs, and DataService for inventories.
  • ModerationSystem posts its audit log to StatisticsService and its webhooks.
  • EconomySystem and ModerationSystem report to StatisticsService when LogToStatistics is on.

Server and client halves

Systems marked Server, Client have a client half you get the same way from a LocalScript. The client half reads what the server replicates (balances, boards, moderation state) and sends requests that the server checks again, so a client can never change a balance or apply a sanction on its own.

-- LocalScript
local Engine = require(game:GetService("ReplicatedStorage"):WaitForChild("Engine"))
local EconomySystem = Engine:GetSystem("EconomySystem")