Live sync is the core workflow Rojo is built around. You runDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/rojo-rbx/rojo/llms.txt
Use this file to discover all available pages before exploring further.
rojo serve on your machine, install the Roblox Studio plugin, and any file change you make is reflected in Studio within moments — without restarting or rebuilding.
Architecture overview
rojo serve starts an HTTP server that the Studio plugin connects to. The server maintains a snapshot of your project’s instance tree and a message queue of pending changes. The plugin opens a WebSocket connection to the server, receives patches describing what changed, and applies them to the live DataModel.
Rojo switched from long-polling to WebSockets in version 7.7.0-rc.1. The WebSocket connection provides lower latency and a more reliable sync experience.
Session starts
rojo serve reads your project file and builds an initial snapshot of the entire instance tree by walking the filesystem. All files are processed through sync rules to produce instance snapshots.Studio connects
The Roblox Studio plugin connects to the server over WebSocket. The server sends the current snapshot so Studio can synchronize its DataModel.
Files change
The server watches for filesystem events (file added, modified, or deleted). When a change is detected, it updates the instance tree snapshot and enqueues a patch describing the difference.
Default port and address
By default,rojo serve listens on 127.0.0.1:34872. You can override either value:
- In the project file — set
servePortand/orserveAddressto change the defaults for that project. - At the command line — pass
--port <number>or--address <ip>to override for a single session.
Place ID safety guards
To prevent accidentally syncing into the wrong Roblox place, you can configure allow and block lists in your project file.A list of place IDs the project is compatible with. The Studio plugin refuses to sync if the current place ID is not in this list.
A list of place IDs the project is explicitly incompatible with. The Studio plugin refuses to sync if the current place ID appears in this list.
default.project.json
Script class behavior and emitLegacyScripts
By default, Rojo uses the legacy script class types:
*.server.lua/*.server.luau→Script*.client.lua/*.client.luau→LocalScript
RunContext-based API, set emitLegacyScripts: false in your project file:
false, server scripts produce a Script with RunContext = Server and client scripts produce a Script with RunContext = Client, using the newer Roblox API.
Excluding files with globIgnorePaths
You can prevent Rojo from processing specific files or directories entirely using glob patterns. This is useful for excluding test files, build artifacts, and editor metadata.
What triggers a sync
The serve session watches for three kinds of filesystem events:| Event | Effect |
|---|---|
| File created | New instance added to the tree |
| File modified | Existing instance updated (source changed, properties re-read) |
| File deleted | Instance removed from the tree |
init.lua file, the folder’s instance type changes accordingly.