{ "name": "blender-web-editor", "private": true, "version": "0.1.0-rc.1", "type": "module", "scripts": { "dev": "vite --config app/vite.config.ts", "build": "tsc -p tsconfig.json && vite build --config app/vite.config.ts", "typecheck": "tsc -p tsconfig.json --noEmit", "lint": "eslint app", "check:local-deps": "bash ../tools/web/check-local-deps.sh", "test": "node --test tests/**/*.test.mjs", "test:engine-manifest-v2": "node --test tests/unit/engine-manifest-v2.test.mjs", "test:engine-variant-install": "node ../tools/web/check-engine-variant-install.mjs", "test:engine-variant-selection": "node --test tests/unit/engine-variant-selection.test.mjs", "test:engine-variant-fallback": "node --test tests/unit/engine-variant-fallback.test.mjs", "test:engine-upgrade-safety": "node --test --test-name-pattern=M6-08 tests/unit/engine-variant-selection.test.mjs tests/unit/engine-variant-fallback.test.mjs && playwright test --config playwright.config.ts tests/e2e/engine-upgrade-safety.spec.ts", "test:user-actions": "node --test tests/unit/user-action-state.test.mjs tests/unit/project-action-mutex.test.mjs tests/unit/file-byte-reader.test.mjs tests/unit/save-transaction.test.mjs tests/unit/dirty-state.test.mjs tests/unit/worker-fault.test.mjs tests/unit/recent-projects.test.mjs tests/unit/storage-budget.test.mjs tests/unit/ui-schema.test.mjs tests/unit/viewport-camera.test.mjs tests/unit/diagnostic-report.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/user-action-state.spec.ts tests/e2e/project-action-mutex.spec.ts tests/e2e/file-import-progress.spec.ts tests/e2e/save-interruption.spec.ts tests/e2e/dirty-state.spec.ts tests/e2e/worker-crash-recovery.spec.ts tests/e2e/recent-projects-recovery.spec.ts tests/e2e/storage-budget.spec.ts tests/e2e/storage-cleanup.spec.ts tests/e2e/ui-context.spec.ts tests/e2e/responsive-layout.spec.ts tests/e2e/viewport-consistency.spec.ts tests/e2e/keyboard-accessibility.spec.ts tests/e2e/diagnostic-report.spec.ts", "test:editing-soak": "EDITING_SOAK_DURATION_MS=1800000 EDITING_SOAK_REPORT=../release/soak-reports/editing.json playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-soak.spec.ts && node ../tools/web/check-editing-soak-report.mjs", "test:editing-soak:debug": "EDITING_SOAK_DURATION_MS=30000 EDITING_SOAK_ALLOW_SHORT=1 playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-soak.spec.ts", "test:editing-soak-report": "node ../tools/web/check-editing-soak-report.mjs", "test:deployment-http": "node ../tools/web/check-deployment-http.mjs", "test:deployment-runbook": "node ../tools/web/check-deployment-runbook.mjs", "test:upgrade-runbook": "node ../tools/web/check-upgrade-runbook.mjs", "test:rollback-runbook": "node ../tools/web/check-rollback-runbook.mjs", "test:operations-diagnostics": "node ../tools/web/check-operations-diagnostics.mjs", "test:operations-rehearsal": "node ../tools/web/run-operations-rehearsal.mjs", "test:deployment-cache": "npm run build && node ../tools/web/check-deployment-cache.mjs", "test:archive-offline": "npm run build && node ../tools/web/create-offline-release.mjs && playwright test --config playwright.archive.config.ts", "test:binary-archive": "node ../tools/web/check-binary-archive.mjs", "test:source-archive": "node ../tools/web/check-source-archive.mjs", "test:single-thread-unisolated": "playwright test --config playwright.single-thread.config.ts", "test:pthread-engine": "playwright test --config playwright.config.ts tests/e2e/pthread-engine-isolated.spec.ts", "test:pthread-fallback": "playwright test --config playwright.config.ts tests/e2e/pthread-fallback.spec.ts", "test:e2e": "playwright test --config playwright.config.ts", "test:capability-gates": "playwright test --config playwright.config.ts -g \"undeclared capability protocols\"", "test:simulation-cache": "playwright test --config playwright.config.ts -g \"Simulation caches\"", "test:simulation-cache-identity": "node --test tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/simulation-cache-identity.spec.ts", "test:simulation-cache-lifecycle": "node --test tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/simulation-cache-lifecycle.spec.ts", "test:simulation-cache-performance": "playwright test --config playwright.config.ts tests/e2e/simulation-cache-performance.spec.ts", "test:network-interruption": "playwright test --config playwright.config.ts tests/e2e/network-interruption.spec.ts", "test:device-loss": "playwright test --config playwright.config.ts tests/e2e/device-loss.spec.ts", "test:oom-recovery": "playwright test --config playwright.config.ts tests/e2e/oom-recovery.spec.ts", "test:storage-quota": "playwright test --config playwright.config.ts -g \"real OPFS quota\"", "test:texture-4k-performance": "playwright test --config playwright.config.ts tests/e2e/texture-4k-performance.spec.ts", "test:texture-8k-performance": "playwright test --config playwright.config.ts tests/e2e/texture-8k-performance.spec.ts", "test:physics-main-reader": "node ../tools/web/check-physics-main-reader.mjs", "test:geometry-node-main-reader": "node --test tests/unit/geometry-nodes.test.mjs && node ../tools/web/check-geometry-node-main-reader.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-main-reader.spec.ts", "test:geometry-node-allowlist": "node --test tests/unit/geometry-nodes.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-allowlist.spec.ts", "test:geometry-node-evaluator-golden": "node --test tests/unit/geometry-nodes.test.mjs && node ../tools/web/check-geometry-node-evaluator-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-evaluator-golden.spec.ts", "test:geometry-node-field-budget": "node --test tests/unit/geometry-nodes.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-field-budget.spec.ts", "test:shader-compile": "node --test tests/unit/shader-compiler.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-compile.spec.ts", "test:shader-compile-key": "node --test tests/unit/shader-compiler.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-compile-key.spec.ts", "test:shader-pipeline": "playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-pipeline.spec.ts", "test:shader-capability": "playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-capability-block.spec.ts", "test:nla-evaluation-golden": "node ../tools/web/check-nla-evaluation-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/nla-evaluation-golden.spec.ts", "test:nla-operator": "node --test tests/unit/nla.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/nla-operator.spec.ts", "test:physics-solver-probe": "node --test tests/unit/physics-solver-probe.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/physics-solver-probe.spec.ts", "test:physics-cache-family": "node --test tests/unit/physics-cache-family.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/physics-cache-family.spec.ts", "test:m10-domain-gates": "node --test tests/unit/geometry-nodes.test.mjs tests/unit/shader-compiler.test.mjs tests/unit/nla.test.mjs tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/m10-domain-browser-gates.spec.ts", "test:browser": "playwright test --config playwright.release.config.ts", "test:cross-browser": "npm run test:browser", "test:golden": "node ../tools/web/run-blender-golden.mjs", "test:collapse-ratios": "node ../tools/web/check-collapse-ratios.mjs", "test:topology-collapse": "node ../tools/web/check-topology-collapse.mjs", "test:depsgraph": "node ../tools/web/check-depsgraph.mjs", "test:nonmesh-binary": "playwright test --config playwright.config.ts -g \"one-million-point binary transfer gate\"", "test:vdb": "playwright test --config playwright.config.ts -g \"VDB conversion boundary\"", "test:frame-evaluation": "node ../tools/web/check-frame-evaluation.mjs", "test:pose-constraint-goldens": "node ../tools/web/check-pose-constraint-goldens.mjs", "test:main-roundtrip": "node ../tools/web/check-main-roundtrip.mjs", "test:nonmesh-roundtrip": "node ../tools/web/check-nonmesh-roundtrip.mjs", "test:nonmesh-desktop-golden": "node ../tools/web/check-nonmesh-desktop-golden.mjs", "test:selection-history": "playwright test --config playwright.config.ts -g \"N-015 selection history\"", "test:nonmesh-interaction": "playwright test --config playwright.config.ts -g \"N-015 curve gizmo interaction\"", "test:vdb-availability": "node ../tools/web/check-vdb-availability.mjs", "test:vdb-native": "node ../tools/web/check-vdb-native-pipeline.mjs", "test:vdb-server": "node ../tools/web/check-vdb-server-job.mjs", "test:vdb-opfs": "playwright test --config playwright.config.ts -g \"hash-bound NanoVDB project through OPFS\"", "test:vdb-webgpu": "playwright test --config playwright.config.ts -g \"real NanoVDB Float32 tree with WebGPU\"", "test:vdb-viewport": "playwright test --config playwright.config.ts -g \"both production viewport backends\"", "test:vdb-faults": "playwright test --config playwright.config.ts -g \"NanoVDB paging from network, Worker and WebGPU device faults\"", "test:nanovdb-page-feedback": "node --test tests/unit/nanovdb-page-feedback.test.mjs", "test:nanovdb-page-feedback-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-page-feedback.spec.ts", "test:nanovdb-main-thread-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-main-thread.spec.ts", "test:nanovdb-offscreen-page-feedback-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-offscreen-page-feedback.spec.ts", "test:nanovdb-page-resume": "playwright test --config playwright.config.ts tests/e2e/nanovdb-page-resume.spec.ts", "test:nanovdb-opfs-restart": "playwright test --config playwright.config.ts tests/e2e/nanovdb-opfs-restart.spec.ts", "test:nanovdb-sparse-performance": "playwright test --config playwright.config.ts tests/e2e/nanovdb-sparse-performance.spec.ts", "test:nanovdb-volume-roundtrip": "playwright test --config playwright.config.ts tests/e2e/nanovdb-volume-roundtrip.spec.ts", "test:nanovdb-render-golden": "playwright test --config playwright.config.ts tests/e2e/nanovdb-render-golden.spec.ts", "test:external-vfont": "playwright test --config playwright.config.ts tests/e2e/external-vfont.spec.ts", "test:curve-topology-contract": "playwright test --config playwright.config.ts tests/e2e/curve-topology-contract.spec.ts", "test:curve-topology-operator": "playwright test --config playwright.config.ts tests/e2e/curve-topology-contract.spec.ts tests/e2e/curve-topology-operator.spec.ts", "test:grease-pencil-marquee": "node --test tests/unit/grease-pencil-marquee.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-marquee.spec.ts", "test:grease-pencil-selection": "node --test tests/unit/grease-pencil-selection.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-selection.spec.ts", "test:grease-pencil-reorder": "node --test tests/unit/grease-pencil-reorder.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-reorder.spec.ts", "test:paint-depth-visibility": "node --test tests/unit/paint-depth-visibility.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-depth-visibility.spec.ts", "test:paint-stroke-session": "node --test tests/unit/paint-stroke-session.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-stroke-session.spec.ts", "test:texture-paint-asset": "node --test tests/unit/texture-paint-asset.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/texture-paint-asset.spec.ts", "test:paint-pbvh-capability": "node --test tests/unit/paint-pbvh-capability.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-pbvh-capability.spec.ts", "test:editing-domain-recovery": "node --test tests/unit/editing-domain-recovery.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-domain-recovery.spec.ts", "test:grease-pencil": "node ../tools/web/check-grease-pencil-roundtrip.mjs", "test:grease-pencil-editor": "playwright test --config playwright.config.ts -g \"N-016 Grease Pencil editor context\"", "test:paint-roundtrip": "node ../tools/web/check-paint-roundtrip.mjs", "test:weight-paint-golden": "node ../tools/web/check-weight-paint-golden.mjs", "test:lighting-roundtrip": "node ../tools/web/check-lighting-roundtrip.mjs", "test:lighting-field-parity": "node ../tools/web/check-lighting-field-parity.mjs && npm run test:lighting-roundtrip", "test:lighting-field-roundtrip": "npm run test:lighting-roundtrip && playwright test --config playwright.config.ts --workers=1 tests/e2e/lighting-field-roundtrip.spec.ts", "test:render-resource-budget": "node --test tests/unit/render-budget.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-resource-budget.spec.ts", "test:render-reference": "node --test tests/unit/render-image-comparison.test.mjs && node ../tools/web/check-render-reference.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-reference.spec.ts", "test:render-routing": "node --test tests/unit/render-routing.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-routing.spec.ts", "test:server-render-job": "node --test tests/unit/server-render-job.test.mjs && node ../tools/web/check-server-render-job.mjs", "test:compositor-node-golden": "node --test tests/unit/compositor-webgpu.test.mjs && node ../tools/web/check-compositor-node-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/compositor-node-golden.spec.ts", "test:compositor-unsupported-gate": "node --test tests/unit/compositor-unsupported-gate.test.mjs && node ../tools/web/check-compositor-main-reader.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/compositor-unsupported-gate.spec.ts", "test:compositor-main-reader": "node ../tools/web/check-compositor-main-reader.mjs", "test:sequencer": "playwright test --config playwright.config.ts -g \"N-021 sequencer\"", "test:sequencer-main-reader": "node ../tools/web/check-sequencer-main-reader.mjs", "test:sequencer-codec-probe": "node --test tests/unit/sequencer-codec-probe.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-codec-probe.spec.ts", "test:sequencer-media-cache": "node --test tests/unit/sequencer-media-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-media-cache.spec.ts", "test:sequencer-media-revision": "node --test tests/unit/sequencer-media-revision.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-media-revision.spec.ts", "test:sequencer-final-export": "node --test tests/unit/sequencer-final-export.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-final-export.spec.ts", "test:sequencer-audio-recovery": "node --test tests/unit/sequencer-audio-recovery.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-audio-recovery.spec.ts", "test:tracking-mask": "playwright test --config playwright.config.ts -g \"N-022 tracking\"", "test:mask-main-reader": "node ../tools/web/check-mask-main-reader.mjs", "test:asset-library": "playwright test --config playwright.config.ts -g \"N-023 asset\"", "test:library-main-reader": "node ../tools/web/check-library-main-reader.mjs", "test:editor-workflow": "playwright test --config playwright.config.ts -g \"N-024 editor\"", "test:editor-main-reader": "node ../tools/web/check-editor-main-reader.mjs", "test:scripting-platform": "playwright test --config playwright.config.ts -g \"N-025 script\"", "test:script-main-reader": "node ../tools/web/check-script-main-reader.mjs", "test:scripting-isolation": "node ../tools/web/check-scripting-isolation.mjs", "test:release-gate": "playwright test --config playwright.config.ts -g \"N-026 release\"", "test:v1-user-loop": "playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts", "test:browser-smoke": "playwright test --config playwright.release.config.ts -g \"boots the offline engine\"", "test:cross-browser-smoke": "npm run test:browser-smoke", "test:authoring-roundtrip": "node ../tools/web/check-authoring-roundtrip.mjs", "test:modifier-goldens": "node ../tools/web/check-modifier-goldens.mjs", "test:modifier-cycle": "node ../tools/web/check-modifier-cycle.mjs", "test:modifier-matrix": "node ../tools/web/check-modifier-capability-matrix.mjs", "test:image-resources": "node ../tools/web/check-image-resources.mjs", "test:glb-blender-roundtrip": "node ../tools/web/check-glb-blender-roundtrip.mjs", "test:nonmesh-glb-blender-roundtrip": "node ../tools/web/check-nonmesh-glb-blender-roundtrip.mjs", "test:nonmesh-usd-serialization": "USD_DESKTOP_REQUIRED=0 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs", "test:nonmesh-usd-blender-roundtrip": "USD_DESKTOP_REQUIRED=1 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs", "test:release-performance": "node ../tools/web/check-release-performance.mjs", "test:geometry-10m-performance": "playwright test --config playwright.config.ts tests/e2e/geometry-10m-performance.spec.ts", "test:long-media-performance": "playwright test --config playwright.config.ts tests/e2e/long-media-performance.spec.ts", "test:malicious-blends": "node ../tools/web/check-malicious-blends.mjs", "test:release-package": "npm run build && npm run release:sbom && node ../tools/web/check-release-package.mjs", "release:sbom": "node ../tools/web/generate-sbom.mjs", "release:evidence": "node ../tools/web/collect-release-evidence.mjs", "release:evidence-sync": "node ../tools/web/collect-release-evidence.mjs --sync-ledger", "release:evidence-v1": "node ../tools/web/collect-release-evidence.mjs --record-v1-user-loop", "release:evidence-geometry-10m": "node ../tools/web/collect-release-evidence.mjs --record-geometry-10m", "release:evidence-long-media": "node ../tools/web/collect-release-evidence.mjs --record-long-media", "release:evidence-oom": "node ../tools/web/collect-release-evidence.mjs --record-oom-recovery", "test:release-evidence": "node ../tools/web/check-release-evidence.mjs", "test:v1-acceptance-coverage": "node ../tools/web/check-v1-acceptance-coverage.mjs", "test:v1-acceptance-evidence": "node ../tools/web/check-v1-acceptance-evidence.mjs", "test:v1-acceptance-release-binding": "node ../tools/web/check-v1-acceptance-release-binding.mjs", "test:status-consistency": "node ../tools/web/check-status-consistency.mjs", "test:ci-report": "node ../tools/web/check-ci-report.mjs", "test:ci-failure-report": "node ../tools/web/check-ci-failure-report.mjs", "ci:quick": "node ../tools/web/run-ci-lane.mjs quick", "ci:chromium": "node ../tools/web/run-ci-lane.mjs chromium", "ci:release": "node ../tools/web/run-ci-lane.mjs release", "release:v1-acceptance": "node ../tools/web/run-v1-acceptance.mjs", "release:offline": "npm run build && node ../tools/web/check-offline-reproducibility.mjs", "release:rc-manifest": "node ../tools/web/create-rc-manifest.mjs && node ../tools/web/check-rc-manifest.mjs", "test:rc-manifest": "node ../tools/web/check-rc-manifest.mjs", "test:rc-release-notes": "node ../tools/web/check-rc-release-notes.mjs", "test:rc-known-limitations": "node ../tools/web/check-rc-known-limitations.mjs", "test:rc-release-recovery": "node ../tools/web/check-rc-release-recovery.mjs", "test:rc-docs": "npm run test:rc-release-notes && npm run test:rc-known-limitations && npm run test:rc-release-recovery", "diagnose:depsgraph": "node ../tools/web/diagnose-depsgraph.mjs" }, "dependencies": { "react": "19.2.8", "react-dom": "19.2.8" }, "devDependencies": { "@axe-core/playwright": "^4.12.1", "@eslint/js": "10.0.1", "@playwright/test": "1.62.1", "@types/react": "19.2.18", "@types/react-dom": "19.2.4", "@types/three": "0.185.1", "@vitejs/plugin-react": "6.0.5", "eslint": "10.8.0", "typescript": "5.9.3", "typescript-eslint": "8.66.0", "vite": "8.2.0" } }