Documentation
Everything you need to create, script, and publish 3D games in your browser.
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
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.
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
All assets are cached after first load, so subsequent uses of the same model are instant. Models are standard .glb files.
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.
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 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.
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 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 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 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!] 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 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) # 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 Games are saved to the cloud via PocketBase. Your game data (scenes, entities, scripts) is stored as a single JSON configuration.
How to publish
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.
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 |
|---|---|
| G | Position (translate) mode |
| R | Rotation mode |
| S | Scale mode |
| O | Open Asset Browser |
| Q | Open Script Editor (NPC selected) |
| J / ] | Select next entity |
| K / [ | Select previous entity |
| Shift+N | New scene |
| Shift+D | Duplicate selected entity |
| Shift+S | Manual scale input |
| Ctrl+Z | Undo |
| Ctrl+Shift+Z | Redo |
| Arrow keys | Nudge entity (0.5 units) |
| Shift+Arrows | Fine nudge entity (0.1 units) |
| Delete | Delete selected entity |
| Escape | Close modal / deselect |
| ? | Toggle help modal |