Gessa Docs
Generated Reference

Reference

Component Type Definitions

Sources: packages/ecs/src/index.ts:COMPONENT_TYPE_DEFINITIONS, packages/ecs/src/index.ts:ComponentSchema, server/src/modules/runtime/capabilities/packs.ts:runtimeCapabilityPacks, web_client/spa/src/views/build/component-palette/taxonomy.ts:PALETTE_TAXONOMY.
engine v1.0.234Copy for LLM

This is the canonical generated inventory for the v1 built-in ECS component set. Current engine capability sections may name these component types as shipped ECS components. Other component names must be explicitly marked roadmap-only, stripped-pattern history, or project-defined data.

Current built-in component count: 34. Current canonical component field count: 613. Canonical fields without an authored Description: 274.

Component catalog contract hash: sha256:0af9015f319b9b377b819ed0edd0d597ae82bb45191f9694c7d372fd8673e68c. Component field contract version: ecs.component-field-contract.v1. Component field contract hash: sha256:356e4bf0cdad3dfd562a861224c5c4b676e89c1f32444edc46ad88fccbfb1423.

All current built-in components are atomic engine components under ADR 0020. Gameplay patterns such as health, damage, spawn pools, collectors, and motion helpers are script patterns, not ECS atomics.

Inventory

ComponentCategoryClassPalette visibilityPalette notesDefault keyAuthored contract versionPacksRuntime systemsRuntime consumerRenderer consumerReplication
AnimationStateComponentRenderingatomicdefaultAtomic renderer state.component.animation_statev1rendering.v1Noneprojectedconsumedpublic/low
AudioEmitterComponentAudioatomicdefaultAtomic audio primitive.component.audio_emitterv4audio.v1Noneconsumednot_applicablepublic/low
AvatarSlotComponentGameplayatomicdefaultThe character always keeps its own colliders, movement, and camera. The game resolves each player's avatar at spawn and records what it applied here, so an avatar never changes how a character moves or collides.component.avatar_slotv1NoneNoneprojectedconsumedpublic/low
CameraComponentRenderingatomicdefaultAtomic camera primitive.component.camerav3camera.v1Noneprojectedconsumedpublic/medium
CharacterMovementComponentPhysicsatomicdefaultRuntime movement behavior; structural hierarchy is projected from entity fields, not a component.component.character_movementv2physics.v1runtime.physicsSystem, runtime.collisionSystemconsumednot_applicablepublic/medium
ColliderComponentPhysicsatomicdefaultAtomic physics primitive.component.colliderv1physics.v1runtime.physicsSystem, runtime.collisionSystemconsumednot_applicablepublic/medium
DecalComponentRenderingatomicdefaultRenderer presentation component; this contract covers existing metadata/projection without adding decal feature depth.component.decalv1rendering.v1Noneprojectedconsumedpublic/low
ForceComponentPhysicsatomichiddenInternal Runtime queue; use ctx.physics.command(entityId, bodyCommand).component.forcev1physics.v1runtime.physicsSystem, runtime.collisionSysteminternalnot_applicableserver/medium
HairComponentRenderingatomicdefaultSingle creator-facing hair surface; groom data and binding artifacts live on versioned hair assets.component.hairv2rendering.v1Noneprojectedconsumedpublic/low
HighlightComponentRenderingatomicdefaultRenderer overlay-stage presentation state (D-013); persistent outline, not a cue. The projection authority is protocol resolveHighlightPresentation and only enabled highlights count against the per-tier budget.component.highlightv2rendering.v1Noneprojectedconsumedpublic/low
InputProfileComponentInputatomicdefaultOne canonical InputProfileComponent; transient UI contexts remain client-local.component.input_profilev2input.v1runtime.movementLivenessSystem, runtime.movementSystem, runtime.actionSystemconsumednot_applicableowner/high/reliable
InstanceSetComponentRenderingatomicdefaultE1 aggregate substrate: thin ref to an InstanceSet resource; render lowers to InstancedMesh per kind, physics to ONE collider per aggregate.component.instance_setv1NoneNoneprojectedconsumedpublic/low
JointComponentPhysicsatomicdefaultFixed/revolute/prismatic/spherical/spring/rope; single owner references the connected body.component.jointv1NoneNoneconsumednot_applicablepublic/medium
LightComponentRenderingatomicdefaultAtomic rendering primitive.component.lightv3rendering.v1Noneprojectedconsumedpublic/low
LocalEnvironmentVolumeComponentRenderingatomicdefaultRenderer environment-override primitive (ADR 0178); equal-priority overlaps are warned and resolve deterministically by entity id.component.local_environment_volumev1rendering.v1Noneprojectedconsumedpublic/low
MaterialInstanceOverrideComponentRenderingatomicdefaultAtomic renderer state.component.material_overridev2rendering.v1Noneprojectedconsumedpublic/low
NameplateComponentGameplayatomicdefaultOn a character a player controls, the game adds a nameplate and keeps the name correct itself. publicLabel shows to every player; teamLabel shows only to that player's own team.component.nameplatev1NoneNoneprojectedconsumedpublic/low, teamLabel: team
NavAgentComponentPhysicsatomicdefaultRuntime navigation behavior; the nav system steers the agent via the existing mover (no second mover) over the recast navmesh resource (no navmesh-as-component).component.nav_agentv1world.v1Noneconsumednot_applicablepublic/medium
NetworkProfileComponentNetworkingatomicdefaultNetcode presentation intent for replicated motion; the runtime interpolation buffer reads this profile (no second mover).component.network_profilev3network.v1Noneconsumednot_applicablepublic/high/reliable
OwnershipComponentGameplayatomicdefaultRecords the owning player so the claim survives them leaving and rejoining. The game keeps it in step with every scripted ownership transfer. Carrying something is parenting it, which already counts as held.component.ownershipv1NoneNoneconsumednot_applicablepublic/low
ParticleEmitterComponentRenderingatomicdefaultDefault by creator expectation; particles are built-in in comparable creator engines.component.particle_emitterv4rendering.v1Noneprojectedconsumedpublic/low
PixelSurfaceComponentRenderingatomicdefaultAuthored pixel-surface primitive; scripts draw a bounded client-local RGBA buffer presented as a camera or world quad.component.pixel_surfacev1NoneNoneprojectedconsumedpublic/low
ReflectionProbeComponentRenderingatomicdefaultRenderer presentation primitive with explicit runtime/renderer projection status.component.reflection_probev1rendering.v1Noneprojectedconsumedpublic/low
RenderableComponentRenderingatomicdefaultAtomic rendering primitive.component.renderablev3rendering.v1Noneprojectedconsumedpublic/low
RigidBodyComponentPhysicsatomicdefaultAtomic physics primitive.component.rigid_bodyv1physics.v1runtime.physicsSystem, runtime.collisionSystemconsumednot_applicablepublic/medium
ScriptComponentScriptingatomicdefaultAtomic behavior attachment.component.scriptv1script.v1runtime.scriptSystem, runtime.componentPatchSystem, runtime.observerCommandSystemconsumednot_applicableserver/low
SpatialCaptureComponentRenderingatomicdefaultSemantic placement primitive for imported captures; renderability is separate from playability proof.component.spatial_capturev3rendering.v1Noneprojectedconsumedpublic/low
SpawnPointComponentGameplayatomicdefaultWhere players appear on join and respawn. The game's character policy names a spawn tag, and only points carrying that tag are eligible, then narrowed to the matching team or reserved player slot and ordered by priority.component.spawn_pointv1NoneNoneconsumednot_applicableserver/low
TerrainComponentRenderingatomicdefaultRenderer presentation component; this contract covers existing metadata/projection without adding terrain feature depth.component.terrainv1rendering.v1Noneprojectedconsumedpublic/low
TextRenderableComponentRenderingatomicdefaultRenderer presentation component: canonical MSDF text (shared per-family atlas, resolution-independent at any distance) with render-budget proof.component.text_renderablev2rendering.v1Noneprojectedconsumedpublic/low
TimerComponentRuntimeatomicdefaultAtomic runtime event source.component.timerv1timer.v1runtime.timerSystemconsumednot_applicablepublic/low
TransformComponentSpatialatomicdefaultAtomic spatial primitive.component.transformv2hierarchy.v1runtime.hierarchyTransformSystemprojectedconsumedpublic/high/reliable
VelocityComponentPhysicsatomichiddenInternal runtime lane (W5-01b); launch characters via Physics.command '{' type: "launch" '}' and configure movement on CharacterMovementComponent.component.velocityv1physics.v1runtime.physicsSystem, runtime.collisionSysteminternalnot_applicablepublic/medium
WaterComponentRenderingatomicdefaultRenderer presentation component; this contract covers existing metadata/projection without adding water feature depth.component.waterv1rendering.v1Noneprojectedconsumedpublic/low

Removed Component Contracts

ComponentContract versionRemoved inReplacementMigration classContract hash
StateMachineComponentcomponent.state_machine.removed.v1v1.0.1ScriptComponentmanualsha256:81345b3703cb0f142082b2d4856aa94a716e63c79ddd89cb31f48c2405781b3d
HierarchyComponentcomponent.hierarchy.removed.v1v1.0.1Nonesafe_autosha256:ff64b237d916282efd0a1ed734fb7b253db699469bde253199051ab8e64cd74c
InputActionDeclarationComponentcomponent.InputActionDeclarationComponent.removed.v1v1.0.1InputProfileComponentsafe_autosha256:b1b0e7f08edd7bf2401b705673307e5282e68c443d0dfcc3ca29d7cdad16396e
InputBindingSetComponentcomponent.InputBindingSetComponent.removed.v1v1.0.1InputProfileComponentsafe_autosha256:881661044da03c69100dbbdfbf253d3c208ebf16c6483bce6b27042f49848fe5
InputContextStackComponentcomponent.InputContextStackComponent.removed.v1v1.0.1InputProfileComponentsafe_autosha256:080e867e1cbdbfcb763797f871049a0373f59e07088faac2c0ee9b216093f768

Recently Stripped Pattern Components

ActionSourceComponent, BoundsComponent, CameraTargetComponent, CollectibleComponent, CollectorComponent, CollisionConsumeComponent, DamageEventComponent, DamageModifierComponent, DamageOnContactComponent, GravityComponent, GridAlignmentComponent, HealthComponent, HitscanWeaponComponent, InputAccessibilityProfileComponent, InputFeedbackComponent, InteractableComponent, JointComponent, MotionComponent, PlayerControllerComponent, ProjectileComponent, RespawnTimerComponent, SpawnPoolComponent, SplitActionComponent, StatsComponent, WeaponSlotComponent

Roadmap Components

These names are not current ECS components and may appear only in explicit roadmap sections.

AudioListenerComponent, BillboardComponent, NetworkVisibilityComponent, UIPanelLifecycleComponent

AnimationStateComponent

Declarative animation clip state scripts can mutate; renderers may map it onto clip playback and blending.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAtomic renderer state.
Default component keycomponent.animation_state
Authored contract versionv1
Catalog contract IDcomponent.animation_state.contract.v1
Contract hashsha256:08e76f51a077e22cf56c245353f38f9e4c6c55d16b643a769ae74600051125ec
Field contract hashsha256:63176a96ab8df46b2d0d76caa133c971a68ac5e487ab046070b232ea50a655f4
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/sceneGraphAppearance.ts:applyAnimationIfManaged [web_client/spa/src/render/sceneGraphAppearance.ts:applyAnimationIfManaged]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsclipKey, playMode, speed, startTime
Canonical field count5

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
clipKeyName of the animation clip to play (e.g. idle, walk).stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringmaxLength: 160<br>semantic: intra_asset_key
playModeLoop forever, play once, or bounce back and forth (ping-pong).stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: loop, once, ping-pong
speedPlayback rate multiplier; 1 is normal speed.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/number
startTimeSeconds into the clip where playback begins.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "AnimationStateComponent",
  "clipKey": "idle",
  "playMode": "loop",
  "startTime": 0,
  "speed": 1
}

AudioEmitterComponent

Presentation primitive for positional and non-positional audio playback from an audio asset key.

