Skip to content

Port a place

This is the full pass, from a .rbxl to a published Nova place. It is written for a typical modern Roblox place (2019–2023) that uses scripts, GUIs, remotes, and data stores.

1. Make a working copy

  • Duplicate the place file; never edit the original.
  • Note the place's Roblox era and its main systems.
  • If the place uses Team Create or cloud-only assets, export a local copy first.

2. Load it and capture the damage

Open the copy in NovaStudio and watch the Output window. Collect every line like:

SerializerBinary: skipping unknown class 'UIListLayout'
SerializerBinary: skipping unknown class 'UICorner'

Those are the classes that will not exist at runtime. Group them:

  • UI layout/modifier — expect the most work.
  • Physics constraints/movers — check the specific class.
  • Avatar/rendering — check for Bone, SurfaceAppearance, WrapLayer.
  • Platform services — TextChatService, VRService, VideoFrame, etc.

Open the corresponding reference page for each class. The page tells you whether the class is missing, partial, or present with missing members.

3. Get the place to run

Start with the server:

  1. Confirm ServerScriptService scripts parse. Luau syntax is accepted; type annotations do not need to be removed.
  2. Replace missing services/classes that run at startup. A single startup error can stop the rest of the server script.
  3. Check require paths and ReplicatedStorage contents.
  4. Run Play Solo and fix the first error, then repeat.

Do not fix UI yet. Get the DataModel and gameplay loop running first.

4. Fix data and networking

  • Confirm the server is authoritative for currency, health, inventory, and position.
  • Replace UnreliableRemoteEvent with RemoteEvent.
  • Add rate limits and type checks to remotes.
  • Test with a local server and two clients.
  • Move persistence to DataStoreService if the place used a profile library built on modern DataStore options. See Data stores.

5. Replace UI layout

This is usually the biggest visual task.

  1. Find every layout/modifier instance in the Explorer.
  2. For each list/grid, add a manual layout module (tutorial).
  3. Replace rounded corners/gradients/strokes with 9-slice images or baked assets.
  4. Replace aspect-ratio constraints with a size-recalculation function.
  5. Run the UI at several resolutions; manual layouts need explicit resize handling.

If a screen is too complex to port, rebuild that screen rather than trying to emulate the layout engine.

6. Fix physics and spatial queries

  • Replace Workspace:Raycast with FindPartOnRayWithIgnoreList.
  • Replace GetPartBoundsInBox/GetPartsInPart with FindPartsInRegion3WithIgnoreList.
  • Check constraints. Hinge, BallSocket, Spring, Rope, Align*, LinearVelocity, AngularVelocity, VectorForce, WeldConstraint, Weld, Motor6D are present. Prismatic, Cylindrical, Universal, and Plane are not.
  • Re-test vehicles and ragdolls; PGS behavior may differ slightly.

7. Fix presentation

  • Audio: check SoundId, rolloff, and effects. Replace Pitch with PlaybackSpeed.
  • Animations: use Animator:LoadAnimation; remove skeletal/skinned avatar assumptions.
  • Assets: confirm every image, mesh, and sound resolves through the deployment.
  • Lighting: replace Atmosphere/Clouds with Lighting/Sky settings.

8. Test the full matrix

  • Play Solo.
  • Local server, one client.
  • Local server, two clients.
  • Web client, if supported.
  • Join, respawn, leave, rejoin.
  • Buy a product / claim a reward, if the place has economy.
  • Save data, rejoin, confirm it loaded.

9. Publish

  1. Save a local copy.
  2. Publish through Studio to the deployment.
  3. Join the published place from a fresh client.
  4. Check the server log and the client Output window.
  5. Keep the pre-port copy and a list of the changes you made.

Checklist

  • Original place backed up.
  • Unknown classes inventoried.
  • Server scripts run.
  • Remotes validated and rate-limited.
  • Data persistence tested across a rejoin.
  • UI layouts replaced.
  • Physics/spatial queries replaced.
  • Audio/animation/assets checked.
  • Two-client test passed.
  • Published place re-tested.