Releases & Changelogs

Needle Engine 4.16.11

Needle Engine

  • Fix: iOS audio — AudioSource playback now survives a device lock / audio-session interruption and resumes automatically on unlock
  • Fix: typeof window/globalThis !== undefined guards were always true and could throw outside a browser (SSR / Node)

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.0 alpha.9

Needle Engine

Added

  • <needle-app> — embed a published Needle Engine app in any web page (with custom code etc) (docs)

Changed

  • <needle-app>: improved cross-origin handling and src parsing
  • ScrollFollow: now works inside an iframe (uses the top window)

Fixed

  • iOS audio: AudioSource playback now survives a device lock / audio-session interruption and resumes automatically on unlock
  • SceneSwitcher: ?scene= is now honored for scenes referenced as in-scene Object3Ds; scene preview loading supports prefabs and correct parenting under the SceneSwitcher
  • DragControls: widened the two-pointer scale clamp range and now reads world scale from the matrix columns
  • EventList: corrected the arguments passed to overridden methods
  • serializeObject: fixed Color / Euler / object-reference serialization, and OneEuroFilter.reset()
  • Prevented a TypeError when a scene-data error proxy is coerced to a string

Unity Integration

Fixed

  • Needle Component menu: fixed a null-reference on non-GameObject inspectors, handling of multiple targets and locked inspectors, and the “Add Needle Component” button is now hidden for objects flagged NotEditable

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine Blender Addon 1.2.1

  • Add: preload property for AudioSource for smoother audio playback
  • Add: density property for Colliders
  • Add: Gizmo for OrbitControls targetBound with improved gizmo interaction
  • Add: New “Samples & AI” panel with quick access to samples
  • Add: Easier to read, colored dev server output
  • Change: Updated to Needle Engine 5.0.10
  • Change: Cleaner, more focused UI — Needle settings and components now live in the viewport sidebar
  • Change: Improved DeleteBox gizmo display
  • Change: Broader Node.js support (20.19 – 24)
  • Fix: More reliable project path handling, including relative paths
  • Fix: Several stability improvements — fewer crashes on reload, with zero-scale objects, and on quit (macOS)
  • Fix: Corrected SeeThrough.overrideAlpha minimum value

:bullseye: Download Blender Addon :package: Download Samples
:light_bulb: Documentation :sparkles: Live Samples

Needle Engine 5.1.0

:star: Highlights

Scene Bindings — Fully Typed Scenes (preview)

Your glTF and GLB scenes now come with auto-generated TypeScript types. Access nodes, components, and properties with full autocomplete and type checking via ctx.sceneData or the new needle shorthand — no configuration required. Types regenerate automatically whenever your scene files change, and it works with local files, remote URLs, and Needle Cloud assets alike.

const cam   = ctx.sceneData.MyScene.MainCamera.$object;                      // THREE.PerspectiveCamera
const orbit = ctx.sceneData.MyScene.MainCamera.$components.OrbitControls;    // typed!
orbit.autoRotate = true;

First-Class Framework Support (preview)

Needle Engine now feels at home in any modern web stack. SSR support lets you import the engine in SvelteKit, Next.js, and Nuxt without crashes, JSX type declarations bring full autocomplete to React, Preact, SolidJS, and friends, and the new needle shorthand gives you instant access to the current context from anywhere — components, button handlers, or plain JavaScript.

import { needle } from "@needle-tools/engine";
needle.scene.traverse(obj => { ... });   // access the three.js scene
needle.renderer;                          // access the WebGLRenderer

Embed Anywhere with <needle-app>

Drop a published Needle Engine app into any web page with a single element — no build setup, custom code, or framework required. It handles cross-origin loading for you and works inside iframes.

<needle-app src="https://your-app.needle.run"></needle-app>

Animation & Timelines from Code (preview)

A new set of builder APIs lets you create animations, animator controllers, and timelines entirely in code, with typed keyframes and inline track definitions. Great for procedural content, runtime-generated sequences, and tooling.

const timeline = TimelineBuilder.create("MyTimeline")
    .animationTrack("Walk", animator).clip(walkClip, { duration: 2 })
    .activationTrack("FX", vfxObject).activate({ start: 1, duration: 0.5 })
    .build();
director.playableAsset = timeline;

A More Powerful Compression Pipeline