FieldValue
Classificationatomic
CategoryAudio
Component palette visibilitydefault
Component palette notesAtomic audio primitive.
Default component keycomponent.audio_emitter
Authored contract versionv4
Catalog contract IDcomponent.audio_emitter.contract.v1
Contract hashsha256:1180b95e9d59e0ad5307897982bf64439af30de2be00dfaba1ed0ff0b16c91e9
Field contract hashsha256:17331c2913e64f04a5dd8a917ca6da20d77cc0b74fed7c304d2c2f954e259536
Migration classnone
Capability packsaudio.v1
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by web_client/spa/src/runtime/runtimeSessionProjection.ts:buildRuntimeSessionProjection [web_client/spa/src/runtime/runtimeSessionProjection.ts:buildRuntimeSessionProjection]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsenabled, loop, maxDistance, pitch, playOnStart, refDistance, rolloff, soundAssetId, spatial, targetEntityId, volume
Canonical field count12

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
enabledMaster switch; no sound plays while off.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
loopRepeat the sound until it is stopped.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
maxDistanceHard audible radius: the sound is silent at and beyond this distance under every rolloff, and is not mixed at all outside it.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.01<br>max: 100000
pitchPlayback rate multiplier; higher plays faster and higher-pitched.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.01
playOnStartStart playing as soon as the emitter becomes active.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
refDistanceDistance where the sound still plays at full volume. Raise it to keep a sound loud across a wider area before it starts fading.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.01<br>max: 100000
rolloffShape of the fade between Ref distance and Max distance. Linear fades evenly; Inverse and Exponential stay louder up close and fall away faster further out.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: linear, inverse, exponential
soundAssetIdAudio ProjectAsset UUID to play.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id audio
spatialPlace the sound in 3D so it pans and fades with distance; off plays it flat everywhere.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
targetEntityIdAnother entity the sound follows instead of this one.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: entity_id<br>ref: entity id
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
volumeLoudness from 0 (silent) to 1 (full).numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 1

Defaults:

JSON
{
  "type": "AudioEmitterComponent",
  "volume": 1,
  "pitch": 1,
  "loop": false,
  "spatial": true,
  "rolloff": "inverse",
  "refDistance": 1,
  "maxDistance": 32,
  "playOnStart": false,
  "enabled": false
}

AvatarSlotComponent

Declares how a player's own avatar is applied to a Character rig: the height it is scaled to, the camera attach point, and the animation set it is expected to provide. At spawn the server resolves the player's avatar and records what it applied here. Colliders, movement, and the camera always stay on the rig, so an avatar never changes physics.

FieldValue
Classificationatomic
CategoryGameplay
Component palette visibilitydefault
Component palette notesThe character always keeps its own colliders, movement, and camera. The game resolves each player's avatar at spawn and records what it applied here, so an avatar never changes how a character moves or collides.
Default component keycomponent.avatar_slot
Authored contract versionv1
Catalog contract IDcomponent.avatar_slot.contract.v1
Contract hashsha256:5384e676d0ef5b0920ff162b8da45d76a25ff7dd2fea65644b63c9c7dc2fd00f
Field contract hashsha256:acde82ec12d5467bff07abf5903bbc73c92e70511b266f62dcfa66d849f59c32
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by server/src/modules/runtime/runtimeCharacterSystem.ts:resolveAvatarSlotForSeat [server/src/modules/runtime/runtimeCharacterSystem.ts:resolveAvatarSlotForSeat]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsanimationSet, avatarAssetId, avatarSource, cameraSocket, fallbackReason, rigHeight
Canonical field count10

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
animationSetThe clip set an applied avatar is expected to provide (idle, walk, and run at minimum).stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringminLength: 1<br>maxLength: 160
avatarAssetIdThe model asset the server applied into this slot at spawn; empty when the rig's own body was kept.stringnohiddenhiddenhiddenhiddenhiddenexposedprojectedconsumedhidden: Server-derived field.pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id model
avatarSourceWhere the applied body came from: the player's account avatar, the team uniform, or the rig's own body as the fallback. The server writes it at spawn.stringnohiddenhiddenhiddenhiddenhiddenexposedprojectedconsumedhidden: Server-derived field.enum: account, uniform, prefab_fallback
cameraSocketDeclared camera attach point in the rig's local space; a first-person rig puts it at eye height.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
cameraSocket.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
cameraSocket.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
cameraSocket.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
fallbackReasonWhy the rig's own body was kept, so the reason is visible instead of silent. The server writes it at spawn.stringnohiddenhiddenhiddenhiddenhiddenexposedprojectedconsumedhidden: Server-derived field.maxLength: 160
rigHeightHeight in meters the applied avatar is scaled to.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 20
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "AvatarSlotComponent",
  "rigHeight": 1.8,
  "cameraSocket": {
    "x": 0,
    "y": 1.6,
    "z": 0
  },
  "animationSet": "humanoid.basic"
}

CameraComponent

Attach to an entity with Transform to make it a viewpoint players see through. The highest-priority active camera is used in Play mode. Follow target drives position; Look at target drives rotation while set.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAtomic camera primitive.
Default component keycomponent.camera
Authored contract versionv3
Catalog contract IDcomponent.camera.contract.v1
Contract hashsha256:848bfc8e33b99d5423d5eb1f7822696bd59715be0d6b884f2526809f7845a9dc
Field contract hashsha256:30611364294b7104e8aa3e3eeba9e7f4ec73de6dab7b7c8f64280d1bacfc015c
Migration classnone
Capability packscamera.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/camera/resolveCameraPose.ts:resolveCameraPose [web_client/spa/src/render/camera/resolveCameraPose.ts:resolveCameraPose]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsactive, clearColor, clearMode, exposure, far, followEntityId, followOffset, followSmoothing, fov, lookAtEntityId, lookAtOffset, near, orthoSize, postProcessing, priority, projection, toneMapping
Canonical field count34

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
activeLets this camera be picked in Play mode; the highest-priority active camera wins.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
clearColorBackground color used when Clear mode is color.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
clearModeWhat fills the background: a flat color, the skybox, or nothing.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: color, skybox, none
exposureOptional renderer exposure override for this camera.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 10
farFarthest distance the camera can see; anything beyond is cut away.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
followEntityIdWhen set, camera position is driven from this entity plus Follow offset. Clear it to use Transform position.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: entity_id<br>ref: entity id
followOffsetPosition offset used while Follow target is set.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
followOffset.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
followOffset.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
followOffset.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
followSmoothingBlend amount for target-follow movement. 0 snaps immediately; higher values smooth more.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
fovHow wide the camera sees, in degrees.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 170
lookAtEntityIdWhen set, camera rotation is driven toward this entity. Clear it to use Transform rotation.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: entity_id<br>ref: entity id
lookAtOffsetTarget-space offset used while Look at target is set.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
lookAtOffset.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
lookAtOffset.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
lookAtOffset.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
nearClosest distance the camera can see; anything nearer is cut away.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
orthoSizeHalf the visible height in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
postProcessingCamera-owned depth of field and motion blur intent. Shared look effects are authored on the World; anti-aliasing is owned by Project Graphics.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
postProcessing.depthOfFieldobjectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
postProcessing.depthOfField.bokehScalenumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 4
postProcessing.depthOfField.focalLengthnumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001<br>max: 128
postProcessing.depthOfField.focusDistancenumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001<br>max: 1000
postProcessing.depthOfField.modestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: off, auto, on
postProcessing.depthOfField.qualitystringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: low, medium, high
postProcessing.motionBlurobjectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
postProcessing.motionBlur.modestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: off, auto, on
postProcessing.motionBlur.qualitystringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: low, medium, high
postProcessing.motionBlur.samplesintegernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 2<br>max: 32
priorityTie-breaker among active cameras; higher numbers win.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -9007199254740991<br>max: 9007199254740991
projectionPerspective gives natural depth; orthographic gives a flat, stylized view.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: perspective, orthographic
toneMappingOptional renderer tone-mapping override for this authored camera.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: aces, agx, reinhard, neutral, linear
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "CameraComponent",
  "fov": 60,
  "near": 0.1,
  "far": 2000,
  "projection": "perspective",
  "orthoSize": 10,
  "active": true,
  "priority": 10,
  "followOffset": {
    "x": 0,
    "y": 6,
    "z": 10
  },
  "followSmoothing": 0.15,
  "lookAtOffset": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "clearMode": "skybox",
  "clearColor": "#0b1020"
}

CharacterMovementComponent

Authored config for the shared kinematic character controller: horizontal speed cap plus deterministic gravity and jumping over authored collision. The explicit KCC-governance flag opts an entity into predicted kinematic movement.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilitydefault
Component palette notesRuntime movement behavior; structural hierarchy is projected from entity fields, not a component.
Default component keycomponent.character_movement
Authored contract versionv2
Catalog contract IDcomponent.character_movement.contract.v1
Contract hashsha256:a68ae332d0d5cbab1ffa0ed001b1babf6d5e349aa6081719eca723080bdba446
Field contract hashsha256:f04967d695bb4ca43800d84a87ab603d43e1a4bb38147517ed41398a5854d546
Migration classnone
Capability packsphysics.v1
Runtime systemsruntime.physicsSystem, runtime.collisionSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by packages/runtime-shared/src/movementParams.ts:deriveMovementParams [packages/runtime-shared/src/movementParams.ts:deriveMovementParams]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsenableKcc, gravity, jumpSpeed, maxSpeed
Canonical field count5

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
enableKccOpt this entity into the shared kinematic character controller (predicted walk + jump).booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
gravityDownward acceleration for the deterministic kinematic vertical motor. Leave empty for horizontal-only movement.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
jumpSpeedUpward velocity applied when a grounded jump is accepted by the vertical motor.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
maxSpeedCaps how fast the entity may move; leave empty for the runtime default.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "CharacterMovementComponent",
  "enableKcc": false
}

ColliderComponent

Passive server-owned shape for blocking active movers, physics contacts, triggers, placement diagnostics, and physics queries.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilitydefault
Component palette notesAtomic physics primitive.
Default component keycomponent.collider
Authored contract versionv1
Catalog contract IDcomponent.collider.contract.v1
Contract hashsha256:ca0adf0bc6f1e02d695f1fd5469b0712a65fe94d67f4fcee9e6d4f288a21c6f5
Field contract hashsha256:11c06ac29e7b7ff1b20fddfc5dd7118d8b566956c29b8242a0e28c433c725ecd
Migration classnone
Capability packsphysics.v1
Runtime systemsruntime.physicsSystem, runtime.collisionSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/physics/componentSync.ts:colliderDescFor [server/src/modules/runtime/physics/componentSync.ts:colliderDescFor]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldscollision, friction, layers, restitution, shape, size
Canonical field count11

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
collisionSolid blocks movers and physics bodies (world geometry). Trigger is a non-blocking sensor that reports enter/exit to scripts when an active participant overlaps it. None is a non-blocking sensor with no events (query-only).stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: solid, trigger, none
frictionSurface grip from 0 (ice) to 1 (rubber).numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 1
layersCollision group names that decide what this collider interacts with.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
layers[]Collision group names that decide what this collider interacts with.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 80
restitutionBounciness from 0 (no bounce) to 1 (full rebound).numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 1
shapeCollision volume around the entity; mesh uses the model's own geometry.string|objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/unionenum: box, sphere, capsule, disc, mesh
sizeExtents of the collision volume per axis, in world units.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/vec3
size.xnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
size.ynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
size.znumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "ColliderComponent",
  "shape": "sphere",
  "size": {
    "x": 1,
    "y": 1,
    "z": 1
  },
  "collision": "solid",
  "layers": [
    "default"
  ],
  "friction": 0.5,
  "restitution": 0
}

DecalComponent

Surface-layer projection primitive for markings, scuffs, and signs.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer presentation component; this contract covers existing metadata/projection without adding decal feature depth.
Default component keycomponent.decal
Authored contract versionv1
Catalog contract IDcomponent.decal.contract.v1
Contract hashsha256:0aba30c36e3a92609aa515cd402aa3ff611f602a100542f926c6a6b204b2aeee
Field contract hashsha256:925d8cdeba04f1a82f6d38e75efbe1f001950d673521c3bcc0c7da378cbefeb0
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:decalFromArtifact [web_client/spa/src/render/editorSceneProjection.ts:decalFromArtifact]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsatlasSlot, blendMode, color, enabled, opacity, projectionBox, projectionDepth, textureAssetId
Canonical field count16

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
atlasSlotRegion of the texture to use (u, v, width, height as 0-1 fractions).objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
atlasSlot.heightnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001<br>max: 1
atlasSlot.unumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
atlasSlot.vnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
atlasSlot.widthnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001<br>max: 1
blendModeHow the decal combines with the surface: blend, multiply, or add.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: blend, multiply, add
colorTint multiplied into the decal image.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
enabledShow or hide the decal.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
opacityHow strongly the decal shows, from 0 (invisible) to 1 (full).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
projectionBoxVolume the decal projects through; surfaces inside it receive the image.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
projectionBox.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
projectionBox.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
projectionBox.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
projectionDepthHow far the decal projects forward onto surfaces, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
textureAssetIdImage asset projected onto surfaces.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id texture
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "DecalComponent",
  "enabled": true,
  "projectionBox": {
    "x": 1,
    "y": 1,
    "z": 0.1
  },
  "color": "#ffffff",
  "opacity": 1,
  "projectionDepth": 0.1,
  "blendMode": "blend",
  "atlasSlot": {
    "u": 0,
    "v": 0,
    "width": 1,
    "height": 1
  }
}

