Skip to content

Migrating from Roblox

Nova is close enough to Roblox that most gameplay code moves without changes. The work is concentrated in four places:

  1. Modern UI layout — UIListLayout, UICorner, UIGradient, UIStroke, UIPadding, and the rest of the layout/modifier family are not implemented yet.
  2. Modern spatial queries — WorldRoot:Raycast and the RaycastParams family are missing; the legacy Workspace:FindPartOnRay* API works.
  3. Avatar rendering — R6 and classic R15 rigs work, but skeletal skinning, HumanoidDescription, layered clothing, and PBR SurfaceAppearance do not.
  4. 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

  1. Language and services — make the scripts parse and get the DataModel running.
  2. Data and networking — get the server authoritative and persistence working.
  3. Gameplay — parts, physics, tools, input, animations.
  4. UI — replace layout/modifier usage; this is usually the largest chunk.
  5. 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

  • Instance creation, parenting, FindFirstChild, WaitForChild, attributes, tags, and GetPropertyChangedSignal.
  • Script, LocalScript, and ModuleScript with require.
  • RemoteEvent and RemoteFunction.
  • TweenService, RunService, Debris, CollectionService, PhysicsService.
  • DataStoreService core operations, backed by the official platform.
  • HttpService JSON and request methods.
  • Sound playback, groups, 3D rolloff, and the DSP effect set.
  • MarketplaceService prompts and ProcessReceipt.
  • TeleportService and 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.