The build pipeline gets a major upgrade with new ways to shrink your builds automatically. Audio compression turns heavy WAV files into compact, web-friendly clips, and HDRi → PMREM (FastHDR) compression converts environment maps into a format that loads up to 10× faster and uses a fraction of the GPU memory — all on top of the existing Draco/meshopt geometry and KTX2 texture compression. Smaller downloads, faster loads, no manual work.

DragControls — A Big Upgrade

DragControls received a major overhaul with a new constraint system: keep-scale, two-touch scaling with min/max limits, refined hit regions, and a dedicated screen-space drag mode for AR. Single-touch dragging is now more predictable, and reliability is improved across snapping, side views, and multi-input scenarios.

MaterialX — Faster & Richer

The bundled MaterialX runtime jumps to 1.7.0 with faster environment lighting (new radiance sampling modes and PMREM support), better Three.js integration, and overall performance improvements. MaterialX export from Needle Engine projects no longer requires a PRO license.

Needle AI in the Editor

Needle AI is integrated directly into the Unity inspector and hierarchy, with awareness of your local Unity and web project so its assistance is relevant to what you’re actually building.

Needle Engine

Added

  • Scene Bindings (preview) — auto-generated, fully typed access to your scenes via ctx.sceneData / needle.sceneData
  • SSR support (preview) for SvelteKit, Next.js, and Nuxt, plus JSX type declarations for React, Preact, SolidJS and more
  • needle shorthand (preview) for quick access to the current engine context from anywhere
  • <needle-app> — embed a published Needle Engine app in any web page (docs)
  • Context.events — a typed event bus for decoupled component communication:
    context.events.on("scene-content-changed", e => console.log(e.object));
    context.events.emit<{ pts: number }>("scored", { pts: 10 });
    
  • autoCleanup on Behaviour — register disposables and cleanup tied to the component lifecycle
  • Builder APIs (preview)TimelineBuilder, AnimatorControllerBuilder, and AnimationBuilder for defining timelines, controllers, and animations in code with typed keyframes and inline tracks
  • DragControls: new constraint system with keepScale, two-touch scale limits, refined hit regions, a screen-space AR drag mode, and EventList support
  • Skybox: new background-rotation / environment-rotation attributes and background-image-loaded / environment-image-loaded events
  • WebXRImageTracking: per-frame imageTracked event with typed access to the tracked object, plus resetImage / resetAllImages to re-arm markers without restarting XR
  • AudioClip type with standalone playback control, AudioSource spatial blend and .opus support
  • context.lights array and context.mainLight getter for quick access to scene lighting
  • NeedleXRSession.appClipUrl — launch a custom-branded Needle AppClip experience on iOS AR (provide your registered appclip.needle.tools/x/… URL or experience id) for your own App Clip card title and image
  • Physics raycast includeTriggers option
  • Unsubscribe functions returned from Input, Networking, and XR event subscriptions
  • needlePlugins() can now be called without arguments — the Vite command is resolved automatically

Changed

  • OrbitControls now uses lookAtTarget / lockLookAtTarget, with smoother focus and camera transitions
  • Postprocessing moved to core (context.postprocessing); tonemapping-only setups skip the extra pass
  • Timeline track classes renamed for consistency (e.g. AnimationTrackHandlerTimelineAnimationTrack)
  • GroundProjectionEnv.applyOnAwake now defaults to true, matching Unity and Blender

Fixed & Improved

  • Major DragControls reliability improvements across snap points, AR drag, side views, and multi-input handover
  • More reliable camera handling (fallback camera, fitCamera, scene clearing)
  • More efficient Skybox attribute handling and load deduplication
  • Smoother, more reliable progressive LOD loading and disposal, including texture-only LODs that update correctly with camera distance
  • AudioSource on iOS now survives a device lock / audio-session interruption and resumes automatically
  • SceneSwitcher: ?scene= honored for in-scene object references, with prefab preview support
  • VoIP improvements including better iOS mic handling and shared AudioContext
  • Faster initial loading via improved dependency chunking
  • General reliability and stability improvements throughout the engine and Vite plugin

MaterialX

  • Updated bundled MaterialX runtime to 1.7.0 — faster environment lighting (new radiance sampling modes, PMREM support), better Three.js integration (texture sampling, environment rotation, alpha modes), and overall performance improvements
  • MaterialX export in Needle Engine projects no longer requires a PRO license

