[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-meta-iwsdk-migrate-0-5":3,"mdc--250bfq-key":34,"related-org-meta-iwsdk-migrate-0-5":4207,"related-repo-meta-iwsdk-migrate-0-5":4397},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"iwsdk-migrate-0-5","migrate IWSDK applications to version 0.5","Migrate an IWSDK 0.4.x application to IWSDK 0.5.0. Use when upgrading an existing IWSDK project across the 0.5 boundary, replacing Meta Spatial Editor or GLXF, removing retired Vite plugins, moving UIKitML to runtime-loaded assets, adopting native scene JSON, or resolving 0.5 migration errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"meta","Meta Open Source","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmeta.png","facebook",[13,17,20],{"name":14,"slug":15,"type":16},"IWSDK","iwsdk","tag",{"name":18,"slug":19,"type":16},"Migration","migration",{"name":21,"slug":22,"type":16},"Engineering","engineering",358,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk","2026-08-03T06:27:16.342257",null,73,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"WebXR made simple. Full-featured framework with interactions, locomotion, and spatial UI. Powered by Three.js.","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk\u002Ftree\u002FHEAD\u002Fpackages\u002Fstarter-assets\u002Fclaude-injections\u002Fskills\u002Fiwsdk-migrate-0-5","---\nname: iwsdk-migrate-0-5\ndescription: Migrate an IWSDK 0.4.x application to IWSDK 0.5.0. Use when upgrading an existing IWSDK project across the 0.5 boundary, replacing Meta Spatial Editor or GLXF, removing retired Vite plugins, moving UIKitML to runtime-loaded assets, adopting native scene JSON, or resolving 0.5 migration errors.\nargument-hint: '[project path or migration problem]'\n---\n\n# Migrate IWSDK 0.4.x to 0.5.0\n\nUpgrade an existing IWSDK application without losing behavior or authored\ncontent. This is a migration, not a rewrite: preserve working runtime logic,\nmove only static composition into the native scene format, and prove parity in\nthe live runtime.\n\nUser context is in `$ARGUMENTS`.\n\n## Scope\n\nThis skill is specifically for `0.4.x -> 0.5.0`. First inspect the installed\nversions in `package.json` and the lockfile.\n\n- If the project is already on `0.5.x`, diagnose the reported issue without\n  replaying the migration.\n- If it is older than `0.4.x`, apply the intervening release migrations first.\n- If it is newer than `0.5.x`, use the skill for that release boundary instead.\n\nThe public comparison baseline for this guide is IWSDK `0.4.2`.\n\n## Non-negotiable safety rules\n\n1. Inspect `git status` before editing. Preserve all existing work; never reset,\n   clean, or overwrite unrelated changes.\n2. Create a recoverable checkpoint before transforming GLXF, scene files, or UI\n   sources. Use the project's established version-control workflow; do not\n   commit unless the user authorized commits.\n3. Inventory the app before deleting a package. A package is removable only\n   after all of its imports, config hooks, scripts, and generated outputs have\n   been replaced.\n4. Do not claim that a GLXF or Meta Spatial scene was migrated merely because\n   the app compiles. IWSDK 0.5 has no GLXF runtime fallback; reproduce and\n   verify the authored hierarchy in native scene JSON.\n5. Keep dynamic behavior in TypeScript\u002FJavaScript. Native scenes own static\n   composition, component values, transforms, lights, panels, and player-space\n   attachments—not runtime-dependent entity counts or game logic.\n\n## Release boundary at a glance\n\n| 0.4.x surface                                            | 0.5.0 replacement                                                                           |\n| -------------------------------------------------------- | ------------------------------------------------------------------------------------------- |\n| GLXF levels and `@iwsdk\u002Fglxf`                            | `public\u002Fscenes\u002F*.iwsdk.scene.json` loaded by `World.create({ level })`                      |\n| Meta Spatial Editor and `@iwsdk\u002Fvite-plugin-metaspatial` | IWSDK managed editor in `@iwsdk\u002Fvite-plugin-dev`                                            |\n| `@iwsdk\u002Fvite-plugin-uikitml` generated JSON              | Runtime parsing of source `.uikitml` files from `public\u002Fui\u002F`                                |\n| `@iwsdk\u002Fvite-plugin-gltf-optimizer`                      | Pre-optimized source assets or the normal IWSDK glTF asset pipeline                         |\n| `vite-plugin-mkcert`                                     | Cached, untrusted HTTPS certificate generated by `iwsdkDev()`                               |\n| `PanelUI.config: '.\u002Fui\u002Fpanel.json'`                      | UIKitML manifest asset whose URL is `\u002Fui\u002Fpanel.uikitml`                                     |\n| `PanelUI.maxWidth` \u002F `maxHeight`                         | Entity transform scale plus the document's intrinsic dimensions                             |\n| `features.spatialUI.kits`                                | `features.spatialUI.kit` and optional `componentSets`                                       |\n| `GLXFComponentRegistry`                                  | `defineComponents([...])` plus native scene component props                                 |\n| `LevelGLXFImporter` \u002F `LevelEntityCreator`               | `World.loadLevel()` for native scenes \u002F `World.createTransformEntity()` for dynamic objects |\n| `xr.features.lightEstimation`                            | Authored light components and `IBLTexture`\u002F`IBLGradient`                                    |\n| `render.defaultLighting` and implicit gradients          | Explicit dome and IBL components on each native scene root                                  |\n| Static entities created in the startup callback          | Asset\u002Fcomponent manifests plus native scene nodes                                           |\n| Ad hoc custom-component registration                     | `defineComponents([...])`, shared by runtime and editor                                     |\n\nThe `Interactable` compatibility alias still exists, but new and migrated code\nshould use `RayInteractable`.\n\n## Phase 1: Inventory before editing\n\nDetermine the package manager from the lockfile, then collect:\n\n- every `@iwsdk\u002F*` dependency and its installed version;\n- every import or config call involving `glxf`, `metaspatial`, `compileUIKit`,\n  `vite-plugin-uikitml`, `vite-plugin-gltf-optimizer`, `mkcert`, or\n  `IWSDK_DISABLE_MKCERT`;\n- every `World.create`, `World.loadLevel`, `PanelUI`, `ScreenSpace`,\n  `Visibility`, `render.defaultLighting`, and `features.spatialUI` use;\n- all `.glxf`, `.uikitml`, generated UI JSON, Meta Spatial project files, and\n  generated glTF folders;\n- static entity creation in startup code and the systems that later locate or\n  manipulate those entities.\n\nClassify each static object as one of:\n\n- `asset`: glTF, UIKitML, or a parentless procedural `Object3D` prototype;\n- `scene node`: a stable id, transform, asset reference, and component values;\n- `player-space child`: content attached to player, camera\u002Fhead, target-ray, or\n  grip space;\n- `dynamic`: keep in code because runtime state determines its existence.\n\nRecord the inventory in the migration report. This is the parity checklist.\n\n## Phase 2: Align packages\n\nUpdate every IWSDK package already used by the application to `0.5.0`. Keep\nIWSDK packages on one version; do not mix `0.4.x` and `0.5.x` packages.\n\nRemove these retired packages when present:\n\n```text\n@iwsdk\u002Fglxf\n@iwsdk\u002Fvite-plugin-gltf-optimizer\n@iwsdk\u002Fvite-plugin-metaspatial\n@iwsdk\u002Fvite-plugin-uikitml\nvite-plugin-mkcert\n```\n\nDo not add `@iwsdk\u002Fscene-composition` merely because it is new. It is already a\ncore dependency; add it directly only if application code imports its document,\nvalidation, or composition APIs.\n\nAfter editing `package.json`, use the project's package manager to update the\nlockfile and installation. Do not delete the lockfile as a shortcut.\n\n## Phase 3: Simplify Vite configuration\n\nRemove imports and plugin entries for mkcert, Meta Spatial, UIKitML compilation,\nand the glTF optimizer. A migrated config should follow this shape:\n\n```ts\nimport { iwsdkDev } from '@iwsdk\u002Fvite-plugin-dev';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    iwsdkDev({\n      assetManifest: '.\u002Fsrc\u002Fassets.ts',\n      componentManifest: '.\u002Fsrc\u002Fcomponents.ts',\n      emulator: { device: 'metaQuest3' },\n      ai: {},\n    }),\n  ],\n  server: { host: '0.0.0.0', open: false },\n});\n```\n\nImportant behavior:\n\n- `ai: {}` opens the headed, Playwright-managed collaborate browser. Use\n  `ai: { mode: 'agent' }` only when explicitly requesting headless automation.\n- The managed browser is the browser surface. Keep Vite `server.open` false so\n  it does not create a second unmanaged tab.\n- HTTPS is on by default. IWSDK caches an untrusted certificate without\n  installing a local CA. Managed Playwright accepts it automatically; a\n  physical headset shows the expected certificate warning.\n- Use `iwsdkDev({ https: false })` only when HTTP is intentional. A custom\n  `server.https` certificate takes precedence.\n- If agent tooling is not wanted but the managed editor is, use\n  `workspace: { enabled: true }` instead of `ai`.\n- Keep `assetManifest` and `componentManifest` free of system imports and side\n  effects so the editor can load them in its own realm.\n\nRemove obsolete generated-output ignore rules only after confirming nothing\nelse creates those directories. Common stale paths are generated UIKit JSON,\nMeta Spatial GLXF output, and plugin-generated glTF folders.\n\n## Phase 4: Create shared manifests\n\nMove the asset catalog into a dedicated module:\n\n```ts\n\u002F\u002F src\u002Fassets.ts\nimport { AssetType, type AssetManifest } from '@iwsdk\u002Fcore';\n\nconst assets = {\n  environment: {\n    name: 'Environment',\n    type: AssetType.GLTF,\n    url: '\u002Fmodels\u002Fenvironment.glb',\n  },\n  'settings-panel': {\n    name: 'Settings Panel',\n    type: AssetType.UIKitML,\n    url: '\u002Fui\u002Fsettings.uikitml',\n  },\n} satisfies AssetManifest;\n\nexport default assets;\n```\n\nAn asset manifest may also contain parentless procedural `Object3D` prototypes.\nDo not place a prototype in the Three scene or parent it before registration.\n\nDeclare application components separately:\n\n```ts\n\u002F\u002F src\u002Fcomponents.ts\nimport { defineComponents } from '@iwsdk\u002Fcore';\nimport { MyBehavior } from '.\u002Fcomponents\u002Fmy-behavior.js';\n\nexport default defineComponents([MyBehavior]);\n```\n\nPass both exact exports to the runtime:\n\n```ts\nimport { World } from '@iwsdk\u002Fcore';\nimport assets from '.\u002Fassets.js';\nimport components from '.\u002Fcomponents.js';\n\nconst world = await World.create(container, {\n  assets,\n  components,\n  level: '.\u002Fscenes\u002Fmain.iwsdk.scene.json',\n});\n```\n\nThe same manifest modules must be configured in `iwsdkDev()`. Do not create a\nsecond editor-only catalog.\n\nDelete GLXF registry setup and field mappers. Native scene component objects\nstore ordinary props keyed by the component id, and the shared component\nmanifest supplies their schemas to both runtime and editor.\n\n## Phase 5: Replace GLXF or code-authored static layout\n\nCreate `public\u002Fscenes\u002Fmain.iwsdk.scene.json`. A minimal asset-backed panel and\nmodel look like this:\n\n```json\n{\n  \"version\": \"iwsdk.scene.v1\",\n  \"units\": \"meters\",\n  \"components\": {},\n  \"resources\": {},\n  \"nodes\": [\n    {\n      \"id\": \"environment\",\n      \"content\": { \"type\": \"asset\", \"asset\": \"environment\" },\n      \"transform\": { \"position\": [0, 0, 0] },\n      \"components\": { \"LocomotionEnvironment\": {} }\n    },\n    {\n      \"id\": \"settings-panel\",\n      \"content\": { \"type\": \"asset\", \"asset\": \"settings-panel\" },\n      \"transform\": {\n        \"position\": [0, 1.5, -2],\n        \"scale\": 0.4\n      },\n      \"components\": {\n        \"RayInteractable\": {},\n        \"ScreenSpace\": {\n          \"top\": \"20px\",\n          \"left\": \"20px\",\n          \"width\": \"25vw\",\n          \"height\": \"40vh\"\n        }\n      }\n    }\n  ]\n}\n```\n\nMigration rules:\n\n- Node `id` is the stable runtime\u002Feditor identity. Preserve meaningful unique\n  identifiers and use them from code; do not locate authored objects by array\n  position or display name.\n- Scene asset references must resolve in `src\u002Fassets.ts`.\n- Move static component values into the scene. Keep systems and event logic in\n  code.\n- Preserve hierarchy with `children`. Use a node `parent` of type\n  `player-space` for content attached to `player`, `camera`, `head`, target-ray,\n  or grip spaces.\n- Author the player origin under the top-level `player.transform`. Tracked\n  head\u002Fcontroller transforms are runtime-owned and overridden by XR tracking.\n- Use `visible: false` for authored initial visibility. Visibility and\n  Transform are intrinsic editor properties, not ordinary add-component UI.\n- Put fog, tone mapping, exposure, and shadow renderer settings under the scene\n  `environment` object. Use `DomeGradient`\u002F`DomeTexture` for the visible\n  background and `IBLGradient`\u002F`IBLTexture` for image-based lighting. There is\n  no separate AR background policy; immersive AR remains transparent.\n- Remove `render.defaultLighting`. IWSDK no longer injects either environment\n  component. Author both gradient components for the former default look, or\n  omit either independently when the scene intentionally has no background or\n  no image-based lighting.\n- Use IWSDK light components on scene nodes for authored ambient,\n  hemisphere, directional, point, spot, or rect-area lights.\n\nThere is no supported 0.5 runtime path for `.glxf`. For a Meta Spatial\u002FGLXF\nproject, use the old scene and screenshots as the visual reference, recreate\nits static hierarchy in native scene JSON, then compare multiple editor and\nruntime views before deleting legacy sources. If parity cannot be established,\nstop and report that migration as incomplete.\n\nCode-created dynamic entities can stay in code. It is valid to migrate the\nstatic shell first and leave gameplay spawning, effects, and variable-count\nobjects in systems.\n\n## Phase 6: Migrate UIKitML\n\nMove source UIKitML files into `public\u002Fui\u002F` and delete the generated intermediate\nJSON once no code references it. Change panel URLs from `.json` to `.uikitml`.\n\nFor editor-authored panels, prefer an `AssetType.UIKitML` manifest entry and an\nasset-backed scene node, as shown above. `PanelUI` remains a compatibility path\nfor code-created panels, but it is hidden from generic editor authoring.\n\nRemove `maxWidth` and `maxHeight` from `PanelUI`; 0.5 no longer performs a\nsecond fit. The UIKitML document owns intrinsic dimensions and the entity\ntransform owns world scale. Give `ScreenSpace` explicit CSS dimensions rather\nthan relying on `auto`.\n\nReplace spatial-UI kit configuration:\n\n```ts\nfeatures: {\n  spatialUI: {\n    kit: 'horizon',\n    componentSets: [],\n  },\n}\n```\n\nThe default kit is `horizon`. UIKitML can load TTF fonts declared with\n`@font-face`, including remote HTTPS URLs. Keep font loading CORS-compatible and\nverify text after the document reports stable layout; do not add arbitrary\nframe-count sleeps.\n\nLocate and manipulate an authored panel by stable scene and element ids:\n\n```ts\nimport { UIKitMLAsset } from '@iwsdk\u002Fcore';\n\nconst panel = world.requireSceneObject\u003CUIKitMLAsset>('settings-panel');\nconst saveButton = panel.requireElementById('save-button');\nsaveButton.addEventListener('click', onSave);\n```\n\nDo not traverse the entire Three scene looking for an anonymous\n`UIKitDocument`, and do not key logic off generated JSON paths.\n\n## Phase 7: Resolve behavior-level compatibility\n\nAudit these cases even when TypeScript compiles:\n\n- `createTransformEntity()` now gives every transform entity intrinsic\n  `Visibility`. If old code adds `Visibility` itself, change it to set the\n  existing value or assign `entity.object3D.visible`.\n- Prefer `RayInteractable` over the deprecated `Interactable` alias.\n- Remove `xr.features.lightEstimation`; IWSDK 0.5 no longer requests the\n  unsupported feature. Replace its visual role with authored lights and IBL.\n- Immersive AR always hides authored dome\u002Fbackground visuals for passthrough\n  while retaining IBL. Re-test any app that previously expected a virtual AR\n  background.\n- `AssetManager.getGLTF()` returns a fresh clone by default. Use\n  `{ shared: true }` only when shared mutable state is intentional.\n- `ScreenSpace` `width`\u002F`height: 'auto'` warns and falls back to viewport\n  sizing. Author explicit dimensions and test browser resize plus XR exit.\n- If custom UIKitML components were passed through `kits`, migrate them to\n  `componentSets`; select the built-in collection with `kit`.\n- If systems stored references to startup-created objects, replace static\n  object plumbing with `world.getSceneObject`, `requireSceneObject`,\n  `getSceneEntity`, or `requireSceneEntity` and stable node ids.\n- Preserve cleanup functions for signal\u002Fquery subscriptions and DOM\u002FUIKit\n  listeners. `World.destroy()` is now available for hot reload, tests, and\n  multi-world hosts.\n\n## Phase 8: Verify in increasing scope\n\nRun the project's normal formatter, typecheck, tests, and production build.\nThen verify the actual app:\n\n1. Start the 0.5 dev server and wait for `npx iwsdk dev status --json` to report\n   `browserConnected: true` and `browserCommandReady: true`.\n2. Validate and open every native scene. Fix missing manifest assets,\n   components, entity references, and file paths.\n3. In Editor view, compare hierarchy, transforms, visibility, authored lights,\n   panels, player-space children, and representative camera views with the\n   pre-migration inventory.\n4. In Runtime view, test every interaction and inspect console logs. Browser\n   screenshots are runtime-only by design.\n5. Enter and exit XR through both the application UI and the emulator\u002Fsession\n   controls. Confirm screen-space panels return after XR exit.\n6. Resize the desktop window and verify UIKit layout, clipping, fonts, rounded\n   corners, and perceived scale.\n7. If a physical headset is available, open the reported HTTPS network URL,\n   accept its self-signed-certificate warning, and enter XR.\n8. Run a production build from a clean install using the committed lockfile.\n\nDo not regenerate IWSDK's library reference corpus as part of an application\nmigration.\n\n## Completion report\n\nReturn a concise report containing:\n\n- detected source and target versions;\n- package additions\u002Fremovals;\n- old GLXF\u002FMeta Spatial\u002FUIKit generated artifacts retained or deleted;\n- scene, asset, component, and UIKitML files migrated;\n- behavior changes made for compatibility;\n- exact automated and live tests run;\n- any visual or physical-headset checks still requiring a human;\n- any unresolved parity gap that prevents calling the migration complete.\n\n## Optional 0.5 modernization (not required for parity)\n\nAfter migration is green, consider these additions separately: signal helpers\nre-exported from `@iwsdk\u002Fcore`, authored light components, raw XR frame\u002Fsession\nand hit-test helpers, `World.destroy()`, `World.loadSceneDocument()`, renderable\nasset instantiation, player-space authoring, and managed scene review tools.\nDo not mix these refactors into the compatibility pass unless the user asks.\n",{"data":35,"body":37},{"name":4,"description":6,"argument-hint":36},"[project path or migration problem]",{"type":38,"children":39},"root",[40,49,55,69,76,97,140,152,158,195,201,577,597,603,608,760,765,820,825,831,858,863,875,888,900,906,911,1325,1330,1431,1436,1442,1447,1827,1839,1844,1971,1976,2211,2223,2228,2234,2247,3187,3192,3357,3369,3374,3380,3406,3426,3465,3470,3573,3593,3598,3823,3836,3842,3847,4034,4040,4045,4110,4115,4121,4126,4169,4175,4201],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"migrate-iwsdk-04x-to-050",[46],{"type":47,"value":48},"text","Migrate IWSDK 0.4.x to 0.5.0",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Upgrade an existing IWSDK application without losing behavior or authored\ncontent. This is a migration, not a rewrite: preserve working runtime logic,\nmove only static composition into the native scene format, and prove parity in\nthe live runtime.",{"type":41,"tag":50,"props":56,"children":57},{},[58,60,67],{"type":47,"value":59},"User context is in ",{"type":41,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":47,"value":66},"$ARGUMENTS",{"type":47,"value":68},".",{"type":41,"tag":70,"props":71,"children":73},"h2",{"id":72},"scope",[74],{"type":47,"value":75},"Scope",{"type":41,"tag":50,"props":77,"children":78},{},[79,81,87,89,95],{"type":47,"value":80},"This skill is specifically for ",{"type":41,"tag":61,"props":82,"children":84},{"className":83},[],[85],{"type":47,"value":86},"0.4.x -> 0.5.0",{"type":47,"value":88},". First inspect the installed\nversions in ",{"type":41,"tag":61,"props":90,"children":92},{"className":91},[],[93],{"type":47,"value":94},"package.json",{"type":47,"value":96}," and the lockfile.",{"type":41,"tag":98,"props":99,"children":100},"ul",{},[101,115,128],{"type":41,"tag":102,"props":103,"children":104},"li",{},[105,107,113],{"type":47,"value":106},"If the project is already on ",{"type":41,"tag":61,"props":108,"children":110},{"className":109},[],[111],{"type":47,"value":112},"0.5.x",{"type":47,"value":114},", diagnose the reported issue without\nreplaying the migration.",{"type":41,"tag":102,"props":116,"children":117},{},[118,120,126],{"type":47,"value":119},"If it is older than ",{"type":41,"tag":61,"props":121,"children":123},{"className":122},[],[124],{"type":47,"value":125},"0.4.x",{"type":47,"value":127},", apply the intervening release migrations first.",{"type":41,"tag":102,"props":129,"children":130},{},[131,133,138],{"type":47,"value":132},"If it is newer than ",{"type":41,"tag":61,"props":134,"children":136},{"className":135},[],[137],{"type":47,"value":112},{"type":47,"value":139},", use the skill for that release boundary instead.",{"type":41,"tag":50,"props":141,"children":142},{},[143,145,151],{"type":47,"value":144},"The public comparison baseline for this guide is IWSDK ",{"type":41,"tag":61,"props":146,"children":148},{"className":147},[],[149],{"type":47,"value":150},"0.4.2",{"type":47,"value":68},{"type":41,"tag":70,"props":153,"children":155},{"id":154},"non-negotiable-safety-rules",[156],{"type":47,"value":157},"Non-negotiable safety rules",{"type":41,"tag":159,"props":160,"children":161},"ol",{},[162,175,180,185,190],{"type":41,"tag":102,"props":163,"children":164},{},[165,167,173],{"type":47,"value":166},"Inspect ",{"type":41,"tag":61,"props":168,"children":170},{"className":169},[],[171],{"type":47,"value":172},"git status",{"type":47,"value":174}," before editing. Preserve all existing work; never reset,\nclean, or overwrite unrelated changes.",{"type":41,"tag":102,"props":176,"children":177},{},[178],{"type":47,"value":179},"Create a recoverable checkpoint before transforming GLXF, scene files, or UI\nsources. Use the project's established version-control workflow; do not\ncommit unless the user authorized commits.",{"type":41,"tag":102,"props":181,"children":182},{},[183],{"type":47,"value":184},"Inventory the app before deleting a package. A package is removable only\nafter all of its imports, config hooks, scripts, and generated outputs have\nbeen replaced.",{"type":41,"tag":102,"props":186,"children":187},{},[188],{"type":47,"value":189},"Do not claim that a GLXF or Meta Spatial scene was migrated merely because\nthe app compiles. IWSDK 0.5 has no GLXF runtime fallback; reproduce and\nverify the authored hierarchy in native scene JSON.",{"type":41,"tag":102,"props":191,"children":192},{},[193],{"type":47,"value":194},"Keep dynamic behavior in TypeScript\u002FJavaScript. Native scenes own static\ncomposition, component values, transforms, lights, panels, and player-space\nattachments—not runtime-dependent entity counts or game logic.",{"type":41,"tag":70,"props":196,"children":198},{"id":197},"release-boundary-at-a-glance",[199],{"type":47,"value":200},"Release boundary at a glance",{"type":41,"tag":202,"props":203,"children":204},"table",{},[205,224],{"type":41,"tag":206,"props":207,"children":208},"thead",{},[209],{"type":41,"tag":210,"props":211,"children":212},"tr",{},[213,219],{"type":41,"tag":214,"props":215,"children":216},"th",{},[217],{"type":47,"value":218},"0.4.x surface",{"type":41,"tag":214,"props":220,"children":221},{},[222],{"type":47,"value":223},"0.5.0 replacement",{"type":41,"tag":225,"props":226,"children":227},"tbody",{},[228,260,285,318,335,358,381,406,435,458,496,527,546,559],{"type":41,"tag":210,"props":229,"children":230},{},[231,243],{"type":41,"tag":232,"props":233,"children":234},"td",{},[235,237],{"type":47,"value":236},"GLXF levels and ",{"type":41,"tag":61,"props":238,"children":240},{"className":239},[],[241],{"type":47,"value":242},"@iwsdk\u002Fglxf",{"type":41,"tag":232,"props":244,"children":245},{},[246,252,254],{"type":41,"tag":61,"props":247,"children":249},{"className":248},[],[250],{"type":47,"value":251},"public\u002Fscenes\u002F*.iwsdk.scene.json",{"type":47,"value":253}," loaded by ",{"type":41,"tag":61,"props":255,"children":257},{"className":256},[],[258],{"type":47,"value":259},"World.create({ level })",{"type":41,"tag":210,"props":261,"children":262},{},[263,274],{"type":41,"tag":232,"props":264,"children":265},{},[266,268],{"type":47,"value":267},"Meta Spatial Editor and ",{"type":41,"tag":61,"props":269,"children":271},{"className":270},[],[272],{"type":47,"value":273},"@iwsdk\u002Fvite-plugin-metaspatial",{"type":41,"tag":232,"props":275,"children":276},{},[277,279],{"type":47,"value":278},"IWSDK managed editor in ",{"type":41,"tag":61,"props":280,"children":282},{"className":281},[],[283],{"type":47,"value":284},"@iwsdk\u002Fvite-plugin-dev",{"type":41,"tag":210,"props":286,"children":287},{},[288,299],{"type":41,"tag":232,"props":289,"children":290},{},[291,297],{"type":41,"tag":61,"props":292,"children":294},{"className":293},[],[295],{"type":47,"value":296},"@iwsdk\u002Fvite-plugin-uikitml",{"type":47,"value":298}," generated JSON",{"type":41,"tag":232,"props":300,"children":301},{},[302,304,310,312],{"type":47,"value":303},"Runtime parsing of source ",{"type":41,"tag":61,"props":305,"children":307},{"className":306},[],[308],{"type":47,"value":309},".uikitml",{"type":47,"value":311}," files from ",{"type":41,"tag":61,"props":313,"children":315},{"className":314},[],[316],{"type":47,"value":317},"public\u002Fui\u002F",{"type":41,"tag":210,"props":319,"children":320},{},[321,330],{"type":41,"tag":232,"props":322,"children":323},{},[324],{"type":41,"tag":61,"props":325,"children":327},{"className":326},[],[328],{"type":47,"value":329},"@iwsdk\u002Fvite-plugin-gltf-optimizer",{"type":41,"tag":232,"props":331,"children":332},{},[333],{"type":47,"value":334},"Pre-optimized source assets or the normal IWSDK glTF asset pipeline",{"type":41,"tag":210,"props":336,"children":337},{},[338,347],{"type":41,"tag":232,"props":339,"children":340},{},[341],{"type":41,"tag":61,"props":342,"children":344},{"className":343},[],[345],{"type":47,"value":346},"vite-plugin-mkcert",{"type":41,"tag":232,"props":348,"children":349},{},[350,352],{"type":47,"value":351},"Cached, untrusted HTTPS certificate generated by ",{"type":41,"tag":61,"props":353,"children":355},{"className":354},[],[356],{"type":47,"value":357},"iwsdkDev()",{"type":41,"tag":210,"props":359,"children":360},{},[361,370],{"type":41,"tag":232,"props":362,"children":363},{},[364],{"type":41,"tag":61,"props":365,"children":367},{"className":366},[],[368],{"type":47,"value":369},"PanelUI.config: '.\u002Fui\u002Fpanel.json'",{"type":41,"tag":232,"props":371,"children":372},{},[373,375],{"type":47,"value":374},"UIKitML manifest asset whose URL is ",{"type":41,"tag":61,"props":376,"children":378},{"className":377},[],[379],{"type":47,"value":380},"\u002Fui\u002Fpanel.uikitml",{"type":41,"tag":210,"props":382,"children":383},{},[384,401],{"type":41,"tag":232,"props":385,"children":386},{},[387,393,395],{"type":41,"tag":61,"props":388,"children":390},{"className":389},[],[391],{"type":47,"value":392},"PanelUI.maxWidth",{"type":47,"value":394}," \u002F ",{"type":41,"tag":61,"props":396,"children":398},{"className":397},[],[399],{"type":47,"value":400},"maxHeight",{"type":41,"tag":232,"props":402,"children":403},{},[404],{"type":47,"value":405},"Entity transform scale plus the document's intrinsic dimensions",{"type":41,"tag":210,"props":407,"children":408},{},[409,418],{"type":41,"tag":232,"props":410,"children":411},{},[412],{"type":41,"tag":61,"props":413,"children":415},{"className":414},[],[416],{"type":47,"value":417},"features.spatialUI.kits",{"type":41,"tag":232,"props":419,"children":420},{},[421,427,429],{"type":41,"tag":61,"props":422,"children":424},{"className":423},[],[425],{"type":47,"value":426},"features.spatialUI.kit",{"type":47,"value":428}," and optional ",{"type":41,"tag":61,"props":430,"children":432},{"className":431},[],[433],{"type":47,"value":434},"componentSets",{"type":41,"tag":210,"props":436,"children":437},{},[438,447],{"type":41,"tag":232,"props":439,"children":440},{},[441],{"type":41,"tag":61,"props":442,"children":444},{"className":443},[],[445],{"type":47,"value":446},"GLXFComponentRegistry",{"type":41,"tag":232,"props":448,"children":449},{},[450,456],{"type":41,"tag":61,"props":451,"children":453},{"className":452},[],[454],{"type":47,"value":455},"defineComponents([...])",{"type":47,"value":457}," plus native scene component props",{"type":41,"tag":210,"props":459,"children":460},{},[461,477],{"type":41,"tag":232,"props":462,"children":463},{},[464,470,471],{"type":41,"tag":61,"props":465,"children":467},{"className":466},[],[468],{"type":47,"value":469},"LevelGLXFImporter",{"type":47,"value":394},{"type":41,"tag":61,"props":472,"children":474},{"className":473},[],[475],{"type":47,"value":476},"LevelEntityCreator",{"type":41,"tag":232,"props":478,"children":479},{},[480,486,488,494],{"type":41,"tag":61,"props":481,"children":483},{"className":482},[],[484],{"type":47,"value":485},"World.loadLevel()",{"type":47,"value":487}," for native scenes \u002F ",{"type":41,"tag":61,"props":489,"children":491},{"className":490},[],[492],{"type":47,"value":493},"World.createTransformEntity()",{"type":47,"value":495}," for dynamic objects",{"type":41,"tag":210,"props":497,"children":498},{},[499,508],{"type":41,"tag":232,"props":500,"children":501},{},[502],{"type":41,"tag":61,"props":503,"children":505},{"className":504},[],[506],{"type":47,"value":507},"xr.features.lightEstimation",{"type":41,"tag":232,"props":509,"children":510},{},[511,513,519,521],{"type":47,"value":512},"Authored light components and ",{"type":41,"tag":61,"props":514,"children":516},{"className":515},[],[517],{"type":47,"value":518},"IBLTexture",{"type":47,"value":520},"\u002F",{"type":41,"tag":61,"props":522,"children":524},{"className":523},[],[525],{"type":47,"value":526},"IBLGradient",{"type":41,"tag":210,"props":528,"children":529},{},[530,541],{"type":41,"tag":232,"props":531,"children":532},{},[533,539],{"type":41,"tag":61,"props":534,"children":536},{"className":535},[],[537],{"type":47,"value":538},"render.defaultLighting",{"type":47,"value":540}," and implicit gradients",{"type":41,"tag":232,"props":542,"children":543},{},[544],{"type":47,"value":545},"Explicit dome and IBL components on each native scene root",{"type":41,"tag":210,"props":547,"children":548},{},[549,554],{"type":41,"tag":232,"props":550,"children":551},{},[552],{"type":47,"value":553},"Static entities created in the startup callback",{"type":41,"tag":232,"props":555,"children":556},{},[557],{"type":47,"value":558},"Asset\u002Fcomponent manifests plus native scene nodes",{"type":41,"tag":210,"props":560,"children":561},{},[562,567],{"type":41,"tag":232,"props":563,"children":564},{},[565],{"type":47,"value":566},"Ad hoc custom-component registration",{"type":41,"tag":232,"props":568,"children":569},{},[570,575],{"type":41,"tag":61,"props":571,"children":573},{"className":572},[],[574],{"type":47,"value":455},{"type":47,"value":576},", shared by runtime and editor",{"type":41,"tag":50,"props":578,"children":579},{},[580,582,588,590,596],{"type":47,"value":581},"The ",{"type":41,"tag":61,"props":583,"children":585},{"className":584},[],[586],{"type":47,"value":587},"Interactable",{"type":47,"value":589}," compatibility alias still exists, but new and migrated code\nshould use ",{"type":41,"tag":61,"props":591,"children":593},{"className":592},[],[594],{"type":47,"value":595},"RayInteractable",{"type":47,"value":68},{"type":41,"tag":70,"props":598,"children":600},{"id":599},"phase-1-inventory-before-editing",[601],{"type":47,"value":602},"Phase 1: Inventory before editing",{"type":41,"tag":50,"props":604,"children":605},{},[606],{"type":47,"value":607},"Determine the package manager from the lockfile, then collect:",{"type":41,"tag":98,"props":609,"children":610},{},[611,624,682,736,755],{"type":41,"tag":102,"props":612,"children":613},{},[614,616,622],{"type":47,"value":615},"every ",{"type":41,"tag":61,"props":617,"children":619},{"className":618},[],[620],{"type":47,"value":621},"@iwsdk\u002F*",{"type":47,"value":623}," dependency and its installed version;",{"type":41,"tag":102,"props":625,"children":626},{},[627,629,635,637,643,644,650,652,658,659,665,666,672,674,680],{"type":47,"value":628},"every import or config call involving ",{"type":41,"tag":61,"props":630,"children":632},{"className":631},[],[633],{"type":47,"value":634},"glxf",{"type":47,"value":636},", ",{"type":41,"tag":61,"props":638,"children":640},{"className":639},[],[641],{"type":47,"value":642},"metaspatial",{"type":47,"value":636},{"type":41,"tag":61,"props":645,"children":647},{"className":646},[],[648],{"type":47,"value":649},"compileUIKit",{"type":47,"value":651},",\n",{"type":41,"tag":61,"props":653,"children":655},{"className":654},[],[656],{"type":47,"value":657},"vite-plugin-uikitml",{"type":47,"value":636},{"type":41,"tag":61,"props":660,"children":662},{"className":661},[],[663],{"type":47,"value":664},"vite-plugin-gltf-optimizer",{"type":47,"value":636},{"type":41,"tag":61,"props":667,"children":669},{"className":668},[],[670],{"type":47,"value":671},"mkcert",{"type":47,"value":673},", or\n",{"type":41,"tag":61,"props":675,"children":677},{"className":676},[],[678],{"type":47,"value":679},"IWSDK_DISABLE_MKCERT",{"type":47,"value":681},";",{"type":41,"tag":102,"props":683,"children":684},{},[685,686,692,693,699,700,706,707,713,714,720,721,726,728,734],{"type":47,"value":615},{"type":41,"tag":61,"props":687,"children":689},{"className":688},[],[690],{"type":47,"value":691},"World.create",{"type":47,"value":636},{"type":41,"tag":61,"props":694,"children":696},{"className":695},[],[697],{"type":47,"value":698},"World.loadLevel",{"type":47,"value":636},{"type":41,"tag":61,"props":701,"children":703},{"className":702},[],[704],{"type":47,"value":705},"PanelUI",{"type":47,"value":636},{"type":41,"tag":61,"props":708,"children":710},{"className":709},[],[711],{"type":47,"value":712},"ScreenSpace",{"type":47,"value":651},{"type":41,"tag":61,"props":715,"children":717},{"className":716},[],[718],{"type":47,"value":719},"Visibility",{"type":47,"value":636},{"type":41,"tag":61,"props":722,"children":724},{"className":723},[],[725],{"type":47,"value":538},{"type":47,"value":727},", and ",{"type":41,"tag":61,"props":729,"children":731},{"className":730},[],[732],{"type":47,"value":733},"features.spatialUI",{"type":47,"value":735}," use;",{"type":41,"tag":102,"props":737,"children":738},{},[739,741,747,748,753],{"type":47,"value":740},"all ",{"type":41,"tag":61,"props":742,"children":744},{"className":743},[],[745],{"type":47,"value":746},".glxf",{"type":47,"value":636},{"type":41,"tag":61,"props":749,"children":751},{"className":750},[],[752],{"type":47,"value":309},{"type":47,"value":754},", generated UI JSON, Meta Spatial project files, and\ngenerated glTF folders;",{"type":41,"tag":102,"props":756,"children":757},{},[758],{"type":47,"value":759},"static entity creation in startup code and the systems that later locate or\nmanipulate those entities.",{"type":41,"tag":50,"props":761,"children":762},{},[763],{"type":47,"value":764},"Classify each static object as one of:",{"type":41,"tag":98,"props":766,"children":767},{},[768,787,798,809],{"type":41,"tag":102,"props":769,"children":770},{},[771,777,779,785],{"type":41,"tag":61,"props":772,"children":774},{"className":773},[],[775],{"type":47,"value":776},"asset",{"type":47,"value":778},": glTF, UIKitML, or a parentless procedural ",{"type":41,"tag":61,"props":780,"children":782},{"className":781},[],[783],{"type":47,"value":784},"Object3D",{"type":47,"value":786}," prototype;",{"type":41,"tag":102,"props":788,"children":789},{},[790,796],{"type":41,"tag":61,"props":791,"children":793},{"className":792},[],[794],{"type":47,"value":795},"scene node",{"type":47,"value":797},": a stable id, transform, asset reference, and component values;",{"type":41,"tag":102,"props":799,"children":800},{},[801,807],{"type":41,"tag":61,"props":802,"children":804},{"className":803},[],[805],{"type":47,"value":806},"player-space child",{"type":47,"value":808},": content attached to player, camera\u002Fhead, target-ray, or\ngrip space;",{"type":41,"tag":102,"props":810,"children":811},{},[812,818],{"type":41,"tag":61,"props":813,"children":815},{"className":814},[],[816],{"type":47,"value":817},"dynamic",{"type":47,"value":819},": keep in code because runtime state determines its existence.",{"type":41,"tag":50,"props":821,"children":822},{},[823],{"type":47,"value":824},"Record the inventory in the migration report. This is the parity checklist.",{"type":41,"tag":70,"props":826,"children":828},{"id":827},"phase-2-align-packages",[829],{"type":47,"value":830},"Phase 2: Align packages",{"type":41,"tag":50,"props":832,"children":833},{},[834,836,842,844,849,851,856],{"type":47,"value":835},"Update every IWSDK package already used by the application to ",{"type":41,"tag":61,"props":837,"children":839},{"className":838},[],[840],{"type":47,"value":841},"0.5.0",{"type":47,"value":843},". Keep\nIWSDK packages on one version; do not mix ",{"type":41,"tag":61,"props":845,"children":847},{"className":846},[],[848],{"type":47,"value":125},{"type":47,"value":850}," and ",{"type":41,"tag":61,"props":852,"children":854},{"className":853},[],[855],{"type":47,"value":112},{"type":47,"value":857}," packages.",{"type":41,"tag":50,"props":859,"children":860},{},[861],{"type":47,"value":862},"Remove these retired packages when present:",{"type":41,"tag":864,"props":865,"children":870},"pre",{"className":866,"code":868,"language":47,"meta":869},[867],"language-text","@iwsdk\u002Fglxf\n@iwsdk\u002Fvite-plugin-gltf-optimizer\n@iwsdk\u002Fvite-plugin-metaspatial\n@iwsdk\u002Fvite-plugin-uikitml\nvite-plugin-mkcert\n","",[871],{"type":41,"tag":61,"props":872,"children":873},{"__ignoreMap":869},[874],{"type":47,"value":868},{"type":41,"tag":50,"props":876,"children":877},{},[878,880,886],{"type":47,"value":879},"Do not add ",{"type":41,"tag":61,"props":881,"children":883},{"className":882},[],[884],{"type":47,"value":885},"@iwsdk\u002Fscene-composition",{"type":47,"value":887}," merely because it is new. It is already a\ncore dependency; add it directly only if application code imports its document,\nvalidation, or composition APIs.",{"type":41,"tag":50,"props":889,"children":890},{},[891,893,898],{"type":47,"value":892},"After editing ",{"type":41,"tag":61,"props":894,"children":896},{"className":895},[],[897],{"type":47,"value":94},{"type":47,"value":899},", use the project's package manager to update the\nlockfile and installation. Do not delete the lockfile as a shortcut.",{"type":41,"tag":70,"props":901,"children":903},{"id":902},"phase-3-simplify-vite-configuration",[904],{"type":47,"value":905},"Phase 3: Simplify Vite configuration",{"type":41,"tag":50,"props":907,"children":908},{},[909],{"type":47,"value":910},"Remove imports and plugin entries for mkcert, Meta Spatial, UIKitML compilation,\nand the glTF optimizer. A migrated config should follow this shape:",{"type":41,"tag":864,"props":912,"children":916},{"className":913,"code":914,"language":915,"meta":869,"style":869},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { iwsdkDev } from '@iwsdk\u002Fvite-plugin-dev';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    iwsdkDev({\n      assetManifest: '.\u002Fsrc\u002Fassets.ts',\n      componentManifest: '.\u002Fsrc\u002Fcomponents.ts',\n      emulator: { device: 'metaQuest3' },\n      ai: {},\n    }),\n  ],\n  server: { host: '0.0.0.0', open: false },\n});\n","ts",[917],{"type":41,"tag":61,"props":918,"children":919},{"__ignoreMap":869},[920,974,1016,1026,1055,1075,1092,1122,1152,1196,1214,1232,1245,1308],{"type":41,"tag":921,"props":922,"children":925},"span",{"class":923,"line":924},"line",1,[926,932,938,944,949,954,959,964,969],{"type":41,"tag":921,"props":927,"children":929},{"style":928},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[930],{"type":47,"value":931},"import",{"type":41,"tag":921,"props":933,"children":935},{"style":934},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[936],{"type":47,"value":937}," {",{"type":41,"tag":921,"props":939,"children":941},{"style":940},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[942],{"type":47,"value":943}," iwsdkDev",{"type":41,"tag":921,"props":945,"children":946},{"style":934},[947],{"type":47,"value":948}," }",{"type":41,"tag":921,"props":950,"children":951},{"style":928},[952],{"type":47,"value":953}," from",{"type":41,"tag":921,"props":955,"children":956},{"style":934},[957],{"type":47,"value":958}," '",{"type":41,"tag":921,"props":960,"children":962},{"style":961},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[963],{"type":47,"value":284},{"type":41,"tag":921,"props":965,"children":966},{"style":934},[967],{"type":47,"value":968},"'",{"type":41,"tag":921,"props":970,"children":971},{"style":934},[972],{"type":47,"value":973},";\n",{"type":41,"tag":921,"props":975,"children":977},{"class":923,"line":976},2,[978,982,986,991,995,999,1003,1008,1012],{"type":41,"tag":921,"props":979,"children":980},{"style":928},[981],{"type":47,"value":931},{"type":41,"tag":921,"props":983,"children":984},{"style":934},[985],{"type":47,"value":937},{"type":41,"tag":921,"props":987,"children":988},{"style":940},[989],{"type":47,"value":990}," defineConfig",{"type":41,"tag":921,"props":992,"children":993},{"style":934},[994],{"type":47,"value":948},{"type":41,"tag":921,"props":996,"children":997},{"style":928},[998],{"type":47,"value":953},{"type":41,"tag":921,"props":1000,"children":1001},{"style":934},[1002],{"type":47,"value":958},{"type":41,"tag":921,"props":1004,"children":1005},{"style":961},[1006],{"type":47,"value":1007},"vite",{"type":41,"tag":921,"props":1009,"children":1010},{"style":934},[1011],{"type":47,"value":968},{"type":41,"tag":921,"props":1013,"children":1014},{"style":934},[1015],{"type":47,"value":973},{"type":41,"tag":921,"props":1017,"children":1019},{"class":923,"line":1018},3,[1020],{"type":41,"tag":921,"props":1021,"children":1023},{"emptyLinePlaceholder":1022},true,[1024],{"type":47,"value":1025},"\n",{"type":41,"tag":921,"props":1027,"children":1029},{"class":923,"line":1028},4,[1030,1035,1040,1045,1050],{"type":41,"tag":921,"props":1031,"children":1032},{"style":928},[1033],{"type":47,"value":1034},"export",{"type":41,"tag":921,"props":1036,"children":1037},{"style":928},[1038],{"type":47,"value":1039}," default",{"type":41,"tag":921,"props":1041,"children":1043},{"style":1042},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1044],{"type":47,"value":990},{"type":41,"tag":921,"props":1046,"children":1047},{"style":940},[1048],{"type":47,"value":1049},"(",{"type":41,"tag":921,"props":1051,"children":1052},{"style":934},[1053],{"type":47,"value":1054},"{\n",{"type":41,"tag":921,"props":1056,"children":1058},{"class":923,"line":1057},5,[1059,1065,1070],{"type":41,"tag":921,"props":1060,"children":1062},{"style":1061},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1063],{"type":47,"value":1064},"  plugins",{"type":41,"tag":921,"props":1066,"children":1067},{"style":934},[1068],{"type":47,"value":1069},":",{"type":41,"tag":921,"props":1071,"children":1072},{"style":940},[1073],{"type":47,"value":1074}," [\n",{"type":41,"tag":921,"props":1076,"children":1078},{"class":923,"line":1077},6,[1079,1084,1088],{"type":41,"tag":921,"props":1080,"children":1081},{"style":1042},[1082],{"type":47,"value":1083},"    iwsdkDev",{"type":41,"tag":921,"props":1085,"children":1086},{"style":940},[1087],{"type":47,"value":1049},{"type":41,"tag":921,"props":1089,"children":1090},{"style":934},[1091],{"type":47,"value":1054},{"type":41,"tag":921,"props":1093,"children":1095},{"class":923,"line":1094},7,[1096,1101,1105,1109,1114,1118],{"type":41,"tag":921,"props":1097,"children":1098},{"style":1061},[1099],{"type":47,"value":1100},"      assetManifest",{"type":41,"tag":921,"props":1102,"children":1103},{"style":934},[1104],{"type":47,"value":1069},{"type":41,"tag":921,"props":1106,"children":1107},{"style":934},[1108],{"type":47,"value":958},{"type":41,"tag":921,"props":1110,"children":1111},{"style":961},[1112],{"type":47,"value":1113},".\u002Fsrc\u002Fassets.ts",{"type":41,"tag":921,"props":1115,"children":1116},{"style":934},[1117],{"type":47,"value":968},{"type":41,"tag":921,"props":1119,"children":1120},{"style":934},[1121],{"type":47,"value":651},{"type":41,"tag":921,"props":1123,"children":1125},{"class":923,"line":1124},8,[1126,1131,1135,1139,1144,1148],{"type":41,"tag":921,"props":1127,"children":1128},{"style":1061},[1129],{"type":47,"value":1130},"      componentManifest",{"type":41,"tag":921,"props":1132,"children":1133},{"style":934},[1134],{"type":47,"value":1069},{"type":41,"tag":921,"props":1136,"children":1137},{"style":934},[1138],{"type":47,"value":958},{"type":41,"tag":921,"props":1140,"children":1141},{"style":961},[1142],{"type":47,"value":1143},".\u002Fsrc\u002Fcomponents.ts",{"type":41,"tag":921,"props":1145,"children":1146},{"style":934},[1147],{"type":47,"value":968},{"type":41,"tag":921,"props":1149,"children":1150},{"style":934},[1151],{"type":47,"value":651},{"type":41,"tag":921,"props":1153,"children":1155},{"class":923,"line":1154},9,[1156,1161,1165,1169,1174,1178,1182,1187,1191],{"type":41,"tag":921,"props":1157,"children":1158},{"style":1061},[1159],{"type":47,"value":1160},"      emulator",{"type":41,"tag":921,"props":1162,"children":1163},{"style":934},[1164],{"type":47,"value":1069},{"type":41,"tag":921,"props":1166,"children":1167},{"style":934},[1168],{"type":47,"value":937},{"type":41,"tag":921,"props":1170,"children":1171},{"style":1061},[1172],{"type":47,"value":1173}," device",{"type":41,"tag":921,"props":1175,"children":1176},{"style":934},[1177],{"type":47,"value":1069},{"type":41,"tag":921,"props":1179,"children":1180},{"style":934},[1181],{"type":47,"value":958},{"type":41,"tag":921,"props":1183,"children":1184},{"style":961},[1185],{"type":47,"value":1186},"metaQuest3",{"type":41,"tag":921,"props":1188,"children":1189},{"style":934},[1190],{"type":47,"value":968},{"type":41,"tag":921,"props":1192,"children":1193},{"style":934},[1194],{"type":47,"value":1195}," },\n",{"type":41,"tag":921,"props":1197,"children":1199},{"class":923,"line":1198},10,[1200,1205,1209],{"type":41,"tag":921,"props":1201,"children":1202},{"style":1061},[1203],{"type":47,"value":1204},"      ai",{"type":41,"tag":921,"props":1206,"children":1207},{"style":934},[1208],{"type":47,"value":1069},{"type":41,"tag":921,"props":1210,"children":1211},{"style":934},[1212],{"type":47,"value":1213}," {},\n",{"type":41,"tag":921,"props":1215,"children":1217},{"class":923,"line":1216},11,[1218,1223,1228],{"type":41,"tag":921,"props":1219,"children":1220},{"style":934},[1221],{"type":47,"value":1222},"    }",{"type":41,"tag":921,"props":1224,"children":1225},{"style":940},[1226],{"type":47,"value":1227},")",{"type":41,"tag":921,"props":1229,"children":1230},{"style":934},[1231],{"type":47,"value":651},{"type":41,"tag":921,"props":1233,"children":1235},{"class":923,"line":1234},12,[1236,1241],{"type":41,"tag":921,"props":1237,"children":1238},{"style":940},[1239],{"type":47,"value":1240},"  ]",{"type":41,"tag":921,"props":1242,"children":1243},{"style":934},[1244],{"type":47,"value":651},{"type":41,"tag":921,"props":1246,"children":1248},{"class":923,"line":1247},13,[1249,1254,1258,1262,1267,1271,1275,1280,1284,1289,1294,1298,1304],{"type":41,"tag":921,"props":1250,"children":1251},{"style":1061},[1252],{"type":47,"value":1253},"  server",{"type":41,"tag":921,"props":1255,"children":1256},{"style":934},[1257],{"type":47,"value":1069},{"type":41,"tag":921,"props":1259,"children":1260},{"style":934},[1261],{"type":47,"value":937},{"type":41,"tag":921,"props":1263,"children":1264},{"style":1061},[1265],{"type":47,"value":1266}," host",{"type":41,"tag":921,"props":1268,"children":1269},{"style":934},[1270],{"type":47,"value":1069},{"type":41,"tag":921,"props":1272,"children":1273},{"style":934},[1274],{"type":47,"value":958},{"type":41,"tag":921,"props":1276,"children":1277},{"style":961},[1278],{"type":47,"value":1279},"0.0.0.0",{"type":41,"tag":921,"props":1281,"children":1282},{"style":934},[1283],{"type":47,"value":968},{"type":41,"tag":921,"props":1285,"children":1286},{"style":934},[1287],{"type":47,"value":1288},",",{"type":41,"tag":921,"props":1290,"children":1291},{"style":1061},[1292],{"type":47,"value":1293}," open",{"type":41,"tag":921,"props":1295,"children":1296},{"style":934},[1297],{"type":47,"value":1069},{"type":41,"tag":921,"props":1299,"children":1301},{"style":1300},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1302],{"type":47,"value":1303}," false",{"type":41,"tag":921,"props":1305,"children":1306},{"style":934},[1307],{"type":47,"value":1195},{"type":41,"tag":921,"props":1309,"children":1311},{"class":923,"line":1310},14,[1312,1317,1321],{"type":41,"tag":921,"props":1313,"children":1314},{"style":934},[1315],{"type":47,"value":1316},"}",{"type":41,"tag":921,"props":1318,"children":1319},{"style":940},[1320],{"type":47,"value":1227},{"type":41,"tag":921,"props":1322,"children":1323},{"style":934},[1324],{"type":47,"value":973},{"type":41,"tag":50,"props":1326,"children":1327},{},[1328],{"type":47,"value":1329},"Important behavior:",{"type":41,"tag":98,"props":1331,"children":1332},{},[1333,1352,1365,1370,1391,1411],{"type":41,"tag":102,"props":1334,"children":1335},{},[1336,1342,1344,1350],{"type":41,"tag":61,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":47,"value":1341},"ai: {}",{"type":47,"value":1343}," opens the headed, Playwright-managed collaborate browser. Use\n",{"type":41,"tag":61,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":47,"value":1349},"ai: { mode: 'agent' }",{"type":47,"value":1351}," only when explicitly requesting headless automation.",{"type":41,"tag":102,"props":1353,"children":1354},{},[1355,1357,1363],{"type":47,"value":1356},"The managed browser is the browser surface. Keep Vite ",{"type":41,"tag":61,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":47,"value":1362},"server.open",{"type":47,"value":1364}," false so\nit does not create a second unmanaged tab.",{"type":41,"tag":102,"props":1366,"children":1367},{},[1368],{"type":47,"value":1369},"HTTPS is on by default. IWSDK caches an untrusted certificate without\ninstalling a local CA. Managed Playwright accepts it automatically; a\nphysical headset shows the expected certificate warning.",{"type":41,"tag":102,"props":1371,"children":1372},{},[1373,1375,1381,1383,1389],{"type":47,"value":1374},"Use ",{"type":41,"tag":61,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":47,"value":1380},"iwsdkDev({ https: false })",{"type":47,"value":1382}," only when HTTP is intentional. A custom\n",{"type":41,"tag":61,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":47,"value":1388},"server.https",{"type":47,"value":1390}," certificate takes precedence.",{"type":41,"tag":102,"props":1392,"children":1393},{},[1394,1396,1402,1404,1410],{"type":47,"value":1395},"If agent tooling is not wanted but the managed editor is, use\n",{"type":41,"tag":61,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":47,"value":1401},"workspace: { enabled: true }",{"type":47,"value":1403}," instead of ",{"type":41,"tag":61,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":47,"value":1409},"ai",{"type":47,"value":68},{"type":41,"tag":102,"props":1412,"children":1413},{},[1414,1416,1422,1423,1429],{"type":47,"value":1415},"Keep ",{"type":41,"tag":61,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":47,"value":1421},"assetManifest",{"type":47,"value":850},{"type":41,"tag":61,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":47,"value":1428},"componentManifest",{"type":47,"value":1430}," free of system imports and side\neffects so the editor can load them in its own realm.",{"type":41,"tag":50,"props":1432,"children":1433},{},[1434],{"type":47,"value":1435},"Remove obsolete generated-output ignore rules only after confirming nothing\nelse creates those directories. Common stale paths are generated UIKit JSON,\nMeta Spatial GLXF output, and plugin-generated glTF folders.",{"type":41,"tag":70,"props":1437,"children":1439},{"id":1438},"phase-4-create-shared-manifests",[1440],{"type":47,"value":1441},"Phase 4: Create shared manifests",{"type":41,"tag":50,"props":1443,"children":1444},{},[1445],{"type":47,"value":1446},"Move the asset catalog into a dedicated module:",{"type":41,"tag":864,"props":1448,"children":1450},{"className":913,"code":1449,"language":915,"meta":869,"style":869},"\u002F\u002F src\u002Fassets.ts\nimport { AssetType, type AssetManifest } from '@iwsdk\u002Fcore';\n\nconst assets = {\n  environment: {\n    name: 'Environment',\n    type: AssetType.GLTF,\n    url: '\u002Fmodels\u002Fenvironment.glb',\n  },\n  'settings-panel': {\n    name: 'Settings Panel',\n    type: AssetType.UIKitML,\n    url: '\u002Fui\u002Fsettings.uikitml',\n  },\n} satisfies AssetManifest;\n\nexport default assets;\n",[1451],{"type":41,"tag":61,"props":1452,"children":1453},{"__ignoreMap":869},[1454,1463,1518,1525,1549,1565,1594,1623,1652,1660,1685,1713,1741,1769,1776,1798,1806],{"type":41,"tag":921,"props":1455,"children":1456},{"class":923,"line":924},[1457],{"type":41,"tag":921,"props":1458,"children":1460},{"style":1459},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1461],{"type":47,"value":1462},"\u002F\u002F src\u002Fassets.ts\n",{"type":41,"tag":921,"props":1464,"children":1465},{"class":923,"line":976},[1466,1470,1474,1479,1483,1488,1493,1497,1501,1505,1510,1514],{"type":41,"tag":921,"props":1467,"children":1468},{"style":928},[1469],{"type":47,"value":931},{"type":41,"tag":921,"props":1471,"children":1472},{"style":934},[1473],{"type":47,"value":937},{"type":41,"tag":921,"props":1475,"children":1476},{"style":940},[1477],{"type":47,"value":1478}," AssetType",{"type":41,"tag":921,"props":1480,"children":1481},{"style":934},[1482],{"type":47,"value":1288},{"type":41,"tag":921,"props":1484,"children":1485},{"style":928},[1486],{"type":47,"value":1487}," type",{"type":41,"tag":921,"props":1489,"children":1490},{"style":940},[1491],{"type":47,"value":1492}," AssetManifest",{"type":41,"tag":921,"props":1494,"children":1495},{"style":934},[1496],{"type":47,"value":948},{"type":41,"tag":921,"props":1498,"children":1499},{"style":928},[1500],{"type":47,"value":953},{"type":41,"tag":921,"props":1502,"children":1503},{"style":934},[1504],{"type":47,"value":958},{"type":41,"tag":921,"props":1506,"children":1507},{"style":961},[1508],{"type":47,"value":1509},"@iwsdk\u002Fcore",{"type":41,"tag":921,"props":1511,"children":1512},{"style":934},[1513],{"type":47,"value":968},{"type":41,"tag":921,"props":1515,"children":1516},{"style":934},[1517],{"type":47,"value":973},{"type":41,"tag":921,"props":1519,"children":1520},{"class":923,"line":1018},[1521],{"type":41,"tag":921,"props":1522,"children":1523},{"emptyLinePlaceholder":1022},[1524],{"type":47,"value":1025},{"type":41,"tag":921,"props":1526,"children":1527},{"class":923,"line":1028},[1528,1534,1539,1544],{"type":41,"tag":921,"props":1529,"children":1531},{"style":1530},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1532],{"type":47,"value":1533},"const",{"type":41,"tag":921,"props":1535,"children":1536},{"style":940},[1537],{"type":47,"value":1538}," assets ",{"type":41,"tag":921,"props":1540,"children":1541},{"style":934},[1542],{"type":47,"value":1543},"=",{"type":41,"tag":921,"props":1545,"children":1546},{"style":934},[1547],{"type":47,"value":1548}," {\n",{"type":41,"tag":921,"props":1550,"children":1551},{"class":923,"line":1057},[1552,1557,1561],{"type":41,"tag":921,"props":1553,"children":1554},{"style":1061},[1555],{"type":47,"value":1556},"  environment",{"type":41,"tag":921,"props":1558,"children":1559},{"style":934},[1560],{"type":47,"value":1069},{"type":41,"tag":921,"props":1562,"children":1563},{"style":934},[1564],{"type":47,"value":1548},{"type":41,"tag":921,"props":1566,"children":1567},{"class":923,"line":1077},[1568,1573,1577,1581,1586,1590],{"type":41,"tag":921,"props":1569,"children":1570},{"style":1061},[1571],{"type":47,"value":1572},"    name",{"type":41,"tag":921,"props":1574,"children":1575},{"style":934},[1576],{"type":47,"value":1069},{"type":41,"tag":921,"props":1578,"children":1579},{"style":934},[1580],{"type":47,"value":958},{"type":41,"tag":921,"props":1582,"children":1583},{"style":961},[1584],{"type":47,"value":1585},"Environment",{"type":41,"tag":921,"props":1587,"children":1588},{"style":934},[1589],{"type":47,"value":968},{"type":41,"tag":921,"props":1591,"children":1592},{"style":934},[1593],{"type":47,"value":651},{"type":41,"tag":921,"props":1595,"children":1596},{"class":923,"line":1094},[1597,1602,1606,1610,1614,1619],{"type":41,"tag":921,"props":1598,"children":1599},{"style":1061},[1600],{"type":47,"value":1601},"    type",{"type":41,"tag":921,"props":1603,"children":1604},{"style":934},[1605],{"type":47,"value":1069},{"type":41,"tag":921,"props":1607,"children":1608},{"style":940},[1609],{"type":47,"value":1478},{"type":41,"tag":921,"props":1611,"children":1612},{"style":934},[1613],{"type":47,"value":68},{"type":41,"tag":921,"props":1615,"children":1616},{"style":940},[1617],{"type":47,"value":1618},"GLTF",{"type":41,"tag":921,"props":1620,"children":1621},{"style":934},[1622],{"type":47,"value":651},{"type":41,"tag":921,"props":1624,"children":1625},{"class":923,"line":1124},[1626,1631,1635,1639,1644,1648],{"type":41,"tag":921,"props":1627,"children":1628},{"style":1061},[1629],{"type":47,"value":1630},"    url",{"type":41,"tag":921,"props":1632,"children":1633},{"style":934},[1634],{"type":47,"value":1069},{"type":41,"tag":921,"props":1636,"children":1637},{"style":934},[1638],{"type":47,"value":958},{"type":41,"tag":921,"props":1640,"children":1641},{"style":961},[1642],{"type":47,"value":1643},"\u002Fmodels\u002Fenvironment.glb",{"type":41,"tag":921,"props":1645,"children":1646},{"style":934},[1647],{"type":47,"value":968},{"type":41,"tag":921,"props":1649,"children":1650},{"style":934},[1651],{"type":47,"value":651},{"type":41,"tag":921,"props":1653,"children":1654},{"class":923,"line":1154},[1655],{"type":41,"tag":921,"props":1656,"children":1657},{"style":934},[1658],{"type":47,"value":1659},"  },\n",{"type":41,"tag":921,"props":1661,"children":1662},{"class":923,"line":1198},[1663,1668,1673,1677,1681],{"type":41,"tag":921,"props":1664,"children":1665},{"style":934},[1666],{"type":47,"value":1667},"  '",{"type":41,"tag":921,"props":1669,"children":1670},{"style":1061},[1671],{"type":47,"value":1672},"settings-panel",{"type":41,"tag":921,"props":1674,"children":1675},{"style":934},[1676],{"type":47,"value":968},{"type":41,"tag":921,"props":1678,"children":1679},{"style":934},[1680],{"type":47,"value":1069},{"type":41,"tag":921,"props":1682,"children":1683},{"style":934},[1684],{"type":47,"value":1548},{"type":41,"tag":921,"props":1686,"children":1687},{"class":923,"line":1216},[1688,1692,1696,1700,1705,1709],{"type":41,"tag":921,"props":1689,"children":1690},{"style":1061},[1691],{"type":47,"value":1572},{"type":41,"tag":921,"props":1693,"children":1694},{"style":934},[1695],{"type":47,"value":1069},{"type":41,"tag":921,"props":1697,"children":1698},{"style":934},[1699],{"type":47,"value":958},{"type":41,"tag":921,"props":1701,"children":1702},{"style":961},[1703],{"type":47,"value":1704},"Settings Panel",{"type":41,"tag":921,"props":1706,"children":1707},{"style":934},[1708],{"type":47,"value":968},{"type":41,"tag":921,"props":1710,"children":1711},{"style":934},[1712],{"type":47,"value":651},{"type":41,"tag":921,"props":1714,"children":1715},{"class":923,"line":1234},[1716,1720,1724,1728,1732,1737],{"type":41,"tag":921,"props":1717,"children":1718},{"style":1061},[1719],{"type":47,"value":1601},{"type":41,"tag":921,"props":1721,"children":1722},{"style":934},[1723],{"type":47,"value":1069},{"type":41,"tag":921,"props":1725,"children":1726},{"style":940},[1727],{"type":47,"value":1478},{"type":41,"tag":921,"props":1729,"children":1730},{"style":934},[1731],{"type":47,"value":68},{"type":41,"tag":921,"props":1733,"children":1734},{"style":940},[1735],{"type":47,"value":1736},"UIKitML",{"type":41,"tag":921,"props":1738,"children":1739},{"style":934},[1740],{"type":47,"value":651},{"type":41,"tag":921,"props":1742,"children":1743},{"class":923,"line":1247},[1744,1748,1752,1756,1761,1765],{"type":41,"tag":921,"props":1745,"children":1746},{"style":1061},[1747],{"type":47,"value":1630},{"type":41,"tag":921,"props":1749,"children":1750},{"style":934},[1751],{"type":47,"value":1069},{"type":41,"tag":921,"props":1753,"children":1754},{"style":934},[1755],{"type":47,"value":958},{"type":41,"tag":921,"props":1757,"children":1758},{"style":961},[1759],{"type":47,"value":1760},"\u002Fui\u002Fsettings.uikitml",{"type":41,"tag":921,"props":1762,"children":1763},{"style":934},[1764],{"type":47,"value":968},{"type":41,"tag":921,"props":1766,"children":1767},{"style":934},[1768],{"type":47,"value":651},{"type":41,"tag":921,"props":1770,"children":1771},{"class":923,"line":1310},[1772],{"type":41,"tag":921,"props":1773,"children":1774},{"style":934},[1775],{"type":47,"value":1659},{"type":41,"tag":921,"props":1777,"children":1779},{"class":923,"line":1778},15,[1780,1784,1789,1794],{"type":41,"tag":921,"props":1781,"children":1782},{"style":934},[1783],{"type":47,"value":1316},{"type":41,"tag":921,"props":1785,"children":1786},{"style":928},[1787],{"type":47,"value":1788}," satisfies",{"type":41,"tag":921,"props":1790,"children":1792},{"style":1791},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1793],{"type":47,"value":1492},{"type":41,"tag":921,"props":1795,"children":1796},{"style":934},[1797],{"type":47,"value":973},{"type":41,"tag":921,"props":1799,"children":1801},{"class":923,"line":1800},16,[1802],{"type":41,"tag":921,"props":1803,"children":1804},{"emptyLinePlaceholder":1022},[1805],{"type":47,"value":1025},{"type":41,"tag":921,"props":1807,"children":1809},{"class":923,"line":1808},17,[1810,1814,1818,1823],{"type":41,"tag":921,"props":1811,"children":1812},{"style":928},[1813],{"type":47,"value":1034},{"type":41,"tag":921,"props":1815,"children":1816},{"style":928},[1817],{"type":47,"value":1039},{"type":41,"tag":921,"props":1819,"children":1820},{"style":940},[1821],{"type":47,"value":1822}," assets",{"type":41,"tag":921,"props":1824,"children":1825},{"style":934},[1826],{"type":47,"value":973},{"type":41,"tag":50,"props":1828,"children":1829},{},[1830,1832,1837],{"type":47,"value":1831},"An asset manifest may also contain parentless procedural ",{"type":41,"tag":61,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":47,"value":784},{"type":47,"value":1838}," prototypes.\nDo not place a prototype in the Three scene or parent it before registration.",{"type":41,"tag":50,"props":1840,"children":1841},{},[1842],{"type":47,"value":1843},"Declare application components separately:",{"type":41,"tag":864,"props":1845,"children":1847},{"className":913,"code":1846,"language":915,"meta":869,"style":869},"\u002F\u002F src\u002Fcomponents.ts\nimport { defineComponents } from '@iwsdk\u002Fcore';\nimport { MyBehavior } from '.\u002Fcomponents\u002Fmy-behavior.js';\n\nexport default defineComponents([MyBehavior]);\n",[1848],{"type":41,"tag":61,"props":1849,"children":1850},{"__ignoreMap":869},[1851,1859,1899,1940,1947],{"type":41,"tag":921,"props":1852,"children":1853},{"class":923,"line":924},[1854],{"type":41,"tag":921,"props":1855,"children":1856},{"style":1459},[1857],{"type":47,"value":1858},"\u002F\u002F src\u002Fcomponents.ts\n",{"type":41,"tag":921,"props":1860,"children":1861},{"class":923,"line":976},[1862,1866,1870,1875,1879,1883,1887,1891,1895],{"type":41,"tag":921,"props":1863,"children":1864},{"style":928},[1865],{"type":47,"value":931},{"type":41,"tag":921,"props":1867,"children":1868},{"style":934},[1869],{"type":47,"value":937},{"type":41,"tag":921,"props":1871,"children":1872},{"style":940},[1873],{"type":47,"value":1874}," defineComponents",{"type":41,"tag":921,"props":1876,"children":1877},{"style":934},[1878],{"type":47,"value":948},{"type":41,"tag":921,"props":1880,"children":1881},{"style":928},[1882],{"type":47,"value":953},{"type":41,"tag":921,"props":1884,"children":1885},{"style":934},[1886],{"type":47,"value":958},{"type":41,"tag":921,"props":1888,"children":1889},{"style":961},[1890],{"type":47,"value":1509},{"type":41,"tag":921,"props":1892,"children":1893},{"style":934},[1894],{"type":47,"value":968},{"type":41,"tag":921,"props":1896,"children":1897},{"style":934},[1898],{"type":47,"value":973},{"type":41,"tag":921,"props":1900,"children":1901},{"class":923,"line":1018},[1902,1906,1910,1915,1919,1923,1927,1932,1936],{"type":41,"tag":921,"props":1903,"children":1904},{"style":928},[1905],{"type":47,"value":931},{"type":41,"tag":921,"props":1907,"children":1908},{"style":934},[1909],{"type":47,"value":937},{"type":41,"tag":921,"props":1911,"children":1912},{"style":940},[1913],{"type":47,"value":1914}," MyBehavior",{"type":41,"tag":921,"props":1916,"children":1917},{"style":934},[1918],{"type":47,"value":948},{"type":41,"tag":921,"props":1920,"children":1921},{"style":928},[1922],{"type":47,"value":953},{"type":41,"tag":921,"props":1924,"children":1925},{"style":934},[1926],{"type":47,"value":958},{"type":41,"tag":921,"props":1928,"children":1929},{"style":961},[1930],{"type":47,"value":1931},".\u002Fcomponents\u002Fmy-behavior.js",{"type":41,"tag":921,"props":1933,"children":1934},{"style":934},[1935],{"type":47,"value":968},{"type":41,"tag":921,"props":1937,"children":1938},{"style":934},[1939],{"type":47,"value":973},{"type":41,"tag":921,"props":1941,"children":1942},{"class":923,"line":1028},[1943],{"type":41,"tag":921,"props":1944,"children":1945},{"emptyLinePlaceholder":1022},[1946],{"type":47,"value":1025},{"type":41,"tag":921,"props":1948,"children":1949},{"class":923,"line":1057},[1950,1954,1958,1962,1967],{"type":41,"tag":921,"props":1951,"children":1952},{"style":928},[1953],{"type":47,"value":1034},{"type":41,"tag":921,"props":1955,"children":1956},{"style":928},[1957],{"type":47,"value":1039},{"type":41,"tag":921,"props":1959,"children":1960},{"style":1042},[1961],{"type":47,"value":1874},{"type":41,"tag":921,"props":1963,"children":1964},{"style":940},[1965],{"type":47,"value":1966},"([MyBehavior])",{"type":41,"tag":921,"props":1968,"children":1969},{"style":934},[1970],{"type":47,"value":973},{"type":41,"tag":50,"props":1972,"children":1973},{},[1974],{"type":47,"value":1975},"Pass both exact exports to the runtime:",{"type":41,"tag":864,"props":1977,"children":1979},{"className":913,"code":1978,"language":915,"meta":869,"style":869},"import { World } from '@iwsdk\u002Fcore';\nimport assets from '.\u002Fassets.js';\nimport components from '.\u002Fcomponents.js';\n\nconst world = await World.create(container, {\n  assets,\n  components,\n  level: '.\u002Fscenes\u002Fmain.iwsdk.scene.json',\n});\n",[1980],{"type":41,"tag":61,"props":1981,"children":1982},{"__ignoreMap":869},[1983,2023,2056,2089,2096,2143,2155,2167,2196],{"type":41,"tag":921,"props":1984,"children":1985},{"class":923,"line":924},[1986,1990,1994,1999,2003,2007,2011,2015,2019],{"type":41,"tag":921,"props":1987,"children":1988},{"style":928},[1989],{"type":47,"value":931},{"type":41,"tag":921,"props":1991,"children":1992},{"style":934},[1993],{"type":47,"value":937},{"type":41,"tag":921,"props":1995,"children":1996},{"style":940},[1997],{"type":47,"value":1998}," World",{"type":41,"tag":921,"props":2000,"children":2001},{"style":934},[2002],{"type":47,"value":948},{"type":41,"tag":921,"props":2004,"children":2005},{"style":928},[2006],{"type":47,"value":953},{"type":41,"tag":921,"props":2008,"children":2009},{"style":934},[2010],{"type":47,"value":958},{"type":41,"tag":921,"props":2012,"children":2013},{"style":961},[2014],{"type":47,"value":1509},{"type":41,"tag":921,"props":2016,"children":2017},{"style":934},[2018],{"type":47,"value":968},{"type":41,"tag":921,"props":2020,"children":2021},{"style":934},[2022],{"type":47,"value":973},{"type":41,"tag":921,"props":2024,"children":2025},{"class":923,"line":976},[2026,2030,2034,2039,2043,2048,2052],{"type":41,"tag":921,"props":2027,"children":2028},{"style":928},[2029],{"type":47,"value":931},{"type":41,"tag":921,"props":2031,"children":2032},{"style":940},[2033],{"type":47,"value":1538},{"type":41,"tag":921,"props":2035,"children":2036},{"style":928},[2037],{"type":47,"value":2038},"from",{"type":41,"tag":921,"props":2040,"children":2041},{"style":934},[2042],{"type":47,"value":958},{"type":41,"tag":921,"props":2044,"children":2045},{"style":961},[2046],{"type":47,"value":2047},".\u002Fassets.js",{"type":41,"tag":921,"props":2049,"children":2050},{"style":934},[2051],{"type":47,"value":968},{"type":41,"tag":921,"props":2053,"children":2054},{"style":934},[2055],{"type":47,"value":973},{"type":41,"tag":921,"props":2057,"children":2058},{"class":923,"line":1018},[2059,2063,2068,2072,2076,2081,2085],{"type":41,"tag":921,"props":2060,"children":2061},{"style":928},[2062],{"type":47,"value":931},{"type":41,"tag":921,"props":2064,"children":2065},{"style":940},[2066],{"type":47,"value":2067}," components ",{"type":41,"tag":921,"props":2069,"children":2070},{"style":928},[2071],{"type":47,"value":2038},{"type":41,"tag":921,"props":2073,"children":2074},{"style":934},[2075],{"type":47,"value":958},{"type":41,"tag":921,"props":2077,"children":2078},{"style":961},[2079],{"type":47,"value":2080},".\u002Fcomponents.js",{"type":41,"tag":921,"props":2082,"children":2083},{"style":934},[2084],{"type":47,"value":968},{"type":41,"tag":921,"props":2086,"children":2087},{"style":934},[2088],{"type":47,"value":973},{"type":41,"tag":921,"props":2090,"children":2091},{"class":923,"line":1028},[2092],{"type":41,"tag":921,"props":2093,"children":2094},{"emptyLinePlaceholder":1022},[2095],{"type":47,"value":1025},{"type":41,"tag":921,"props":2097,"children":2098},{"class":923,"line":1057},[2099,2103,2108,2112,2117,2121,2125,2130,2135,2139],{"type":41,"tag":921,"props":2100,"children":2101},{"style":1530},[2102],{"type":47,"value":1533},{"type":41,"tag":921,"props":2104,"children":2105},{"style":940},[2106],{"type":47,"value":2107}," world ",{"type":41,"tag":921,"props":2109,"children":2110},{"style":934},[2111],{"type":47,"value":1543},{"type":41,"tag":921,"props":2113,"children":2114},{"style":928},[2115],{"type":47,"value":2116}," await",{"type":41,"tag":921,"props":2118,"children":2119},{"style":940},[2120],{"type":47,"value":1998},{"type":41,"tag":921,"props":2122,"children":2123},{"style":934},[2124],{"type":47,"value":68},{"type":41,"tag":921,"props":2126,"children":2127},{"style":1042},[2128],{"type":47,"value":2129},"create",{"type":41,"tag":921,"props":2131,"children":2132},{"style":940},[2133],{"type":47,"value":2134},"(container",{"type":41,"tag":921,"props":2136,"children":2137},{"style":934},[2138],{"type":47,"value":1288},{"type":41,"tag":921,"props":2140,"children":2141},{"style":934},[2142],{"type":47,"value":1548},{"type":41,"tag":921,"props":2144,"children":2145},{"class":923,"line":1077},[2146,2151],{"type":41,"tag":921,"props":2147,"children":2148},{"style":940},[2149],{"type":47,"value":2150},"  assets",{"type":41,"tag":921,"props":2152,"children":2153},{"style":934},[2154],{"type":47,"value":651},{"type":41,"tag":921,"props":2156,"children":2157},{"class":923,"line":1094},[2158,2163],{"type":41,"tag":921,"props":2159,"children":2160},{"style":940},[2161],{"type":47,"value":2162},"  components",{"type":41,"tag":921,"props":2164,"children":2165},{"style":934},[2166],{"type":47,"value":651},{"type":41,"tag":921,"props":2168,"children":2169},{"class":923,"line":1124},[2170,2175,2179,2183,2188,2192],{"type":41,"tag":921,"props":2171,"children":2172},{"style":1061},[2173],{"type":47,"value":2174},"  level",{"type":41,"tag":921,"props":2176,"children":2177},{"style":934},[2178],{"type":47,"value":1069},{"type":41,"tag":921,"props":2180,"children":2181},{"style":934},[2182],{"type":47,"value":958},{"type":41,"tag":921,"props":2184,"children":2185},{"style":961},[2186],{"type":47,"value":2187},".\u002Fscenes\u002Fmain.iwsdk.scene.json",{"type":41,"tag":921,"props":2189,"children":2190},{"style":934},[2191],{"type":47,"value":968},{"type":41,"tag":921,"props":2193,"children":2194},{"style":934},[2195],{"type":47,"value":651},{"type":41,"tag":921,"props":2197,"children":2198},{"class":923,"line":1154},[2199,2203,2207],{"type":41,"tag":921,"props":2200,"children":2201},{"style":934},[2202],{"type":47,"value":1316},{"type":41,"tag":921,"props":2204,"children":2205},{"style":940},[2206],{"type":47,"value":1227},{"type":41,"tag":921,"props":2208,"children":2209},{"style":934},[2210],{"type":47,"value":973},{"type":41,"tag":50,"props":2212,"children":2213},{},[2214,2216,2221],{"type":47,"value":2215},"The same manifest modules must be configured in ",{"type":41,"tag":61,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":47,"value":357},{"type":47,"value":2222},". Do not create a\nsecond editor-only catalog.",{"type":41,"tag":50,"props":2224,"children":2225},{},[2226],{"type":47,"value":2227},"Delete GLXF registry setup and field mappers. Native scene component objects\nstore ordinary props keyed by the component id, and the shared component\nmanifest supplies their schemas to both runtime and editor.",{"type":41,"tag":70,"props":2229,"children":2231},{"id":2230},"phase-5-replace-glxf-or-code-authored-static-layout",[2232],{"type":47,"value":2233},"Phase 5: Replace GLXF or code-authored static layout",{"type":41,"tag":50,"props":2235,"children":2236},{},[2237,2239,2245],{"type":47,"value":2238},"Create ",{"type":41,"tag":61,"props":2240,"children":2242},{"className":2241},[],[2243],{"type":47,"value":2244},"public\u002Fscenes\u002Fmain.iwsdk.scene.json",{"type":47,"value":2246},". A minimal asset-backed panel and\nmodel look like this:",{"type":41,"tag":864,"props":2248,"children":2252},{"className":2249,"code":2250,"language":2251,"meta":869,"style":869},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"version\": \"iwsdk.scene.v1\",\n  \"units\": \"meters\",\n  \"components\": {},\n  \"resources\": {},\n  \"nodes\": [\n    {\n      \"id\": \"environment\",\n      \"content\": { \"type\": \"asset\", \"asset\": \"environment\" },\n      \"transform\": { \"position\": [0, 0, 0] },\n      \"components\": { \"LocomotionEnvironment\": {} }\n    },\n    {\n      \"id\": \"settings-panel\",\n      \"content\": { \"type\": \"asset\", \"asset\": \"settings-panel\" },\n      \"transform\": {\n        \"position\": [0, 1.5, -2],\n        \"scale\": 0.4\n      },\n      \"components\": {\n        \"RayInteractable\": {},\n        \"ScreenSpace\": {\n          \"top\": \"20px\",\n          \"left\": \"20px\",\n          \"width\": \"25vw\",\n          \"height\": \"40vh\"\n        }\n      }\n    }\n  ]\n}\n","json",[2253],{"type":41,"tag":61,"props":2254,"children":2255},{"__ignoreMap":869},[2256,2263,2303,2340,2364,2388,2412,2420,2458,2548,2625,2675,2683,2690,2725,2812,2835,2886,2912,2921,2945,2969,2993,3032,3069,3107,3142,3151,3160,3169,3178],{"type":41,"tag":921,"props":2257,"children":2258},{"class":923,"line":924},[2259],{"type":41,"tag":921,"props":2260,"children":2261},{"style":934},[2262],{"type":47,"value":1054},{"type":41,"tag":921,"props":2264,"children":2265},{"class":923,"line":976},[2266,2271,2276,2281,2285,2290,2295,2299],{"type":41,"tag":921,"props":2267,"children":2268},{"style":934},[2269],{"type":47,"value":2270},"  \"",{"type":41,"tag":921,"props":2272,"children":2273},{"style":1530},[2274],{"type":47,"value":2275},"version",{"type":41,"tag":921,"props":2277,"children":2278},{"style":934},[2279],{"type":47,"value":2280},"\"",{"type":41,"tag":921,"props":2282,"children":2283},{"style":934},[2284],{"type":47,"value":1069},{"type":41,"tag":921,"props":2286,"children":2287},{"style":934},[2288],{"type":47,"value":2289}," \"",{"type":41,"tag":921,"props":2291,"children":2292},{"style":961},[2293],{"type":47,"value":2294},"iwsdk.scene.v1",{"type":41,"tag":921,"props":2296,"children":2297},{"style":934},[2298],{"type":47,"value":2280},{"type":41,"tag":921,"props":2300,"children":2301},{"style":934},[2302],{"type":47,"value":651},{"type":41,"tag":921,"props":2304,"children":2305},{"class":923,"line":1018},[2306,2310,2315,2319,2323,2327,2332,2336],{"type":41,"tag":921,"props":2307,"children":2308},{"style":934},[2309],{"type":47,"value":2270},{"type":41,"tag":921,"props":2311,"children":2312},{"style":1530},[2313],{"type":47,"value":2314},"units",{"type":41,"tag":921,"props":2316,"children":2317},{"style":934},[2318],{"type":47,"value":2280},{"type":41,"tag":921,"props":2320,"children":2321},{"style":934},[2322],{"type":47,"value":1069},{"type":41,"tag":921,"props":2324,"children":2325},{"style":934},[2326],{"type":47,"value":2289},{"type":41,"tag":921,"props":2328,"children":2329},{"style":961},[2330],{"type":47,"value":2331},"meters",{"type":41,"tag":921,"props":2333,"children":2334},{"style":934},[2335],{"type":47,"value":2280},{"type":41,"tag":921,"props":2337,"children":2338},{"style":934},[2339],{"type":47,"value":651},{"type":41,"tag":921,"props":2341,"children":2342},{"class":923,"line":1028},[2343,2347,2352,2356,2360],{"type":41,"tag":921,"props":2344,"children":2345},{"style":934},[2346],{"type":47,"value":2270},{"type":41,"tag":921,"props":2348,"children":2349},{"style":1530},[2350],{"type":47,"value":2351},"components",{"type":41,"tag":921,"props":2353,"children":2354},{"style":934},[2355],{"type":47,"value":2280},{"type":41,"tag":921,"props":2357,"children":2358},{"style":934},[2359],{"type":47,"value":1069},{"type":41,"tag":921,"props":2361,"children":2362},{"style":934},[2363],{"type":47,"value":1213},{"type":41,"tag":921,"props":2365,"children":2366},{"class":923,"line":1057},[2367,2371,2376,2380,2384],{"type":41,"tag":921,"props":2368,"children":2369},{"style":934},[2370],{"type":47,"value":2270},{"type":41,"tag":921,"props":2372,"children":2373},{"style":1530},[2374],{"type":47,"value":2375},"resources",{"type":41,"tag":921,"props":2377,"children":2378},{"style":934},[2379],{"type":47,"value":2280},{"type":41,"tag":921,"props":2381,"children":2382},{"style":934},[2383],{"type":47,"value":1069},{"type":41,"tag":921,"props":2385,"children":2386},{"style":934},[2387],{"type":47,"value":1213},{"type":41,"tag":921,"props":2389,"children":2390},{"class":923,"line":1077},[2391,2395,2400,2404,2408],{"type":41,"tag":921,"props":2392,"children":2393},{"style":934},[2394],{"type":47,"value":2270},{"type":41,"tag":921,"props":2396,"children":2397},{"style":1530},[2398],{"type":47,"value":2399},"nodes",{"type":41,"tag":921,"props":2401,"children":2402},{"style":934},[2403],{"type":47,"value":2280},{"type":41,"tag":921,"props":2405,"children":2406},{"style":934},[2407],{"type":47,"value":1069},{"type":41,"tag":921,"props":2409,"children":2410},{"style":934},[2411],{"type":47,"value":1074},{"type":41,"tag":921,"props":2413,"children":2414},{"class":923,"line":1094},[2415],{"type":41,"tag":921,"props":2416,"children":2417},{"style":934},[2418],{"type":47,"value":2419},"    {\n",{"type":41,"tag":921,"props":2421,"children":2422},{"class":923,"line":1124},[2423,2428,2433,2437,2441,2445,2450,2454],{"type":41,"tag":921,"props":2424,"children":2425},{"style":934},[2426],{"type":47,"value":2427},"      \"",{"type":41,"tag":921,"props":2429,"children":2430},{"style":1791},[2431],{"type":47,"value":2432},"id",{"type":41,"tag":921,"props":2434,"children":2435},{"style":934},[2436],{"type":47,"value":2280},{"type":41,"tag":921,"props":2438,"children":2439},{"style":934},[2440],{"type":47,"value":1069},{"type":41,"tag":921,"props":2442,"children":2443},{"style":934},[2444],{"type":47,"value":2289},{"type":41,"tag":921,"props":2446,"children":2447},{"style":961},[2448],{"type":47,"value":2449},"environment",{"type":41,"tag":921,"props":2451,"children":2452},{"style":934},[2453],{"type":47,"value":2280},{"type":41,"tag":921,"props":2455,"children":2456},{"style":934},[2457],{"type":47,"value":651},{"type":41,"tag":921,"props":2459,"children":2460},{"class":923,"line":1154},[2461,2465,2470,2474,2478,2482,2486,2492,2496,2500,2504,2508,2512,2516,2520,2524,2528,2532,2536,2540,2544],{"type":41,"tag":921,"props":2462,"children":2463},{"style":934},[2464],{"type":47,"value":2427},{"type":41,"tag":921,"props":2466,"children":2467},{"style":1791},[2468],{"type":47,"value":2469},"content",{"type":41,"tag":921,"props":2471,"children":2472},{"style":934},[2473],{"type":47,"value":2280},{"type":41,"tag":921,"props":2475,"children":2476},{"style":934},[2477],{"type":47,"value":1069},{"type":41,"tag":921,"props":2479,"children":2480},{"style":934},[2481],{"type":47,"value":937},{"type":41,"tag":921,"props":2483,"children":2484},{"style":934},[2485],{"type":47,"value":2289},{"type":41,"tag":921,"props":2487,"children":2489},{"style":2488},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2490],{"type":47,"value":2491},"type",{"type":41,"tag":921,"props":2493,"children":2494},{"style":934},[2495],{"type":47,"value":2280},{"type":41,"tag":921,"props":2497,"children":2498},{"style":934},[2499],{"type":47,"value":1069},{"type":41,"tag":921,"props":2501,"children":2502},{"style":934},[2503],{"type":47,"value":2289},{"type":41,"tag":921,"props":2505,"children":2506},{"style":961},[2507],{"type":47,"value":776},{"type":41,"tag":921,"props":2509,"children":2510},{"style":934},[2511],{"type":47,"value":2280},{"type":41,"tag":921,"props":2513,"children":2514},{"style":934},[2515],{"type":47,"value":1288},{"type":41,"tag":921,"props":2517,"children":2518},{"style":934},[2519],{"type":47,"value":2289},{"type":41,"tag":921,"props":2521,"children":2522},{"style":2488},[2523],{"type":47,"value":776},{"type":41,"tag":921,"props":2525,"children":2526},{"style":934},[2527],{"type":47,"value":2280},{"type":41,"tag":921,"props":2529,"children":2530},{"style":934},[2531],{"type":47,"value":1069},{"type":41,"tag":921,"props":2533,"children":2534},{"style":934},[2535],{"type":47,"value":2289},{"type":41,"tag":921,"props":2537,"children":2538},{"style":961},[2539],{"type":47,"value":2449},{"type":41,"tag":921,"props":2541,"children":2542},{"style":934},[2543],{"type":47,"value":2280},{"type":41,"tag":921,"props":2545,"children":2546},{"style":934},[2547],{"type":47,"value":1195},{"type":41,"tag":921,"props":2549,"children":2550},{"class":923,"line":1198},[2551,2555,2560,2564,2568,2572,2576,2581,2585,2589,2594,2599,2603,2608,2612,2616,2621],{"type":41,"tag":921,"props":2552,"children":2553},{"style":934},[2554],{"type":47,"value":2427},{"type":41,"tag":921,"props":2556,"children":2557},{"style":1791},[2558],{"type":47,"value":2559},"transform",{"type":41,"tag":921,"props":2561,"children":2562},{"style":934},[2563],{"type":47,"value":2280},{"type":41,"tag":921,"props":2565,"children":2566},{"style":934},[2567],{"type":47,"value":1069},{"type":41,"tag":921,"props":2569,"children":2570},{"style":934},[2571],{"type":47,"value":937},{"type":41,"tag":921,"props":2573,"children":2574},{"style":934},[2575],{"type":47,"value":2289},{"type":41,"tag":921,"props":2577,"children":2578},{"style":2488},[2579],{"type":47,"value":2580},"position",{"type":41,"tag":921,"props":2582,"children":2583},{"style":934},[2584],{"type":47,"value":2280},{"type":41,"tag":921,"props":2586,"children":2587},{"style":934},[2588],{"type":47,"value":1069},{"type":41,"tag":921,"props":2590,"children":2591},{"style":934},[2592],{"type":47,"value":2593}," [",{"type":41,"tag":921,"props":2595,"children":2596},{"style":2488},[2597],{"type":47,"value":2598},"0",{"type":41,"tag":921,"props":2600,"children":2601},{"style":934},[2602],{"type":47,"value":1288},{"type":41,"tag":921,"props":2604,"children":2605},{"style":2488},[2606],{"type":47,"value":2607}," 0",{"type":41,"tag":921,"props":2609,"children":2610},{"style":934},[2611],{"type":47,"value":1288},{"type":41,"tag":921,"props":2613,"children":2614},{"style":2488},[2615],{"type":47,"value":2607},{"type":41,"tag":921,"props":2617,"children":2618},{"style":934},[2619],{"type":47,"value":2620},"]",{"type":41,"tag":921,"props":2622,"children":2623},{"style":934},[2624],{"type":47,"value":1195},{"type":41,"tag":921,"props":2626,"children":2627},{"class":923,"line":1216},[2628,2632,2636,2640,2644,2648,2652,2657,2661,2665,2670],{"type":41,"tag":921,"props":2629,"children":2630},{"style":934},[2631],{"type":47,"value":2427},{"type":41,"tag":921,"props":2633,"children":2634},{"style":1791},[2635],{"type":47,"value":2351},{"type":41,"tag":921,"props":2637,"children":2638},{"style":934},[2639],{"type":47,"value":2280},{"type":41,"tag":921,"props":2641,"children":2642},{"style":934},[2643],{"type":47,"value":1069},{"type":41,"tag":921,"props":2645,"children":2646},{"style":934},[2647],{"type":47,"value":937},{"type":41,"tag":921,"props":2649,"children":2650},{"style":934},[2651],{"type":47,"value":2289},{"type":41,"tag":921,"props":2653,"children":2654},{"style":2488},[2655],{"type":47,"value":2656},"LocomotionEnvironment",{"type":41,"tag":921,"props":2658,"children":2659},{"style":934},[2660],{"type":47,"value":2280},{"type":41,"tag":921,"props":2662,"children":2663},{"style":934},[2664],{"type":47,"value":1069},{"type":41,"tag":921,"props":2666,"children":2667},{"style":934},[2668],{"type":47,"value":2669}," {}",{"type":41,"tag":921,"props":2671,"children":2672},{"style":934},[2673],{"type":47,"value":2674}," }\n",{"type":41,"tag":921,"props":2676,"children":2677},{"class":923,"line":1234},[2678],{"type":41,"tag":921,"props":2679,"children":2680},{"style":934},[2681],{"type":47,"value":2682},"    },\n",{"type":41,"tag":921,"props":2684,"children":2685},{"class":923,"line":1247},[2686],{"type":41,"tag":921,"props":2687,"children":2688},{"style":934},[2689],{"type":47,"value":2419},{"type":41,"tag":921,"props":2691,"children":2692},{"class":923,"line":1310},[2693,2697,2701,2705,2709,2713,2717,2721],{"type":41,"tag":921,"props":2694,"children":2695},{"style":934},[2696],{"type":47,"value":2427},{"type":41,"tag":921,"props":2698,"children":2699},{"style":1791},[2700],{"type":47,"value":2432},{"type":41,"tag":921,"props":2702,"children":2703},{"style":934},[2704],{"type":47,"value":2280},{"type":41,"tag":921,"props":2706,"children":2707},{"style":934},[2708],{"type":47,"value":1069},{"type":41,"tag":921,"props":2710,"children":2711},{"style":934},[2712],{"type":47,"value":2289},{"type":41,"tag":921,"props":2714,"children":2715},{"style":961},[2716],{"type":47,"value":1672},{"type":41,"tag":921,"props":2718,"children":2719},{"style":934},[2720],{"type":47,"value":2280},{"type":41,"tag":921,"props":2722,"children":2723},{"style":934},[2724],{"type":47,"value":651},{"type":41,"tag":921,"props":2726,"children":2727},{"class":923,"line":1778},[2728,2732,2736,2740,2744,2748,2752,2756,2760,2764,2768,2772,2776,2780,2784,2788,2792,2796,2800,2804,2808],{"type":41,"tag":921,"props":2729,"children":2730},{"style":934},[2731],{"type":47,"value":2427},{"type":41,"tag":921,"props":2733,"children":2734},{"style":1791},[2735],{"type":47,"value":2469},{"type":41,"tag":921,"props":2737,"children":2738},{"style":934},[2739],{"type":47,"value":2280},{"type":41,"tag":921,"props":2741,"children":2742},{"style":934},[2743],{"type":47,"value":1069},{"type":41,"tag":921,"props":2745,"children":2746},{"style":934},[2747],{"type":47,"value":937},{"type":41,"tag":921,"props":2749,"children":2750},{"style":934},[2751],{"type":47,"value":2289},{"type":41,"tag":921,"props":2753,"children":2754},{"style":2488},[2755],{"type":47,"value":2491},{"type":41,"tag":921,"props":2757,"children":2758},{"style":934},[2759],{"type":47,"value":2280},{"type":41,"tag":921,"props":2761,"children":2762},{"style":934},[2763],{"type":47,"value":1069},{"type":41,"tag":921,"props":2765,"children":2766},{"style":934},[2767],{"type":47,"value":2289},{"type":41,"tag":921,"props":2769,"children":2770},{"style":961},[2771],{"type":47,"value":776},{"type":41,"tag":921,"props":2773,"children":2774},{"style":934},[2775],{"type":47,"value":2280},{"type":41,"tag":921,"props":2777,"children":2778},{"style":934},[2779],{"type":47,"value":1288},{"type":41,"tag":921,"props":2781,"children":2782},{"style":934},[2783],{"type":47,"value":2289},{"type":41,"tag":921,"props":2785,"children":2786},{"style":2488},[2787],{"type":47,"value":776},{"type":41,"tag":921,"props":2789,"children":2790},{"style":934},[2791],{"type":47,"value":2280},{"type":41,"tag":921,"props":2793,"children":2794},{"style":934},[2795],{"type":47,"value":1069},{"type":41,"tag":921,"props":2797,"children":2798},{"style":934},[2799],{"type":47,"value":2289},{"type":41,"tag":921,"props":2801,"children":2802},{"style":961},[2803],{"type":47,"value":1672},{"type":41,"tag":921,"props":2805,"children":2806},{"style":934},[2807],{"type":47,"value":2280},{"type":41,"tag":921,"props":2809,"children":2810},{"style":934},[2811],{"type":47,"value":1195},{"type":41,"tag":921,"props":2813,"children":2814},{"class":923,"line":1800},[2815,2819,2823,2827,2831],{"type":41,"tag":921,"props":2816,"children":2817},{"style":934},[2818],{"type":47,"value":2427},{"type":41,"tag":921,"props":2820,"children":2821},{"style":1791},[2822],{"type":47,"value":2559},{"type":41,"tag":921,"props":2824,"children":2825},{"style":934},[2826],{"type":47,"value":2280},{"type":41,"tag":921,"props":2828,"children":2829},{"style":934},[2830],{"type":47,"value":1069},{"type":41,"tag":921,"props":2832,"children":2833},{"style":934},[2834],{"type":47,"value":1548},{"type":41,"tag":921,"props":2836,"children":2837},{"class":923,"line":1808},[2838,2843,2847,2851,2855,2859,2863,2867,2872,2876,2881],{"type":41,"tag":921,"props":2839,"children":2840},{"style":934},[2841],{"type":47,"value":2842},"        \"",{"type":41,"tag":921,"props":2844,"children":2845},{"style":2488},[2846],{"type":47,"value":2580},{"type":41,"tag":921,"props":2848,"children":2849},{"style":934},[2850],{"type":47,"value":2280},{"type":41,"tag":921,"props":2852,"children":2853},{"style":934},[2854],{"type":47,"value":1069},{"type":41,"tag":921,"props":2856,"children":2857},{"style":934},[2858],{"type":47,"value":2593},{"type":41,"tag":921,"props":2860,"children":2861},{"style":2488},[2862],{"type":47,"value":2598},{"type":41,"tag":921,"props":2864,"children":2865},{"style":934},[2866],{"type":47,"value":1288},{"type":41,"tag":921,"props":2868,"children":2869},{"style":2488},[2870],{"type":47,"value":2871}," 1.5",{"type":41,"tag":921,"props":2873,"children":2874},{"style":934},[2875],{"type":47,"value":1288},{"type":41,"tag":921,"props":2877,"children":2878},{"style":2488},[2879],{"type":47,"value":2880}," -2",{"type":41,"tag":921,"props":2882,"children":2883},{"style":934},[2884],{"type":47,"value":2885},"],\n",{"type":41,"tag":921,"props":2887,"children":2889},{"class":923,"line":2888},18,[2890,2894,2899,2903,2907],{"type":41,"tag":921,"props":2891,"children":2892},{"style":934},[2893],{"type":47,"value":2842},{"type":41,"tag":921,"props":2895,"children":2896},{"style":2488},[2897],{"type":47,"value":2898},"scale",{"type":41,"tag":921,"props":2900,"children":2901},{"style":934},[2902],{"type":47,"value":2280},{"type":41,"tag":921,"props":2904,"children":2905},{"style":934},[2906],{"type":47,"value":1069},{"type":41,"tag":921,"props":2908,"children":2909},{"style":2488},[2910],{"type":47,"value":2911}," 0.4\n",{"type":41,"tag":921,"props":2913,"children":2915},{"class":923,"line":2914},19,[2916],{"type":41,"tag":921,"props":2917,"children":2918},{"style":934},[2919],{"type":47,"value":2920},"      },\n",{"type":41,"tag":921,"props":2922,"children":2924},{"class":923,"line":2923},20,[2925,2929,2933,2937,2941],{"type":41,"tag":921,"props":2926,"children":2927},{"style":934},[2928],{"type":47,"value":2427},{"type":41,"tag":921,"props":2930,"children":2931},{"style":1791},[2932],{"type":47,"value":2351},{"type":41,"tag":921,"props":2934,"children":2935},{"style":934},[2936],{"type":47,"value":2280},{"type":41,"tag":921,"props":2938,"children":2939},{"style":934},[2940],{"type":47,"value":1069},{"type":41,"tag":921,"props":2942,"children":2943},{"style":934},[2944],{"type":47,"value":1548},{"type":41,"tag":921,"props":2946,"children":2948},{"class":923,"line":2947},21,[2949,2953,2957,2961,2965],{"type":41,"tag":921,"props":2950,"children":2951},{"style":934},[2952],{"type":47,"value":2842},{"type":41,"tag":921,"props":2954,"children":2955},{"style":2488},[2956],{"type":47,"value":595},{"type":41,"tag":921,"props":2958,"children":2959},{"style":934},[2960],{"type":47,"value":2280},{"type":41,"tag":921,"props":2962,"children":2963},{"style":934},[2964],{"type":47,"value":1069},{"type":41,"tag":921,"props":2966,"children":2967},{"style":934},[2968],{"type":47,"value":1213},{"type":41,"tag":921,"props":2970,"children":2972},{"class":923,"line":2971},22,[2973,2977,2981,2985,2989],{"type":41,"tag":921,"props":2974,"children":2975},{"style":934},[2976],{"type":47,"value":2842},{"type":41,"tag":921,"props":2978,"children":2979},{"style":2488},[2980],{"type":47,"value":712},{"type":41,"tag":921,"props":2982,"children":2983},{"style":934},[2984],{"type":47,"value":2280},{"type":41,"tag":921,"props":2986,"children":2987},{"style":934},[2988],{"type":47,"value":1069},{"type":41,"tag":921,"props":2990,"children":2991},{"style":934},[2992],{"type":47,"value":1548},{"type":41,"tag":921,"props":2994,"children":2996},{"class":923,"line":2995},23,[2997,3002,3007,3011,3015,3019,3024,3028],{"type":41,"tag":921,"props":2998,"children":2999},{"style":934},[3000],{"type":47,"value":3001},"          \"",{"type":41,"tag":921,"props":3003,"children":3004},{"style":1061},[3005],{"type":47,"value":3006},"top",{"type":41,"tag":921,"props":3008,"children":3009},{"style":934},[3010],{"type":47,"value":2280},{"type":41,"tag":921,"props":3012,"children":3013},{"style":934},[3014],{"type":47,"value":1069},{"type":41,"tag":921,"props":3016,"children":3017},{"style":934},[3018],{"type":47,"value":2289},{"type":41,"tag":921,"props":3020,"children":3021},{"style":961},[3022],{"type":47,"value":3023},"20px",{"type":41,"tag":921,"props":3025,"children":3026},{"style":934},[3027],{"type":47,"value":2280},{"type":41,"tag":921,"props":3029,"children":3030},{"style":934},[3031],{"type":47,"value":651},{"type":41,"tag":921,"props":3033,"children":3035},{"class":923,"line":3034},24,[3036,3040,3045,3049,3053,3057,3061,3065],{"type":41,"tag":921,"props":3037,"children":3038},{"style":934},[3039],{"type":47,"value":3001},{"type":41,"tag":921,"props":3041,"children":3042},{"style":1061},[3043],{"type":47,"value":3044},"left",{"type":41,"tag":921,"props":3046,"children":3047},{"style":934},[3048],{"type":47,"value":2280},{"type":41,"tag":921,"props":3050,"children":3051},{"style":934},[3052],{"type":47,"value":1069},{"type":41,"tag":921,"props":3054,"children":3055},{"style":934},[3056],{"type":47,"value":2289},{"type":41,"tag":921,"props":3058,"children":3059},{"style":961},[3060],{"type":47,"value":3023},{"type":41,"tag":921,"props":3062,"children":3063},{"style":934},[3064],{"type":47,"value":2280},{"type":41,"tag":921,"props":3066,"children":3067},{"style":934},[3068],{"type":47,"value":651},{"type":41,"tag":921,"props":3070,"children":3072},{"class":923,"line":3071},25,[3073,3077,3082,3086,3090,3094,3099,3103],{"type":41,"tag":921,"props":3074,"children":3075},{"style":934},[3076],{"type":47,"value":3001},{"type":41,"tag":921,"props":3078,"children":3079},{"style":1061},[3080],{"type":47,"value":3081},"width",{"type":41,"tag":921,"props":3083,"children":3084},{"style":934},[3085],{"type":47,"value":2280},{"type":41,"tag":921,"props":3087,"children":3088},{"style":934},[3089],{"type":47,"value":1069},{"type":41,"tag":921,"props":3091,"children":3092},{"style":934},[3093],{"type":47,"value":2289},{"type":41,"tag":921,"props":3095,"children":3096},{"style":961},[3097],{"type":47,"value":3098},"25vw",{"type":41,"tag":921,"props":3100,"children":3101},{"style":934},[3102],{"type":47,"value":2280},{"type":41,"tag":921,"props":3104,"children":3105},{"style":934},[3106],{"type":47,"value":651},{"type":41,"tag":921,"props":3108,"children":3110},{"class":923,"line":3109},26,[3111,3115,3120,3124,3128,3132,3137],{"type":41,"tag":921,"props":3112,"children":3113},{"style":934},[3114],{"type":47,"value":3001},{"type":41,"tag":921,"props":3116,"children":3117},{"style":1061},[3118],{"type":47,"value":3119},"height",{"type":41,"tag":921,"props":3121,"children":3122},{"style":934},[3123],{"type":47,"value":2280},{"type":41,"tag":921,"props":3125,"children":3126},{"style":934},[3127],{"type":47,"value":1069},{"type":41,"tag":921,"props":3129,"children":3130},{"style":934},[3131],{"type":47,"value":2289},{"type":41,"tag":921,"props":3133,"children":3134},{"style":961},[3135],{"type":47,"value":3136},"40vh",{"type":41,"tag":921,"props":3138,"children":3139},{"style":934},[3140],{"type":47,"value":3141},"\"\n",{"type":41,"tag":921,"props":3143,"children":3145},{"class":923,"line":3144},27,[3146],{"type":41,"tag":921,"props":3147,"children":3148},{"style":934},[3149],{"type":47,"value":3150},"        }\n",{"type":41,"tag":921,"props":3152,"children":3154},{"class":923,"line":3153},28,[3155],{"type":41,"tag":921,"props":3156,"children":3157},{"style":934},[3158],{"type":47,"value":3159},"      }\n",{"type":41,"tag":921,"props":3161,"children":3163},{"class":923,"line":3162},29,[3164],{"type":41,"tag":921,"props":3165,"children":3166},{"style":934},[3167],{"type":47,"value":3168},"    }\n",{"type":41,"tag":921,"props":3170,"children":3172},{"class":923,"line":3171},30,[3173],{"type":41,"tag":921,"props":3174,"children":3175},{"style":934},[3176],{"type":47,"value":3177},"  ]\n",{"type":41,"tag":921,"props":3179,"children":3181},{"class":923,"line":3180},31,[3182],{"type":41,"tag":921,"props":3183,"children":3184},{"style":934},[3185],{"type":47,"value":3186},"}\n",{"type":41,"tag":50,"props":3188,"children":3189},{},[3190],{"type":47,"value":3191},"Migration rules:",{"type":41,"tag":98,"props":3193,"children":3194},{},[3195,3207,3219,3224,3275,3288,3300,3340,3352],{"type":41,"tag":102,"props":3196,"children":3197},{},[3198,3200,3205],{"type":47,"value":3199},"Node ",{"type":41,"tag":61,"props":3201,"children":3203},{"className":3202},[],[3204],{"type":47,"value":2432},{"type":47,"value":3206}," is the stable runtime\u002Feditor identity. Preserve meaningful unique\nidentifiers and use them from code; do not locate authored objects by array\nposition or display name.",{"type":41,"tag":102,"props":3208,"children":3209},{},[3210,3212,3218],{"type":47,"value":3211},"Scene asset references must resolve in ",{"type":41,"tag":61,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":47,"value":3217},"src\u002Fassets.ts",{"type":47,"value":68},{"type":41,"tag":102,"props":3220,"children":3221},{},[3222],{"type":47,"value":3223},"Move static component values into the scene. Keep systems and event logic in\ncode.",{"type":41,"tag":102,"props":3225,"children":3226},{},[3227,3229,3235,3237,3243,3245,3251,3253,3259,3260,3266,3267,3273],{"type":47,"value":3228},"Preserve hierarchy with ",{"type":41,"tag":61,"props":3230,"children":3232},{"className":3231},[],[3233],{"type":47,"value":3234},"children",{"type":47,"value":3236},". Use a node ",{"type":41,"tag":61,"props":3238,"children":3240},{"className":3239},[],[3241],{"type":47,"value":3242},"parent",{"type":47,"value":3244}," of type\n",{"type":41,"tag":61,"props":3246,"children":3248},{"className":3247},[],[3249],{"type":47,"value":3250},"player-space",{"type":47,"value":3252}," for content attached to ",{"type":41,"tag":61,"props":3254,"children":3256},{"className":3255},[],[3257],{"type":47,"value":3258},"player",{"type":47,"value":636},{"type":41,"tag":61,"props":3261,"children":3263},{"className":3262},[],[3264],{"type":47,"value":3265},"camera",{"type":47,"value":636},{"type":41,"tag":61,"props":3268,"children":3270},{"className":3269},[],[3271],{"type":47,"value":3272},"head",{"type":47,"value":3274},", target-ray,\nor grip spaces.",{"type":41,"tag":102,"props":3276,"children":3277},{},[3278,3280,3286],{"type":47,"value":3279},"Author the player origin under the top-level ",{"type":41,"tag":61,"props":3281,"children":3283},{"className":3282},[],[3284],{"type":47,"value":3285},"player.transform",{"type":47,"value":3287},". Tracked\nhead\u002Fcontroller transforms are runtime-owned and overridden by XR tracking.",{"type":41,"tag":102,"props":3289,"children":3290},{},[3291,3292,3298],{"type":47,"value":1374},{"type":41,"tag":61,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":47,"value":3297},"visible: false",{"type":47,"value":3299}," for authored initial visibility. Visibility and\nTransform are intrinsic editor properties, not ordinary add-component UI.",{"type":41,"tag":102,"props":3301,"children":3302},{},[3303,3305,3310,3312,3318,3319,3325,3327,3332,3333,3338],{"type":47,"value":3304},"Put fog, tone mapping, exposure, and shadow renderer settings under the scene\n",{"type":41,"tag":61,"props":3306,"children":3308},{"className":3307},[],[3309],{"type":47,"value":2449},{"type":47,"value":3311}," object. Use ",{"type":41,"tag":61,"props":3313,"children":3315},{"className":3314},[],[3316],{"type":47,"value":3317},"DomeGradient",{"type":47,"value":520},{"type":41,"tag":61,"props":3320,"children":3322},{"className":3321},[],[3323],{"type":47,"value":3324},"DomeTexture",{"type":47,"value":3326}," for the visible\nbackground and ",{"type":41,"tag":61,"props":3328,"children":3330},{"className":3329},[],[3331],{"type":47,"value":526},{"type":47,"value":520},{"type":41,"tag":61,"props":3334,"children":3336},{"className":3335},[],[3337],{"type":47,"value":518},{"type":47,"value":3339}," for image-based lighting. There is\nno separate AR background policy; immersive AR remains transparent.",{"type":41,"tag":102,"props":3341,"children":3342},{},[3343,3345,3350],{"type":47,"value":3344},"Remove ",{"type":41,"tag":61,"props":3346,"children":3348},{"className":3347},[],[3349],{"type":47,"value":538},{"type":47,"value":3351},". IWSDK no longer injects either environment\ncomponent. Author both gradient components for the former default look, or\nomit either independently when the scene intentionally has no background or\nno image-based lighting.",{"type":41,"tag":102,"props":3353,"children":3354},{},[3355],{"type":47,"value":3356},"Use IWSDK light components on scene nodes for authored ambient,\nhemisphere, directional, point, spot, or rect-area lights.",{"type":41,"tag":50,"props":3358,"children":3359},{},[3360,3362,3367],{"type":47,"value":3361},"There is no supported 0.5 runtime path for ",{"type":41,"tag":61,"props":3363,"children":3365},{"className":3364},[],[3366],{"type":47,"value":746},{"type":47,"value":3368},". For a Meta Spatial\u002FGLXF\nproject, use the old scene and screenshots as the visual reference, recreate\nits static hierarchy in native scene JSON, then compare multiple editor and\nruntime views before deleting legacy sources. If parity cannot be established,\nstop and report that migration as incomplete.",{"type":41,"tag":50,"props":3370,"children":3371},{},[3372],{"type":47,"value":3373},"Code-created dynamic entities can stay in code. It is valid to migrate the\nstatic shell first and leave gameplay spawning, effects, and variable-count\nobjects in systems.",{"type":41,"tag":70,"props":3375,"children":3377},{"id":3376},"phase-6-migrate-uikitml",[3378],{"type":47,"value":3379},"Phase 6: Migrate UIKitML",{"type":41,"tag":50,"props":3381,"children":3382},{},[3383,3385,3390,3392,3398,3400,3405],{"type":47,"value":3384},"Move source UIKitML files into ",{"type":41,"tag":61,"props":3386,"children":3388},{"className":3387},[],[3389],{"type":47,"value":317},{"type":47,"value":3391}," and delete the generated intermediate\nJSON once no code references it. Change panel URLs from ",{"type":41,"tag":61,"props":3393,"children":3395},{"className":3394},[],[3396],{"type":47,"value":3397},".json",{"type":47,"value":3399}," to ",{"type":41,"tag":61,"props":3401,"children":3403},{"className":3402},[],[3404],{"type":47,"value":309},{"type":47,"value":68},{"type":41,"tag":50,"props":3407,"children":3408},{},[3409,3411,3417,3419,3424],{"type":47,"value":3410},"For editor-authored panels, prefer an ",{"type":41,"tag":61,"props":3412,"children":3414},{"className":3413},[],[3415],{"type":47,"value":3416},"AssetType.UIKitML",{"type":47,"value":3418}," manifest entry and an\nasset-backed scene node, as shown above. ",{"type":41,"tag":61,"props":3420,"children":3422},{"className":3421},[],[3423],{"type":47,"value":705},{"type":47,"value":3425}," remains a compatibility path\nfor code-created panels, but it is hidden from generic editor authoring.",{"type":41,"tag":50,"props":3427,"children":3428},{},[3429,3430,3436,3437,3442,3444,3449,3451,3456,3458,3464],{"type":47,"value":3344},{"type":41,"tag":61,"props":3431,"children":3433},{"className":3432},[],[3434],{"type":47,"value":3435},"maxWidth",{"type":47,"value":850},{"type":41,"tag":61,"props":3438,"children":3440},{"className":3439},[],[3441],{"type":47,"value":400},{"type":47,"value":3443}," from ",{"type":41,"tag":61,"props":3445,"children":3447},{"className":3446},[],[3448],{"type":47,"value":705},{"type":47,"value":3450},"; 0.5 no longer performs a\nsecond fit. The UIKitML document owns intrinsic dimensions and the entity\ntransform owns world scale. Give ",{"type":41,"tag":61,"props":3452,"children":3454},{"className":3453},[],[3455],{"type":47,"value":712},{"type":47,"value":3457}," explicit CSS dimensions rather\nthan relying on ",{"type":41,"tag":61,"props":3459,"children":3461},{"className":3460},[],[3462],{"type":47,"value":3463},"auto",{"type":47,"value":68},{"type":41,"tag":50,"props":3466,"children":3467},{},[3468],{"type":47,"value":3469},"Replace spatial-UI kit configuration:",{"type":41,"tag":864,"props":3471,"children":3473},{"className":913,"code":3472,"language":915,"meta":869,"style":869},"features: {\n  spatialUI: {\n    kit: 'horizon',\n    componentSets: [],\n  },\n}\n",[3474],{"type":41,"tag":61,"props":3475,"children":3476},{"__ignoreMap":869},[3477,3493,3509,3538,3559,3566],{"type":41,"tag":921,"props":3478,"children":3479},{"class":923,"line":924},[3480,3485,3489],{"type":41,"tag":921,"props":3481,"children":3482},{"style":1791},[3483],{"type":47,"value":3484},"features",{"type":41,"tag":921,"props":3486,"children":3487},{"style":934},[3488],{"type":47,"value":1069},{"type":41,"tag":921,"props":3490,"children":3491},{"style":934},[3492],{"type":47,"value":1548},{"type":41,"tag":921,"props":3494,"children":3495},{"class":923,"line":976},[3496,3501,3505],{"type":41,"tag":921,"props":3497,"children":3498},{"style":1791},[3499],{"type":47,"value":3500},"  spatialUI",{"type":41,"tag":921,"props":3502,"children":3503},{"style":934},[3504],{"type":47,"value":1069},{"type":41,"tag":921,"props":3506,"children":3507},{"style":934},[3508],{"type":47,"value":1548},{"type":41,"tag":921,"props":3510,"children":3511},{"class":923,"line":1018},[3512,3517,3521,3525,3530,3534],{"type":41,"tag":921,"props":3513,"children":3514},{"style":1791},[3515],{"type":47,"value":3516},"    kit",{"type":41,"tag":921,"props":3518,"children":3519},{"style":934},[3520],{"type":47,"value":1069},{"type":41,"tag":921,"props":3522,"children":3523},{"style":934},[3524],{"type":47,"value":958},{"type":41,"tag":921,"props":3526,"children":3527},{"style":961},[3528],{"type":47,"value":3529},"horizon",{"type":41,"tag":921,"props":3531,"children":3532},{"style":934},[3533],{"type":47,"value":968},{"type":41,"tag":921,"props":3535,"children":3536},{"style":934},[3537],{"type":47,"value":651},{"type":41,"tag":921,"props":3539,"children":3540},{"class":923,"line":1028},[3541,3546,3550,3555],{"type":41,"tag":921,"props":3542,"children":3543},{"style":1791},[3544],{"type":47,"value":3545},"    componentSets",{"type":41,"tag":921,"props":3547,"children":3548},{"style":934},[3549],{"type":47,"value":1069},{"type":41,"tag":921,"props":3551,"children":3552},{"style":1061},[3553],{"type":47,"value":3554}," []",{"type":41,"tag":921,"props":3556,"children":3557},{"style":934},[3558],{"type":47,"value":651},{"type":41,"tag":921,"props":3560,"children":3561},{"class":923,"line":1057},[3562],{"type":41,"tag":921,"props":3563,"children":3564},{"style":934},[3565],{"type":47,"value":1659},{"type":41,"tag":921,"props":3567,"children":3568},{"class":923,"line":1077},[3569],{"type":41,"tag":921,"props":3570,"children":3571},{"style":934},[3572],{"type":47,"value":3186},{"type":41,"tag":50,"props":3574,"children":3575},{},[3576,3578,3583,3585,3591],{"type":47,"value":3577},"The default kit is ",{"type":41,"tag":61,"props":3579,"children":3581},{"className":3580},[],[3582],{"type":47,"value":3529},{"type":47,"value":3584},". UIKitML can load TTF fonts declared with\n",{"type":41,"tag":61,"props":3586,"children":3588},{"className":3587},[],[3589],{"type":47,"value":3590},"@font-face",{"type":47,"value":3592},", including remote HTTPS URLs. Keep font loading CORS-compatible and\nverify text after the document reports stable layout; do not add arbitrary\nframe-count sleeps.",{"type":41,"tag":50,"props":3594,"children":3595},{},[3596],{"type":47,"value":3597},"Locate and manipulate an authored panel by stable scene and element ids:",{"type":41,"tag":864,"props":3599,"children":3601},{"className":913,"code":3600,"language":915,"meta":869,"style":869},"import { UIKitMLAsset } from '@iwsdk\u002Fcore';\n\nconst panel = world.requireSceneObject\u003CUIKitMLAsset>('settings-panel');\nconst saveButton = panel.requireElementById('save-button');\nsaveButton.addEventListener('click', onSave);\n",[3602],{"type":41,"tag":61,"props":3603,"children":3604},{"__ignoreMap":869},[3605,3645,3652,3721,3776],{"type":41,"tag":921,"props":3606,"children":3607},{"class":923,"line":924},[3608,3612,3616,3621,3625,3629,3633,3637,3641],{"type":41,"tag":921,"props":3609,"children":3610},{"style":928},[3611],{"type":47,"value":931},{"type":41,"tag":921,"props":3613,"children":3614},{"style":934},[3615],{"type":47,"value":937},{"type":41,"tag":921,"props":3617,"children":3618},{"style":940},[3619],{"type":47,"value":3620}," UIKitMLAsset",{"type":41,"tag":921,"props":3622,"children":3623},{"style":934},[3624],{"type":47,"value":948},{"type":41,"tag":921,"props":3626,"children":3627},{"style":928},[3628],{"type":47,"value":953},{"type":41,"tag":921,"props":3630,"children":3631},{"style":934},[3632],{"type":47,"value":958},{"type":41,"tag":921,"props":3634,"children":3635},{"style":961},[3636],{"type":47,"value":1509},{"type":41,"tag":921,"props":3638,"children":3639},{"style":934},[3640],{"type":47,"value":968},{"type":41,"tag":921,"props":3642,"children":3643},{"style":934},[3644],{"type":47,"value":973},{"type":41,"tag":921,"props":3646,"children":3647},{"class":923,"line":976},[3648],{"type":41,"tag":921,"props":3649,"children":3650},{"emptyLinePlaceholder":1022},[3651],{"type":47,"value":1025},{"type":41,"tag":921,"props":3653,"children":3654},{"class":923,"line":1018},[3655,3659,3664,3668,3673,3677,3682,3687,3692,3697,3701,3705,3709,3713,3717],{"type":41,"tag":921,"props":3656,"children":3657},{"style":1530},[3658],{"type":47,"value":1533},{"type":41,"tag":921,"props":3660,"children":3661},{"style":940},[3662],{"type":47,"value":3663}," panel ",{"type":41,"tag":921,"props":3665,"children":3666},{"style":934},[3667],{"type":47,"value":1543},{"type":41,"tag":921,"props":3669,"children":3670},{"style":940},[3671],{"type":47,"value":3672}," world",{"type":41,"tag":921,"props":3674,"children":3675},{"style":934},[3676],{"type":47,"value":68},{"type":41,"tag":921,"props":3678,"children":3679},{"style":1042},[3680],{"type":47,"value":3681},"requireSceneObject",{"type":41,"tag":921,"props":3683,"children":3684},{"style":934},[3685],{"type":47,"value":3686},"\u003C",{"type":41,"tag":921,"props":3688,"children":3689},{"style":1791},[3690],{"type":47,"value":3691},"UIKitMLAsset",{"type":41,"tag":921,"props":3693,"children":3694},{"style":934},[3695],{"type":47,"value":3696},">",{"type":41,"tag":921,"props":3698,"children":3699},{"style":940},[3700],{"type":47,"value":1049},{"type":41,"tag":921,"props":3702,"children":3703},{"style":934},[3704],{"type":47,"value":968},{"type":41,"tag":921,"props":3706,"children":3707},{"style":961},[3708],{"type":47,"value":1672},{"type":41,"tag":921,"props":3710,"children":3711},{"style":934},[3712],{"type":47,"value":968},{"type":41,"tag":921,"props":3714,"children":3715},{"style":940},[3716],{"type":47,"value":1227},{"type":41,"tag":921,"props":3718,"children":3719},{"style":934},[3720],{"type":47,"value":973},{"type":41,"tag":921,"props":3722,"children":3723},{"class":923,"line":1028},[3724,3728,3733,3737,3742,3746,3751,3755,3759,3764,3768,3772],{"type":41,"tag":921,"props":3725,"children":3726},{"style":1530},[3727],{"type":47,"value":1533},{"type":41,"tag":921,"props":3729,"children":3730},{"style":940},[3731],{"type":47,"value":3732}," saveButton ",{"type":41,"tag":921,"props":3734,"children":3735},{"style":934},[3736],{"type":47,"value":1543},{"type":41,"tag":921,"props":3738,"children":3739},{"style":940},[3740],{"type":47,"value":3741}," panel",{"type":41,"tag":921,"props":3743,"children":3744},{"style":934},[3745],{"type":47,"value":68},{"type":41,"tag":921,"props":3747,"children":3748},{"style":1042},[3749],{"type":47,"value":3750},"requireElementById",{"type":41,"tag":921,"props":3752,"children":3753},{"style":940},[3754],{"type":47,"value":1049},{"type":41,"tag":921,"props":3756,"children":3757},{"style":934},[3758],{"type":47,"value":968},{"type":41,"tag":921,"props":3760,"children":3761},{"style":961},[3762],{"type":47,"value":3763},"save-button",{"type":41,"tag":921,"props":3765,"children":3766},{"style":934},[3767],{"type":47,"value":968},{"type":41,"tag":921,"props":3769,"children":3770},{"style":940},[3771],{"type":47,"value":1227},{"type":41,"tag":921,"props":3773,"children":3774},{"style":934},[3775],{"type":47,"value":973},{"type":41,"tag":921,"props":3777,"children":3778},{"class":923,"line":1057},[3779,3784,3788,3793,3797,3801,3806,3810,3814,3819],{"type":41,"tag":921,"props":3780,"children":3781},{"style":940},[3782],{"type":47,"value":3783},"saveButton",{"type":41,"tag":921,"props":3785,"children":3786},{"style":934},[3787],{"type":47,"value":68},{"type":41,"tag":921,"props":3789,"children":3790},{"style":1042},[3791],{"type":47,"value":3792},"addEventListener",{"type":41,"tag":921,"props":3794,"children":3795},{"style":940},[3796],{"type":47,"value":1049},{"type":41,"tag":921,"props":3798,"children":3799},{"style":934},[3800],{"type":47,"value":968},{"type":41,"tag":921,"props":3802,"children":3803},{"style":961},[3804],{"type":47,"value":3805},"click",{"type":41,"tag":921,"props":3807,"children":3808},{"style":934},[3809],{"type":47,"value":968},{"type":41,"tag":921,"props":3811,"children":3812},{"style":934},[3813],{"type":47,"value":1288},{"type":41,"tag":921,"props":3815,"children":3816},{"style":940},[3817],{"type":47,"value":3818}," onSave)",{"type":41,"tag":921,"props":3820,"children":3821},{"style":934},[3822],{"type":47,"value":973},{"type":41,"tag":50,"props":3824,"children":3825},{},[3826,3828,3834],{"type":47,"value":3827},"Do not traverse the entire Three scene looking for an anonymous\n",{"type":41,"tag":61,"props":3829,"children":3831},{"className":3830},[],[3832],{"type":47,"value":3833},"UIKitDocument",{"type":47,"value":3835},", and do not key logic off generated JSON paths.",{"type":41,"tag":70,"props":3837,"children":3839},{"id":3838},"phase-7-resolve-behavior-level-compatibility",[3840],{"type":47,"value":3841},"Phase 7: Resolve behavior-level compatibility",{"type":41,"tag":50,"props":3843,"children":3844},{},[3845],{"type":47,"value":3846},"Audit these cases even when TypeScript compiles:",{"type":41,"tag":98,"props":3848,"children":3849},{},[3850,3882,3901,3912,3917,3936,3960,3987,4021],{"type":41,"tag":102,"props":3851,"children":3852},{},[3853,3859,3861,3866,3868,3873,3875,3881],{"type":41,"tag":61,"props":3854,"children":3856},{"className":3855},[],[3857],{"type":47,"value":3858},"createTransformEntity()",{"type":47,"value":3860}," now gives every transform entity intrinsic\n",{"type":41,"tag":61,"props":3862,"children":3864},{"className":3863},[],[3865],{"type":47,"value":719},{"type":47,"value":3867},". If old code adds ",{"type":41,"tag":61,"props":3869,"children":3871},{"className":3870},[],[3872],{"type":47,"value":719},{"type":47,"value":3874}," itself, change it to set the\nexisting value or assign ",{"type":41,"tag":61,"props":3876,"children":3878},{"className":3877},[],[3879],{"type":47,"value":3880},"entity.object3D.visible",{"type":47,"value":68},{"type":41,"tag":102,"props":3883,"children":3884},{},[3885,3887,3892,3894,3899],{"type":47,"value":3886},"Prefer ",{"type":41,"tag":61,"props":3888,"children":3890},{"className":3889},[],[3891],{"type":47,"value":595},{"type":47,"value":3893}," over the deprecated ",{"type":41,"tag":61,"props":3895,"children":3897},{"className":3896},[],[3898],{"type":47,"value":587},{"type":47,"value":3900}," alias.",{"type":41,"tag":102,"props":3902,"children":3903},{},[3904,3905,3910],{"type":47,"value":3344},{"type":41,"tag":61,"props":3906,"children":3908},{"className":3907},[],[3909],{"type":47,"value":507},{"type":47,"value":3911},"; IWSDK 0.5 no longer requests the\nunsupported feature. Replace its visual role with authored lights and IBL.",{"type":41,"tag":102,"props":3913,"children":3914},{},[3915],{"type":47,"value":3916},"Immersive AR always hides authored dome\u002Fbackground visuals for passthrough\nwhile retaining IBL. Re-test any app that previously expected a virtual AR\nbackground.",{"type":41,"tag":102,"props":3918,"children":3919},{},[3920,3926,3928,3934],{"type":41,"tag":61,"props":3921,"children":3923},{"className":3922},[],[3924],{"type":47,"value":3925},"AssetManager.getGLTF()",{"type":47,"value":3927}," returns a fresh clone by default. Use\n",{"type":41,"tag":61,"props":3929,"children":3931},{"className":3930},[],[3932],{"type":47,"value":3933},"{ shared: true }",{"type":47,"value":3935}," only when shared mutable state is intentional.",{"type":41,"tag":102,"props":3937,"children":3938},{},[3939,3944,3946,3951,3952,3958],{"type":41,"tag":61,"props":3940,"children":3942},{"className":3941},[],[3943],{"type":47,"value":712},{"type":47,"value":3945}," ",{"type":41,"tag":61,"props":3947,"children":3949},{"className":3948},[],[3950],{"type":47,"value":3081},{"type":47,"value":520},{"type":41,"tag":61,"props":3953,"children":3955},{"className":3954},[],[3956],{"type":47,"value":3957},"height: 'auto'",{"type":47,"value":3959}," warns and falls back to viewport\nsizing. Author explicit dimensions and test browser resize plus XR exit.",{"type":41,"tag":102,"props":3961,"children":3962},{},[3963,3965,3971,3973,3978,3980,3986],{"type":47,"value":3964},"If custom UIKitML components were passed through ",{"type":41,"tag":61,"props":3966,"children":3968},{"className":3967},[],[3969],{"type":47,"value":3970},"kits",{"type":47,"value":3972},", migrate them to\n",{"type":41,"tag":61,"props":3974,"children":3976},{"className":3975},[],[3977],{"type":47,"value":434},{"type":47,"value":3979},"; select the built-in collection with ",{"type":41,"tag":61,"props":3981,"children":3983},{"className":3982},[],[3984],{"type":47,"value":3985},"kit",{"type":47,"value":68},{"type":41,"tag":102,"props":3988,"children":3989},{},[3990,3992,3998,3999,4004,4005,4011,4013,4019],{"type":47,"value":3991},"If systems stored references to startup-created objects, replace static\nobject plumbing with ",{"type":41,"tag":61,"props":3993,"children":3995},{"className":3994},[],[3996],{"type":47,"value":3997},"world.getSceneObject",{"type":47,"value":636},{"type":41,"tag":61,"props":4000,"children":4002},{"className":4001},[],[4003],{"type":47,"value":3681},{"type":47,"value":651},{"type":41,"tag":61,"props":4006,"children":4008},{"className":4007},[],[4009],{"type":47,"value":4010},"getSceneEntity",{"type":47,"value":4012},", or ",{"type":41,"tag":61,"props":4014,"children":4016},{"className":4015},[],[4017],{"type":47,"value":4018},"requireSceneEntity",{"type":47,"value":4020}," and stable node ids.",{"type":41,"tag":102,"props":4022,"children":4023},{},[4024,4026,4032],{"type":47,"value":4025},"Preserve cleanup functions for signal\u002Fquery subscriptions and DOM\u002FUIKit\nlisteners. ",{"type":41,"tag":61,"props":4027,"children":4029},{"className":4028},[],[4030],{"type":47,"value":4031},"World.destroy()",{"type":47,"value":4033}," is now available for hot reload, tests, and\nmulti-world hosts.",{"type":41,"tag":70,"props":4035,"children":4037},{"id":4036},"phase-8-verify-in-increasing-scope",[4038],{"type":47,"value":4039},"Phase 8: Verify in increasing scope",{"type":41,"tag":50,"props":4041,"children":4042},{},[4043],{"type":47,"value":4044},"Run the project's normal formatter, typecheck, tests, and production build.\nThen verify the actual app:",{"type":41,"tag":159,"props":4046,"children":4047},{},[4048,4075,4080,4085,4090,4095,4100,4105],{"type":41,"tag":102,"props":4049,"children":4050},{},[4051,4053,4059,4061,4067,4068,4074],{"type":47,"value":4052},"Start the 0.5 dev server and wait for ",{"type":41,"tag":61,"props":4054,"children":4056},{"className":4055},[],[4057],{"type":47,"value":4058},"npx iwsdk dev status --json",{"type":47,"value":4060}," to report\n",{"type":41,"tag":61,"props":4062,"children":4064},{"className":4063},[],[4065],{"type":47,"value":4066},"browserConnected: true",{"type":47,"value":850},{"type":41,"tag":61,"props":4069,"children":4071},{"className":4070},[],[4072],{"type":47,"value":4073},"browserCommandReady: true",{"type":47,"value":68},{"type":41,"tag":102,"props":4076,"children":4077},{},[4078],{"type":47,"value":4079},"Validate and open every native scene. Fix missing manifest assets,\ncomponents, entity references, and file paths.",{"type":41,"tag":102,"props":4081,"children":4082},{},[4083],{"type":47,"value":4084},"In Editor view, compare hierarchy, transforms, visibility, authored lights,\npanels, player-space children, and representative camera views with the\npre-migration inventory.",{"type":41,"tag":102,"props":4086,"children":4087},{},[4088],{"type":47,"value":4089},"In Runtime view, test every interaction and inspect console logs. Browser\nscreenshots are runtime-only by design.",{"type":41,"tag":102,"props":4091,"children":4092},{},[4093],{"type":47,"value":4094},"Enter and exit XR through both the application UI and the emulator\u002Fsession\ncontrols. Confirm screen-space panels return after XR exit.",{"type":41,"tag":102,"props":4096,"children":4097},{},[4098],{"type":47,"value":4099},"Resize the desktop window and verify UIKit layout, clipping, fonts, rounded\ncorners, and perceived scale.",{"type":41,"tag":102,"props":4101,"children":4102},{},[4103],{"type":47,"value":4104},"If a physical headset is available, open the reported HTTPS network URL,\naccept its self-signed-certificate warning, and enter XR.",{"type":41,"tag":102,"props":4106,"children":4107},{},[4108],{"type":47,"value":4109},"Run a production build from a clean install using the committed lockfile.",{"type":41,"tag":50,"props":4111,"children":4112},{},[4113],{"type":47,"value":4114},"Do not regenerate IWSDK's library reference corpus as part of an application\nmigration.",{"type":41,"tag":70,"props":4116,"children":4118},{"id":4117},"completion-report",[4119],{"type":47,"value":4120},"Completion report",{"type":41,"tag":50,"props":4122,"children":4123},{},[4124],{"type":47,"value":4125},"Return a concise report containing:",{"type":41,"tag":98,"props":4127,"children":4128},{},[4129,4134,4139,4144,4149,4154,4159,4164],{"type":41,"tag":102,"props":4130,"children":4131},{},[4132],{"type":47,"value":4133},"detected source and target versions;",{"type":41,"tag":102,"props":4135,"children":4136},{},[4137],{"type":47,"value":4138},"package additions\u002Fremovals;",{"type":41,"tag":102,"props":4140,"children":4141},{},[4142],{"type":47,"value":4143},"old GLXF\u002FMeta Spatial\u002FUIKit generated artifacts retained or deleted;",{"type":41,"tag":102,"props":4145,"children":4146},{},[4147],{"type":47,"value":4148},"scene, asset, component, and UIKitML files migrated;",{"type":41,"tag":102,"props":4150,"children":4151},{},[4152],{"type":47,"value":4153},"behavior changes made for compatibility;",{"type":41,"tag":102,"props":4155,"children":4156},{},[4157],{"type":47,"value":4158},"exact automated and live tests run;",{"type":41,"tag":102,"props":4160,"children":4161},{},[4162],{"type":47,"value":4163},"any visual or physical-headset checks still requiring a human;",{"type":41,"tag":102,"props":4165,"children":4166},{},[4167],{"type":47,"value":4168},"any unresolved parity gap that prevents calling the migration complete.",{"type":41,"tag":70,"props":4170,"children":4172},{"id":4171},"optional-05-modernization-not-required-for-parity",[4173],{"type":47,"value":4174},"Optional 0.5 modernization (not required for parity)",{"type":41,"tag":50,"props":4176,"children":4177},{},[4178,4180,4185,4187,4192,4193,4199],{"type":47,"value":4179},"After migration is green, consider these additions separately: signal helpers\nre-exported from ",{"type":41,"tag":61,"props":4181,"children":4183},{"className":4182},[],[4184],{"type":47,"value":1509},{"type":47,"value":4186},", authored light components, raw XR frame\u002Fsession\nand hit-test helpers, ",{"type":41,"tag":61,"props":4188,"children":4190},{"className":4189},[],[4191],{"type":47,"value":4031},{"type":47,"value":636},{"type":41,"tag":61,"props":4194,"children":4196},{"className":4195},[],[4197],{"type":47,"value":4198},"World.loadSceneDocument()",{"type":47,"value":4200},", renderable\nasset instantiation, player-space authoring, and managed scene review tools.\nDo not mix these refactors into the compatibility pass unless the user asks.",{"type":41,"tag":4202,"props":4203,"children":4204},"style",{},[4205],{"type":47,"value":4206},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":4208,"total":3162},[4209,4231,4245,4266,4286,4303,4314,4334,4347,4362,4374,4384],{"slug":4210,"name":4210,"fn":4211,"description":4212,"org":4213,"tags":4214,"stars":4228,"repoUrl":4229,"updatedAt":4230},"relay-best-practices","write idiomatic Relay code","Best practices for writing idiomatic Relay code. ALWAYS use this skill when writing or modifying React components that use Relay for data fetching. Covers fragments, queries, mutations, pagination, and common anti-patterns. Use when you see `useFragment`, `useLazyLoadQuery`, `usePreloadedQuery`, `useMutation`, `usePaginationFragment`, `graphql` template literals, `react-relay` imports, or `__generated__\u002F*.graphql` files. Also use when asked to explain Relay concepts, debug Relay issues, or review Relay code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4215,4216,4219,4222,4225],{"name":21,"slug":22,"type":16},{"name":4217,"slug":4218,"type":16},"Frontend","frontend",{"name":4220,"slug":4221,"type":16},"GraphQL","graphql",{"name":4223,"slug":4224,"type":16},"React","react",{"name":4226,"slug":4227,"type":16},"Relay","relay",18950,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Frelay","2026-04-22T04:58:15.370563",{"slug":4232,"name":4232,"fn":4233,"description":4234,"org":4235,"tags":4236,"stars":4228,"repoUrl":4229,"updatedAt":4244},"relay-performance","optimize Relay application performance","Performance best practices for Relay applications. Use when optimizing data fetching, reducing re-renders, configuring caching, or improving time to first meaningful paint. Covers query placement, @defer, pagination, fetch policies, garbage collection, fragment granularity, and server-side filtering. Companion to the relay-best-practices skill which covers correctness and architecture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4237,4238,4239,4242,4243],{"name":4217,"slug":4218,"type":16},{"name":4220,"slug":4221,"type":16},{"name":4240,"slug":4241,"type":16},"Performance","performance",{"name":4223,"slug":4224,"type":16},{"name":4226,"slug":4227,"type":16},"2026-06-10T07:30:28.726513",{"slug":4246,"name":4246,"fn":4247,"description":4248,"org":4249,"tags":4250,"stars":4263,"repoUrl":4264,"updatedAt":4265},"add-shape-types-to-torch-model","annotate PyTorch models with tensor shapes","Port a PyTorch model to use pyrefly's tensor shape type system (Tensor[[B, C, H, W]], Int[T]). Use this skill whenever the user wants to add shape annotations to a PyTorch model, type a model with tensor dimensions, port a model to use shape tracking, or annotate model forward methods with tensor shapes. Also use when the user mentions tensor shape ports, Int types for PyTorch, or pyrefly shape checking on a model file. Invoke BEFORE starting any model port — the skill's gated workflow prevents common failure modes.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4251,4254,4257,4260],{"name":4252,"slug":4253,"type":16},"Data Modeling","data-modeling",{"name":4255,"slug":4256,"type":16},"Deep Learning","deep-learning",{"name":4258,"slug":4259,"type":16},"Python","python",{"name":4261,"slug":4262,"type":16},"PyTorch","pytorch",6833,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fpyrefly","2026-07-18T05:12:08.515952",{"slug":4267,"name":4267,"fn":4268,"description":4269,"org":4270,"tags":4271,"stars":4283,"repoUrl":4284,"updatedAt":4285},"camera-streaming","configure camera streaming and photo capture","Stream, video frames, photo capture, resolution\u002Fframe rate configuration",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4272,4274,4277,4280],{"name":4273,"slug":3265,"type":16},"Camera",{"name":4275,"slug":4276,"type":16},"Hardware","hardware",{"name":4278,"slug":4279,"type":16},"iOS","ios",{"name":4281,"slug":4282,"type":16},"Video","video",488,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fmeta-wearables-dat-ios","2026-05-15T06:14:43.555881",{"slug":4287,"name":4287,"fn":4288,"description":4289,"org":4290,"tags":4291,"stars":4283,"repoUrl":4284,"updatedAt":4302},"dat-conventions","develop iOS applications with DAT SDK","Swift patterns, async\u002Fawait, naming conventions, key types for DAT SDK iOS development",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4292,4293,4296,4299],{"name":4278,"slug":4279,"type":16},{"name":4294,"slug":4295,"type":16},"Mobile","mobile",{"name":4297,"slug":4298,"type":16},"SDK","sdk",{"name":4300,"slug":4301,"type":16},"Swift","swift","2026-05-15T06:14:42.334435",{"slug":4304,"name":4304,"fn":4305,"description":4306,"org":4307,"tags":4308,"stars":4283,"repoUrl":4284,"updatedAt":4313},"debugging","debug wearable device software","Common issues, Developer Mode, version compatibility, state machine diagnosis",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4309,4311,4312],{"name":4310,"slug":4304,"type":16},"Debugging",{"name":21,"slug":22,"type":16},{"name":4278,"slug":4279,"type":16},"2026-05-15T06:14:38.626606",{"slug":4315,"name":4315,"fn":4316,"description":4317,"org":4318,"tags":4319,"stars":4283,"repoUrl":4284,"updatedAt":4333},"display-access","manage display capabilities on wearable devices","Display capability setup, display-capable device selection, UI DSL, icons, buttons, images, and video playback",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4320,4323,4326,4329,4332],{"name":4321,"slug":4322,"type":16},"Design","design",{"name":4324,"slug":4325,"type":16},"Images","images",{"name":4327,"slug":4328,"type":16},"Interaction","interaction",{"name":4330,"slug":4331,"type":16},"UI Components","ui-components",{"name":4281,"slug":4282,"type":16},"2026-05-15T06:14:39.844502",{"slug":4335,"name":4335,"fn":4336,"description":4337,"org":4338,"tags":4339,"stars":4283,"repoUrl":4284,"updatedAt":4346},"getting-started","set up Meta wearable SDK integration","SDK setup, Swift Package Manager integration, Info.plist configuration, and first connection to Meta glasses",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4340,4343,4344,4345],{"name":4341,"slug":4342,"type":16},"Configuration","configuration",{"name":4278,"slug":4279,"type":16},{"name":4297,"slug":4298,"type":16},{"name":4300,"slug":4301,"type":16},"2026-05-15T06:14:41.086639",{"slug":4348,"name":4348,"fn":4349,"description":4350,"org":4351,"tags":4352,"stars":4283,"repoUrl":4284,"updatedAt":4361},"mockdevice-testing","test wearable apps with mock devices","MockDeviceKit for testing without physical glasses hardware",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4353,4354,4355,4358],{"name":4278,"slug":4279,"type":16},{"name":4294,"slug":4295,"type":16},{"name":4356,"slug":4357,"type":16},"QA","qa",{"name":4359,"slug":4360,"type":16},"Testing","testing","2026-05-15T06:14:37.406692",{"slug":4363,"name":4363,"fn":4364,"description":4365,"org":4366,"tags":4367,"stars":4283,"repoUrl":4284,"updatedAt":4373},"permissions-registration","register apps with Meta AI","App registration with Meta AI, camera permission flows",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4368,4369,4370],{"name":4273,"slug":3265,"type":16},{"name":4278,"slug":4279,"type":16},{"name":4371,"slug":4372,"type":16},"Permissions","permissions","2026-05-15T06:14:46.030253",{"slug":4375,"name":4375,"fn":4376,"description":4377,"org":4378,"tags":4379,"stars":4283,"repoUrl":4284,"updatedAt":4383},"sample-app-guide","build wearable apps with camera streaming","Building a complete DAT app with camera streaming and photo capture",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4380,4381,4382],{"name":4273,"slug":3265,"type":16},{"name":4278,"slug":4279,"type":16},{"name":4294,"slug":4295,"type":16},"2026-05-15T06:14:36.185947",{"slug":4385,"name":4385,"fn":4386,"description":4387,"org":4388,"tags":4389,"stars":4283,"repoUrl":4284,"updatedAt":4396},"session-lifecycle","monitor device session lifecycle states","Device session states, pause\u002Fresume, availability monitoring",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4390,4391,4392,4395],{"name":4278,"slug":4279,"type":16},{"name":4294,"slug":4295,"type":16},{"name":4393,"slug":4394,"type":16},"Monitoring","monitoring",{"name":4240,"slug":4241,"type":16},"2026-05-15T06:14:44.790925",{"items":4398,"total":1154},[4399,4415,4430,4442,4448,4462,4478],{"slug":4400,"name":4400,"fn":4401,"description":4402,"org":4403,"tags":4404,"stars":23,"repoUrl":24,"updatedAt":4414},"iwsdk-debug","debug continuous behavior in WebXR","Debug continuous behavior in WebXR scenes — physics, animations, collisions, game loops, or any real-time interaction that happens too fast for an agent to observe. Uses ECS pause\u002Fstep\u002Fsnapshot\u002Fdiff to freeze time and inspect state frame by frame.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4405,4406,4409,4410,4411],{"name":4310,"slug":4304,"type":16},{"name":4407,"slug":4408,"type":16},"Immersive","immersive",{"name":4327,"slug":4328,"type":16},{"name":14,"slug":15,"type":16},{"name":4412,"slug":4413,"type":16},"WebXR","webxr","2026-08-03T06:00:14.723239",{"slug":4416,"name":4416,"fn":4417,"description":4418,"org":4419,"tags":4420,"stars":23,"repoUrl":24,"updatedAt":4429},"iwsdk-depth-occlusion","implement depth sensing and occlusion in IWSDK","Guide for implementing depth sensing and occlusion in IWSDK projects. Use when adding depth-based occlusion to hide virtual objects behind real-world surfaces, configuring DepthSensingSystem, choosing occlusion modes, or troubleshooting objects that disappear or fail to occlude.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4421,4424,4425,4428],{"name":4422,"slug":4423,"type":16},"AR","ar",{"name":14,"slug":15,"type":16},{"name":4426,"slug":4427,"type":16},"VR","vr",{"name":4412,"slug":4413,"type":16},"2026-07-21T05:39:07.241041",{"slug":4431,"name":4431,"fn":4432,"description":4433,"org":4434,"tags":4435,"stars":23,"repoUrl":24,"updatedAt":4441},"iwsdk-grab","grab and move objects in WebXR scenes","Grab an object in the WebXR scene using emulated controllers. Use when the user wants to pick up, move, or test grabbing an object. Supports OneHandGrabbable and TwoHandsGrabbable components which use proximity-based grip (squeeze button), not trigger.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4436,4437,4438,4439,4440],{"name":4422,"slug":4423,"type":16},{"name":4407,"slug":4408,"type":16},{"name":4327,"slug":4328,"type":16},{"name":4426,"slug":4427,"type":16},{"name":4412,"slug":4413,"type":16},"2026-08-03T06:00:15.729887",{"slug":4,"name":4,"fn":5,"description":6,"org":4443,"tags":4444,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4445,4446,4447],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"slug":4449,"name":4449,"fn":4450,"description":4451,"org":4452,"tags":4453,"stars":23,"repoUrl":24,"updatedAt":4461},"iwsdk-physics","implement physics in IWSDK projects","Guide for implementing physics in IWSDK projects. Use when adding physics simulation, configuring rigid bodies, collision shapes, applying forces, creating grabbable physics objects, or troubleshooting physics behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4454,4455,4456,4457,4460],{"name":4407,"slug":4408,"type":16},{"name":4327,"slug":4328,"type":16},{"name":14,"slug":15,"type":16},{"name":4458,"slug":4459,"type":16},"Physics","physics",{"name":4412,"slug":4413,"type":16},"2026-08-03T06:00:16.693714",{"slug":4463,"name":4463,"fn":4464,"description":4465,"org":4466,"tags":4467,"stars":23,"repoUrl":24,"updatedAt":4477},"iwsdk-planner","plan IWSDK projects and architecture","IWSDK experience pipeline and planning guide. Use when building a new IWSDK app\u002Fgame end-to-end, planning new IWSDK features, designing systems\u002Fcomponents, reviewing IWSDK code architecture, or when the user asks about IWSDK patterns, ECS design, signals, or reactive programming. Runs a phased ideation → design → grounding → architecture → build → verify → ship pipeline, orchestrating sub-agents per phase where the harness supports them.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4468,4471,4472,4473,4476],{"name":4469,"slug":4470,"type":16},"Architecture","architecture",{"name":4407,"slug":4408,"type":16},{"name":14,"slug":15,"type":16},{"name":4474,"slug":4475,"type":16},"Strategy","strategy",{"name":4412,"slug":4413,"type":16},"2026-08-03T06:00:11.725103",{"slug":4479,"name":4479,"fn":4480,"description":4481,"org":4482,"tags":4483,"stars":23,"repoUrl":24,"updatedAt":4489},"iwsdk-ray","implement ray-based interactions in WebXR","Ray-based interactions in the WebXR scene — click objects, press UI buttons, or distance-grab with DistanceGrabbable. Use when the user wants to point at and interact with something at a distance, click a UI button, or test ray-based selection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[4484,4485,4486,4487,4488],{"name":4422,"slug":4423,"type":16},{"name":4407,"slug":4408,"type":16},{"name":4327,"slug":4328,"type":16},{"name":4426,"slug":4427,"type":16},{"name":4412,"slug":4413,"type":16},"2026-08-03T06:00:13.705148"]