@aspect/iwsdk-* and is available at github.com/facebook/immersive-web-sdk (MIT license) with documentation at iwsdk.dev.| Capability | Detail |
|---|---|
Grab interactions | One-hand, two-hand, distance grab |
Locomotion | Teleport, smooth movement, snap turn |
Physics | Havok integration, collisions, rigid bodies |
Hand tracking | Full articulated hand input and gestures |
Spatial UI | VR panels with CSS-like styling (UIKitML) |
3D audio | Spatial sound positioning |
Scene understanding | AR plane/mesh detection |
XR emulation | Browser-based WebXR emulation via IWER (no headset required) |
npm create @iwsdk scaffolds a complete project. Save a file, the browser hot-reloads, and the emulated XR session updates — no compile step, no APK build, no headset needed during development.| Persona | Description | How AI tooling helps |
|---|---|---|
Non-technical creators | PMs, designers, artists, QA with ideas but no XR development experience | Describe an experience in words → get a working VR app |
WebXR developers | Developers building with IWSDK who want to move faster | AI handles boilerplate, debugging, asset integration |
Rapid prototyping teams | Teams that need to quickly validate XR concepts | Go from idea to shareable prototype in hours, not weeks |
Enterprise builders | Organizations evaluating XR for training, visualization, collaboration | Low barrier to entry; no specialized XR engineering team needed |
Vite development server via stdio. The MCP server communicates with the browser over a WebSocket connection. Inside the browser, two modules handle the framework side: an MCP client (injected by the Vite plugin) captures console logs and screenshots, while the MCP runtime (part of IWSDK core) exposes ECS and scene graph inspection. Underneath both, IWER (the Immersive Web Emulation Runtime) emulates the XR headset and controllers, and its RemoteControlInterface translates MCP tool calls into device state changes. The agent’s workflow is: write code, reload the page, observe the result via screenshots and console logs, query the scene and ECS state, diagnose issues, and fix — all without human intervention.vite-plugin-iwer)Vite development server and exposes 32 tools to the AI agent over stdio. The server bridges between Claude Code and the running browser application via WebSocket.| Tool | Description |
|---|---|
get_session_status | Get XR session state and device status |
accept_session | Accept an offered XR session (equivalent to clicking “Enter XR”) |
end_session | End the current active XR session |
| Tool | Description |
|---|---|
get_transform | Get position/orientation of headset or controllers |
set_transform | Move headset/controller to a world position and orientation |
look_at | Orient a device to face a specific world position |
animate_to | Smoothly animate a device to a target pose over time |
set_input_mode | Switch between controllers and hand tracking |
set_connected | Connect or disconnect an input device |
get_select_value | Read the current trigger/pinch value |
set_select_value | Set trigger/pinch pressure (0–1) |
select | Perform a full press-and-release action |
get_gamepad_state | Read all button and axis values on a controller |
set_gamepad_state | Set button presses, thumbstick position, and other gamepad values |
| Tool | Description |
|---|---|
capture_canvas | Screenshot the rendered XR view as PNG/JPEG/WebP |
get_console_logs | Retrieve browser console output with level/timestamp filtering |
get_device_state | Full snapshot of all device transforms and input state |
set_device_state | Restore a complete device state snapshot |
| Tool | Description |
|---|---|
get_scene_hierarchy | JSON tree of the Three.js scene graph (names, UUIDs, entity indices) |
get_object_transform | Local and global transform of any scene object |
| Tool | Description |
|---|---|
ecs_pause | Freeze all ECS system updates (rendering continues) |
ecs_resume | Resume ECS execution |
ecs_step | Advance exactly N frames while paused |
ecs_query_entity | Inspect all components and their data on an entity |
ecs_find_entities | Search entities by component type |
ecs_list_systems | List all registered systems with execution order and enabled state |
ecs_list_components | List all registered component types |
ecs_toggle_system | Enable/disable individual systems at runtime |
ecs_set_component | Write component values on a live entity without restarting |
ecs_snapshot | Capture full ECS state for comparison |
ecs_diff | Compare two ECS snapshots to identify state changes |
| Tool | Description |
|---|---|
reload_page | Force-refresh the browser page |
Vite plugin)console.log/warn/error/info/debug and buffers them for retrieval; captures uncaught exceptions and unhandled promise rejectionsWorld.create() and made available to the MCP server via window.FRAMEWORK_MCP_RUNTIME.update() loop to intercept frame execution, enabling pause, step, snapshot, and diff operations without any application code changes.set_transform and select into actual state changes in the WebXR emulation.npm create iwsdk now produces a project that is fully configured for AI-assisted development out of the box:iwer — the 32-tool MCP server described above| Skill | Purpose |
|---|---|
iwsdk-planner | Architecture planning with IWSDK best practices and anti-patterns |
catalog-assets | Browse and integrate 3D assets from the starter asset library |
iwsdk-ui-panel | Build and iterate on spatial UI panels using UIKitML |
click-target | Add pointer interaction to entities |
preview-model | Load and preview 3D models in the scene |
xr-mode-test | Validate XR session mode switching |
PROJECT_CLAUDE.md file is generated containing IWSDK best practices, critical anti-patterns (the #1 cause of bugs: missing LocomotionEnvironment when locomotion is enabled), VR performance constraints (11–14ms frame budget), and ECS coding conventions.--name, --features, and other flags for scripted, non-interactive project creation (enables CI and automation workflows)--bundle flag for fully offline project creation — pre-packages all npm dependencies as .tgz files so projects can be created in air-gapped or restricted network environments| Aspect | Native engines | IWSDK + AI tooling |
|---|---|---|
Iteration cycle | 30–90s compile, deploy APK | Save file → instant refresh |
AI feedback loop | AI writes code, human tests manually | AI writes code, sees result, self-corrects |
Runtime debugging | Attach debugger, add breakpoints | AI pauses ECS, inspects entities, patches values live |
Barrier to entry | Requires XR expertise + engine knowledge | Describe what you want in natural language |
Sharing | Build → sign → side-load APK | Deploy to web URL or ProtoHub |
| Aspect | Generic AI + web framework | IWSDK + AI tooling |
|---|---|---|
3D scene understanding | None — AI sees only code | AI queries scene graph, entity transforms, component data |
XR input simulation | None | AI controls headset, controllers, hand tracking programmatically |
Framework knowledge | Generic / hallucinated | RAG over 3,337 real code chunks with semantic search |
Debug capability | Console logs only | Pause simulation, step frames, diff ECS state, toggle systems |
npm create iwsdk. The project is created with AI tooling pre-configured: MCP servers, skills, permissions, and project knowledge are all in place.ecs_find_entities, reads their velocity components, reduces the speed live with ecs_set_component, and asks the developer to confirm. Once confirmed, Claude updates the source code to match the tuned values.| Requirement | Detail |
|---|---|
Runtime | Node.js 18+ |
Package manager | npm, pnpm, or yarn |
Browser | Chromium-based (Chrome, Edge) for WebXR emulation |
AI agent | Claude Code CLI with MCP support |
Headset (optional) | Meta Quest 2/3/3S/Pro for on-device testing |
Dependencies | @modelcontextprotocol/sdk, ws (WebSocket) |
| Package | Change |
|---|---|
vite-plugin-iwer | MCP server, browser-side client injection, WebSocket bridge |
@aspect/iwsdk-core | MCP runtime, ECS debug tools, scene inspection tools |
immersive-web-emulation-runtime (IWER) | RemoteControlInterface, programmatic device control API |
immersive-web-emulation-runtime/devui | Programmatic control mode UI |
create-iwsdk | Claude scaffolding, CLI flags, offline bundle mode |