ForceComponent

Private per-tick physics mutation queue consumed and cleared by the physics system.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilityhidden
Component palette notesInternal Runtime queue; use ctx.physics.command(entityId, bodyCommand).
Default component keycomponent.force
Authored contract versionv1
Catalog contract IDcomponent.force.contract.v1
Contract hashsha256:0e9e12ae17266ae59c689e8a00c06d428f9fca2bd47640db6c267da985bdfe18
Field contract hashsha256:5feda4afd785c230eb5d6c35d3a1fd5d412180034585e87a035d7e2398d69baa
Migration classnone
Capability packsphysics.v1
Runtime systemsruntime.physicsSystem, runtime.collisionSystem
Runtime consumer statusinternal
Renderer consumer statusnot_applicable
Consumer status reasonInternal engine queue consumed by runtime systems.
Replication policyserver/medium
AuthorizationInternal Runtime physics command queue; scripts request body mutations through ctx.physics.command.
Inspector fieldspending
Canonical field count59

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
pendingQueued physics commands (forces, impulses, teleports) the engine applies and clears each tick; scripts enqueue them via ctx.physics.command.arrayyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[]Queued physics commands (forces, impulses, teleports) the engine applies and clears each tick; scripts enqueue them via ctx.physics.command.objectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].applyAtPointobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].applyAtPoint.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].applyAtPoint.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].applyAtPoint.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].forceobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].force.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].force.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].force.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].impulseobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].impulse.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].impulse.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].impulse.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].resetobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.angularVelocityobjectyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.angularVelocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.angularVelocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.angularVelocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.positionobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.position.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.position.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.position.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.rotationobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.rotation.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.rotation.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.rotation.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.velocityobjectyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.velocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.velocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.velocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].reset.wakebooleanyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleportobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.angularVelocityobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.angularVelocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.angularVelocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.angularVelocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.positionobjectyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.position.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.position.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.position.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.rotationobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.rotation.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.rotation.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.rotation.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.velocityobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.velocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.velocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.velocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].teleport.wakebooleanyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torqueobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torque.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torque.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torque.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torqueImpulseobjectnohiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torqueImpulse.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torqueImpulse.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
pending[].torqueImpulse.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
typestringyeshiddenhiddenhiddenhiddenhiddenhiddeninternalnot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "ForceComponent",
  "pending": []
}

HairComponent

Places a canonical hair groom asset on an entity with bounded render, simulation, LOD, binding, and budget overrides.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesSingle creator-facing hair surface; groom data and binding artifacts live on versioned hair assets.
Default component keycomponent.hair
Authored contract versionv2
Catalog contract IDcomponent.hair.contract.v1
Contract hashsha256:c2806c3a5a4440e3fc48599c25d27905e784afed36ebe15ead8fd53b018eb79d
Field contract hashsha256:3154a83492c3a9257848bec974168100bc4c76b124df7baeb0d6b7f94c939d8f
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/hair/HairStrandGeometry.ts:buildHairStrandGeometry [web_client/spa/src/render/hair/HairStrandGeometry.ts:buildHairStrandGeometry]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsbindingKey, budget, enabled, groomAssetId, materialOverrides, render, simulation, targetEntityId
Canonical field count31

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
bindingKeyOptional generated binding artifact used to validate this instance against its groom (missing or mismatched bindings surface as diagnostics). Does not change how the hair renders. Choices come from the selected groom asset; bindings are generated only by import/editor flows.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringminLength: 1<br>maxLength: 240<br>semantic: resource_option_key<br>options: groomAssetId → rendering.hairGroom.bindings.bindingKey
budgetOptional per-instance caps applied before renderer quality caps.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
budget.maxDistancenumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 100000
budget.maxGpuBytesintegernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 536870912
budget.maxSimGuidesintegernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1000000
budget.maxVisibleStrandsintegernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 10000000
enabledShow or hide this hair groom without removing the component.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
groomAssetIdCanonical versioned hair groom asset. Heavy groom buffers stay on the asset, not this component.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id hair
materialOverridesPer-instance overrides of the groom's material facts (typed keys only; raw groom data is not accepted).objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
materialOverrides.anisotropynumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
materialOverrides.baseColorstringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
materialOverrides.melaninnumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
materialOverrides.roughnessnumbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.2<br>max: 1
renderRenderer-owned representation and density controls.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
render.densitynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
render.hairlineGapDegFront scalp wedge in degrees; 0 keeps a full-circle hairline.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 288
render.lengthnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.2<br>max: 2
render.lodBiasnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -4<br>max: 4
render.representationstringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: auto, cards, strands, ribbons
render.shadowModestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: off, auto
render.tapernumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.05<br>max: 1
render.widthScalenumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 10
simulationBounded guide-level simulation intent.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
simulation.collisionstringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, floor
simulation.dampingnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
simulation.gravitynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -100<br>max: 100
simulation.modestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, procedural
simulation.stiffnessnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
simulation.windInfluencenumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
targetEntityIdOptional entity id whose mesh/skeleton identity the binding was generated against; the server compares it against the live target to raise binding-mismatch diagnostics. No render effect.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: entity_id<br>ref: entity id
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "HairComponent",
  "enabled": false,
  "materialOverrides": {},
  "render": {
    "representation": "auto",
    "shadowMode": "auto",
    "density": 1,
    "widthScale": 1,
    "lodBias": 0,
    "length": 0.95,
    "taper": 0.28,
    "hairlineGapDeg": 0
  },
  "simulation": {
    "mode": "none",
    "stiffness": 0.65,
    "damping": 0.35,
    "gravity": -9.8,
    "windInfluence": 0.15,
    "collision": "none"
  },
  "budget": {}
}

HighlightComponent

Persistent selection or interest treatment drawn around an entity's oriented render bounds at the overlay stage.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer overlay-stage presentation state (D-013); persistent outline, not a cue. The projection authority is protocol resolveHighlightPresentation and only enabled highlights count against the per-tier budget.
Default component keycomponent.highlight
Authored contract versionv2
Catalog contract IDcomponent.highlight.contract.v1
Contract hashsha256:ea6428131b00ec02f9cc27f5d22ab8af46df568d37f51ff129319307764ea143
Field contract hashsha256:25b6ae0143054cb7eb6093e23f66919291f2d3236082d8509d2f8c1d5cbef08c
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by packages/protocol/src/index.ts:resolveHighlightPresentation [packages/protocol/src/index.ts:resolveHighlightPresentation]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldscolor, depthMode, enabled, fillOpacity
Canonical field count5

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
colorBounds-outline and bounds-fill color.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
depthModeoccluded hides the outline behind geometry; xray always draws it on top so it reads through walls.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: occluded, xray
enabledShow or hide the outline. Only enabled highlights count against the per-tier budget.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
fillOpacityOpacity of the oriented bounds fill; 0 draws an outline only.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "HighlightComponent",
  "enabled": true,
  "color": "#ffd54a",
  "fillOpacity": 0,
  "depthMode": "occluded"
}

InputProfileComponent

One canonical input contract: action declarations, policy, prediction, and physical bindings nested under each action.

