EXPLORE COLLECTIONS LEADERBOARD PRICING DOCS BLOG DISCORD

Documentation

VXLVERSE DOCS

Everything you need to create, script, and publish 3D games in your browser.

Getting Started

VXLVERSE is a browser-based platform for creating 3D games without writing code. You can build levels, place 3D models, script NPC dialogues, and publish your game -- all from the editor in your browser.

Quick start

  1. Sign in with your Google account.
  2. Go to Profile and click + New Game, or open the Editor directly.
  3. The Editor opens. Add a scene, drop in 3D models from the Asset Browser, and configure entities in the Inspector panel.
  4. Write NPC dialogue scripts using VXLScript (see below).
  5. Press Play to test your game, then Save to publish it to the cloud.

Editor Basics

The editor is split into four areas:

Scenes Panel

Left sidebar. Lists all scenes (levels) in your game. Click to switch, or press Shift+N to create a new scene.

Viewport

Center area. The 3D view where you place and move entities. Use the gizmo to translate, rotate, or scale.

Inspector

Right sidebar. Shows properties for the selected entity -- position, rotation, scale, type, and NPC script.

Toolbar

Top bar with Play/Stop, Save, Undo/Redo, Transform mode toggles, and the Asset Browser button.

Select an entity by clicking it in the viewport or the entity list. Use G, R, S to switch between position, rotation, and scale gizmos. Arrow keys nudge the selected entity.

Asset Browser

VXLVERSE ships with thousands of free GLB 3D models you can drop into your scenes. Open the Asset Browser by pressing O or clicking the asset button in the toolbar.

How to use

  1. Open the Asset Browser (O).
  2. Browse categories or type in the search bar to filter models.
  3. Click a model thumbnail to add it to your current scene at the origin.
  4. Select the new entity and position it using the gizmo or arrow keys.

All assets are cached after first load, so subsequent uses of the same model are instant. Models are standard .glb files.

NPC Scripting (VXLScript)

VXLScript is a simple text-based language for writing NPC dialogues, shops, quests, and game logic. Select an NPC entity and press Q to open the script editor.

Blocks

Scripts are divided into named blocks. A block starts with # BLOCK_NAME. Execution always begins at # START.

# START
Guide: Welcome to the village!
-> END

# SHOP
Merchant: What would you like to buy?
-> END

Dialogue

Write dialogue as Speaker: Text. Each line becomes a speech bubble. Lines without a colon are spoken by the Narrator.

Merchant: Welcome to my shop!
Merchant: I have the finest wares in all the land.
Player: What do you have for sale?

You can interpolate variables in dialogue text with curly braces, for example {gold} will display the current value of the gold variable.

Player Choices

Lines starting with * create choice buttons. Each choice points to a target block with ->.

Guard: Halt! State your business.
* I'm here to trade -> MARKET
* I seek the King -> CASTLE
* Just passing through -> END

Conditions

Add requirements to choices or goto lines with (need AMOUNT $variable). The choice only appears if the condition is met (the player has at least that amount).

Merchant: What would you like?
* Buy Sword (50g) (need 50 $gold) -> BUY_SWORD
* Buy Potion (10g) (need 10 $gold) -> BUY_POTION
* Leave -> END

// Conditional goto: auto-jumps if player has the key
-> OPEN_DOOR (need 1 $key_dungeon)
Door: It's locked. You need a key.

When a conditional -> fails, execution falls through to the next line. This lets you create if/else logic.

Variables

Variables are prefixed with $. The engine recognizes several built-in variable types:

PLAYER STATS

$hp, $mp, $gold

ITEMS

$sword_iron, $potion_hp_small, $key_dungeon

FLAGS

$quest_active, $quest_done, $boss_dead

CUSTOM

$any_name_you_want

Flags set with [set $flag 1] persist across level transitions via WorldState.

Actions

Actions modify game state. Wrap them in square brackets. They execute immediately and advance to the next line.

[give $variable amount]

Add currency, HP, MP, or items to the player. Amount defaults to 1 if omitted.

[give $gold 100]
[give $sword_iron 1]
[give $hp 50]
[take $variable amount]

Remove currency, HP, MP, or items from the player. Clamps at zero.

[take $gold 50]
[take $key_dungeon 1]
[set $variable value]

Set a variable to a number or string. Ideal for quest flags. Persists in WorldState across levels.

[set $npc_quest_active 1]
[set $npc_quest_desc "Find the lost sword"]
[set $npc_quest_done 1]
// Quest flags power the Quest Log (J key):
//   _quest_active → shows as active quest
//   _quest_desc → shows objective text
//   _quest_done → marks as completed
[goto_level levelId]

Transition to another level. Ends the dialogue and loads the target level.

[goto_level dungeon_01]
[hide name] / [show name]

Toggle visibility of an entity by name. Useful for opening doors or revealing hidden objects.

[hide boulder_entrance]
[show treasure_chest]
[wait seconds]

Pause dialogue execution for a number of seconds before continuing.

[wait 2]
[end_game message]

End the game and optionally display a message. Use for endings or game over screens.

[end_game You saved the kingdom!]

Flow Control

Use -> BLOCK_NAME to jump to another block, or -> END to close the dialogue.

# START
NPC: Hello there!
-> GREETING

# GREETING
NPC: Nice to meet you.
-> END

Comments

Lines starting with // are ignored by the parser. Use them to annotate your scripts.

// This is a comment
// Check if player has the quest item
-> REWARD (need 1 $dragon_head)

Full Example: Quest with Shop

# START
// Return path if quest is done
* (need 1 $quest_dragon_dead) -> HERO
* (need 1 $quest_dragon_active) -> RETURN

King: A dragon plagues our lands!
* I will slay it! -> ACCEPT
* Sounds dangerous... -> COWARD

# ACCEPT
King: Take this key to the dragon's lair.
[give $key_dragon_lair 1]
[set $quest_dragon_active 1]
-> END

# COWARD
King: Then we are doomed...
-> END

# RETURN
// Auto-complete if player has proof
-> VICTORY (need 1 $dragon_head)
King: Have you slain the beast?
-> END

# VICTORY
[take $dragon_head 1]
[set $quest_dragon_active 0]
[set $quest_dragon_dead 1]
[give $gold 5000]
[give $sword_excalibur 1]
King: You are the Savior of the Realm!
-> END

# HERO
King: All hail the Dragon Slayer!
-> END

Publishing

Games are saved to the cloud via PocketBase. Your game data (scenes, entities, scripts) is stored as a single JSON configuration.

How to publish

  1. Click Save in the editor toolbar (or use the save button in the scenes panel).
  2. Choose a category and optionally add a description.
  3. Toggle Public if you want your game listed on the Explore page.
  4. Click Save to upload. Your game gets a shareable URL at vxlverse.com/games/YOUR_GAME_ID.

Games also auto-save to localStorage as you work, so you will not lose progress if you close the tab. Cloud saves are the permanent, shareable version.

Keyboard Shortcuts

These shortcuts work when the viewport is focused (not when typing in an input field). Press ? in the editor to toggle the help modal.

Shortcut Action
GPosition (translate) mode
RRotation mode
SScale mode
OOpen Asset Browser
QOpen Script Editor (NPC selected)
J / ]Select next entity
K / [Select previous entity
Shift+NNew scene
Shift+DDuplicate selected entity
Shift+SManual scale input
Ctrl+ZUndo
Ctrl+Shift+ZRedo
Arrow keysNudge entity (0.5 units)
Shift+ArrowsFine nudge entity (0.1 units)
DeleteDelete selected entity
EscapeClose modal / deselect
?Toggle help modal