Learn
Programs
API reference
Login
Learn
Documentation
Welcome creators!
Get started
Tools overview
Install and run the desktop editor
Create your first world tutorial
Create your first world tutorial part 2
Batting cage tutorial
Meta Horizon Worlds for Roblox creators
Desktop editor
Desktop Editor
Get started with Desktop Editor
Introduction to the desktop editor
User interface
User Interface
Primary Tools in the User Interface
Creator Tools
Build and Preview Modes
Object tools
Panels and Tabs in the Desktop Editor
Create a New World
Collaborator Management
Modifying editable entity properties
Adding and editing scripts
Preview mode
View modes for debugging
Editor Console
Assets
Introduction to the Desktop Editor Asset Library
Public Asset Library
Creating, Importing, Viewing, and Spawning Assets
Removing, Restoring, and Permanently Erasing Assets
Creating, Editing, Removing, and Moving Assets to Folders
Asset Spawning Reference
Asset Export to FBX File
Replacing Legacy and Imported Assets
Asset Templates
Data as an Asset
Offset Pivots
Hierarchy window
Hierarchy Panel Overview
Selecting Objects in Desktop Editor
Renaming Objects
Filtering and Searching in the Hierarchy Window
Generative AI tools
Generative AI Overview
Generative AI Creation Code Tool
Generative AI Creation Audio Tool
Generative AI Asset Metadata Tool
Generative AI Skybox Generation Tool
Quests, leaderboards, and variable groups
Quests, leaderboards, and variable groups
Variable groups
Using Variable Groups
Viewing Variable Group Details
Adding a Variable Group you Own to a World
Removing a Variable Group From a World
Managing Persistent Variables Associated with a Variable Group
Quests Overview
Creating Quests/Leaderboard/Variable Groups
Viewing Quests/Leaderboard/Variable Groups
Editing Quests/Leaderboard/Variable Groups
Deleting Quests/Leaderboard/Variable Groups
Sorting and Searching Quests/Leaderboard/Variable Groups
Debugging Quests/Leaderboards/Variable Groups
Objects
Object Instantiation
Object Spawning and Despawning
Object manipulation
Object Lock and Unlock
Object Grouping
Grid and Surface Snapping
Settings
Player Settings Modification
World Settings Modification
Help and reference
Desktop editor troubleshooting
Desktop Editor Creation Tools Keyboard Shortcuts
Custom UI
Video presentation of creating performant custom UIs in Meta Horizon Worlds
Create a custom UI panel
Custom UI panel configurations
UIComponent class
Build an interactive custom UI
Building dynamic custom UI
User-Defined Components for Custom UI
Player-Specific Custom UI
Local Mode Custom UI Scripts
Performance Metrics for Custom UI
Animations For Custom UI
Non-Interactive Custom UI Screen Overlay
Interactive Custom UI Screen Overlay
API Reference For Custom UI
Custom UI Dynamic List
Custom UI Controls
NPCs
NPCs
Scripted Avatar NPCs
Getting Started with Scripted Avatar NPCs
Create Scripted Avatar NPC
Edit Scripted Avatar NPC Appearance
API Overview for Scripted Avatar NPCs
Spawning for Scripted Avatar NPCs
Build Navigation for Scripted Avatar NPCs
Grabbing for Scripted Avatar NPCs
Getting started with NPC assets
NPC Scripts
Setting up NPCs with Navigation
Navigation mesh generation
Nav Mesh Agents
NPC Gizmo
Tutorial worlds
Getting started with tutorial worlds
Tutorial Prerequisites
Tutorial Assumptions
Access Tutorial Worlds
Use Assets from Tutorials
Developer Tools for Tutorials
Test Your World
GitHub Repository for Tutorials
Intro to Desktop Editor and TypeScript
Module 1 - Intro to Desktop Editor and TypeScript
Module 2 - Intro to Scripting
Module 3 - Build Game Manager
Module 4 - Broadcast Events
Module 5 - Build Game Setup
Module 6 - Game Start and Collection
Module 7 - Collecting Gems and Keeping Score
Module 8 - Adding Polish
Camera API Examples tutorial
Module 1 - Setup
Module 2 - PlayerCamera Overview
Module 3 - PlayerCameraManager
Module 4 - Pan Camera
Module 5 - Fixed Camera and Spectator Mode
Module 6 - Fixed Camera and Cutscenes
Module 7 - Other Systems and Summary
Simple Shooting Mechanics tutorial
Module 1 - Setup
Module 2 - Projectile
Module 3 - Simple Gun
Module 4 - Laser Gun
Module 5 - Summary
Custom UI Examples tutorial
Station 0 - Setup
Station 1 - Text and Fonts
Station 2 - Image from Asset
Station 3 - Scrollable UI
Station 4 - Generic Yes/No Dialog
Station 5 - Light the Sphere Dialog
Station 6a - Column View
Station 6b - Combo View
Station 7 - Persistent Variables
Station 8 - JSON as Datasource for Custom UIs
Station 9 - Animation Effects
Station 10 - Timer and Build Info Overlays
Multiplayer Lobby tutorial
Module 1 - Setup
Module 2 - Provided Scripts
Module 3 - Handling players entering and exiting
Module 4 - Starting the Game
Module 5 - Entering the Match
Module 6 - Completing the Match and Returning Players
Developing for Web and Mobile Players tutorial
Module 1 - Setup
Module 2 - The HUD System
Module 3- The Puzzle Manager
Module 4 - Camera Manager
Module 5 - Player Manager
Module 6 - Room A: The Magic Wand
Module 7 - Room B: Secret Code
Module 7A: The Focused Interaction Manager
Module 7B - Use drag inputs to rotate objects
Module 7C - Use tap inputs to interact with a keypad
Module 8 - Room C: Target Practice
Module 9 - Summary
Spawning and Pooling in TypeScript tutorial
Module 1 - Setup
Module 2 - Implement Object Spawning
Module 3 - Implement Object Pooling
Module 4 - Spawn Controller
Module 5 - Summary
Scripted Avatar NPC tutorial
Module 1 - Setup
Module 2 - Overview of Scripted Avatar NPCs
Module 3 - NPC Manager
Module 4 - Adding Voice-Over
Module 5 - Quest Manager
Module 6 - Summary
Text as Asset tutorial
Module 1 - Setup
Module 2 - Using Text assets as in-game content
Module 3 - Using Text assets as metadata
Module 4 - Using Text assets for timed events
Horizon Traversal sample world
Module 1 - Setup
Module 2 - Overall Game Manager Systems
Module 3 - Player Movement Systems
Module 4 - Player HUD Systems
Module 5 - Player Out of Bounds Management Systems
Module 6 - Helper and Base Classes
Module 7 - Summary
Chop 'N Pop sample world
Module 1 - Setup
Module 2 - Design Patterns
Module 3 - Core System Scripts
Module 4 - Game Manager
Module 5 - Floating Text Manager
Module 6 - Player Manager
Module 7 - Weapon Systems - Axe
Module 8 - Weapon Systems - Handgun
Module 9 - Enemy Wave Manager
Module 10 - NPC System
Module 11 - Loot System
Chop 'n Pop analytics tutorial
Module 1 - Setup
Module 2 - Principles Of Analytics Events Implementation
Scripting
Scripting using TypeScript
Get started with TypeScript
Using TypeScript in Meta Horizon Worlds
About TypeScript
Managing Typescript
Adding an IDE to the desktop editor
TypeScript Tutorial
If VS Code can’t find a V2 module
Horizon TypeScript APIs
Modules and Global Functions
TypeScript Components, Properties, and Variables
The Debug Console
In World Examples
Object Type Persistent Variables
TypeScript FAQ
Persistent Variables
API references and examples
Horizon TypeScript V2 Changes
Entity Visibility
Player Index
CodeBlock Achievements
Audio APIs
Spring Physics
Marking Instances as Opened or Closed
Example scripts library
Local scripting
Getting Started with Local Scripting
Maintaining Local State on Ownership Change
Ownership in Meta Horizon Worlds
Gameplay tags API
Introduction to Gameplay Tags
Modify and Retrieve Entity Tags
Asset spawning
Introduction to Asset Spawning
Checking for Asset Spawn Events
Optimization Tips
World Streaming
Scripting Considerations
Events
Local Events
World Update Events
CodeBlock Events
Broadcast Events
Events Best Practices
Recommended Version Control Strategies
TypeScript Script Lifecycle
File-Backed Scripts
Legacy Script Storage
Importing Data with JSON
Upgrade World to TypeScript API v2.0.0
Custom model import
Creating custom models for Horizon Worlds
Creating a Custom Model
Guidance for Custom Models: Budgets and Model Specs
Materials Guidance and Reference for Custom Models
Multiple Materials per Mesh
Best Practices
User guides
Collider Visualization User Guide
Collider Ingestion User Guide
Static Light Gizmos User Guide
Getting started with Custom Model Import
3D Modeling Tool Resources
Connect '23 Video Series: Custom Model Worlds
Replacing Primitive Worlds with Custom Model Worlds
Gizmos
Use the Text gizmo
Use the Environment gizmo
Use the Spawn Point gizmo
Use the Trigger gizmo
Use the Door gizmo
Media Board Gizmo
World Promotion Gizmo
Use the Sound Recorder gizmo
Mobile and web
Create for web and mobile
Introduction to creating worlds for mobile
Setting up worlds for mobile and web
Testing worlds on mobile and web
Publishing worlds on mobile
Designing worlds for mobile and web
Designing Worlds For Mobile
Safe Placement of UI Controls
Tools for creating worlds for mobile
Screen-based UI for mobile and web
Player Camera
Push Button Interactions
Grabbable entities
Introduction To Grabbable Entities On Mobile And Web
Grabbable Entities On Mobile And Web
Avatar Poses
Action Buttons
Crosshair
Aim Direction
Holster Icon Menu
TypeScript APIs for mobile
Per Platform Scripting
Overriding The Avatar Pose
Player Animations
Throwing
Aim Assist
Camera
Focused Interaction
Custom Input API
Performance
Performance best practices
CPU and TypeScript optimization and best practices
Memory best practices
Network best practices
Physics best practices
GPU best practices
Custom UI optimization
Performance tools
Using performance tools from web and mobile
Enable the Utilities Menu
Enabling and modifying the real-time metrics panel
Performance Scrubbing
Tracing
Analyzing trace data with Perfetto
Custom Metrics API
Analytics
World Analytics
Using In-World Analytics
In-World Analytics FAQ
Introduction to performance optimization
Designing a performant world
Performance limits for a World
Memory limits in Meta Horizon Worlds
Connect '23 Video Series: World Optimization Best Practices
Save, optimize, and publish
Publish your world using Desktop Editor
Intro to Meta Horizon Worlds Discovery
Meta Horizon Worlds Content Guidelines
Creator capacity limits
Permissions when you add a collaborator to your world
Duplicate a world
Add world details
Save and return to your drafts
Learn about Frame Budget Boost
Memory limits and performance metrics
Members-only worlds
What is a members-only world?
How to set up a members-only world in desktop editor
What is the Code of Conduct for Virtual Experiences (CCVE) and how does it apply to members-only worlds?
What does it mean to be responsible for governing my members-only world?
How should creators moderate their members-only worlds?
Set up a members-only world using VR tools
Creator governance responsibilities for members-only worlds in Meta Horizon Worlds
Members-only worlds governance best practices in Meta Horizon Worlds
Manage reports for members-only worlds in Meta Horizon Worlds
VR tools
Getting started
Create a new world in Meta Horizon Worlds
Use your controllers in Build Mode of Meta Horizon Worlds
Use the Creator Menu in Meta Horizon Worlds
Preview Mode
Use the Asset Library in Meta Horizon Worlds
Use your Personal Asset Library in Meta Horizon Worlds
Manage your personal asset library from a web browser with Meta Horizon Worlds
Create an asset thumbnail with Meta Horizon Worlds
Collaborate
Manage collaborators of your world
Scripting
Use code blocks
Use the Script gizmo
Spawn and despawn assets in Meta Horizon Worlds
Use persistent variables
Create player achievements
Use file-backed scripts
Per Platform Scripting
SFX
Use physics and animation in Meta Horizon Worlds
Add sound to your world in Meta Horizon Worlds
Publish your world using VR tools
Safety and privacy
Community Moderation
How to report someone
Using music in audio recordings in Meta Horizon Worlds
MHCP program
Welcome to the Meta Horizon Creator Program
How to Become a Meta Horizon Creator Partner
Where to start with Meta Horizon Worlds
MHCP Skills Matrix
Monetization
Monetization opportunities
Bonus Program Overview
Bonus Program Analytics
In-world purchase guide
In-world purchase price setting
In-World Test Purchase
Meta Horizon Worlds: Kudos Panel Instructions
FAQ
Meta Horizon Creator Program FAQ
How to Attach a Media File from the Headset to the Ticket Submission Form?
World Ratings FAQs
Q&A sessions
MHCP Session: Level Design Q&A with Victor Riddel
Q&A Session: Gameplay Loops with Victor Riddel
MHCP Q&A Session: Typescript with Christopher Kairalla and Jonathan Lehman
MHCP Q&A Session: Game Design with Andy Sargeant
MHCP Q&A Session: Custom Model Import with Barrett Meeker
MHCP Q&A Session: World Optimization with Michael Isaza
MHCP Creator Panel with Emmanuel Rebollar (May 23, 2023)
Meta Horizon: Looking Ahead in 2023 featuring Jeff Lin (January 18, 2023)
Marketing Essentials for MHCP Part 1 with Shannon O’Flaherty and Candace Locklear
Marketing Essentials for MHCP Part 2 with Shannon O’Flaherty and Candace Locklear
MHCP Program Updates with William Chandler and Marlowe Shaeffer
Focus sessions
MHCP Session: Meta Horizon Worlds on Web and Mobile and Creation Tooling Updates with Linda Chen and Andy Sargeant
Connect '23 Video Series: Game Design in Meta Horizon Worlds
Meta Horizon Creator Program Technical Support Best Practices (January 18, 2023)
Tools to Build Your Community and Brand
MHCP Session: Deep Dive: Meta Horizon Worlds with Andy Sargeant
MHCP Mentor Focus Session: Branding and IWP
World publishing guide
Mobile worlds crash course, part 1: Getting Started
Mobile worlds crash course, part 2: Viral game ideas
Mobile worlds crash course, part 3: Submitting Your Optimized World
MHCP Mentor Workshop Video: IWP Ready Assets & How to Make Them with SpaceGlitterUnicorn
Community guides
Community tutorials
Meta Horizon Worlds creator manual
How to Script a Retention and Interaction Dashboard with PigeonNo12
Meta Horizon CMI & TypeScript API 2.0: Import Images & Add Texture Animation
How to Script a Player Manager with Elastic_Plastic
How to Script a Player Manager Part Two with Elastic_Plastic
How to Script Fire with thejohnmclay
CodeBlocks to TypeScript
How to Script a Consent Box with VRPLUG
Part One: Understanding Asset Spawning with SeeingBlue
Part Two: Asset Spawning Application with SeeingBlue
Meta Horizon TypeScript API 2.0: JSON PPVs & Versioning
How to Script a Joystick with PigeonNo12
Introduction to Advanced Math Concepts with Elastic_Plastic
Debugging in Meta Horizon Worlds Using Print Codeblocks
Version Control Video Tutorial with PigeonNo12
Managing World Backups
In-World Purchase (IWP) in Codeblocks
Basic Hotkey Guide to the Blenderverse
Text Entry and Formatting Tutorial
Blender basics and UV unwrapping with SpaceGlitterUnicorn
The 5andw1ch Framework for Design
Typescript Conventions and Best Practices for Meta Horizon Worlds
3D Modeling 101
MHCP Mentor Workshop Video - What Makes a World Go Viral with Laex05
Custom UI API Introduction
Policy and legal
World Ratings Survey
Policy Update: Sharing Advanced Tools Educational Content
Release Notes
Add world details
Tips for adding world details:
Use a short, compelling name for your world.
In the description, briefly let people know what they can do or experience in your world.
Take a photo that captures specific parts of your world.
To take a photo of your world:
While in your world, go to
Preview Mode
.
Open your
Personal Menu
, then select the Camera icon.
Grab the selfie stick by holding down either grip.
Select the reverse arrows to reverse the camera, then use the index trigger to take a photo.
To add a photo as a thumbnail for your world:
From your Creator Menu, select
Publish
.
Choose
Select Photo
, then select the thumbnail you want to add.
Select the
Back
icon to return to World Details.
Learn
Documentation
Blog
Forum
Programs
Meta Horizon Creator Program
My Creations
My Worlds
My Assets
Performance
Privacy & Legal
Privacy Policy
Legal
Learn
Documentation
Blog
Forum
Programs
Meta Horizon Creator Program
My Creations
My Worlds
My Assets
Performance
Privacy & Legal
Privacy Policy
Legal
Learn
Documentation
Blog
Forum
Programs
Meta Horizon Creator Program
My Creations
My Worlds
My Assets
Performance
Privacy & Legal
Privacy Policy
Legal
© 2025 Meta