Unity Integration

  • Updated build pipeline with WAV audio compression and HDRi → PMREM (FastHDR) compression for smaller, faster-loading builds
  • Needle AI chat integration with inspector and hierarchy context menus, pulling context from your local Unity and web project for more relevant assistance
  • SceneSwitcher improvements: drag-and-drop, per-scene toggle buttons, unload button, preview, and scene closing
  • WebXRImageTracking component now exposes an imageTracked UnityEvent
  • Component Compiler: new // @header directive emits a Unity [Header(...)] attribute to group and label fields in the inspector (works alongside // @tooltip):
    // @header Movement Settings
    @serializable()
    speed: number = 1;
    
  • Add: context menu action to compress the output directory (useful when a scene uses SceneSwitcher with dependencies)
  • Updated needle-cloud CLI to version 2 with security hardening
  • Sample search now matches tags and ranks results by relevance
  • Improved editor connection stability with better error recovery and cleanup

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.2

Needle Engine

Fixed

  • SyncedTransform: added world scale support — networked objects now keep the correct scale across clients, even when nested under scaled parents, with smooth interpolation
  • AR & XR improvements: networked avatars now use the correct scale, stale avatars are reliably removed after a peer disconnects, and remote hands display correctly in Screen AR

Unity Integration

  • Fix: MaterialX importer in the editor

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine Blender Addon 1.3.0

:star: Highlights

Needle Engine 5.1

Ships with Needle Engine 5.1 — bringing improved DragControls, spatial audio blend, and smoother OrbitControls camera transitions.

DragControls — Rebuilt

DragControls received a major overhaul with refined hit regions and a dedicated screen-space drag mode for AR. New dragStarted, dragUpdated, and dragEnded events let you react to drag interactions without code.

Better Audio

AudioSource now supports spatial blend for smooth 2D/3D crossfade and survives iOS device lock without losing playback. VoIP gains volume, speakingThreshold, and createMenuButton properties with improved iOS mic handling.

  • Add: New keepScale property and dragStarted/dragUpdated/dragEnded events for DragControls
  • Add: volume, speakingThreshold, and createMenuButton properties for VoIP component
  • Change: Updated to Needle Engine 5.1
  • Change: Major DragControls overhaul — refined hit regions and dedicated screen-space AR drag mode
  • Change: AudioSource now supports spatial blend (2D/3D crossfade)
  • Change: OrbitControls uses smoother focus and camera transitions with lookAtTarget/lockLookAtTarget
  • Change: ContactShadows auto-refit when scene content changes (e.g. SceneSwitcher, DropListener)
  • Fix: AudioSource on iOS now survives device lock and resumes automatically
  • Fix: VoIP improvements including better iOS mic handling and shared AudioContext
  • Fix: More reliable progressive LOD loading and disposal

:bullseye: Download Blender Addon :package: Download Samples
:light_bulb: Documentation :sparkles: Live Samples

Needle Engine 5.1.3

Needle Engine

Fixed

  • Audio sources now clone correctly

  • Objects with HideFlags export reliably

  • Corrected the default camera field of view

  • Added: the bundled dist/three now exposes the full Three.js API for import-map setups

  • Changed: updated MaterialX to 1.7.1:

    • Environment radiance sampling (PMREM & importance sampling)
    • Automatic tangent generation
    • Upgraded runtime to MaterialX 1.39.5
    • Improved texture, alpha, and environment handling
    • Uses the app’s Three.js via import maps (no duplicate three) — shares Needle Engine’s Three.js
    • Runs in the browser, Node, Deno, and Bun

Unity Integration

  • DragControls options are now available in the inspector

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.4

Needle Engine

Fixed

  • iOS AR: more reliable Needle App Clip launch from the Enter AR button
  • Needle Go: AR screenshots via screenshot2 — capture and share photos of your AR experience right from the session
  • GroundProjection: AR background blending stays intact when the camera clears the background

Unity Integration

  • Login: console login prompts are now clickable, with a one-time auto-login on Play

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine Blender Addon 1.4.0

  • Add: Upload 3D asset with Needle Engine components to Needle Cloud via “File/Export/Upload glTF to Needle Cloud” menu item. This will upload the current scene to Needle Cloud as a private and shareable 3D asset. The asset will be compressed on Needle Cloud.

