Optionalai?: {Configure installation of local AI assistant skill files. The files install during dev server startup by default. Build-time installation is opt-in because builds should not normally mutate the project directory or fetch helper documentation.
OptionaldownloadReferences?: booleanSet to false to skip downloading linked reference files during dev-server installation.
OptionaldownloadReferencesDuringBuild?: booleanSet to true to download linked reference files during build-time installation.
Optionalinstall?: booleanSet to false to disable AI helper file installation. Can also be disabled with NEEDLE_AI=false or NEEDLE_AI=0 (case-insensitive).
OptionalinstallDuringBuild?: booleanSet to true to install AI helper files during Vite builds.
OptionalallowHotReload?: booleanSet to false to disable hot reload for the needle plugin.
OptionalallowMetaPlugin?: booleanset to false to prevent meta.html modifications (vite only)
OptionalbuildPipeline?: {Use to configure optimized builds
OptionalaccessToken?: stringIf defined the access token will be used to run compression on Needle Cloud.
Expected to be a Needle Cloud access token (created in the Needle Cloud UI), NOT a JWT. Do not pass a licensing JWT here.
Optionalenabled?: booleanSet to false to prevent the build pipeline from running
OptionalmaxWaitDuration?: numberThe max duration the build pipeline will wait for the website bundling process to finish. After bundling has finished the pipeline will start processing the exported glTF files.
Default is 60000 (60 seconds)
OptionalprojectName?: stringSet a project name (cloud only)
Optionalverbose?: booleanEnable for verbose log output
Optionalversion?: stringSet to a specific version of the Needle Build Pipeline.
OptionalcopyIncludesFromEngine?: booleanWhen enabled the needle-engine include directory will be copied
Optionaldebug?: booleanEnable verbose debug output for needle plugins.
OptionaldebugAlias?: booleanWhen set to true a plugin will log all alias resolutions to a file in the project node_modules directory
OptionaldebugImportChains?: booleanSet to true to create an imports.log file that shows all module imports. The file is generated when stopping the server.
OptionaldebugLicense?: booleanEnable verbose logging
OptionaldisableLogging?: booleanOptionaldontInstallEditor?: booleanset to false to suppress editor-sync package installation and connection
Optionaldts?: { enabled?: boolean }Generate Typescript declaration files for references 3D assets in your project.
These will be available via context.sceneData in your code.
Optionalenabled?: booleanWhen set to false, disables the generation of TypeScript declaration files.
OptionalfacebookInstantGames?: {}Custom configuration for facebook instant games.
Optionallicense?: LicenseUse to activate a needle engine license
OptionalmakeFilesLocal?: When enabled, external CDN URLs are downloaded at build time and bundled locally. This creates fully self-contained deployments that work without internet access.
true — enable with all features (download everything)"auto" — automatically detect which features the project uses and only include those{ enabled: true } — same as true{ enabled: true, features: "auto" } — same as "auto"{ enabled: true, features: ["draco", "ktx2"] } — only include specific features{ enabled: true, excludeFeatures: ["xr"] } — include all except specific features{ enabled: true, features: "auto", excludeFeatures: ["skybox"] } — auto-detect but exclude specific featuresAvailable features:
"draco" — Draco mesh decoders"ktx2" — KTX2/Basis texture transcoders"materialx" — MaterialX WASM shader compiler"xr" — WebXR input profiles (controllers/hands)"skybox" — Skybox/environment textures"fonts" — Google Fonts CSS + font files"needle-fonts" — Needle font assets (MSDF, etc.)"needle-models" — Needle models"needle-avatars" — Needle avatars"polyhaven" — Polyhaven HDRIs/models"cdn-scripts" — Third-party scripts (QRCode.js, vConsole, HLS.js)"github-content" — GitHub raw content files"threejs-models" — three.js example models"needle-uploads" — Needle uploads assetsOptionalmodules?: needleModulesused by nextjs config to forward the webpack module
OptionalnoAlias?: booleandisable vite.alias modification
OptionalnoAsap?: booleandisable needle asap plugin and glTF / GLB preload links
OptionalnoBuildInfo?: booleanSet to true to disable generating the buildinfo.json file in your output directory
OptionalnoBuildPipeline?: booleanSet to true to disable the needle build pipeline (running compression and optimization as a postprocessing step on the exported glTF files)
OptionalnoCodegenTransform?: booleanOptionalnoCopy?: booleandisable automatic copying of files to include and output directory (dist)
OptionalnoCustomElementData?: booleanSet to true to disable the plugin that ensures VSCode workspace settings for custom-elements.json data
OptionalnoDependencyWatcher?: booleanOptionalnoFacebookInstantGames?: booleanOptionalnoPeer?: booleanset to true to prevent injecting peerjs parcelRequire global variable declaration
OptionalnoPoster?: booleanset to true to disable poster generation
OptionalnoReload?: booleanset to true to disable reload plugin
OptionalopenBrowser?: booleanWhen set to true a plugin will automatically attempt to open the browser using a network ip address when the local server has started
OptionalposterGenerationMode?: "default" | "once"Use "default" to always generate the poster after 'src' has changed Use "once" to generate the poster only once, when no poster already exists
Optionalpwa?: Record<string, unknown> | booleanPass in PWA options, true to enable with defaults, or false to disable.
Options are forwarded to vite-plugin-pwa.
Optionalremote?: boolean | { qr?: boolean }Enable remote debugging: bind the dev server to your local network (host)
and serve over HTTPS (via @vitejs/plugin-basic-ssl) so you can open the page
on a phone, Quest or Apple Vision Pro on the same Wi‑Fi. The Needle logger
already streams the device's console, errors and device info back over Vite's
websocket (see node_modules/.needle/logs/latest.client.needle.log), so this
makes "debug a scene on a real device from your laptop" work out of the box.
HTTPS is required for WebXR / secure‑context features on the device; the
self‑signed certificate shows a one‑time warning you accept on the device.
Requires @vitejs/plugin-basic-ssl (for HTTPS) and, optionally,
qrcode-terminal (to print a scannable QR code). Can also be toggled with the
NEEDLE_REMOTE env var (NEEDLE_REMOTE=1 / =false).
true — enable with a terminal QR code{ qr: false } — enable but don't print the QR codeOptionaluseDrop?: booleanWhen enabled the Vite drop plugin will be enabled.
OptionalusePostprocessing?: booleanSet to false to prevent postprocessing effects from loading.
NOTE: by default Needle Engine uses dynamic loading of postprocessing modules. This means that the postprocessing code is only loaded when a postprocessing effect is used in the scene.
OptionaluseRapier?: booleanSet to false to prevent the Rapier physics engine from loading.
NOTE: by default Needle Engine uses dynamic loading of the Rapier physics engine. This means that the Rapier code is only loaded when a physics component is used in the scene.
Optionalvite44Hack?: booleanrequired for
Settings for the Needle plugin