Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development, and can be deployed anywhere. It is flexible, extensible and includes networking and XR - across platforms. Documentation at https://docs.needle.tools
ISceneEventListener
on the sceneSwitcher gameObjectDownload for Unity • Download for Blender • Documentation • API • Live Samples
this.context.physics.engine.raycast
and raycastWithNormal
api changed to take an options parameter instead of single values. It now also exposes rapier's queryFilterFlags
, filterGroups
and the filterPredicate
options. It can now be called with e.g. this.context.physics.engine.raycast(origin, direction, { maxDistance: 2 })
Needle Engine/
addComponent menu and improve searchabilityDownload for Unity • Download for Blender • Documentation • API • Live Samples
viewonly
networked roomSkybox/Cubemap
.Camery Skybox Data
component in a scene.Download for Unity • Download for Blender • Documentation • API • Live Samples
enterVR
, enterAR
, exitXR
)Download for Unity • Download for Blender • Documentation • API • Live Samples
EventList.invoke
autoExportAnimation
and autoExportAudioSources
by defaultDownload for Unity • Download for Blender • Documentation • API • Live Samples
mesh
and material
properties to simplify creating a new sprite object.glb
or .gltf
extension but the correct mime typeneedle.config.json
for build folder (support for e.g. Sveltekit deployment to glitch)Download for Unity • Download for Blender • Documentation • API • Live Samples
This release comes with numerous new features on our path to providing the best foundations for the spatial web.
We have rewritten our underlying WebXR support with ease of use and flexibility in mind, added a new cross-platform Menu component for quickly adding custom functionality to apps, and introduced a novel automatic mesh simplification and level of detail system.
Needle Engine now supports VisionOS, with improvements to hand tracking, transient pointers, and support for both Fully Immersive apps using WebXR, and Immersive Volume experiences based on Everywhere Actions and USD.
We're also introducing the next step on our road to ubiquitous 3D content with automatic mesh simplification and sophisticated level of detail selection at runtime. Apps now are smaller, load faster, and run smoother – heavy models and large worlds benefit the most.
We've rewritten our WebXR API to be more intuitive, easier to use, and better integrated with the rest of the engine. XR controllers, hands, and eye tracking now flow seamlessly through our Event System, so that events like onPointerClick
just work – no matter the input source.
We've also made sure controllers are fully accessible for advanced use cases, with low-level access to the underlying WebXR API.
Our new spatial preloader allows scenes to enter XR sessions more quickly, unlocking immersive navigation using sessiongranted
(supported on Quest 2/3) for larger scenes.
Drag Controls now have support for multiple hands/controllers/touches and have modes for different interaction types.
This new release also brings support for mesh tracking
, depth sensing
, offer session
, a spatial debugging console, and more.
Existing scenes will upgrade to the new WebXR API automatically.
The new Needle Menu
component allows for easy creation of custom menus in your apps. It brings together a number of often-used features like fullscreen, audio and networking settings, and sharing options under one unified user interface.
Sharing experiences with others is now even easier through automatic QR code generation and Direct-to-Quest links.
AR, VR and QuickLook buttons are integrated into the menu as well – and Needle Menu is supported in WebXR too.
Needle Engine supported automatic compression and progressive loading for textures for a while, and now we're introducing automatic LOD generation, progressive loading, and runtime switching. Detail levels are chosen based on screen density, which means that in complex scenes only load mesh levels that are actually needed are ever downloaded. Additionally, automatic compression of meshes and textures paired with our compression cache is now fast enough to be enabled by default while working on projects, not just for production builds.
Besides readable source and documentation, we now have a dedicated API docs page that contains documentation for all previous and future versions: https://engine.needle.tools/api.
VisionOS is now a fully supported platform for Needle Engine.
We support both Immersive Volume experiences and Fully Immersive (VR) experiences.
Immersive Volumes are enabled by our Everywhere Actions and on-the-fly USD generation, and can even be shared via SharePlay to other users. Take a look at our collection of interactive USD samples at https://engine.needle.tools/projects/ar-showcase.
While we had VisionOS support since day 1 due to building on open standards like WebXR, we improved the experience with better hand tracking, transient pointers for eye tracking, and performance improvements. A great example is https://engine.needle.tools/samples/bow-&-arrow/ – make sure to enable the WebXR flag in your Safari settings on VisionOS.
When using our built-in FTP deployment, we now keep track of previously uploaded files.
This makes repeat deployments much faster since it allows us to upload only those files that have changed.
This release ships with hundreds of bug fixes and improvements in the runtime, build pipeline, and integrations. Thanks to all of our customers who send us feedback and reported bugs – we appreciate each and every report, keep them coming!
Among the improvements are preload support for video and audio, better gizmo rendering and handling for lines, texts, meshes, and many new debug flags for an in-depth look at the engine's inner workings. We also ship experimental support for single-line PWA setup – more on that in a future release.
needle-engine
element into fullscreenDownload for Unity • Download for Blender • Documentation • API • Live Samples
onUpdate(()=>{})
now return method to unsubscribe. For example you can now write it like this const unsubscribe = onUpdate(()=>{ console.log("One Frame"); unsubscribe(); })
onAfterRender
hookObjectUtils.createSprite
method<needle-engine camera-controls="0">
does now not create OrbitControls anymore if the assigned glTF file doesn't contain a cameraDownload for Unity • Download for Blender • Documentation • API • Live Samples
SceneSwitcher.addScene
scene-opened
event. Subscribe with sceneSwitcher.addEventListener('scene-opened', args => {})
OrbitControls.fitCamera
handle case where user passes in array with undefined entriesDownload for Unity • Download for Blender • Documentation • API • Live Samples
onXRSessionStart
and onXRSessionEnd
hooksisAndroidDevice
utility methodfitCamera
needle-engine
web component (requires PRO license)OrbitControls.fitCamera
method exposedDownload for Unity • Download for Blender • Documentation • API • Live Samples