Migrating from Roblox¶
Nova is close enough to Roblox that most gameplay code moves without changes. The work is concentrated in four places:
- Modern UI layout —
UIListLayout,UICorner,UIGradient,UIStroke,UIPadding, and the rest of the layout/modifier family are not implemented yet. - Modern spatial queries —
WorldRoot:Raycastand theRaycastParamsfamily are missing; the legacyWorkspace:FindPartOnRay*API works. - Avatar rendering — R6 and classic R15 rigs work, but skeletal skinning,
HumanoidDescription, layered clothing, and PBRSurfaceAppearancedo not. - Platform services — TextChatService, localization, VR/video/voice, Open Cloud, and some marketplace features are absent.
Everything else is a case-by-case check against the API reference.
The three-step approach¶
1. Inventory¶
List the classes, services, datatypes, and globals your place uses. The fastest way is to load the place in NovaStudio and read the Output window: unknown classes are logged as they are skipped.
Then check each item in the compatibility matrix or its class page.
2. Port in dependency order¶
- Language and services — make the scripts parse and get the DataModel running.
- Data and networking — get the server authoritative and persistence working.
- Gameplay — parts, physics, tools, input, animations.
- UI — replace layout/modifier usage; this is usually the largest chunk.
- Presentation — audio, effects, lighting, avatars.
3. Test both sides¶
Run Play Solo, then a local server with two clients. Most migration bugs are
replication bugs: a change that only happens on one client, a RemoteEvent that
fires before the client has the object, or a server script that assumes the
client's camera exists.
What usually works unchanged¶
Instancecreation, parenting,FindFirstChild,WaitForChild, attributes, tags, andGetPropertyChangedSignal.Script,LocalScript, andModuleScriptwithrequire.RemoteEventandRemoteFunction.TweenService,RunService,Debris,CollectionService,PhysicsService.DataStoreServicecore operations, backed by the official platform.HttpServiceJSON and request methods.Soundplayback, groups, 3D rolloff, and the DSP effect set.MarketplaceServiceprompts andProcessReceipt.TeleportServiceand reserved servers.UserInputService,ContextActionService,GuiService,StarterGui.PathfindingService,Terrain,MeshPart, CSG unions,SpecialMesh.
What usually needs work¶
| Area | Typical change |
|---|---|
| UI layout | Replace UIListLayout/UIGridLayout with a manual layout pass. |
| Rounded corners / gradients / strokes | Use 9-slice images or square frames. |
| Raycasting | Replace Workspace:Raycast with FindPartOnRayWithIgnoreList. |
| Region queries | Use FindPartsInRegion3WithIgnoreList. |
| Chat | Use the legacy chat/bubble chat, or build a custom UI. |
| Avatar customization | Apply legacy body parts/clothing instead of HumanoidDescription. |
| Text localization | Ship per-locale places or keep strings in a module. |
| Modern marketplace | Check the specific product/game-pass flow against the backend. |
UnreliableRemoteEvent |
Use RemoteEvent; unreliable delivery is not exposed. |
Read next¶
- Migration checklist — the practical order of operations.
- Compatibility matrix — the full system-level picture.
- Scripting and Luau — language and sandbox differences.
- GUIs and layout — the largest porting task.
- FAQ and errors — what the common error messages mean.