FieldValue
Classificationatomic
CategoryInput
Component palette visibilitydefault
Component palette notesOne canonical InputProfileComponent; transient UI contexts remain client-local.
Default component keycomponent.input_profile
Authored contract versionv2
Catalog contract IDcomponent.input_profile.contract.v1
Contract hashsha256:aab52e99f0174ee3c19a4327f03ff13843431aedf104f3e0431f5768986cd023
Field contract hashsha256:62e5602c9c9c9f39efed4e99d7fd10fad0a53ea1068842ad2c8ac2bc161e6e90
Migration classnone
Capability packsinput.v1
Runtime systemsruntime.movementLivenessSystem, runtime.movementSystem, runtime.actionSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by packages/runtime-shared/src/inputProfileProjection.ts:inputProfileFromUnknown [packages/runtime-shared/src/inputProfileProjection.ts:inputProfileFromUnknown]
Replication policyowner/high/reliable
AuthorizationOwner-private input state; server validates the canonical profile version before command routing.
Inspector fieldsactions, version
Canonical field count102

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
actionsCanonical actions and their owned physical bindings. Runtime context starts in gameplay; UI overlays use dispatcher push/pop.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[]Canonical actions and their owned physical bindings. Runtime context starts in gameplay; UI overlays use dispatcher push/pop.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindingsPhysical controls nested under this action; an action-key mismatch is structurally impossible.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[]Physical controls nested under this action; an action-key mismatch is structurally impossible.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].idA unique name for this binding within the action, so it can be overridden or replaced.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160
actions[].bindings[].priorityWhich binding wins when more than one could fire; higher priority is chosen first.integeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: -9007199254740991<br>max: 9007199254740991
actions[].bindings[].processorsSteps that reshape this binding's input value before the action uses it.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].processors[]Steps that reshape this binding's input value before the action uses it.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].processors[].kindWhich processing step this is, such as a deadzone, a curve, an inversion, or a clamp.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: deadzone, curve, invert, sensitivity, clamp, normalize, axisComposition, stickComposition, threshold, quantize
actions[].bindings[].processors[].parametersSettings for the chosen processing step, such as the deadzone amount or the clamp range; a step that needs none takes an empty map.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/map
actions[].bindings[].processors[].parameters.axesarrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].bindings[].processors[].parameters.axes[]stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedenum: x, y, z
actions[].bindings[].processors[].parameters.exponentnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 16
actions[].bindings[].processors[].parameters.maxnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].bindings[].processors[].parameters.minnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].bindings[].processors[].parameters.scalenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000
actions[].bindings[].processors[].parameters.stepnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000000000
actions[].bindings[].processors[].parameters.thresholdnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 0<br>max: 1
actions[].bindings[].processors[].parameters.valuenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 0
actions[].bindings[].sourcesThe physical controls that feed this binding, such as a key, a mouse button, or a gamepad stick; several are combined into one input.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].sources[]The physical controls that feed this binding, such as a key, a mouse button, or a gamepad stick; several are combined into one input.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].sources[].controlThe specific control on that device, in its own vocabulary, such as KeyW for the keyboard or button.left for the mouse.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160
actions[].bindings[].sources[].deviceWhich input device this control belongs to.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: keyboard, mouse, gamepad, touch, xr
actions[].bindings[].sources[].eventWhich change on the control feeds the action, such as a press, a release, or continuous movement.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: down, up, press, move, axis, sample
actions[].bindings[].sources[].indexWhich device to read when more than one is connected, such as a second gamepad; leave empty for the first.integernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 9007199254740991
actions[].bindings[].sources[].modifiersExtra conditions or transforms on this control, such as requiring Shift, or using it as the negative or one axis of a composed value.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].sources[].modifiers[]Extra conditions or transforms on this control, such as requiring Shift, or using it as the negative or one axis of a composed value.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayenum: ctrl, shift, alt, meta, negative, positive, x, y
actions[].bindings[].triggerOverridesTriggers that replace the action's own triggers for just this binding.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].triggerOverrides[]Triggers that replace the action's own triggers for just this binding.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].bindings[].triggerOverrides[].kindThe kind of trigger condition, such as a press, a release, a hold, a tap, or a repeating tick.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: pressed, released, held, tap, doubleTap, hold, chord, continuous, continuous_delta, step, cancel
actions[].bindings[].triggerOverrides[].parametersSettings for the chosen trigger kind, such as its hold time or tap window; a trigger that needs none takes an empty map.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/map
actions[].bindings[].triggerOverrides[].parameters.durationMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].bindings[].triggerOverrides[].parameters.intervalMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].bindings[].triggerOverrides[].parameters.sizenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000000
actions[].bindings[].triggerOverrides[].parameters.windowMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].contextsWhich activity modes this action listens in, such as gameplay or a menu overlay; play starts in gameplay and overlays switch the active mode.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].contexts[]Which activity modes this action listens in, such as gameplay or a menu overlay; play starts in gameplay and overlays switch the active mode.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 120
actions[].keyThe action's unique name; bindings and scripts refer to it, such as player.jump or camera.look.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160
actions[].labelA readable name for the action, shown in a rebinding menu; the key is used when this is empty.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160
actions[].policyThe server-enforced rules for this action: who may perform it, how often, the limits on its value, and which system it drives. This is the authoritative permission, never inferred from bindings.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.allowedActorKindsRestrict who may perform this action to certain kinds of controller, such as a player or a vehicle; empty lets anyone controlling the entity perform it.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.allowedActorKinds[]Restrict who may perform this action to certain kinds of controller, such as a player or a vehicle; empty lets anyone controlling the entity perform it.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 80
actions[].policy.cameraRelativeFor a movement action, steer the input by where the camera faces, so pressing forward moves the character the way the player is looking; off follows the world axes.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.cooldownA minimum wait the server enforces between accepted uses of this action.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.cooldown.msThe shortest time in milliseconds the server allows between accepted uses.integeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 1<br>max: 9007199254740991
actions[].policy.effectSystemWhat performing this action does: move the controlled character, run gameplay logic in scripts, or turn the player's own view.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: movement, action, script, look
actions[].policy.lagCompensationModeHow the server checks this action: against the current world, or by rewinding to what the player saw so a well-aimed shot still lands under latency.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: live, rewind_to_client_sample
actions[].policy.lookPresentation-only look feel; it never mutates authoritative world state.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.look.invertYFlip the vertical look, so pushing up looks down.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.look.pitchMaxDegHow far up, in degrees, the view may tilt.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: -89<br>max: 89
actions[].policy.look.pitchMinDegHow far down, in degrees, the view may tilt.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: -89<br>max: 89
actions[].policy.look.sensitivityDegHow far the view turns for a given amount of input; higher turns faster.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.001<br>max: 45
actions[].policy.possessionRequiredAccept this action only while the player is controlling a character. Turn it off for actions a spectator or a menu can perform.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.rateLimitCaps how often the server accepts this action, so a client cannot flood it.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.rateLimit.perSecondThe most times each second the server will accept this action.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.001
actions[].policy.requiresBindingAccept this action only when it arrives through one of its declared bindings, so a client cannot invent it.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.targetPolicyRules for an action that aims at a target, such as whether a target is required and how far or what kind it may be.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.targetPolicy.allowedComponentTypesRestrict the target to entities that carry one of these components; empty allows any entity.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.targetPolicy.allowedComponentTypes[]Restrict the target to entities that carry one of these components; empty allows any entity.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 160
actions[].policy.targetPolicy.allowedTagsRestrict the target to entities that carry one of these tags; empty allows any entity.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.targetPolicy.allowedTags[]Restrict the target to entities that carry one of these tags; empty allows any entity.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 160
actions[].policy.targetPolicy.entityRequiredRequire the target to be an entity, not just a point in the world.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.targetPolicy.maxDistanceThe farthest, in meters, the target may be from the actor.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.001
actions[].policy.targetPolicy.requiredRequire the action to carry a target, either a point or an entity.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.targetPolicy.requireLineOfSightRequire a clear line from the actor to the target, so a blocked view rejects the action.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.valueBoundsLimits the server enforces on the action's value, so an out-of-range or malformed value is rejected rather than trusted.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].policy.valueBounds.enumValuesRestrict the value to this set of allowed values; empty allows any value within the other bounds.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.valueBounds.enumValues[]Restrict the value to this set of allowed values; empty allows any value within the other bounds.string|number|booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.valueBounds.integerRequire the value to be a whole number.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
actions[].policy.valueBounds.maxThe largest value the action may carry.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
actions[].policy.valueBounds.maxMagnitudeThe longest length a direction or vector value may have, so it cannot be pushed past full strength.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
actions[].policy.valueBounds.minThe smallest value the action may carry.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
actions[].policy.valueBounds.minMagnitudeThe shortest length a direction or vector value may have.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
actions[].policy.valueBounds.requiredFieldsThe named parts a composite or target value must include to be accepted.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].policy.valueBounds.requiredFields[]The named parts a composite or target value must include to be accepted.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/arrayminLength: 1<br>maxLength: 80
actions[].predictionHow soon this action takes effect for the player relative to the server confirming it.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
actions[].prediction.modeWhether this action is applied on the player's own client right away and then reconciled with the server, kept on their client only, or held until the server confirms it.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: client_predicted, client_only, server_authoritative
actions[].processorsSteps that reshape the raw input value before the action uses it, such as a deadzone, a sensitivity curve, or clamping.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].processors[]Steps that reshape the raw input value before the action uses it, such as a deadzone, a sensitivity curve, or clamping.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].processors[].kindWhich processing step this is, such as a deadzone, a curve, an inversion, or a clamp.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: deadzone, curve, invert, sensitivity, clamp, normalize, axisComposition, stickComposition, threshold, quantize
actions[].processors[].parametersSettings for the chosen processing step, such as the deadzone amount or the clamp range; a step that needs none takes an empty map.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/map
actions[].processors[].parameters.axesarrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].processors[].parameters.axes[]stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedenum: x, y, z
actions[].processors[].parameters.exponentnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 16
actions[].processors[].parameters.maxnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].processors[].parameters.minnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
actions[].processors[].parameters.scalenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000
actions[].processors[].parameters.stepnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000000000
actions[].processors[].parameters.thresholdnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 0<br>max: 1
actions[].processors[].parameters.valuenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 0
actions[].touchPolicyWhether this action gets an on-screen touch control on a phone: automatic derives one from the action's shape, authored means the game places its own, disabled means none.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: automatic, authored, disabled
actions[].triggersThe conditions a bound control must meet to fire this action, such as a press, a release, a hold, or a tap.arrayyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].triggers[]The conditions a bound control must meet to fire this action, such as a press, a release, a hold, or a tap.objectnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/array
actions[].triggers[].kindThe kind of trigger condition, such as a press, a release, a hold, a tap, or a repeating tick.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: pressed, released, held, tap, doubleTap, hold, chord, continuous, continuous_delta, step, cancel
actions[].triggers[].parametersSettings for the chosen trigger kind, such as its hold time or tap window; a trigger that needs none takes an empty map.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/map
actions[].triggers[].parameters.durationMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].triggers[].parameters.intervalMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].triggers[].parameters.sizenumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmax: 1000000
actions[].triggers[].parameters.windowMsintegeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nestedmin: 1<br>max: 60000
actions[].valueTypeThe shape of the value this action produces, such as a button, a number, a direction vector, or an aimed world target; it decides which controls and triggers fit.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: boolean, float, vector1d, vector2d, vector3d, world_target, screen2d, trigger, composite
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
versionRevision used for server-authoritative stale-binding rejection.integeryesreadonlyhiddenhiddenhiddenhiddenexposedconsumednot_applicablereadonly/numbermin: 1<br>max: 9007199254740991

Defaults:

JSON
{
  "type": "InputProfileComponent",
  "version": 1,
  "actions": [
    {
      "key": "player.move",
      "label": "Move",
      "valueType": "vector2d",
      "contexts": [
        "gameplay"
      ],
      "triggers": [],
      "processors": [],
      "policy": {
        "possessionRequired": true,
        "requiresBinding": true,
        "allowedActorKinds": [],
        "valueBounds": {
          "maxMagnitude": 1,
          "integer": false,
          "enumValues": [],
          "requiredFields": []
        },
        "lagCompensationMode": "live",
        "effectSystem": "movement"
      },
      "prediction": {
        "mode": "client_predicted"
      },
      "bindings": [
        {
          "id": "binding.move.wasd",
          "sources": [
            {
              "device": "keyboard",
              "control": "KeyW",
              "event": "down",
              "modifiers": []
            },
            {
              "device": "keyboard",
              "control": "KeyA",
              "event": "down",
              "modifiers": []
            },
            {
              "device": "keyboard",
              "control": "KeyS",
              "event": "down",
              "modifiers": []
            },
            {
              "device": "keyboard",
              "control": "KeyD",
              "event": "down",
              "modifiers": []
            }
          ],
          "triggerOverrides": [],
          "processors": [],
          "priority": 0
        }
      ]
    }
  ]
}

InstanceSetComponent

Thin placement/binding component for an aggregate of N packed instances (voxel chunk, foliage field, crowd, or destructible lot) backed by one canonical InstanceSet resource.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesE1 aggregate substrate: thin ref to an InstanceSet resource; render lowers to InstancedMesh per kind, physics to ONE collider per aggregate.
Default component keycomponent.instance_set
Authored contract versionv1
Catalog contract IDcomponent.instance_set.contract.v1
Contract hashsha256:2c615e9153fbe7ff4ea45cf2287076c3fb23dc605bbb448b7d4b8023a98fb809
Field contract hashsha256:fb6f88e1ecce213103ff23605943d42fe1a24e19564a641103bd6a605693b1c1
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/sceneGraphSync.ts:syncSceneEntities [web_client/spa/src/render/sceneGraphSync.ts:syncSceneEntities]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsenabled, instanceSetAssetId, layout
Canonical field count5

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
enabledShow or hide the aggregate instance set.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
instanceSetAssetIdInstanceSet ProjectAsset holding the packed instance data (grid voxel cells or scattered transforms) that backs render + collision.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id instanceSet
layoutAggregate layout: 'grid' is a dense integer voxel lattice (native voxels collider); 'free' is scattered transforms (baked trimesh collider). Arms are mutually exclusive.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/union
layout.kindstringyesreadonlyreadonlyreadonlyreadonlyreadonlyexposedconsumednot_applicablehidden: No normal inspector control is declared for this backend field.
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "InstanceSetComponent",
  "enabled": true,
  "layout": {
    "kind": "grid"
  }
}

JointComponent

Physical constraint linking this rigid body to another: fixed weld, revolute hinge, prismatic slider, spherical ball socket, spring, or rope. Anchors and axis are in each body's LOCAL space; motors and limits exist only on revolute and prismatic joints. Author intent only - the runtime never writes joint state back.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilitydefault
Component palette notesFixed/revolute/prismatic/spherical/spring/rope; single owner references the connected body.
Default component keycomponent.joint
Authored contract versionv1
Catalog contract IDcomponent.joint.contract.v1
Contract hashsha256:c1b6c85b1efc5281799240412c4ebadb2bfa9a653bf0ad626fb70f42bfaa1635
Field contract hashsha256:b819efe75b308bd02675d3288a913e7b07ed8953219a37ff874589ee1733c49b
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/physics/componentSync.ts:syncJointState [server/src/modules/runtime/physics/componentSync.ts:syncJointState]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsaxis, collideConnected, connectedAnchor, connectedEntityId, jointType, limits, localAnchor, motor, restLength, springDamping, springStiffness, wakeConnectedOnBuild
Canonical field count32

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
axisHinge axis (revolute) or slide direction (prismatic), in this body's local space.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
axis.xnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
axis.ynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
axis.znumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
collideConnectedWhether the two linked bodies still collide with each other. Off by default: jointed bodies interpenetrate at the anchor.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
connectedAnchorAttachment point on the connected body, in THAT body's local space.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
connectedAnchor.xnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
connectedAnchor.ynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
connectedAnchor.znumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
connectedEntityIdThe other rigid-body entity this joint attaches to. The joint lives on THIS entity only (single owner) and stays inert until connected.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: entity_id<br>ref: entity id
jointTypeConstraint kind: Fixed welds, Revolute hinges around the axis, Prismatic slides along it, Spherical ball-sockets, Spring holds a rest length, Rope caps the distance.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: fixed, revolute, prismatic, spherical, spring, rope
limitsTravel bounds along the axis: radians for revolute, meters for prismatic. Only revolute and prismatic joints carry limits (Rapier unit joints); the schema rejects them elsewhere.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
limits.enabledbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
limits.maxnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
limits.minnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
localAnchorAttachment point on this body, in ITS local space.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
localAnchor.xnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
localAnchor.ynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
localAnchor.znumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
motorDrives the joint toward a target position or velocity. Only revolute and prismatic joints carry motors; the schema rejects them elsewhere.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
motor.dampingnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
motor.enabledbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
motor.modestringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: position, velocity
motor.modelstringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: acceleration, force
motor.stiffnessnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
motor.targetPositionnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
motor.targetVelocitynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
restLengthSpring rest length or rope maximum length, in meters.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
springDampingVelocity damping applied by the spring.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
springStiffnessSpring constant; a spring joint requires stiffness above zero.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
wakeConnectedOnBuildWake both bodies when the joint is created or rebuilt.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean

Defaults:

