Skip to content

Trait System Architecture

How HoloScript's traits are defined, registered, resolved, and compiled.

Overview

The trait system is the semantic core of HoloScript. Traits like @physics, @grabbable, and @ai_agent describe WHAT an entity is. The compiler converts them to platform-specific code for each of the 18+ compile targets.

Architecture Diagram

text
┌─────────────────────────────────────────────────────────┐
│  TRAIT DEFINITION                                       │
│  src/traits/constants/ (118 category files)             │
│  ├── core-vr-interaction.ts  (grabbable, throwable...)  │
│  ├── physics.ts              (rigidbody, collider...)   │
│  ├── audio.ts                (spatial_audio, reverb...) │
│  └── ... 115 more categories                             │
└────────────────────┬────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  TRAIT REGISTRATION                                     │
│  CrossRealityTraitRegistry                              │
│  ├── register(trait)           Register single trait    │
│  ├── registerBuiltinTraits()   Bulk register all  │
│  ├── getByCategory(cat)        Query by category        │
│  └── getAllTraitIds()           List all registered IDs  │
│  File: src/compiler/platform/CrossRealityTraitRegistry  │
└────────────────────┬────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  TRAIT RESOLUTION                                       │
│                                                         │
│  TraitDependencyGraph          TraitSupportMatrix        │
│  ├── objectTraits (map)        ├── detectCategory()     │
│  └── resolve dependencies     └── platform support      │
│                                                         │
│  MoMETraitDatabase (Mixture-of-Memory-Experts)          │
│  ├── listCategory(cat)                                  │
│  └── TraitExpert.category                               │
└────────────────────┬────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  COMPILATION                                            │
│  CompilerDocumentationGenerator.groupTraitsByCategory()  │
│  → Feeds trait data to each platform compiler           │
│  → UnrealCompiler, VisionOSCompiler, WebGPUCompiler...  │
└─────────────────────────────────────────────────────────┘

Key Classes

ClassFileRole
CrossRealityTraitRegistrysrc/compiler/platform/CrossRealityTraitRegistry.tsCentral registry — register, query, bulk-load traits
TraitDependencyGraphsrc/compiler/TraitDependencyGraph.tsObject-to-trait mapping and dependency resolution
TraitSupportMatrixsrc/traits/TraitSupportMatrix.tsAuto-detect trait category from file path and content
MoMETraitDatabasesrc/traits/MoMETraitDatabase.tsMixture-of-Memory-Experts — expert-based trait lookup
ShaderTraitsrc/traits/ShaderTrait.tsShader compilation across targets
GLTFTraitsrc/traits/GLTFTrait.tsglTF extension requirements
AgentCardExportersrc/export/agent-card/AgentCardExporter.tsExport agent's supported traits

Adding a Custom Trait

typescript
import { CrossRealityTraitRegistry } from '@holoscript/core';

const registry = new CrossRealityTraitRegistry();
registry.registerBuiltinTraits(); // Load all built-in traits

// Register a custom trait
registry.register({
  id: 'my_custom_trait',
  category: 'gameplay',
  properties: {
    damage: { type: 'number', default: 10 },
    range: { type: 'number', default: 5 },
  },
  platforms: ['unity', 'unreal', 'r3f'], // Supported targets
});

Trait Categories

Traits are organized into 40+ high-level categories:

  • Spatial: physics, audio, visual, interaction, navigation
  • AI: agent, behavior, llm_agent, spatial_awareness
  • Networking: networked, crdt_state, voice_chat, multiplayer
  • Domain: iot, robotics, healthcare, education, web3, economy
  • Media: shader, gaussian_splat, pbr_material, particles

See docs/traits/ for the full per-category reference.

Released under the MIT License.