You have a walkable floor in Unity. Next you want friends to come in.
But the SDK lines up two similar buttons: "Build & Test" and "Build & Publish." Pressing one of them doesn't let friends in. And re-uploading a fixed floor can create a separate world.
This article uploads a practice floor as Private and moves a marker to update the same world.

What You'll Learn
- The difference between local testing and an upload friends can enter
- That the Blueprint ID is "the world's address"
- The fields you fill in on a first upload
- The order to check when an update doesn't arrive
Start from the floor scene built in your first world.
Testing, uploading, and public release are different
The SDK's buttons look similar and their destinations differ completely. Mix them up and you always end at "I uploaded it and can't find it."

| What you're doing | Button | Who can enter |
|---|---|---|
| Trying it locally | Build & Test | Only you. It's self-contained on your PC |
| Showing friends | Build & Publish | You and whoever you invite |
| Letting anyone in | Submit to Community Labs | Everyone (a separate process) |
Build & Test isn't an upload. It builds a temporary world on your own PC and launches it. No world ID is issued and friends can't enter. Pressing it any number of times neither adds nor removes anything on VRChat.
Build & Publish is what creates a world on VRChat. But the world it creates is Private. It doesn't appear anywhere anyone can see. So searching VRChat right after uploading won't find it. You enter from your own world list (Mine).
Public release comes after that. You submit to a place called Community Labs, and it goes public from there. This article doesn't cover it.
The Blueprint ID is the world's address
One more thing to know so updates don't trip you up.
The upload destination isn't decided by the scene's name. It's decided by the Blueprint ID held by a component called Pipeline Manager on VRCWorld — a string starting with wrld_.

Think of it as the world's address.
- Empty ID: a new address is assigned and a new world is created
- ID present: the world at that address is overwritten (an update)
Saving a scene under a new name with "Save As" copies the ID along. So uploading a scene you duplicated for practice overwrites the original world. To make it a separate world, press Detach on the copy to sever the ID.
Conversely, pressing Detach when you want to update creates a new world. Detach is only for "I want this to be a different thing."
Hands-On: Upload the floor, move the marker, update
Upload the floor once, then move a marker from left to right and update the same world. Re-entering the same world and seeing the marker moved is proof the update arrived.
1. Build a practice scene and a marker
To avoid breaking the original scene, save with "File → Save As" as Assets/Scenes/WorldLab_Upload.unity.
Create a "3D Object → Cube" at the top level of the Hierarchy and name it UpdateMarker — a pillar for telling whether the update landed.
| Transform | X | Y | Z |
|---|---|---|---|
| Position | -1 | 0.5 | 1 |
| Rotation | 0 | 0 | 0 |
| Scale | 0.5 | 1 | 0.5 |

A 50cm-wide, 1m-tall pillar stands slightly back and to the left on the floor — visible to your left when facing forward from the spawn. We'll move it right later.
Since this is a copied scene, VRCWorld's Pipeline Manager may still hold the previous ID. Press Detach in this scene only to empty it. Don't touch the original scene.
2. Pass the SDK's validation
Open "VRChat SDK → Show Control Panel" and look at the Builder tab.

Red entries here block uploading. Three come up often.
- No Scene Descriptor → Add it following the steps in your first world
- No spawn point set → Confirm it's registered under Spawns
- A red compile error remains in the Console → An error in an unrelated script still stops the build
Entries prompting a fix sometimes have an auto-fix button. Read what it will change before pressing it.
Once the red is gone, press Build & Test to enter alone and confirm you can walk on the floor. If it fails here, it'll fail uploaded.
3. Fill in the name and thumbnail
Enter the world's information in the Builder.

| Field | What to put for practice |
|---|---|
| Name | Something recognizable like WorldLab Practice |
| Description | "A practice floor" is fine |
| Maximum Capacity | The headcount cap. Small is fine for practice |
| Thumbnail | Capture the Scene view as-is, or pick an image |
Thumbnails can be swapped later. Don't aim for perfection at first — a picture of the floor is enough.
4. Upload
Choose Build & Publish Your World Online from Build Type and run it.

The build takes a few minutes. On success, a Blueprint ID is issued and a wrld_ string appears in Pipeline Manager. That ID is where future updates go.
If the button won't press or you get a permission error here, the problem is the account, not the scene. Check that you're logged into the SDK with your VRChat account and that your email is verified.
5. Enter from VRChat
Launch VRChat and open Mine (your own worlds) from the world menu. The world you just uploaded should be there. It won't appear in search, because it's Private.

When creating an instance, Friends or Invite is fine at first. To bring friends in, invite them to that instance.
Once inside, look forward from the spawn point. The marker pillar is on your left.
6. Move the marker and update
Back in Unity, change UpdateMarker's Position X from -1 to 1. The pillar moves right.
Save the scene, then run Build & Publish again.

Leave Pipeline Manager's Blueprint ID the same as last time. Don't press Detach. Overwriting the same address means no new world appears.
Once the upload finishes, create a new instance in VRChat and enter again. The pillar being on the right means success.
That's the final hurdle. Re-entering an already-open instance shows the old version. A running instance keeps the world as it was when it started. Always create a new instance.
When the update doesn't arrive

Working down this list tells you where it stopped.
- Are you in an old instance? → Leave and create a new one. That's 80% of cases
- Did you save the scene before building? → Without saving, the previous state gets built
- Did the upload succeed? → Check the Console and the build result. A mid-way failure changes nothing
- Did the Blueprint ID change? → Pressing Detach created a separate world
- Did you upload the Android build too? → PC and Android are separate builds. Uploading one leaves the other old
Pressing only Build & Test naturally changes nothing on VRChat. Uploading is Build & Publish.
Bonus: Good to Know Up Front
- Back up before uploading: VCC's "Make Backup" or a copy of the project folder is enough. It makes all the difference when you want to roll an update back
- PC and Android are separate builds: Both live under the same Blueprint ID. Uploading one leaves the other device on the old version. Covered in gathering in one room from PC and Android
- There's a size limit: The Android build especially is tight. Too many large textures and you can't upload
- Thumbnails can be swapped alone: If the contents haven't changed, a thumbnail-only update suffices
- Public release is a separate process: Submitting to Community Labs has account conditions and submission limits. Wait until the contents are stable. Covered in growing a world after release
Summary
Uploading stops being confusing once you separate three stages.
- Build & Test is only inside your PC. Friends can't enter
- Build & Publish is what creates it on VRChat, starting Private
- The same Blueprint ID means an update; detaching it means a new world
- To confirm an update, always create a new instance and enter
The question to ask when it's not working is: "Did I re-enter through a new instance?" Most "it didn't update" cases resolve there.
Once friends can see it, device support is next. Prepare the Quest version in gathering in one room from PC and Android, or check the first-time visitor's view in growing a world after release.