JSON
{
  "type": "JointComponent",
  "jointType": "fixed",
  "localAnchor": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "connectedAnchor": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "axis": {
    "x": 0,
    "y": 1,
    "z": 0
  },
  "limits": {
    "enabled": false,
    "min": 0,
    "max": 0
  },
  "motor": {
    "enabled": false,
    "model": "acceleration",
    "mode": "velocity",
    "targetPosition": 0,
    "targetVelocity": 0,
    "stiffness": 0,
    "damping": 0
  },
  "restLength": 1,
  "springStiffness": 0,
  "springDamping": 0,
  "collideConnected": false,
  "wakeConnectedOnBuild": true
}

LightComponent

Real-time light source. Directional for sun-style, point for omni, spot for cones, area for windows or panels, ambient for global fill.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAtomic rendering primitive.
Default component keycomponent.light
Authored contract versionv3
Catalog contract IDcomponent.light.contract.v1
Contract hashsha256:af985b713027438b28e22c9c83dfb005fd020e149bf40d28136bb23ca02b7bb8
Field contract hashsha256:3579762710a82c6e39ee85f98f1395e1175dcb63640868e39a707aa4835e1d4a
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/light.ts:applyLight [web_client/spa/src/render/light.ts:applyLight]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsangleDeg, castShadow, color, decay, distance, enabled, height, intensity, mode, modulation, penumbra, radius, width
Canonical field count18

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
angleDegWidth of the spot cone, in degrees.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 180
castShadowLets this light cast real-time shadows; it costs performance, so save it for key lights.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
colorColor of the emitted light.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
decayHow quickly brightness falls off with distance; 2 is physically natural.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
distanceMaximum reach of the light; 0 means unlimited.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
enabledWhether the light contributes to the World right now.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
heightHeight of the rectangular panel, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
intensityBrightness of the light; 0 turns it off.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
modeKind of light: directional sun, point omni, spot cone, area panels, or ambient fill.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: directional, point, spot, area_rect, area_disc, ambient
modulationDeterministic time modulation. Strobe switches intensity hard on/off, Pulse breathes it smoothly, Flicker is seeded candle noise, Disco cycles the light's hue at the set rate; depth is how much of the intensity swings (for Disco, how saturated the cycling color is).objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
modulation.depthnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
modulation.modestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, strobe, pulse, flicker, disco
modulation.rateHznumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 60
modulation.seedintegeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 9007199254740991
penumbraSoftness of the cone's edge, from 0 (hard) to 1 (fully soft).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
radiusRadius of the glowing disc, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
widthWidth of the glowing panel, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01

Defaults:

JSON
{
  "type": "LightComponent",
  "mode": "directional",
  "color": "#ffffff",
  "intensity": 1,
  "distance": 0,
  "decay": 2,
  "angleDeg": 30,
  "penumbra": 0.2,
  "width": 2,
  "height": 2,
  "radius": 1,
  "enabled": true,
  "castShadow": false
}

LocalEnvironmentVolumeComponent

Bounded region that sparse-overrides the global environment (fog, ambient, aerial haze, exposure-compensation bias) with strict-priority blending toward the world default at its boundary.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer environment-override primitive (ADR 0178); equal-priority overlaps are warned and resolve deterministically by entity id.
Default component keycomponent.local_environment_volume
Authored contract versionv1
Catalog contract IDcomponent.local_environment_volume.contract.v1
Contract hashsha256:e52a30ed38046487a717d3aef6181e0531959a22c0d5280de169547e6d8212b3
Field contract hashsha256:739bc63e9df9aec55cb400b99fcd67d10e8bba081349e5a69fc321b024ce0f04
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/environment/applyLocalEnvironmentVolumes.ts:volumeOverrideFields [web_client/spa/src/render/environment/applyLocalEnvironmentVolumes.ts:volumeOverrideFields]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsambientIntensity, blendDistance, enabled, exposureCompensationBias, fogDensity, overrideAmbient, overrideExposureCompensation, overrideFog, priority, radius, shape, size
Canonical field count16

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
ambientIntensityLocal ambient intensity (used only when Override ambient is on).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 10
blendDistanceWorld-units over which each override fades to the global default approaching the boundary.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
enabledWhether this volume contributes an environment override.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
exposureCompensationBiasExposure-compensation bias in stops (used only when Override exposure compensation is on, and only under auto-exposure).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -4<br>max: 4
fogDensityLocal fog density (used only when Override fog is on, and only on exp2/no-fog worlds - linear fog has no density channel).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
overrideAmbientAuthor the ambient/skylight intensity inside this volume.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
overrideExposureCompensationPush an exposure-compensation stop bias into the meter inside this volume (never a second tonemapper). Reaches pixels only under auto-exposure; manual-exposure worlds ignore it.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
overrideFogAuthor the fog density inside this volume. Applies on worlds using exp2 or no global fog; linear-fog worlds have no density channel, so this override changes nothing there.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
priorityStrict integer priority. The highest-priority containing volume wins. Equal-priority overlaps trigger an Inspector warning and resolve deterministically by stable volume id; use distinct priorities for an explicit order.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -9007199254740991<br>max: 9007199254740991
radiusReach of a sphere volume, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
shapeVolume of influence: a sphere or a box around the entity.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: sphere, box
sizeExtents of a box volume per axis, in world units.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
size.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
size.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
size.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "LocalEnvironmentVolumeComponent",
  "enabled": true,
  "shape": "sphere",
  "radius": 8,
  "size": {
    "x": 8,
    "y": 8,
    "z": 8
  },
  "priority": 0,
  "blendDistance": 4,
  "overrideFog": false,
  "fogDensity": 0.02,
  "overrideAmbient": false,
  "ambientIntensity": 1,
  "overrideExposureCompensation": false,
  "exposureCompensationBias": 0
}

MaterialInstanceOverrideComponent

Optional per-entity material parameters layered over the referenced material asset at runtime.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAtomic renderer state.
Default component keycomponent.material_override
Authored contract versionv2
Catalog contract IDcomponent.material_override.contract.v1
Contract hashsha256:47cca9049f8fce13282e7ab6f87316b3f61da080232038566b21b18a91aec63e
Field contract hashsha256:805f5e6d589b43fb9fd9184d5618836da10020e2708f8f32208eb465a890e126
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonthe server resolves atlasSelection to a uint texture-array layer via resolveInstanceAtlasLayer and carries it on a per-instance lane; it is intentionally NOT folded into the material payload so per-tile entities keep one shared material and one instancing batch [packages/protocol/src/instanceAppearance.ts:resolveInstanceAtlasLayer]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsatlasSelection, baseColorTint, emissiveIntensityMultiplier, opacityMultiplier, overlayStageProgress
Canonical field count10

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
atlasSelectionPer-instance texture tile from the material's declared atlas; does not fork the shared material or its instancing batch.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/union
atlasSelection.facesobjectyesreadonlyreadonlyreadonlyreadonlyreadonlyexposedprojectedconsumedhidden: No normal inspector control is declared for this backend field.
atlasSelection.kindstringyesreadonlyreadonlyreadonlyreadonlyreadonlyexposedprojectedconsumedhidden: No normal inspector control is declared for this backend field.
atlasSelection.layerintegeryesreadonlyreadonlyreadonlyreadonlyreadonlyexposedprojectedconsumedhidden: No normal inspector control is declared for this backend field.min: 0<br>max: 255
atlasSelection.regionstringyesreadonlyreadonlyreadonlyreadonlyreadonlyexposedprojectedconsumedhidden: No normal inspector control is declared for this backend field.minLength: 1<br>maxLength: 64
baseColorTintTint multiplied into the material's base color for just this entity.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
emissiveIntensityMultiplierScales how strongly this entity's material glows; 1 keeps it unchanged.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 20
opacityMultiplierScales the material's opacity for this entity; 1 keeps it unchanged.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 4
overlayStageProgressNormalized 0–1 progress for this instance when its material declares a staged overlay; does not fork the shared material or instancing batch.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "MaterialInstanceOverrideComponent",
  "opacityMultiplier": 1,
  "emissiveIntensityMultiplier": 1
}

NameplateComponent

The name shown over a Character, and who may read it: publicLabel is visible to every player, teamLabel only to that player's own team. On a Character a player controls, the server writes the resolved account identity into the field the character policy picks and keeps it correct, so a name a client typed is never shown. You never need to add it yourself.

FieldValue
Classificationatomic
CategoryGameplay
Component palette visibilitydefault
Component palette notesOn a character a player controls, the game adds a nameplate and keeps the name correct itself. publicLabel shows to every player; teamLabel shows only to that player's own team.
Default component keycomponent.nameplate
Authored contract versionv1
Catalog contract IDcomponent.nameplate.contract.v1
Contract hashsha256:e186071b3a946ccb746d3fb09b8d62c1986d38c0aaca05c9f1ccb639291dfe10
Field contract hashsha256:7a376c9cf9cea66069466dbf04cd19865879ca5f3d06c1fbfa9fca32e51b0db9
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by server/src/modules/runtime/runtimeCharacterSystem.ts:resolveNameplateForSeat [server/src/modules/runtime/runtimeCharacterSystem.ts:resolveNameplateForSeat]
Replication policypublic/low, teamLabel: team
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldspublicLabel, teamLabel
Canonical field count3

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
publicLabelThe name every player may see. On a player-controlled Character the server overwrites it with the resolved account identity.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringmaxLength: 160
teamLabelThe name only the player's own team sees, when the character policy shows nameplates to a team. The server writes and maintains it.stringnohiddenhiddenhiddenhiddenhiddenexposedprojectedconsumedhidden: Server-derived field.maxLength: 160
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "NameplateComponent"
}

Path-following navigation agent: steers an entity to a destination (or a followed target) across the world navmesh via the existing mover.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilitydefault
Component palette notesRuntime navigation behavior; the nav system steers the agent via the existing mover (no second mover) over the recast navmesh resource (no navmesh-as-component).
Default component keycomponent.nav_agent
Authored contract versionv1
Catalog contract IDcomponent.nav_agent.contract.v1
Contract hashsha256:5ce457fafb4313765ec94214e6c44a6c819e9c891c68c059128d82f263ec512e
Field contract hashsha256:25c451e692afa5f4b2fdafd2afcc7558e7569a37a8802316bf74637147ef8b5b
Migration classnone
Capability packsworld.v1
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/runtimeSystems.ts:applyNavAgentSweep [server/src/modules/runtime/runtimeSystems.ts:applyNavAgentSweep]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsarrivalRadius, destination, enabled, speed, targetEntityKey
Canonical field count9

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
arrivalRadiusDistance at which the agent stops.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 1000
destinationWorld-space point the navigation agent moves toward when no target entity is set.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/vec3
destination.xnumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
destination.ynumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
destination.znumberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/nested
enabledRun navigation for this agent.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
speedMovement speed in world units per second.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 1000
targetEntityKeyOptional: follow this entity instead of the fixed destination.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/referenceminLength: 1<br>maxLength: 160<br>semantic: project_graph_key<br>ref: entity key
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "NavAgentComponent",
  "enabled": true,
  "destination": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "speed": 4,
  "arrivalRadius": 0.5
}

NetworkProfileComponent

How this entity reaches remote clients: whether they receive it at all, and how they present its replicated motion. Owner-only visibility withholds the whole entity from everyone but its owner. Responsive hugs the newest server sample and never bridges gaps (teleporting projectiles, snappy pickups); Smooth doubles the interpolation buffer for fluid slow movers (platforms, doors); Default is the tick-derived baseline.

