Engine has been in the making for a long time, and today v1.0.0 is out for everyone.
Engine is a framework by Arthonier that extends Roblox with custom services, systems and packages. You install it once with the Engine plugin and use it the same way you use Roblox’s own services. It’s free, also in games that make money.
A saved currency that shows up in the player list, in a few lines:
local ServerScriptService = game:GetService("ServerScriptService")
local Engine = require(ServerScriptService:WaitForChild("Engine"))
local EconomySystem = Engine:GetSystem("EconomySystem")
EconomySystem:CreateCurrency("Coins", { Leaderstat = true })
EconomySystem.BalanceChanged:Connect(function(player, currency, balance)
print(player.Name, balance, currency)
end)
What’s inside
Three tiers of ready-made code. We build and maintain all of it, you use it and change settings where your game needs to.
| Tier | What it is | Examples |
|---|---|---|
| Services (17) | New engine capabilities Roblox doesn’t have built in | DataService, NetworkService, DestructionService, UIService |
| Systems (4) | Complete game features built from those capabilities | EconomySystem, ModerationSystem, LeaderboardSystem |
| Packages (24) | Pure Luau building blocks without side effects | Promise, Signal, State, Serde, Octree |
All 17 services
Data and Security
- DataService: session-locked player profiles with autosave and replication, plus DataStores, ordered stores, MemoryStores, cross-server topics, shared documents and purchase receipts
- CryptographyService: secure random numbers, SHA-2, SHA-3, BLAKE2, HMAC, authenticated encryption, signed tokens, Argon2, scrypt and one-time codes
- MonetizationService: products, game passes, subscriptions and avatar items with safe receipts, regional prices, policy checks and a purchase ledger
- StatisticsService: Roblox Analytics events, funnels, counters, automatic tracking, Discord webhooks and daily totals
Players and Networking
- PlayerService: names, badges, membership, device, settings, policies, character, avatar, friends and groups, cached and retried
- NetworkService: named remotes with validation, per-player rate limiting, request/response Promises, batching, streams, middleware and bandwidth stats
Runtime
- SchedulerService: spread heavy work over frames with time budgets, priorities and throttling
- ComputeService: parallel Luau on Actors with worker pools, parallel for-loops and task graphs
- TimeService: scaled game time, a day/night cycle with seasons, game-time timers and real-world dates
- PerformanceService: FPS, memory and ping, a device benchmark and automatic quality levels
- JunkService: clean-up scopes for players, characters and rounds, plus a leak detector
World
- GeometryService: build MeshParts from code, heightmaps and density fields, and slice, deform or simplify meshes
- DestructionService: breakable parts and models with health, mesh fracturing, explosions, debris and structural collapse
- SpatialService: spatial indexes for proximity queries, and zones with Entered and Exited events
- EffectService: pooled, quality-scaled visual effects that the server can broadcast
Audio and Interface
- AudioService: named sounds, a mixer with buses and ducking, playlists and adaptive layered music
- UIService: a declarative, reactive UI framework with components, themes, animation, screens and dialogs
All 4 systems
- EconomySystem: currencies saved in player profiles, shops with limits and dynamic prices, timed rewards with streaks, trades, Robux products and safe offline transactions
- LeaderboardSystem: global leaderboards with daily, weekly and monthly resets, live in-server boards and leaderstats
- ModerationSystem: warnings, mutes, kicks and bans that follow players across servers, roles and permissions, escalation, reports, chat moderation, commands, an audit log and server access control
- PasswordSystem: password hashing and rules, generated passwords and PINs, and locks that limit guessing
Systems work together out of the box. EconomySystem uses LeaderboardSystem for leaderstats and DataService for balances, and ModerationSystem posts its audit log to StatisticsService.
All 24 packages
Async and Events
- Promise: values that arrive later, every Async method in Engine returns one
- Signal: fast, typed events, every event in Engine is a Signal
- Timer: delayed and repeating tasks, stopwatches and countdowns on any clock
- RateLimiter: token buckets, windows, cooldowns, debounce and throttle, keyed per player
State and Logic
- State: reactive values that update everything computed from them
- StateMachine: finite state machines with guards, timed transitions, history and parallel regions
- BehaviorTree: AI built from small reusable nodes, one tree for any number of NPCs
Data
- Collections: Queue, Stack, Deque, PriorityQueue, RingBuffer, LRUCache, Set and Multiset
- TableKit: 80+ helpers for copying, merging, diffing and transforming tables
- Patch: deep paths in nested tables, templates and DataStore-safety checks
- Serde: compact binary serialization with schemas
- Compress: run-length and LZ compression, delta encoding and Base91
- Hash: fast hashes, checksums, MD5, SHA-1, SHA-256 and HMAC
- Id: GUIDs, sortable ids, short codes and coupons
- Guard: runtime type checking with readable error paths
Math and Space
- MathKit: interpolation, easing, angles, projectiles, geometry tests, statistics and colour
- Rand: seeded random numbers, distributions, weighted picks and shuffle bags
- Noise: Perlin, Simplex, Value and Worley noise with fractal layering and warping
- Spring: physically based springs for numbers, vectors and CFrames
- Spline: smooth 3D paths with constant-speed movement and tubes
- Octree: a 3D spatial index for radius, box, ray and nearest queries
- Graph: weighted graphs with A*, Dijkstra, flow fields, grids and spanning trees
Memory
Why Engine?
- It feels like Roblox.
Engine:GetService("DataService")works likegame:GetService("Players"). Names, properties and events follow Roblox’s style, and every event is a Signal you:Connectto. - Safe by default. Session-locked player data, purchases granted exactly once, remotes that validate and rate-limit, and every client request checked again on the server.
- Only what you use loads. A module starts the first time you get it. Anything you never touch costs nothing.
- Configurable, not forkable. Every setting has a default. Change only what you need and keep it through every update.
- Always up to date. With automatic updates every new server runs the newest Engine. With manual updates you decide when to move.
- Strictly typed. Written in strict Luau, and every reference page lists the types a module exports.
- Nothing to download. Engine never comes from a website. The plugin installs it in Studio and updates arrive through Roblox.
Getting started
- Get the plugin from the Creator Store. It’s free and it’s the only official way to get Engine.
- Open your place in Studio. Make sure you’re editing, not playtesting.
- Open the Engine window: go to the Plugins tab and click Engine.
- Choose how Engine updates: click Enable for automatic updates (recommended) or Install Latest for manual updates.
- Confirm and publish. The plugin adds the
Enginemodule to ServerScriptService. Ctrl+Z undoes it like any other edit. - Require it and get what you need by name.
Server Script
local Engine = require(game:GetService("ServerScriptService"):WaitForChild("Engine"))
local TimeService = Engine:GetService("TimeService")
print("Engine is running, today is", TimeService:FormatIRLDate("%Y-%m-%d"))
LocalScript
local Engine = require(game:GetService("ReplicatedStorage"):WaitForChild("Engine"))
Press Play and you should see “Engine is running” in the Output. The Quick Start then takes you through saving player data, adding a currency and sending a validated remote in a few minutes.
What the plugin installs
ServerScriptService
└── Engine ModuleScript: require this on the server
├── Loader Script: starts Engine when the server starts
├── Configuration Folder: your settings
└── MainModule The engine itself (manual updates only)
When the server starts, Engine also creates ReplicatedStorage.Engine, the copy you require on the client. Keep Engine directly in ServerScriptService and don’t rename it.
Automatic or manual updates?
| Automatic (recommended) | Manual | |
|---|---|---|
| Where Engine comes from | Loaded from Roblox when each server starts | A copy stored inside your place |
| New versions | Every new server runs the newest version | You update from the plugin when you want |
| Place size | Small, only the shell is saved | Contains the whole engine |
| Needs | May need Allow Loading Third Party Assets | Nothing |
You can switch any time with Enable Auto-update or Disable Auto-update in the plugin, and your configuration is kept. More in Updates and Versions.
Changing settings
Every module has settings with defaults. To change one, add a ModuleScript named after the module to ServerScriptService.Engine.Configuration and return only what you change:
-- ServerScriptService.Engine.Configuration.EconomySystem
return {
TradeTimeoutSeconds = 60,
}
Your settings stay through every update. See Configuration.
FAQ
Does Engine cost anything?
No. Engine is free and Arthonier takes no share of what your experience earns.
Can I use Engine in a game that makes money?
Yes, through Roblox’s own monetization features like passes, developer products, subscriptions, ads, paid access, private servers and avatar items. You keep everything you earn and can DevEx it as usual. See section 3 of the Engine License.
Where do I download Engine?
You don’t. Engine is never offered as a file, not on our website either. The plugin installs it inside Studio and automatic updates come straight from Roblox. If you see Engine offered for download somewhere else, it’s not from us.
Does Engine send data to Arthonier?
No. Engine has no telemetry. Everything it stores lives in your experience’s own DataStores. See Privacy.
Automatic or manual updates, which should I pick?
Automatic for most games: every new server runs the newest version and your place stays small. Pick manual when you want to test each version first, or when your game can’t load third-party assets.
Can I use Engine for commissions?
Yes, as long as Engine is only used inside that client’s experience, you only charge for your own work, and the client accepts the Engine License. See section 4.
Can I reupload, share or sell Engine?
No. Only Arthonier publishes Engine. You can change its settings and code for use in your own experiences, but you can’t upload it to the Creator Store, sell it, share its source or put it in kits, templates or uncopylocked places. The full terms are in the Engine License.
Engine says it could not load the published engine
Turn on Game Settings > Security > Allow Loading Third Party Assets, publish and test again. If it still fails, click Disable Auto-update in the plugin to switch to manual updates. More fixes in Troubleshooting.
My data doesn't save in Studio
Turn on Game Settings > Security > Enable Studio Access to API Services. Without it, DataService uses a temporary in-memory store that is cleared after every test.
Links
- Website: engine.arthonier.com
- Plugin: Engine on the Creator Store
- Install: Install guide
- Docs: Introduction | Installation | Quick Start | Engine API
- Modules: Services | Systems | Packages
- Concepts: Services, Systems & Packages | Server and Client | Configuration | Updates and Versions | API Conventions
- Help: Troubleshooting | Engine Changelog | Plugin Changelog | Report a problem
- Legal: Engine License | Terms of Use | Privacy
- Arthonier: arthonier.com | Contact | Roblox | GitHub | X | Instagram
Feedback
Found a bug, an error when Engine starts, a plugin problem or a mistake in the docs? Use the report page and include the full Output message, your update model and the result of Engine:GetBootInfo(). That way we can fix it a lot faster.
Found a way to abuse Engine? Pick Security issue on the report page and leave your email. Please don’t post it here.
Questions and ideas are welcome in the replies.
:)
