Skip to content

Your first place

This is the shortest path from the official platform to a playable place. It assumes you have an account on https://www.novalabs.top and creator access. See Get started if you do not.

1. Open the editor

Open the creator area on https://www.novalabs.top and launch NovaStudio if your account has editor access. There is no public Studio download in this documentation repository; Studio is distributed through the official platform.

2. Create or open a place

Start with an empty baseplate or open an existing .rbxl/.rbxm file. Nova reads and writes both the classic XML format and the modern binary format, so places saved by recent Roblox Studio versions usually load.

If a place contains a class Nova does not know, the loader logs a message such as:

SerializerBinary: skipping unknown class 'UIListLayout'

The place still opens; the unknown instances are skipped. Check the compatibility matrix and the class page for that class before assuming it loaded correctly.

3. Add a part and a script

In the Explorer:

  1. Insert a Part into Workspace.
  2. Insert a Script into ServerScriptService (server) or a LocalScript into StarterPlayerScripts (client).
  3. Put this in the script:
local part = Instance.new("Part")
part.Name = "HelloNova"
part.Size = Vector3.new(4, 1, 2)
part.Position = Vector3.new(0, 5, 0)
part.Anchored = true
part.BrickColor = BrickColor.new("Bright green")
part.Parent = workspace
  1. Press Play (or start a local server) and confirm the part appears.

workspace, game, Instance, Vector3, BrickColor, and the usual DataModel globals are available. If you prefer explicit service access:

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")

4. Understand client vs server

Nova uses the classic filtering model:

  • A Script runs on the server and owns the authoritative DataModel.
  • A LocalScript runs on the client and sees replicated state.
  • RemoteEvent and RemoteFunction are the supported boundary.
  • The server should validate anything a client sends.

If a script changes something on the client and other players do not see it, check whether the script is a LocalScript and whether the change needs to be requested from the server.

5. Save and publish

Use Save for a local .rbxl file. Publish uploads the place to www.novalabs.top and creates or updates the place entry.

Before publishing a ported place:

  • Run it in Play Solo and, if possible, with two clients.
  • Check the Output window for unknown classes, missing members, and permission errors.
  • Read the porting checklist.

6. Try TweenService

TweenService is a good smoke test for the modern API backports:

local TweenService = game:GetService("TweenService")
local part = workspace:WaitForChild("HelloNova")

local info = TweenInfo.new(1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local tween = TweenService:Create(part, info, {
    Position = Vector3.new(0, 12, 0),
    Color = Color3.fromRGB(80, 200, 255),
})

tween:Play()

If this runs, the core instance bridge, datatypes, signals, and scheduler are working.

Next