Releases & Changelogs

Needle Engine 4.14.0

Needle Engine

  • Add: MaterialPropertyBlock support. This allows you to change material properties of objects without breaking batching and instancing.
    It can be used by calling const block = MaterialPropertyBlock.get(myObject); and then set or remove overrides on the block.
    This even supports the same material being rendered as transparent for one object and opaque for another.
  • Add: Support of ReflectionProbe + Lightmap rendering on the same object
  • Add: CustomShader (Unlit) support with VideoPlayer component
  • Improved ?stats console logs with info about shaders and used memory
  • Improved documentation
  • Update gltf-progressive dependency with improved texture LOD handling and GPU memory management

Unity Integration

  • Editor UI improvements for components
  • GLTF import improvements for objects with Needle Engine components
  • Compatibility fixes for Unity versions
  • Update UnityGLTF dependency to 2.19.1 with support for EXR and webp import (Plugins need to be enabled in UnityGLTF settings)

: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 4.15.0

Needle Engine

  • NEW: Accessibility support with screen reader overlay. The engine now maintains a visually-hidden DOM tree mirroring 3D scene objects with ARIA roles and labels. Components like Button, Text, DragControls, and USDZ behavior components automatically register accessible elements.
  • Add: AccessibilityManager accessible via context.accessibility for managing accessible elements, focus, and hover announcements
  • Add: ReflectionProbe now supports assigning a URL string as texture (for Blender workflows)
  • Update: Networking backend migrated to Cloudflare Durable Objects for improved scalability, per-room isolation, and reduced latency
  • Improved MaterialPropertyBlock documentation with examples for material swapping behavior and override management
  • Improved documentation for Networking, OneEuroFilter, and needle-button web component

Unity Integration

  • Update: Networking component default URL updated

: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 4.16.0

Needle Engine

  • NEW: makeFilesLocal build option overhauled — builds can now be fully self-contained and work offline. The plugin downloads external CDN assets at build time and bundles them locally. This is essential for playable ads, app stores that require single-origin or self-contained bundles, offline-capable PWAs, and restricted hosting environments. Supports auto-detection of used features, per-feature opt-in/opt-out, and platform presets. Covers Draco decoders, KTX2 transcoders, MaterialX, WebXR input profiles, skybox/environment textures, Google Fonts, third-party scripts, and more.
    Example in vite.config.js:
    needlePlugin({
      makeFilesLocal: "auto" // auto-detect and download only what your project uses
    })
    // or with fine-grained control:
    needlePlugin({
      makeFilesLocal: {
        enabled: true,
        features: ["draco", "ktx2", "fonts"],
        excludeFeatures: ["xr"]
      }
    })
    
  • Add: showBalloonMessage now supports duration, once, and key options for controlling message display duration and updating existing messages
  • Add: needleAI vite plugin — when using Claude Code in a Needle Engine project, the engine automatically provides a project-aware AI skill with Needle Engine context
  • Add: DragControls now warns when used on static objects that won’t update their transforms
  • Add: AR overlay support for AppClip sessions
  • Improve: Stable three.js chunk names in production builds, enabling CDN import maps with predictable URLs
  • Improve: USDZ export now uses "string" type for input variable names for better spec compatibility
  • Improve: Gizmo rendering uses consistent font from CDN
  • Improve: needle-menu layout with correct padding and minimum width for icon-only elements
  • Improve: Vite project template aligned with online template
  • Improve: Updated MaterialX dependency
  • Improve: JSDoc documentation
  • Fix: ReflectionProbe support for Blender workflows
  • Fix: Mac build error (“-50” error)
  • Fix: PWA defaults when package name is missing
  • Fix: Improved error handling in MaterialX importer

Unity Integration

  • Improve: Updated component compiler to version 3. Now with improved testing, complex types, tooltips and more.
  • Improve: Vite project template aligned with web version
  • Fix: EditorSync enum fields now send correct integer values instead of string names
  • Fix: EditorSync now tracks changes from IMGUI-based inspectors (e.g. post-processing volumes)
  • Fix: EditorSync no longer re-applies stale changes after scene reload

: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 4.16.1

Needle Engine

  • Fix: Regression causing error in react

: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 4.16.2

Needle Engine

  • Improve: ReflectionProbe now uses integrated box intersection and gizmo
  • Improve: ReflectionProbe center and size now have default values and improved JSDoc documentation
  • Improve: Comprehensive TypeScript declarations for Vite and Next.js plugins with full JSDoc, @param, @returns, and @example tags for API documentation (NE-6952)
  • Improve: Plugin type declarations are now auto-generated from source
  • Remove: loadMaterialX vite plugin setting (no longer needed)

Unity Integration

  • Add: Node.js 24 support
  • Fix: NodeModuleTypesImporter for Unity 6000.3.10 — Client.Pack no longer fails when org id is not set - this fixes installation of FaceFilter and CarPhysics packages in Unity 6000.3.10
  • Fix: Node.js version validation messages now list all supported versions (18, 20, 22, 24)

: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 4.16.3

