Skip to main content
Reading time: ~35 minutes
This guide covers essential Roblox Studio concepts for developers using CORP, especially those new to the Roblox platform. Understanding these fundamentals will help you build games more effectively with CORP.

Table of Contents

Roblox Studio Basics

Roblox Studio is the development environment for creating Roblox games. It provides a 3D editor, scripting environment, and testing tools.

Key Concepts

  • Place: A Roblox game world/level
  • Experience: A published game (can contain multiple places)
  • DataModel: The root container for all game objects
  • Instance: Any object in the game (Parts, Scripts, Models, etc.)

Opening Your Project

  1. Open Roblox Studio
  2. Create a new place or open an existing one
  3. Your compiled CORP code will be synced to the game using roblox-ts

The Instance Hierarchy

Everything in Roblox is an Instance - a hierarchical object with properties and methods. Instances form a tree structure called the DataModel.

Common Instance Types

Containers

Parts and Models

Scripts

UI

Hierarchy Example

Important Services

Roblox organizes core functionality into Services - singleton instances that manage specific aspects of the game.

Essential Services

Workspace

The 3D world where visible game objects exist.

Players

Manages connected players.

ReplicatedStorage

Storage accessible by both server and client. Use for shared assets and modules.

ServerStorage

Server-only storage. Clients cannot access this.

ServerScriptService

Where server Scripts execute.

RunService

Access to game loop and environment checks.

Data Types

Roblox has unique data types for 3D game development.

Vector3

Represents a 3D point or direction.

CFrame

Represents position AND rotation (Coordinate Frame).

Color3

RGB color with values from 0 to 1.

Other Important Types

Tags System

Roblox’s CollectionService allows you to tag instances. CORP uses tags extensively to identify GameObjects and scene roots.

Installing Tag Editor

  1. In Roblox Studio, go to PluginsPlugin Marketplace
  2. Search for “Tag Editor”
  3. Install the official Tag Editor plugin

Using Tags

CORP Tags

CORP recognizes these special tags:
  • GameObjectSceneRoot: Marks the root folder of a scene in Workspace

Adding Tags in Studio

  1. Select an instance in the Explorer
  2. Open the Tag Editor plugin (View → Tag Editor)
  3. Type the tag name (e.g., “GameObjectSceneRoot”)
  4. Click the + button or press Enter

Client-Server Architecture

Roblox games use a client-server architecture. Understanding this is crucial for multiplayer games.

The Server

  • Authoritative: Makes final decisions about game state
  • Validates: Checks client inputs for cheating
  • Manages: Game logic, physics, NPC AI
  • Runs: Script instances in ServerScriptService

The Client

  • Displays: Renders the game world
  • Inputs: Captures player input (keyboard, mouse, touch)
  • Predicts: Can predict movement for responsiveness
  • Runs: LocalScript instances in player-specific locations

When Code Runs Where

CORP’s Approach

CORP abstracts some of this complexity:
  • NetworkObject: Automatically replicates GameObjects
  • NetworkBehavior: Components that sync state
  • RPC: Easy server-client communication
  • Authority Models: Choose server or client authoritative

Replication

Replication is how Roblox syncs game state between server and clients.

What Replicates

Automatically Replicated:
  • Instances in Workspace
  • Properties of replicated instances (Position, Size, Color, etc.)
  • Instance hierarchy changes (parenting)
Does NOT Replicate:
  • Local variables in scripts
  • Instances in ServerStorage or ServerScriptService
  • Client-created instances (unless parent is replicated)

Replication Direction

CORP’s Network System

CORP handles replication for you:

RemoteEvents and RemoteFunctions

Roblox’s built-in communication system (CORP’s RPC system uses these internally):
With CORP RPCs, this is simplified:

Streaming

StreamingEnabled controls whether the entire game world loads at once or streams in based on player location. CORP is designed to work seamlessly with streaming enabled.

Streaming Modes

StreamingEnabled = false

  • Entire world loads immediately
  • Best for: Single-player games, small maps, client-authoritative games
  • Memory: Higher memory usage (entire map loaded)
  • Performance: Consistent, but limited by total content size

StreamingEnabled = true

  • World streams based on player position
  • Best for: Multiplayer games, large open worlds, server-authoritative games
  • Memory: Lower memory footprint per client
  • Performance: Better for large-scale games

CORP’s Streaming Support

CORP is fully compatible with StreamingEnabled. It provides built-in tools to handle streaming gracefully:

NetworkObject Streaming Awareness

InstanceNetworkVariable

For networked Instance references, CORP provides InstanceNetworkVariable which handles streaming automatically:

For Single-Player Games (StreamingEnabled = false)

Setting Streaming

In Roblox Studio:
  1. Select Workspace in Explorer
  2. In Properties panel, find StreamingEnabled
  3. Set based on your game type:
    • true for multiplayer/large worlds
    • false for single-player/client-authoritative

Client-Authoritative Games

Important: For client-authoritative games, Workspace.StreamingEnabled must be set to false to ensure all game content loads immediately. See Unreal System - Authority Models for details.
Client-authoritative mode requires the full game state to be available on the client, which is incompatible with streaming.