FieldValue
Classificationatomic
CategoryNetworking
Component palette visibilitydefault
Component palette notesNetcode presentation intent for replicated motion; the runtime interpolation buffer reads this profile (no second mover).
Default component keycomponent.network_profile
Authored contract versionv3
Catalog contract IDcomponent.network_profile.contract.v1
Contract hashsha256:c9c73cb72004546f308366503984e8bb6bc52f70e16f693184cdf92eabb2f2b3
Field contract hashsha256:34bf86d9c254da9f7cb6e64de5825e5bed2f611cd4d0180526f124ff72fbc824
Migration classnone
Capability packsnetwork.v1
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonfilterRuntimeEntitiesForPlayerInterest reads the relevance selection when composing each player's interest set, so an entity withheld from a player never enters that player's snapshot at all [server/src/modules/runtime/interestGraph.ts:filterRuntimeEntitiesForPlayerInterest]
Replication policypublic/high/reliable
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsalwaysRelevant, hidden, interestRadius, interpolation, ownerOnly, ownership
Canonical field count7

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
alwaysRelevantDeliver this entity to every player regardless of distance. Objectives, boundaries, and world-scale landmarks that must never pop in.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
hiddenWithhold this entity from every player, including its owner. Server-side props, spawn markers, and trigger volumes that exist only for simulation.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
interestRadiusDistance within which players receive this entity, overriding the room default. Larger than the default for things seen from far away; smaller for dense local detail.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
interpolationResponsive: no gap-bridge extrapolation (never invents motion). Smooth: doubled buffer for fluid slow movers. Default: tick-derived baseline.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: default, responsive, smooth
ownerOnlyWithhold this entity from every player except its owner. The owner is the player possessing it or an ancestor of it, or the recorded owner of it or an ancestor, so a held item parented to a possessed Character is owned by that Character's player. Enforced server-side: a non-owner never receives the entity at all. A camera-space renderable is owner-only whether or not this is set.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
ownershipsunset. Representation-only selection: authority is always derived from physics body type (a dynamic Rigidbody is physics-owned, everything else transform-owned), so server and owner_client have no effect. On its way out; leave it at auto.stringnoexposedexposedexposedexposedexposedexposedinertnot_applicableeditable/stringenum: auto, server, owner_client
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "NetworkProfileComponent"
}

OwnershipComponent

Records which player owns this entity, so the claim survives them leaving and rejoining. The server keeps it in step with every scripted ownership transfer. Put it on anything a player should keep: a placed block, a claimed vehicle, a base. Something merely carried is parented under the carrier's Character instead.

FieldValue
Classificationatomic
CategoryGameplay
Component palette visibilitydefault
Component palette notesRecords the owning player so the claim survives them leaving and rejoining. The game keeps it in step with every scripted ownership transfer. Carrying something is parenting it, which already counts as held.
Default component keycomponent.ownership
Authored contract versionv1
Catalog contract IDcomponent.ownership.contract.v1
Contract hashsha256:4bbbaa9dc325cb8d8e19047274ea9dbac7c4eb5b391fae6dfe4ccd64431c7dce
Field contract hashsha256:56e511a38c6872dc1f459480a271194c16fa512b832d9719bed2bd2cdda3a651
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/audienceResolver.ts:runtimeEntityOwner [server/src/modules/runtime/audienceResolver.ts:runtimeEntityOwner]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsacquiredAt, ownerProfileId
Canonical field count3

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
acquiredAtWhen the current owner acquired this entity; the server writes it on every ownership transfer.stringnohiddenhiddenhiddenhiddenhiddenexposedconsumednot_applicablehidden: Server-derived field.minLength: 1<br>maxLength: 64
ownerProfileIdShows the player who owns this entity right now; empty means unowned. The server keeps it in step with the canonical owner, which scripts change through entity ownership transfers.stringnohiddenhiddenhiddenhiddenhiddenexposedconsumednot_applicablehidden: Server-derived field.minLength: 1<br>maxLength: 200<br>semantic: runtime_profile_id
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "OwnershipComponent"
}

ParticleEmitterComponent

Budgeted billboard VFX emitter: emission mode (continuous stream or one-shot burst), particle size and color ramps, lifetime, velocity, gravity, drag, spawn shape, blend/sort policy, texture, and plane collision. Continuous mode emits emissionRate particles/second and loops (age wraps at lifetime). Burst mode emits burstCount particles once at emitter birth - the same machinery a scripted ctx.fx.particleBurst rides. Particles simulate in the entity's LOCAL space (they move with the entity).

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesDefault by creator expectation; particles are built-in in comparable creator engines.
Default component keycomponent.particle_emitter
Authored contract versionv4
Catalog contract IDcomponent.particle_emitter.contract.v1
Contract hashsha256:d11293cc720e9e699cd63501f6732a32782e1a8435568119840dea23f9b49650
Field contract hashsha256:67be2e100757d415ee729cc753d2b586cd0f683389ebc404827a6f0c9ddddcb9
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:editorSceneEntityToRendererEntity [web_client/spa/src/render/editorSceneProjection.ts:editorSceneEntityToRendererEntity]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsblendMode, budgetCap, burstCount, collision, color, depthWrite, drag, emissionMode, emissionRate, enabled, endColor, endSize, gravity, lifetimeSeconds, maxParticles, opacity, particleSize, schemaVersion, seed, shape, simulationPath, sortMode, startColor, startSize, textureAssetId, velocity
Canonical field count61

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
blendModeHow particles mix with what is behind them: alpha, additive, multiply, or premultiplied.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: alpha, additive, multiply, premultiplied
budgetCapHard quality-budget ceiling on particles for this emitter.integernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 9007199254740991
burstCountParticles emitted in one puff (Burst mode).integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 512
collisionLets particles hit one authored plane and stop.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
collision.enabledbooleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
collision.planeNormalobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
collision.planeNormal.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
collision.planeNormal.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
collision.planeNormal.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
collision.planeOffsetnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/number
colorBase tint for all particles; Start/End color override the ramp when set.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
depthWriteWhether particles write to the depth buffer; usually off for soft additive effects.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
dragAir resistance slowing particles over time.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 16
emissionModeContinuous streams particles at the emission rate and loops; Burst emits a one-shot puff of Burst count particles once, then idles.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: continuous, burst
emissionRateParticles spawned per second (Continuous mode).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
enabledMaster switch for the whole effect.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
endColorTint at the end of each particle's life; drives the color ramp.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
endSizeParticle size at death; drives the size-over-life ramp.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 10
gravityConstant pull applied to every particle.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
gravity.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
gravity.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
gravity.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
lifetimeSecondsSeconds each particle lives.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01
maxParticlesCap on how many particles are alive at once.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 9007199254740991
opacityOverall transparency for the effect.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
particleSizeUniform particle size in world units; Start/End size override the ends when set.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 10
schemaVersionFormat version of this emitter's data; v2 adds one-shot burst mode.numberyesreadonlyhiddenhiddenhiddenhiddenexposedprojectednot_applicablereadonly/numbermin: 1<br>max: 2
seedRandom seed; keep the same number to replay the exact same effect.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: -9007199254740991<br>max: 9007199254740991
shapeWhere particles spawn: the emitter volume's type, size, and spawn mode.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
shape.angleDegnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 180
shape.arcDegnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 360
shape.edgeEndobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
shape.edgeEnd.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.edgeEnd.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.edgeEnd.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.edgeStartobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
shape.edgeStart.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.edgeStart.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.edgeStart.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.radiusnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
shape.sizeobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
shape.size.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.size.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.size.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
shape.spawnModestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: center, surface, volume
shape.typestringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: point, sphere, box, cone, disc, edge
simulationPathWhere the simulation runs: auto picks CPU or GPU for you.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: auto, cpu, gpu
sortModeDraw order for particles; camera distance sorts correctly through transparency.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, cameraDistance
startColorTint at the start of each particle's life; drives the color ramp.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
startSizeParticle size at birth; drives the size-over-life ramp.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 10
textureAssetIdImage each particle displays.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id texture
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
velocityRandom starting velocity range (min and max per axis) for new particles.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
velocity.maxobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
velocity.max.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
velocity.max.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
velocity.max.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
velocity.minobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
velocity.min.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
velocity.min.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
velocity.min.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested

Defaults:

JSON
{
  "type": "ParticleEmitterComponent",
  "schemaVersion": 2,
  "enabled": true,
  "maxParticles": 64,
  "particleSize": 0.08,
  "color": "#ffffff",
  "opacity": 1,
  "lifetimeSeconds": 1,
  "emissionRate": 16,
  "emissionMode": "continuous",
  "burstCount": 32,
  "seed": 1,
  "velocity": {
    "min": {
      "x": -0.1,
      "y": 0.3,
      "z": -0.1
    },
    "max": {
      "x": 0.1,
      "y": 1.2,
      "z": 0.1
    }
  },
  "gravity": {
    "x": 0,
    "y": -0.4,
    "z": 0
  },
  "drag": 0,
  "sortMode": "none",
  "blendMode": "alpha",
  "simulationPath": "auto",
  "depthWrite": false,
  "shape": {
    "type": "box",
    "spawnMode": "volume",
    "size": {
      "x": 1,
      "y": 1,
      "z": 1
    },
    "radius": 0.5,
    "angleDeg": 30,
    "arcDeg": 360,
    "edgeStart": {
      "x": -0.5,
      "y": 0,
      "z": 0
    },
    "edgeEnd": {
      "x": 0.5,
      "y": 0,
      "z": 0
    }
  },
  "collision": {
    "enabled": false,
    "planeNormal": {
      "x": 0,
      "y": 1,
      "z": 0
    },
    "planeOffset": 0
  }
}

PixelSurfaceComponent

Script-driven, tick-cadence pixel surface for authored dynamic imagery: minimap/radar, fog-of-war, drawing and painting, dashboards, animated terminals, heatmaps. The owning script draws it with bounded ctx.surface commands; the RGBA buffer is client-local presentation state and is never replicated, persisted, or serialized. Bind it as a camera_quad (fills the frame, a 2D game inside the normal play surface) or a world_quad (a screen in the world).

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAuthored pixel-surface primitive; scripts draw a bounded client-local RGBA buffer presented as a camera or world quad.
Default component keycomponent.pixel_surface
Authored contract versionv1
Catalog contract IDcomponent.pixel_surface.contract.v1
Contract hashsha256:39d52e59c611641c6487186677c81bbfc7994fe758963333b5ab265bca0c4728
Field contract hashsha256:593e3cabdafcebb2ebb8e30d9887a5db55a5857259587c0e6fcf0ea29d883d79
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:pixelSurfaceFromArtifact [web_client/spa/src/render/editorSceneProjection.ts:pixelSurfaceFromArtifact]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsbinding, colorSpace, doubleSided, enabled, filter, logicalHeight, logicalWidth, opacity, programScriptId, seedAssetId
Canonical field count11

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
bindingcamera_quad composes on the camera-space layer and can fill the frame (a 2D game inside the normal play surface); world_quad is a screen placed in the world via the entity's transform.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: camera_quad, world_quad
colorSpacedisplay presents author-referred bytes exactly (pair with identity tone mapping for 1:1 output); scene feeds linear values into the lit pipeline like any texture.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: display, scene
doubleSidedDraw both faces of the surface. Only applies to a world_quad.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
enabledShow or hide the surface.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
filterTexture sampling: nearest keeps hard pixels (the retro look); linear smooths when scaled.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: nearest, linear
logicalHeightSurface height in pixels. Tier-capped (low 128, medium 256, high 512, ultra 1024); exceeding the active tier's budget is a typed refusal at apply time.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 1024
logicalWidthSurface width in pixels. Tier-capped (low 128, medium 256, high 512, ultra 1024); exceeding the active tier's budget is a typed refusal at apply time.integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1<br>max: 1024
opacitySurface opacity; 0 is fully transparent, 1 is fully opaque.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
programScriptIdOptional project script whose program drives this surface's contents.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: script_id<br>ref: script id
seedAssetIdOptional image asset that fills the surface with its initial contents before the script draws.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id texture
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "PixelSurfaceComponent",
  "enabled": true,
  "logicalWidth": 256,
  "logicalHeight": 256,
  "colorSpace": "display",
  "filter": "nearest",
  "binding": "world_quad",
  "opacity": 1,
  "doubleSided": false
}

ReflectionProbeComponent

Local reflection probe used by the renderer to select nearby environment lighting for PBR objects.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer presentation primitive with explicit runtime/renderer projection status.
Default component keycomponent.reflection_probe
Authored contract versionv1
Catalog contract IDcomponent.reflection_probe.contract.v1
Contract hashsha256:cb7b4952d5d5e6dc2900d0f7d982bf0c47c9d60b205bbf46fc949e13f5b3ca27
Field contract hashsha256:f97f8b34fc3bbee57492621be1221eae77027bea44a0480cf5d8100068732c7d
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:reflectionProbeFromArtifact [web_client/spa/src/render/editorSceneProjection.ts:reflectionProbeFromArtifact]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldscubemapAssetId, enabled, intensity, radius, shape, size
Canonical field count10

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
cubemapAssetIdTexture asset used as this probe's reflection image.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id texture
enabledWhether nearby surfaces may use this probe for reflections.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
intensityStrength of the reflections this probe contributes. Full 0-10 range applies to authored-cubemap probes; probes without a cubemap use live runtime capture, which clamps effective intensity to 0.35 to prevent capture feedback blowout.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 10
radiusReach of a sphere probe, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
shapeVolume of influence: a sphere or a box around the entity.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: sphere, box
sizeExtents of a box probe per axis, in world units.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
size.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
size.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
size.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "ReflectionProbeComponent",
  "enabled": true,
  "shape": "sphere",
  "radius": 8,
  "size": {
    "x": 8,
    "y": 8,
    "z": 8
  },
  "intensity": 1
}

