Change: ViewBox referenceFieldOfView can now set to -1 to automatically take the camera’s field of view at runtime
Fix: ViewBox evaluation order is now hierarchy-independent (Previously OrbitControls panning might be applied after ViewBox calculations if the ViewBox component was on a parent object)
Add: ScrollFollow timeline markers can now be defined in HTML only and don’t require markers to be present in the Timeline anymore. This means any timeline animation can now be mapped to HTML content by annotating the HTML elements.
For example <div data-timeline-marker="2.5"> will define that the timeline should reach the time 2.5 seconds when this element becomes visible in the viewport. The bike-scroll-follow example on Github will be updated to use this new feature soon (example index.html).
Update: three-animation-pointer dependency to 1.0.4 to support KHR_node_visibility extension
Documentation improvements
Unity Integration
Add: Support for importing GLB/glTF assets with Needle Engine AnimatorController assets
Change: Set UnityGLTF as default importer for .gltf and .glb files
Update: UnityGLTF dependency to 2.18.0 with improvements for exporting partially animated properties.
For example it’s now possible to animate position.x only without keyframes for position.y and position.z (see issue in forum)
NEW: SeeThrough component. With this component you can easily fade-out objects between the camera and a reference point in the scene. See the See-Through sample to see it in action
Add: CursorFollow option to follow cursor on the full page, even when a user moves their mouse outside of the <needle-engine> element.
Add: CursorFollow snapToSurface option to automatically snap the object to the surface below the cursor.
Add: Object3D raycastAllowed property to disable raycasting on specific objects (e.g. for performance reasons or to ignore invisible helper objects)
Add: OrbitControls targetBounds property which can be used to constrain the OrbitControls target within a defined area in the scene. A Object3D can be assigned to the property. The position and scale of this object will be used.
Add: Experimental - Vite plugin to generate needle-app.js which encapsulates the whole website into a single web component. The needle-app.js file will be emitted next to index.html and can be used to directly embed the website and 3D assets into another website by importing <url>/needle-app.js and then using the <needle-app></needle-app> web component.
Add: Object3D contains(otherObject: Object3D) method to check if an object is a child of another object in the scene graph
Fix: three nodes update camera for TSL
Fix: Renderer lightmaps are now updating sharedMaterials
Fix: Gizmos.DrawWireMesh matrix
Fix: Image UI color was sometimes not correctly calculated for Button color states when used with the CanvasGroup component
Change: Simplified Hotspot sample does not use Hotspot Template anymore. Instead all hotspots are prefabs in the scene. The hotspot script does now also set a view point using OrbitControls.
Fix: WebXR / VR issue where trying to access missing geometry during raycasting caused errors
Change: ScrollFollow now only applies when scroll has changed. It also immediately jumps to the target position on the first update instead of interpolating (avoiding interpolation through long timeline animations).
Change: SplineWalker now has an option to disable LookAt. It also received a pullStrength property which controls how tightly the object moves along the spline.
Improved: OrbitControls and ViewBox interaction
Unity Integration
Update UnityGLTF dependency to 2.18.3. This fixes an issue where animations would falsely be exported with STEP interpolation.
Change: Vite build build pipeline plugin increased default max wait time to 60 seconds.
This time is now exposed via needlePlugins user config, e.g. to increase it to 5 minutes write needlePlugins(command, needleConfig, { buildPipeline: { maxWaitDuration: 300_000 } }) in your vite.config.js.
NEW: Intellisense support for the <needle-engine> web component and its attributes, both in HTML and in code. The custom-elements.json allows for VSCode intellisense support, while HTMLElementTagNameMap and get/setAttribute overloads bring code completion and documentation.
Add: exposed createCollider API for the Rapier physics engine
Add: an beforeLODExport callback for USDZ export. This allows overriding which LOD level gets exported per object.
Add: ?spector=#frame URL parameter to enable a Spector.js capture on the specified frame number after page load. Make sure to install the Spector.js browser extension. You can optionally specify a frame number for capturing: ?spector=15.
Add: auto-registration of custom elements for easier discovery of available web components in Needle Engine. You can disable this feature by setting noCustomElementData to false in vite config. To manually register custom elements data, add it to your workspace or .vscode/settings.json via the html.customData setting.
Improve: detection of user interactions to enable media playback
Improve: JSDoc documentation for Everywhere Actions and other components
Fix: issue with callbacks on freshly destroyed components when leaving XR sessions
Fix: Instancing issue with growing vertex/index buffers when not necessary
Fix: Instancing and texture LODs
Fix: Issue with <needle-engine> element being moved in the DOM
Fix: Better type declarations in package.json
Unity Integration
Update UnityGLTF dependency to 2.18.5. This fixes deprecation warnings on Unity 6.0+ and improves BiRP material export.
Fix: got rid of compilation warnings with updated APIs on Unity 6.0+
Fix: more checks for invalid characters in paths and project names
NEW: WebXR support for iOS - Your AR experiences now launch instantly on iPhone and iPad without app installation. Just tap “Enter AR” and you’re in. Powered by Needle Go AppClip, combining Apple’s excellent AR tracking with standards-compliant WebXR. Try it at appclip.needle.tools
NEW: Intellisense support for the <needle-engine> web component and its attributes, both in HTML and in code. The custom-elements.json allows for VSCode intellisense support, while HTMLElementTagNameMap and get/setAttribute overloads bring code completion and documentation.
Add: exposed createCollider API for the Rapier physics engine
Add: beforeLODExport callback for USDZ export. This allows overriding which LOD level gets exported per object.
Add: ?spector=#frame URL parameter to enable a Spector.js capture on the specified frame number after page load. Make sure to install the Spector.js browser extension. You can optionally specify a frame number for capturing: ?spector=15.
Add: auto-registration of custom elements for easier discovery of available web components in Needle Engine. You can disable this feature by setting noCustomElementData to false in vite config. To manually register custom elements data, add it to your workspace or .vscode/settings.json via the html.customData setting.
Add: Support for rotation and scaling in DropListener component
Improve: VisionOS and iPad detection for better WebXR compatibility
Improve: WebXR session flow and error handling
Improve: QuickLook integration - disabled by default in WebXR component, shows “Open in Quicklook” button
Improve: SceneSwitcher now supports multiple scene switchers referencing the same asset reference
Improve: DragControls smoothed velocity calculations and region support
Improve: Detection of user interactions to enable media playback
Improve: JSDoc documentation for Everywhere Actions and other components
Fix: issue with callbacks on freshly destroyed components when leaving XR sessions
Fix: Instancing issue with growing vertex/index buffers when not necessary
Fix: Instancing and texture LODs
Fix: Issue with <needle-engine> element being moved in the DOM
Fix: SceneSwitcher was destroying local scene content
Add: getComponentInChildren and getComponentInParent now expose the includeInactive parameter to include inactive objects in the search
Change: Improved XR sessiongranted temporary scene design (removing temporary objects in AR and adding support for custom logo display while the AR session is initializing)
Fix: iOS WebXR canvas size for screenspace UI rendering
Fix: iOS WebXR UI InputField support
Fix: Invalid input event causing issue in OrbitControls when pressing multiple mouse buttons at the same time
Fix: WebXR image tracking support for multiple images (iOS + Android)
Change: Animation and Animator components now checks in local dev if the root object to be animated is marked as static and won’t automatically update matrices
Improved iOS WebXR balloon message rendering to not overlap with camera or menu button