Working with the Workspace

The Workspace is where your 3D game world exists.

Basic Operations

Workspace Organization

Organize your Workspace for CORP:

Studio Workflow with CORP

  1. Set Up Development Tools
  2. Set Up Project
    • Clone CORP-TEMPLATE
    • Initialize submodules: git submodule update --init --recursive
    • Install dependencies: npm install
    • Configure Gamepacks in GAMEPACKS/ folder
  3. Start Development Servers
    • Terminal 1: Start Rojo server
    • Terminal 2: Watch TypeScript compilation
    • In Roblox Studio: Click Rojo plugin → Connect to localhost:34872
  4. Code in TypeScript
    • Write components in your Gamepack’s src/ folder
    • Export components in exports/components.ts
    • Save files to auto-compile and sync to Studio
  5. Build Scenes in Studio
    • Create Folders and Actors in Workspace
    • Tag the scene root folder with GameObjectSceneRoot
    • Add $components folders to Actors for component configuration
  6. Test in Studio
    • Click Play (F5) to test
    • Check Output window for prints and errors
    • Iterate on code and scene design
    • Changes sync automatically when you save TypeScript files
  7. Export Assets
    • Place models, sounds, UI in your Gamepack’s assets/ folder
    • Reference with %assets%/path/to/asset

Component Configuration in Studio

CORP stores component data inside a special $components folder within each Actor. Here’s the proper hierarchy:

Creating Component Configuration

Method 1: ModuleScript (for complex configuration)
  1. Select your Actor in the Explorer
  2. Insert a Folder and name it exactly $components
  3. Inside $components, insert a ModuleScript
  4. Name it with your component’s mapping name (e.g., player_controller)
  5. Set the ModuleScript content to return a configuration table:
Method 2: StringValue (for JSON configuration)
  1. Inside the $components folder, insert a StringValue
  2. Name it with your component’s mapping name (e.g., enemy_ai)
  3. Set the Value to a JSON string:

Component References

To reference other instances, GameObjects, or components, add ObjectValue children to the component and use the Data.factory methods:
In the component ModuleScript, use the appropriate Data.factory reference type:
The $referenceId must match the name of the ObjectValue child. CORP will resolve the ObjectValue to the actual Instance/GameObject/Component based on the $type.

Testing Workflow

Check the Output window in Studio to see your prints.

Hot Reloading with Rojo

With Rojo and roblox-ts watch mode running:
  1. Save your TypeScript file in VS Code
  2. roblox-ts compiles automatically (Terminal 2)
  3. Rojo syncs changes to Studio (Terminal 1)
  4. Stop and restart the play session to see changes
Benefits:
  • ✅ Real-time code synchronization
  • ✅ No manual file copying
  • ✅ Work in your favorite code editor
  • ✅ Version control friendly (edit source, not .rbxl files)
Troubleshooting:
  • If changes don’t sync, check Rojo connection status (green = connected)
  • If compilation fails, check Terminal 2 for TypeScript errors
  • Restart Rojo server if connection is lost

Best Practices

✅ Do

  • Enable Streaming for multiplayer/large world games
  • Disable Streaming for single-player/client-authoritative games
  • Use CORP’s streaming features (isStreamedIn(), isLoadedChanged, InstanceNetworkVariable)
  • Use Tags to mark CORP scene roots with GameObjectSceneRoot
  • Organize Workspace with folders and meaningful names
  • Test Frequently in Studio play mode
  • Use $components folders for component configuration
  • Check RunService.IsServer() when needed
  • Use CFrame for GameObject transforms
  • Keep Server Authoritative for multiplayer

❌ Avoid

  • Don’t access Roblox instances without checking isStreamedIn() when streaming is enabled
  • Don’t use StreamingEnabled = true with client-authoritative games
  • Don’t access Workspace directly in most CORP code (use GameObjects)
  • Don’t create instances manually when CORP can handle it
  • Don’t forget to anchor Parts in the Workspace (if static)
  • Don’t hardcode paths to instances (use VFS for assets)
  • Don’t mix LocalScripts and Scripts unnecessarily (let CORP handle it)

Common Issues

”Scene root not found”

  • Cause: Missing GameObjectSceneRoot tag
  • Fix: Tag a Folder in Workspace with GameObjectSceneRoot

”Component not spawning”

  • Cause: Component not exported or name mismatch
  • Fix: Check exports/components.ts for correct mapping

”Client can’t access instance”

  • Cause: Instance is in ServerStorage or ServerScriptService
  • Fix: Move to ReplicatedStorage or Workspace

”Instance not found” (with streaming enabled)

  • Cause: Instance not yet streamed in to client
  • Fix: Use NetworkObject.isLoadedChanged or InstanceNetworkVariable.waitForValue()

”Streaming error with client authority”

  • Cause: StreamingEnabled is true with client-authoritative game
  • Fix: Set Workspace.StreamingEnabled = false in Studio (required for client authority)

Next Steps

Now that you understand Roblox Studio basics:
Master Roblox Studio to build amazing CORP games! 🎮