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.
Intermediate Examples
Inventory System
Draggable items, slots, and equipment.
Physics Playground
Balls, ramps, and chain reactions.
Multiplayer Sync
Networked objects and state synchronization.
Advanced Examples
Complete Game: Arena
A full VR battle arena in ~100 lines.
AI Integration
Use MCP server for AI-generated content.
Multi-Platform Export
Compile to Unity, Three.js, VRChat.
Quick Copy Examples
Grabbable Glowing Orb
holo
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
holo
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
holo
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
holo
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
holo
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
holo
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.