RenderableComponent

Presentation primitive used by the shared client renderer.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesAtomic rendering primitive.
Default component keycomponent.renderable
Authored contract versionv3
Catalog contract IDcomponent.renderable.contract.v1
Contract hashsha256:158e18aecaa93e56f94f1e171a2bd841cf7a99cd55eb3b063f916ef59dab454f
Field contract hashsha256:da7f71852c339dd808c7a89dbe48e0f750daaf2af8751370232d164bfdf8e1ec
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:editorSceneEntityToRendererEntity [web_client/spa/src/render/editorSceneProjection.ts:editorSceneEntityToRendererEntity]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsassetId, bounds, fadeOutDistance, lightingMobility, materialRef, materialSlots, maxDrawDistance, renderSpace, shape, visible
Canonical field count22

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
assetIdThe imported model drawn when Shape is "Mesh", referenced by ProjectAsset UUID.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id model
boundsOptional renderer bounds override with center and size vectors.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
bounds.centerobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
bounds.center.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
bounds.center.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
bounds.center.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
bounds.sizeobjectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
bounds.size.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
bounds.size.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
bounds.size.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
fadeOutDistanceOptional distance band used to fade this visual before max draw distance.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 100000
lightingMobilityAuto bakes world-space surfaces with a static rigid body, or with no rigid body and no enabled character controller. Movable uses probe lighting. Static explicitly opts into a fixed bake even with moving physics; moving it later makes that bake stale. Camera-space viewmodels are always excluded from lightmaps.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: auto, static, movable
materialRefExplicit whole-renderable material override. For imported models this replaces every embedded material slot.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: material_id<br>ref: asset id material
materialSlotsSparse per-slot material overrides for imported model surfaces. Missing slots preserve embedded model materials.arraynoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/array
materialSlots[]Sparse per-slot material overrides for imported model surfaces. Missing slots preserve embedded model materials.objectnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/array
materialSlots[].materialRefMaterial ProjectAsset UUID applied only to this slot.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: material_id<br>ref: asset id material
materialSlots[].slotStable slot name when available; numeric slot index fallback.string|integeryesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/string
maxDrawDistanceOptional distance after which this visual is not drawn.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 100000
renderSpaceWorld uses the normal scene transform. Camera treats this entity's Transform as local to the active presentation camera for first-person arms or weapons. Camera-space visuals remain depth-tested and can be clipped by world geometry; use Camera only for viewmodels.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: world, camera
shapeGeometry drawn for this renderable. Pick a primitive, or "Mesh" to draw an imported Model asset, or "Billboard" for a camera-facing sprite.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: box, sphere, disc, capsule, billboard, mesh, plane
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
visibleShow or hide this entity without removing it from the World.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean

Defaults:

JSON
{
  "type": "RenderableComponent",
  "visible": true,
  "renderSpace": "world",
  "lightingMobility": "auto",
  "shape": "sphere"
}

RigidBodyComponent

Opts an entity into authoritative Rapier simulation; runtime physics owns dynamic Transform and Velocity readback.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilitydefault
Component palette notesAtomic physics primitive.
Default component keycomponent.rigid_body
Authored contract versionv1
Catalog contract IDcomponent.rigid_body.contract.v1
Contract hashsha256:6f0abcbfeb0df5ffb1da816491653c8cc0b846d38546decd58e110d6557bfb07
Field contract hashsha256:5692bdf3c853dcd1ecad983913709c1bd6425b54f91181036e2d7e1fc52db416
Migration classnone
Capability packsphysics.v1
Runtime systemsruntime.physicsSystem, runtime.collisionSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/physics/componentSync.ts:syncRigidBodyState [server/src/modules/runtime/physics/componentSync.ts:syncRigidBodyState]
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsangularDamping, bodyType, ccdEnabled, gravityScale, linearDamping, lockRotations, lockTranslations, mass
Canonical field count15

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
angularDampingDrag on spin; higher values stop rotation sooner.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
bodyTypeDynamic falls and reacts to pushes, kinematic is moved by authored/runtime intent, static never moves but can be queried and contacted.stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringenum: dynamic, kinematic, static
ccdEnabledExtra-accurate collision for fast movers so they cannot tunnel through thin walls. Leave unset for automatic (on for dynamic bodies, off for kinematic/static); set explicitly to override.booleannoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
gravityScaleHow strongly gravity pulls this body; 0 floats, 1 is normal.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/number
linearDampingDrag on movement; higher values slow the body down sooner.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0
lockRotationsFreeze spin around chosen axes; lock X and Z to keep characters upright.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
lockRotations.xbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
lockRotations.ybooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
lockRotations.zbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
lockTranslationsFreeze movement along chosen axes so physics cannot push the body that way.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/object
lockTranslations.xbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
lockTranslations.ybooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
lockTranslations.zbooleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
massHeaviness of the body; heavier bodies are harder to push around.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.001
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "RigidBodyComponent",
  "bodyType": "dynamic",
  "mass": 1,
  "linearDamping": 0,
  "angularDamping": 0,
  "gravityScale": 1,
  "lockTranslations": {
    "x": false,
    "y": false,
    "z": false
  },
  "lockRotations": {
    "x": false,
    "y": false,
    "z": false
  }
}

ScriptComponent

Attaches a sandboxed project script asset to an entity.

FieldValue
Classificationatomic
CategoryScripting
Component palette visibilitydefault
Component palette notesAtomic behavior attachment.
Default component keycomponent.script
Authored contract versionv1
Catalog contract IDcomponent.script.contract.v1
Contract hashsha256:73f96b2494263088890c9ae67f1ac0e8ef3a804b13c5244b1a248ab49ba7043c
Field contract hashsha256:4f8912d21edadee52b72715cb630b05a129b4efddf95dbda587cb82029e7ed26
Migration classnone
Capability packsscript.v1
Runtime systemsruntime.scriptSystem, runtime.componentPatchSystem, runtime.observerCommandSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/runtimeSystems.ts:scriptForEntity [server/src/modules/runtime/runtimeSystems.ts:scriptForEntity]
Replication policyserver/low
AuthorizationServer-owned script attachment; runtime reads it and does not replicate it publicly.
Inspector fieldsconfig, enabled, scriptId
Canonical field count4

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
configValues handed to the script; variables the script exposes appear here as editable fields.objectyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/map
enabledMaster switch; the script only receives events while on.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
scriptIdProject script to run on this entity.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: script_id<br>ref: script id
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "ScriptComponent",
  "enabled": true,
  "config": {}
}

SpatialCaptureComponent

Placed imported spatial capture or splat asset, projected to the renderer without becoming mesh geometry.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesSemantic placement primitive for imported captures; renderability is separate from playability proof.
Default component keycomponent.spatial_capture
Authored contract versionv3
Catalog contract IDcomponent.spatial_capture.contract.v1
Contract hashsha256:6dda4636c726ec461894c192efb782ef332fd73d69b3eb29c99641c6bff16b83
Field contract hashsha256:7b11f5b24a8349e46af395da05945b74d1ce32ea681e5c38c15c0fedb07de8ed
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/splatHandle.ts:attachLoadedSplat [web_client/spa/src/render/splatHandle.ts:attachLoadedSplat]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsassetId, colorTint, fadeOutDistance, maxDrawDistance, opacity, pointSize, sourceVariantKey, visible
Canonical field count9

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
assetIdPick the imported capture asset to place; it must carry rendering.spatialCapture data.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id model|raw
colorTintOptional renderer-owned tint; it is not source asset truth.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
fadeOutDistanceOptional distance range used by renderer fade-out.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 100000
maxDrawDistanceOptional renderer culling distance for this placed capture.numbernoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.01<br>max: 100000
opacityRenderer-owned capture opacity between 0 and 1.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
pointSizeRenderer-owned display size for native or degraded point/splat presentation.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001<br>max: 1
sourceVariantKeyAsset variant key used by renderer loading; defaults to source.stringyesreadonlyhiddenhiddenhiddenhiddenexposedprojectedconsumedreadonly/stringminLength: 1<br>maxLength: 120<br>semantic: spatial_capture_facet_key
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
visibleShow or hide this placed spatial capture without removing the entity.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean

Defaults:

JSON
{
  "type": "SpatialCaptureComponent",
  "sourceVariantKey": "source",
  "visible": true,
  "pointSize": 0.06,
  "opacity": 0.92
}

SpawnPointComponent

A placed marker where the game puts a player's Character on join, on respawn, and whenever the character policy needs a location. Limit it to one team or one reserved player slot, set a priority, and give it a spread radius so simultaneous spawns do not overlap. Without one, characters appear at the world origin and the pre-Play check calls it out.

FieldValue
Classificationatomic
CategoryGameplay
Component palette visibilitydefault
Component palette notesWhere players appear on join and respawn. The game's character policy names a spawn tag, and only points carrying that tag are eligible, then narrowed to the matching team or reserved player slot and ordered by priority.
Default component keycomponent.spawn_point
Authored contract versionv1
Catalog contract IDcomponent.spawn_point.contract.v1
Contract hashsha256:f218bb1a85b34eeed55a38acf46611191ebe17acb3dd5c3058afcb78e7397574
Field contract hashsha256:85764a697875efb9cfcb65467e75e8dd941fc7d43c8c159ed8ef4278ef5b49e8
Migration classnone
Capability packsNone
Runtime systemsNone
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/spawnPointSelection.ts:selectRuntimeSpawnPoint [server/src/modules/runtime/spawnPointSelection.ts:selectRuntimeSpawnPoint]
Replication policyserver/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldspriority, radius, seatKey, teamKey
Canonical field count5

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
priorityHigher priority points are tried first; ties fall to the character policy's spawn selector.integernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: -1000<br>max: 1000
radiusDistance in meters around the point that counts as occupied while a Character stands in it; simultaneous spawns pick a free point when one exists.numbernoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 100
seatKeyOnly this reserved player slot spawns here; seat keys come from the game's multiplayer settings. Leave empty for any seat.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160<br>semantic: runtime_seat_key<br>options: the game's reserved player slots (from the game's multiplayer settings)
teamKeyOnly players on this team spawn here; team keys come from the game's multiplayer settings. Leave empty for any team.stringnoexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 160<br>semantic: runtime_team_key<br>options: the game's teams (from the game's multiplayer settings)
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "SpawnPointComponent",
  "priority": 0,
  "radius": 1
}

TerrainComponent

Thin placement/binding component for a canonical terrain resource.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer presentation component; this contract covers existing metadata/projection without adding terrain feature depth.
Default component keycomponent.terrain
Authored contract versionv1
Catalog contract IDcomponent.terrain.contract.v1
Contract hashsha256:b70f4cccf980c0af9bd16b92574b3e5be5112c360a8e05b8b605f1fc1414942b
Field contract hashsha256:4c929e365fb8d90cda470c7ff2f2605d6066daad95f94226964d529e1ad4558e
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/presentationTerrain.ts:terrainLodGeometry [web_client/spa/src/render/presentationTerrain.ts:terrainLodGeometry]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsenabled, terrainAssetId
Canonical field count3

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
enabledShow or hide the terrain placement.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
terrainAssetIdTerrain ProjectAsset backing render, collision, navigation and query behavior.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id terrain
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "TerrainComponent",
  "enabled": true
}

TextRenderableComponent