Needle Engine

  • VideoPlayer default renderMode set to MaterialOverride

Unity Integration

  • Change: Component Compiler version set to latest

: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 4.16.4

Needle Engine

  • Fix: Splines catmullrom tension
  • Fix: focus-rect attribute for e.g. <needle-engine focus-rect=".mydiv" src="..."></needle-engine>
  • Fix: Vite plugins process exit on SIGINT
  • Improved activeInHierarchy performance
  • Improved Graphics.blit performance
  • Improved Postprocessing performance

Unity Integration

  • Add: MaterialX node export for EllipseNode
  • Fix: Asset path codegen when using a custom asset directory using needle.config.json
  • Fix: MaterialX step node export

: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 4.17.0 alpha

Needle Engine

  • Add: Vite 8 support
  • Fix: nextjs support

Unity Integration

  • Fix: Codegen for nextjs

: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 4.16.6

Unity Integration

  • Fix: Context menu builtin components export regression

: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 4.16.7

Unity Integration

  • Fix: Lock build-pipeline version
  • Fix: Font cache restore bug where the cache did copy without ‘override: true’

: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.0.0

:star: Highlights

FastHDR (PMREM) — Ultra-fast EXR Compression

Needle Engine now supports compressing EXR skybox and environment textures using our FastHDR format. Compared to standard EXR files, FastHDR textures load 10x faster, use 95% less GPU memory, and eliminate frame drops during environment map loading. This makes high-quality image-based lighting practical even on mobile devices.

MaterialX — Lights and Magic

MaterialX support takes a major leap forward. This release adds full lights and shadows support including point lights, spot lights, and directional lights. Displacement mapping now works with both offset and vector modes. Transparency is handled automatically with detection and support for opaque, transparent, and masked rendering modes — bringing MaterialX materials much closer to feature parity with native engine shaders.

Vite 8 — Powered by Rolldown

Needle Engine now supports Vite 8, which uses the Rolldown bundler written in Rust. This brings extremely fast bundling to both development and production builds, significantly reducing build times for larger projects.

iOS WebXR via AppClip

WebXR is now available on iOS through AppClip sessions. This brings AR support to iPhone and iPad, allowing users to experience immersive WebXR content on Apple devices without needing to install a dedicated app.

Needle Engine

  • NEW: Compression support for EXR skybox and environment textures (powered by Needle’s FastHDR):
    • 10x faster than EXR
    • 95% less GPU memory
    • Zero framedrops
  • NEW: Support for Vite 8, now powered by Rolldown (Rust) for extremely fast bundling
  • NEW: MaterialX Lights and Magic update:
    • Lights and shadow suppport: point lights, spot lights, directional lights
    • Displacement: full support for offset and vector displacement
    • Transparency Modes: auto-detection and support for opaque, transparent, and masked material rendering modes
    • See
  • Change: OrbitControls now uses lookAtTarget and lockLookAtTarget instead of a LookAtConstraint component. The LookAtConstraint component has been deprecated.
  • Change: EventList addEventListener now returns a method that can be called to remove the callback function again: const remove = myEventList.addEventListener(() => { ... })
  • Change: Rapier Physics colliders will now just be disabled instead of removed from the physics world when a Collider component becomes inactive.
  • Change: Postprocessing now has an adaptiveResolution option (default true) which can automatically scale down resolution slightly for Retina or high pixel density screens if performance drops (See the Volume component for more information)
  • Improved: Networking types (Typescript)
  • Improved: Dependencies chunking for faster loading and improved LCP score(Largest Contentful Paint)
  • Fix: NextJS support

Unity Integration

  • NEW: EXR compression
  • NEW: Major MaterialX export improvements. See changes above
  • Add: MaterialX test suite
  • Fix: Codegen for NextJS
  • Remove: Support for Unity 2021

: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.0.1

Unity Integration

  • Fix: Codegen (gen.js) for deployments to sub-directories

: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.0.2

Needle Engine

  • Updated @needle-tools/materialx to 1.6.0:
    • UV coordinate convention handling (glTF ↔ OpenGL) — fixes UV-dependent effects like displacement and procedural noise in the browser
    • Material-level ambient occlusion for gltf_pbr materials per the glTF specification
    • Visual graph editor for interactive MaterialX authoring
  • Fix: Light intensity in scaled AR session

Unity Integration

  • Updated Needle Compression Pipeline to fix wrong texture compression in LOD textures

: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

Needle Engine

Networking

  • Add: VOIP volume property and speaking event
  • Add: onSyncInstantiate and onSyncDestroy callbacks
  • Change: requestOwnership now returns a Promise
  • Change: addComponent generates deterministic component GUIDs for reliable networking of runtime-added components
  • Change: syncInstantiate automatically adds to prefabProvider and assigns GUID

Rendering

  • Add: MaterialX Voronoi node “cell” output
  • Add: Postprocessing tests
  • Change: Postprocessing moved to core — accessible via context.postprocessing and exported from @needle-tools/engine
  • Improved: Tonemapping without other postprocessing effects is now applied directly to the renderer, avoiding an unnecessary postprocessing pass
  • Fix: Postprocessing enabling effect at runtime for the first time
  • Fix: MaterialPropertyBlock multimaterial change from opaque to transparent

