Examples
Learn HoloScript through practical examples. All code is copy-paste ready.
Basic Examples
Hello World
Your first HoloScript program - a glowing greeting orb.
Interactive Cube
A grabbable, throwable cube with physics.
VR Controller Demo
Respond to VR controller input — triggers, thumbsticks, haptics.
Intermediate Examples
Inventory System
Draggable items, slots, and equipment.
Physics Playground
Balls, ramps, Newton's Cradle, and dominos.
Multiplayer Sync
Networked objects and state synchronization across players.
Advanced Examples
Complete Game: Arena
A full VR battle arena in ~100 lines.
AI Integration
Use MCP server (122 tools) for AI-generated content.
Multi-Platform Export
Compile to multiple targets: Unity, Unreal, Godot, VRChat, Babylon, WebGPU, visionOS, Android XR, and more.
Cross-Domain Examples
Robotics (URDF/SDF)
Compile HoloScript scenes to URDF for ROS 2 robots or SDF for Gazebo simulation.
Digital Twins (DTDL)
Define IoT digital twins that compile to Azure DTDL interfaces.
IoT Interop (W3C WoT)
Export scene objects as W3C Web of Things Thing Descriptions for IoT device interop.
OpenUSD Pipeline
Compile scenes to USDA for the Pixar/Apple/NVIDIA OpenUSD ecosystem.
Volumetric Rendering (NeRF / 3D Gaussian Splatting)
Repository examples include NeRF real-time rendering, Gaussian splat photogrammetry, and volumetric video streaming pipelines.
Multisensory Interaction
Repository examples include haptic and force-feedback showcase scenes for VR interaction systems.
Quantum Simulation Use Cases
Repository examples include quantum arena and quantum radar scenarios under novel use cases.
Quick Copy Examples
Grabbable Glowing Orb
composition "Grabbable Orb" {
environment {
skybox: "dark"
ambient_light: 0.2
}
object "MagicOrb" {
@grabbable
@throwable
@glowing
@physics
position: [0, 1.5, -2]
color: "#00ffff"
glow_intensity: 1.5
on_grab: {
this.glow_intensity = 3.0
haptic_feedback("dominant", 0.5)
}
on_release: {
this.glow_intensity = 1.5
}
}
}Button with Counter
composition "Counter Button" {
object "CounterButton" {
@clickable
@state
position: [0, 1.5, -2]
state {
count: 0
}
on_click: {
state.count++
play_sound("click.wav")
}
}
object "Display" {
@billboard
position: [0, 2, -2]
text: "Count: ${CounterButton.state.count}"
}
}Physics Ball Pit
composition "Ball Pit" {
environment {
gravity: -9.81
}
// Container walls
object "Floor" {
@collidable
position: [0, 0, -5]
scale: [5, 0.1, 5]
color: "#333333"
}
// Spawn balls on click
object "Spawner" {
@clickable
position: [0, 5, -5]
on_click: {
spawn "Ball" at [
random(-2, 2),
5,
random(-7, -3)
]
}
}
template "Ball" {
@physics
@collidable
@grabbable
scale: 0.2
color: random_color()
physics {
mass: 0.5
bounciness: 0.8
}
}
}Teleport Points
composition "Teleport Demo" {
template "TeleportPad" {
@trigger
@glowing
scale: [1, 0.1, 1]
glow_color: "#00ff00"
on_trigger_enter: {
if (collider.is_player) {
teleport_player(this.destination)
play_sound("teleport.wav")
}
}
}
object "PadA" using "TeleportPad" {
position: [0, 0, -5]
destination: [10, 0, -5]
}
object "PadB" using "TeleportPad" {
position: [10, 0, -5]
destination: [0, 0, -5]
}
}Networked Score Board
composition "Multiplayer Score" {
object "ScoreManager" {
@networked
@host_only
state {
scores: {}
}
action add_score(player_id, points) {
state.scores[player_id] = (state.scores[player_id] || 0) + points
broadcast "score_updated"
}
}
object "ScoreDisplay" {
@billboard
@reactive
position: [0, 3, -5]
text: format_scores(ScoreManager.state.scores)
}
object "ScorePickup" {
@grabbable
@networked
position: [0, 1, -3]
color: "#ffff00"
on_grab: {
ScoreManager.add_score(grabber.player_id, 10)
this.respawn_at(random_position())
}
}
}VR Hand Menu
composition "Hand Menu" {
object "MenuAnchor" {
@hand_tracked(hand: "left", joint: "palm")
visible: false
}
object "Menu" {
@billboard
parent: "MenuAnchor"
visible: false
template "MenuButton" {
@clickable
@hoverable
scale: [0.1, 0.05, 0.01]
on_hover_enter: { this.color = "#00ffff" }
on_hover_exit: { this.color = "#ffffff" }
}
object "SettingsBtn" using "MenuButton" {
position: [0, 0.1, 0]
text: "Settings"
on_click: { open_settings() }
}
object "ExitBtn" using "MenuButton" {
position: [0, 0, 0]
text: "Exit"
on_click: { exit_game() }
}
}
logic {
on_palm_up("left") {
Menu.visible = true
}
on_palm_down("left") {
Menu.visible = false
}
}
}Source Code
All examples are available in the examples directory of the HoloScript repository.