Budgeted world-space text primitive for floating values, item labels, signs, and quest markers anchored to entities. Player names over Characters come from Nameplate instead.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer presentation component: canonical MSDF text (shared per-family atlas, resolution-independent at any distance) with render-budget proof.
Default component keycomponent.text_renderable
Authored contract versionv2
Catalog contract IDcomponent.text_renderable.contract.v1
Contract hashsha256:66058e7c1c583eff7a31721e7d08c4033742b8d7cab7c01b5a5ee86a820adba6
Field contract hashsha256:92d2951ac551c2e890c330a1afc8d045bc8471e6ab909264aea1c8613617271b
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:textRenderableFromArtifact [web_client/spa/src/render/editorSceneProjection.ts:textRenderableFromArtifact]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsalign, anchor, backgroundColor, billboardMode, color, depthTest, depthWrite, enabled, fadeDistance, fallbackFontKeys, fontFamily, fontKey, fontSize, fontWeight, letterSpacing, lineHeight, maxDistance, maxWidth, offset, opacity, outlineColor, outlineWidth, projectionKey, statKey, text, textSource
Canonical field count31

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
alignHorizontal alignment of multi-line text.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: left, center, right
anchorWhich part of the text block sits at the entity position plus offset.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: center, top, bottom
backgroundColorFill color behind the text; empty means no backing panel.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
billboardModeHow the text faces the camera: always, only turning around Y, or fixed in place.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: camera, yAxis, fixed
colorText color.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
depthTestLets objects hide the text behind them; off draws it on top of everything.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
depthWriteLets the text itself hide things behind it; usually left off.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
enabledShow or hide the text.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
fadeDistanceCamera distance where the text starts fading out.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
fallbackFontKeysFont keys tried in order when the primary font is unavailable; the built-in sans face is always the final fallback.arraynoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/array
fallbackFontKeys[]Font keys tried in order when the primary font is unavailable; the built-in sans face is always the final fallback.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/arrayminLength: 1<br>maxLength: 240
fontFamilyTypeface family for the text.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: sans, mono, serif
fontKeyFont key: a pinned built-in (builtin:ibm-plex-sans / mono / serif) today; uploaded font assets when the bake pipeline lands. Overrides Font family when set; falls back through Fallback fonts, then built-in sans.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringminLength: 1<br>maxLength: 240<br>semantic: font_key
fontSizeType size of the text.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 6<br>max: 96
fontWeightType weight of the text.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: regular, medium, semibold, bold
letterSpacingExtra spacing between letters in world units; 0 is the font default.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/number
lineHeightSpacing between wrapped lines; 0 uses the default derived from font size.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
maxDistanceCamera distance beyond which the text stops drawing.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.1
maxWidthWrap width in world units; 0 keeps the text on a single line.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
offsetShift from the entity's position, in world units; raise Y to float the text overhead.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
offset.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
offset.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
offset.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
opacityText opacity; 0 is fully transparent, 1 is fully opaque.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
outlineColorColor of the outline around the letters.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
outlineWidthThickness of the letter outline; 0 disables it.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 8
projectionKeyKey of the runtime projection whose value the text shows when Text source is projection.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringminLength: 1<br>maxLength: 160<br>semantic: runtime_projection_key
statKeyName of the live entity stat shown when Text source is stat (e.g. health, score).stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringminLength: 1<br>maxLength: 160<br>semantic: runtime_stat_key
textThe words shown when Text source is static.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringmaxLength: 256
textSourceWhere the words come from: typed here, the entity's name, a runtime projection, or a live entity stat.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: static, entityName, projection, stat
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "TextRenderableComponent",
  "enabled": true,
  "text": "Label",
  "textSource": "static",
  "color": "#ffffff",
  "opacity": 1,
  "fontSize": 18,
  "fontFamily": "sans",
  "fontWeight": "regular",
  "align": "center",
  "anchor": "bottom",
  "maxWidth": 0,
  "lineHeight": 0,
  "letterSpacing": 0,
  "offset": {
    "x": 0,
    "y": 1.6,
    "z": 0
  },
  "billboardMode": "camera",
  "depthTest": true,
  "depthWrite": false,
  "maxDistance": 80,
  "fadeDistance": 60,
  "outlineWidth": 0
}

TimerComponent

Fires timer events on a server-owned interval. Scripts subscribe with onTimerFired (event.timerKey, event.iteration) to drive cooldowns, regen tickers, and day/night cycles.

FieldValue
Classificationatomic
CategoryRuntime
Component palette visibilitydefault
Component palette notesAtomic runtime event source.
Default component keycomponent.timer
Authored contract versionv1
Catalog contract IDcomponent.timer.contract.v1
Contract hashsha256:27e9c6c8c08419b6c9323cdc2e8f0d493f1168de73598c6ec832eb6e3bd6d46e
Field contract hashsha256:caf6bc3b75c2bebae16f7902a6e884823f95da654f446ae954d3886e01856a59
Migration classnone
Capability packstimer.v1
Runtime systemsruntime.timerSystem
Runtime consumer statusconsumed
Renderer consumer statusnot_applicable
Consumer status reasonread by server/src/modules/runtime/runtimeSystems.ts:latestTimerFiring [server/src/modules/runtime/runtimeSystems.ts:latestTimerFiring]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsenabled, intervalSeconds, maxFirings, repeating, timerKey
Canonical field count6

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
enabledMaster switch; the timer only counts and fires while on.booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
intervalSecondsSeconds between firings.numberyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0.01
maxFiringsTotal firings allowed over the timer's life; 0 means unlimited.integeryesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/numbermin: 0<br>max: 9007199254740991
repeatingOn: fires every interval while enabled. Off: fires once, then stays quiet (the timer stays enabled but will not fire again).booleanyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/boolean
timerKeyTag scripts use to tell this timer apart (onTimerFired event.timerKey).stringyesexposedexposedexposedexposedexposedexposedconsumednot_applicableeditable/stringminLength: 1<br>maxLength: 80<br>semantic: component_local_key
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "TimerComponent",
  "enabled": true,
  "timerKey": "default",
  "intervalSeconds": 1,
  "repeating": true,
  "maxFirings": 0
}

TransformComponent

Local position, rotation, and scale. Root entities treat this as world transform.

FieldValue
Classificationatomic
CategorySpatial
Component palette visibilitydefault
Component palette notesAtomic spatial primitive.
Default component keycomponent.transform
Authored contract versionv2
Catalog contract IDcomponent.transform.contract.v1
Contract hashsha256:36def25f47fca5de2f6ef936d5594be97b5ace51b1bd78111a3def4da2f42d21
Field contract hashsha256:f646529e57557e2ecb2c3493434f74dec6c67ef552a141a479c82eb3131aea3b
Migration classnone
Capability packshierarchy.v1
Runtime systemsruntime.hierarchyTransformSystem
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/editorSceneProjection.ts:authoringRotationToRenderRadians [web_client/spa/src/render/editorSceneProjection.ts:authoringRotationToRenderRadians]
Replication policypublic/high/reliable
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsposition, rotation, scale
Canonical field count13

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
positionWhere the entity sits in the World, in world units; children measure from their parent.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
position.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
position.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
position.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
rotationTilt and turn in degrees around the X, Y, and Z axes.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
rotation.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
rotation.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
rotation.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nested
scaleSize multiplier per axis; 1 keeps the authored size. Each axis must be at least 0.001.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/vec3
scale.xnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nestedmin: 0.001
scale.ynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nestedmin: 0.001
scale.znumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/nestedmin: 0.001
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.

Defaults:

JSON
{
  "type": "TransformComponent",
  "position": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "rotation": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "scale": {
    "x": 1,
    "y": 1,
    "z": 1
  }
}

VelocityComponent

The live movement vector. Runtime-owned - authored only as a reset default; the movement/physics step patches it each tick. Does not opt an entity into collision response or events by itself.

FieldValue
Classificationatomic
CategoryPhysics
Component palette visibilityhidden
Component palette notesInternal runtime lane (W5-01b); launch characters via Physics.command '{' type: "launch" '}' and configure movement on CharacterMovementComponent.
Default component keycomponent.velocity
Authored contract versionv1
Catalog contract IDcomponent.velocity.contract.v1
Contract hashsha256:0c16207cd0d92b93b3146715812f3bb9706606d82f91a4af2992186668b64fc5
Field contract hashsha256:0f938cc8d2ddf45e6b89c0738a38e76f84cc8af1f891afcb1f2a3c6fc682f73a
Migration classnone
Capability packsphysics.v1
Runtime systemsruntime.physicsSystem, runtime.collisionSystem
Runtime consumer statusinternal
Renderer consumer statusnot_applicable
Consumer status reasonInternal engine queue consumed by runtime systems.
Replication policypublic/medium
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldsangularVelocity, velocity
Canonical field count9

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
angularVelocityCurrent spin in radians per second about each axis; dynamic Rigidbody physics reads it back and re-seeds it on world rebuild so a spinning body keeps its spin. Runtime patches it when the body rotates.objectyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
angularVelocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
angularVelocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
angularVelocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
typestringyeshiddenhiddenhiddenhiddenhiddenhiddeninternalnot_applicablehidden: Component discriminator is selected by component type.
velocityCurrent movement in world units per second along each axis; Rigidbody physics or the kinematic controller decides whether this is consumed. Runtime patches it every tick.objectyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
velocity.xnumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
velocity.ynumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.
velocity.znumberyeshiddenhiddenhiddenhiddenreadonlyexposedinternalnot_applicablehidden: Internal engine component not shown in normal inspector authoring.

Defaults:

JSON
{
  "type": "VelocityComponent",
  "velocity": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "angularVelocity": {
    "x": 0,
    "y": 0,
    "z": 0
  }
}

WaterComponent

Planar water surface with quality-gated reflection intent.

FieldValue
Classificationatomic
CategoryRendering
Component palette visibilitydefault
Component palette notesRenderer presentation component; this contract covers existing metadata/projection without adding water feature depth.
Default component keycomponent.water
Authored contract versionv1
Catalog contract IDcomponent.water.contract.v1
Contract hashsha256:0fdd1b6a5ab839d671552076ac76edbad52a00260c3124895af689d9b33aa749
Field contract hashsha256:f7673b9dcdb9db08d49cbc342558af94094da4748d54bd46a64f016bd524c33f
Migration classnone
Capability packsrendering.v1
Runtime systemsNone
Runtime consumer statusprojected
Renderer consumer statusconsumed
Consumer status reasonread by web_client/spa/src/render/presentationWaterDecal.ts:buildWater [web_client/spa/src/render/presentationWaterDecal.ts:buildWater]
Replication policypublic/low
AuthorizationScript-mutable only through authorized Entity host operations; Runtime validates payloads with ComponentSchema.
Inspector fieldscolor, depth, depthBlendDistance, enabled, materialRef, normalMapAssetId, opacity, reflectionMode, refractionMode, shallowColor, shoreFoamStrength, surfaceLevel, waveProfile, waveStrength, width
Canonical field count21

Canonical Field Contract:

FieldDescriptionJSONRequiredFrontendAIMCPSDKScriptRuntimeRuntime consumerRenderer consumerInspectorValidation
colorOverall water tint.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
depthWater surface extent along Z, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1
depthBlendDistanceWater thickness distance driving screen-space refraction depth, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
enabledShow or hide the water surface.booleanyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/boolean
materialRefOptional authored material asset for the water surface; overrides the built-in color/wave shading when set.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: material_id<br>ref: asset id material
normalMapAssetIdTexture that adds fine ripple detail to the surface.stringnoexposedexposedexposedexposedexposedexposedprojectedconsumededitable/referencepattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$<br>semantic: asset_id<br>ref: asset id texture
opacityHow solid the surface looks, from 0 (clear) to 1 (opaque).numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
reflectionModeHow mirror reflections are produced; costlier modes look sharper.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, cheap, screen, planar, cube
refractionModeHow the underwater view bends: none, or true screen refraction.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/stringenum: none, screen
shallowColorTint where the water is shallow, near shores.stringyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/colorpattern: ^#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
shoreFoamStrengthAmount of foam where water meets land.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
surfaceLevelHeight of the water plane in the World.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/number
typestringyeshiddenhiddenhiddenhiddenhiddenhiddenconsumednot_applicablehidden: Component discriminator is selected by component type.
waveProfileFine wave shape controls: amplitude, frequency, speed, choppiness, and normal detail.objectyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/object
waveProfile.amplitudenumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
waveProfile.choppinessnumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
waveProfile.frequencynumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0.001
waveProfile.normalScalenumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
waveProfile.speednumberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0
waveStrengthOverall size of the waves, from calm to choppy.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 0<br>max: 1
widthWater surface extent along X, in world units.numberyesexposedexposedexposedexposedexposedexposedprojectedconsumededitable/numbermin: 1

Defaults:

JSON
{
  "type": "WaterComponent",
  "enabled": true,
  "width": 32,
  "depth": 32,
  "surfaceLevel": 0,
  "color": "#3aa7ff",
  "shallowColor": "#72d6ff",
  "opacity": 0.72,
  "waveStrength": 0.15,
  "waveProfile": {
    "amplitude": 0.15,
    "frequency": 1,
    "speed": 1,
    "choppiness": 0.25,
    "normalScale": 0.65
  },
  "reflectionMode": "cheap",
  "refractionMode": "none",
  "shoreFoamStrength": 0.35,
  "depthBlendDistance": 3
}
Was this helpful?Report an issueContact support

On this page