XR

  • Improved: iOS AppClip AR session now opens reliably on first visit and first tap
  • Fix: XR light intensity in scaled sessions

UI

  • Fix: HTML mobile icon not rendering
  • Fix: UI Text component absolute font URL handling

Unity Integration

  • Add: SceneSwitcher: toggle objects from its UI, drag-and-drop support, scene closing
  • Improved: GltfEmitter base path handling
  • Fix: SceneSwitcher null warning
  • Fix: Linux compatibility issues
  • Fix: Npmdef file: with relative paths

: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.0.3

Needle Engine

  • Add: PMREM / FastHDR support for GroundProjection with shader-based blurriness, blending, and alpha controls
  • Fix: MaterialPropertyBlock multi-material change from opaque to transparent
  • Improved: OrbitControls JSDoc for targetBounds

Unity Integration

  • Add: SceneSwitcher drag-and-drop support and per-scene toggle buttons in the inspector
  • Change: MaterialX export in Needle Engine projects no longer requires a PRO license
  • Fix: Null warning on SceneSwitcher with unassigned AssetReference
  • Bump: EditorSync dependency to 3.0.x

: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.1

Needle Engine

  • Add: AnimatorControllerBuilder for building animator controllers from code (experimental)
  • Add: XR global events now return an unsubscribe function + onBeforeXRSessionRequest event
  • Add: getComponent by string name (experimental)
  • Add: FastHDR (PMREM) support for GroundProjection
  • Fix: setParamWithoutReload losing URL hash
  • Fix: Physics treeshaking when used in code-only projects
  • Improved: Vite logger with “latest” symlink, mobile fix, and more readable timestamps (at node_modules/.needle/logs). This is useful for local AI to help debug

Unity Integration

  • Add: Needle AI chat integration with inspector, hierarchy context menus, and login
  • Add: SceneSwitcher: “unload” button, drop highlight, preview button sizing, hide play button for non-scene assets
  • Change: MaterialX export in Needle Engine projects no longer requires PRO license
  • Change: Bump EditorSync dependency to 3.0.x
  • Improved: EditorSync connection 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.0 alpha.2

Needle Engine

  • NEW: Scene Bindings (experimental) — auto-generated TypeScript types from your glTF scenes, providing typed access to nodes, components, and properties via ctx.sceneData or needle.sceneData. Types are generated automatically by a Vite plugin whenever your scene files change — no configuration needed. Works with any glTF/GLB assigned as src on <needle-engine>, including remote URLs and Needle Cloud assets. The API shape (particularly $components and $object accessors) may evolve based on feedback. Can be disabled with dts: { enabled: false } in your Vite plugin config.
    // fully typed, with autocomplete for every node and component
    const cam = ctx.sceneData.MyScene.MainCamera.$object;                      // THREE.PerspectiveCamera
    const orbit = ctx.sceneData.MyScene.MainCamera.$components.OrbitControls;  // typed!
    
  • NEW: SSR support (experimental) — import Needle Engine in Node.js/SSR frameworks (SvelteKit, Next.js, Nuxt) without ReferenceError crashes. The engine now provides SSR-safe base classes and skips browser-dependent initialization on the server. Core rendering still happens client-side — SSR support means your app can import and reference engine code server-side without errors.
  • NEW: JSX type declarations for <needle-engine> and other web components — first-class support for React, Preact, SolidJS, and other JSX-based frameworks with full autocomplete and type checking
  • NEW: needle shorthand (experimental) — quick access to the current engine context from anywhere without passing ctx around. Works in React/Svelte/Vue components, button handlers, or plain JavaScript. SSR-safe.
    import { needle } from "@needle-tools/engine";
    needle.scene.traverse(obj => { ... });  // access the three.js scene
    needle.renderer;                         // access the WebGLRenderer
    needle.sceneData.MyScene.Camera.$components.OrbitControls.autoRotate = true;
    
  • NEW: context.lights array and context.mainLight getter for easy access to all scene lights and the primary directional light
  • Add: needlePlugins() can now be called without arguments — the Vite command is resolved automatically. This simplifies setup in frameworks like SvelteKit where defineConfig doesn’t expose the command:
    export default defineConfig({ plugins: [sveltekit(), needlePlugins()] });
    
  • Fix: BloomEffect and Sharpening were pulling in the entire postprocessing library even in projects that don’t use postprocessing, increasing bundle size unnecessarily
  • Fix: SceneSwitcher now shows the object name in the URL when referencing scene objects (instead of just an index)
  • Improved: Vite plugin reliability (fewer unnecessary reloads, cleaner log output)

Unity Integration

  • Improved: Needle Cloud AI can now pull context from your local Unity and web project for more relevant assistance
  • Improved: Sample search now matches tags (e.g. searching “rendering” finds samples tagged with “rendering”) and ranks results by title > description > tags

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