:bullseye: Download Blender Addon :package: Download Samples
:light_bulb: Documentation :sparkles: Live Samples

Needle Engine 5.1.5

Needle Engine

Changed

  • DragControls: improved 2D rotation
  • XR: networked controllers and hands now sync by handedness for more reliable multiplayer avatars

Unity Integration

  • Unity 6000.5 support

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.7

Needle Engine

  • AR: scenes now stay anchored to the real world (WebXR anchors, on by default) — placement survives tracking loss and keeps user adjustments; falls back to plain placement where unsupported
  • XR: clearer error when the device or browser blocks AR/VR (instead of a misleading “configuration not supported”)
  • SSR: fixed builds in SvelteKit, Next.js and Nuxt (“Entry module cannot be external”) and a navigator crash during server-side rendering
  • Vite: hint for PRO licenses on multi-team Needle Cloud accounts, and guidance for a known Rolldown crash in Vite 8.1
  • Updated MaterialX to 1.7.4 (instancing transforms in nodegraph functions, stable glossy reflections with prefiltered KTX2 environments)

Unity Integration

  • WebXR component: Use XR Anchor is now enabled by default for new components and scene templates. Existing scenes keep their saved value — enable the checkbox to opt in.

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 6.0.0 alpha.1

Needle Engine

Added

  • GaussianSplat component (experimental) — load .ply / .spz / .sog splats via Spark, with LOD and correct raycasting/bounds
  • WebXR: anchors (useAnchors) are now enabled by default

Changed

  • Updated bundled three.js to r185
  • Updated MaterialX runtime
  • Improved XR error messaging when a session can’t start

Fixed

  • WebXR: setSession now works with WebXR emulators/polyfills that supply a non-native session (falls back to the XRWebGLLayer path)
  • Bounds are reported as incomplete for still-loading async objects, and GroundProjection re-fits once they’re ready
  • Raycasting and bounds now work for non-Mesh objects (e.g. splats)
  • Custom model loaders are no longer tree-shaken out in code-only projects
  • SSR: various import/emit fixes
  • Postprocessing: pipeline build failures are now surfaced instead of failing silently

Unity Integration

  • Updated build pipeline to @needle-tools/gltf-build-pipeline 4.0 — adds compressed splat (SOG) support and replaced-source events

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.8

Needle Engine

  • Docs: clarified VR teleport targeting — the teleport ray hits rendered meshes, not physics colliders, so a teleport target needs a visible mesh but no collider

Unity Integration

  • CLI / CI: headless batch exports can now verify the license non-interactively with a NEEDLE_CLOUD_TOKEN environment variable or -token argument, without an interactive browser login (required on build machines where no browser is available)
  • CLI / CI: fixed headless builds wrongly stopping with “required software not installed” — the Node.js / npm detection now completes before the build proceeds (it previously raced the build and reported a false negative)
  • CLI / CI: project-validation problems and build failures are now logged with actionable messages in batch mode instead of trying to open editor windows (which failed or threw in headless), so CI failures are debuggable
  • XR: added inspector warnings on controller components — flags when no WebXR component exists in the scene, and when WebXR will add a second, competing controller-movement handler at runtime (with a one-click fix)

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.9

Needle Engine

Added

  • WebXRImageTracking: friendlier addImage API for registering marker images
  • Clearer diagnostics for iOS App Clip AR sessions (Needle Go), surfaced to developers (See also /.node_modules/.needle/logs)
  • Dev warning when a tracked image has an invalid marker size

Fixed

  • iOS App Clip AR (Needle Go): WebXRImageTracking tracked images are no longer dropped on the first AR entry, and markers now register correctly even when AR starts before the scene has finished loading
  • iOS App Clip AR (Needle Go) now respects the session’s framebuffer scale for correct rendering resolution

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine Blender Addon 1.4.3

  • Add: .opus audio files can now be selected for audio properties
  • Change: Updated to Needle Engine 5.1.9
  • Change: Cloud upload now exports with viewport fidelity, auto-starts in one shot, detects stale tabs, and reports completion status
  • Change: ImageTracking widthInMeters now defaults to 0.2
  • Change: Removed the .wav audio file warning

:bullseye: Download Blender Addon :package: Download Samples
:light_bulb: Documentation :sparkles: Live Samples

Needle Engine 6.0.0 alpha.2

Try the Gaussiansplatting demo here

Needle Engine

Added

  • Gaussian splats: .rad file support — compressed splats in seekable chunks, enabling streaming and progressive loading of large splat scenes
  • Gaussian splats: automatic quality adaptation — quality is reduced under low fps in verified steps (a step that doesn’t measurably help is reverted), including dynamic render-resolution scaling inside running AR sessions
  • Context.xrFrameRateLimit — cap the frame rate of XR sessions (applied through WebXR updateTargetFrameRate where the device supports it); the mobile splat quality preset caps AR at 30 fps to keep phones cool
  • iOS AR (Needle Go): WebXR image tracking — markers are detected and tracked reliably, even in sessions that start before the scene has finished loading
  • iOS AR (Needle Go): native AR diagnostics (tracking quality, marker validation, device thermal state) are forwarded to the browser console during development — debug on-device sessions without a cable

Changed

  • Splat quality presets tuned for mobile AR: per-device splat budgets, thermal-friendly defaults and reduced sorting overhead

Fixed

  • iOS AR: correct render resolution on 3x displays — a significant performance boost on Pro-class iPhones
  • Dev server: fast, reliable first page load on devices after a restart — the module graph is pre-warmed and interrupted boots recover automatically

Unity Integration

  • GaussianSplat: point cloud preview in the scene view — referenced splat files (.ply / .spz / .sog / .splat) show as a sampled point cloud with real bounds, sized points and depth cues instead of an empty box
  • Compression pipeline: splats are now compressed to the RAD format — seekable chunks enable streaming and progressive loading of large splat scenes

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 5.1.10

  • Add: turn the whole postprocessing stack on or off at runtime with PostProcessing.enabled
  • Fix: scene brightness no longer shifts when XR hand models are shown or hidden
  • Fix: the showHandModels toggle now reliably shows or hides XR hand models
  • Change: SyncedRoom warns (in development) when a room-name URL parameter overrides the roomName set on the component, making it easier to diagnose ending up in an unexpected room

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine Blender Addon 1.4.4

  • Add: customARPlacementReticle property for WebXR — use your own 3D object as the AR placement reticle instead of the default one
  • Add: Postprocessing can be turned on or off at runtime via PostProcessing.enabled
  • Change: Updated to Needle Engine 5.1.10
  • Change: SyncedRoom now warns during development when a room name URL parameter overrides the roomName set on the component
  • Fix: Lightmaps were missing from exported files
  • Fix: Temporary objects created during export are now removed reliably, without “Error removing object” messages

:bullseye: Download Blender Addon :package: Download Samples
:light_bulb: Documentation :sparkles: Live Samples

Needle Engine 5.1.12

  • Fix: mirrored and negatively-scaled instanced meshes now render correctly (NE-7069)

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples

Needle Engine 6.0.0 alpha.3

Needle Engine

  • Add: exportAsGLTF onlyVisible option to export only the visible objects
  • Add: PostProcessing.enabled to toggle the whole postprocessing stack at runtime
  • Add: object layers can be set by name, not only by Unity layer index
  • Fix: mirrored and negatively-scaled instances render correctly (NE-7069)
  • Fix: XR hand and controller models render in both eyes again
  • Fix: custom XR hand models are visible again, and showHandModels reliably shows/hides them
  • Fix: instantiated lights keep their targets and no longer leak into exports
  • Fix: lower memory use over time — destroyed and detached objects (cloned textures, physics colliders, objects removed via the raw three.js API) are no longer pinned alive by engine registries
  • Fix: AR passthrough hides the scene background across all camera clear-flag modes
  • Change: SyncedRoom warns (in dev) when a URL parameter overrides the component’s roomName

Unity Integration

  • Drag splat files into the scene or hierarchy to create a GaussianSplat
  • GaussianSplat inspector shows splat count and content size
  • More robust splat preview (progress dialog, outlier-proof bounds, shared cache)
  • Person-scale reference in the AR placement gizmo

:bullseye: Download Unity Plugin :package: Install from NPM
:octopus: Changelog on Github :bookmark_tabs: Needle Engine API
:light_bulb: Get started :sparkles: Samples