@needle-tools/engine
Version:
Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.
173 lines (149 loc) • 7.26 kB
TypeScript
import { License } from "./license.js";
export type needleModules = {
webpack: object | undefined
}
/**
* Settings for the Needle plugin
*/
export type userSettings = {
/** disable needle asap plugin and glTF / GLB preload links */
noAsap?: boolean;
/** disable vite.alias modification */
noAlias?: boolean;
/** Enable verbose debug output for needle plugins. */
debug?: boolean;
/**
* When set to `true` a plugin will log all alias resolutions to a file in the project node_modules directory
* @default false
*/
debugAlias?: boolean;
/** disable automatic copying of files to include and output directory (dist) */
noCopy?: boolean;
/** When enabled the needle-engine include directory will be copied */
copyIncludesFromEngine?: boolean;
/** set to false to tree-shake rapier physics engine to the reduce bundle size */
useRapier?: boolean;
/** experimental */
usePostprocessing?: boolean;
noDependencyWatcher?: boolean;
/** set to false to suppress editor-sync package installation and connection */
dontInstallEditor?: boolean;
/** set to false to prevent meta.html modifications (vite only) */
allowMetaPlugin?: boolean;
/** set to true to prevent injecting peerjs `parcelRequire` global variable declaration */
noPeer?: boolean;
/** set to true to disable reload plugin */
noReload?: boolean;
/** Set to false to disable hot reload for the needle plugin. */
allowHotReload?: boolean;
/** When enabled the Vite drop plugin will be enabled. @default false */
useDrop?: boolean;
noCodegenTransform?: boolean;
noFacebookInstantGames?: boolean;
/** Custom configuration for facebook instant games. */
facebookInstantGames?: {}
/** Set to true to create an imports.log file that shows all module imports. The file is generated when stopping the server. */
debugImportChains?: boolean;
/** Set to true to disable generating the buildinfo.json file in your output directory */
noBuildInfo?: boolean;
/** Set to true to disable the needle build pipeline (running compression and optimization as a postprocessing step on the exported glTF files) */
noBuildPipeline?: boolean;
/**
* Use to configure optimized builds
*/
buildPipeline?: {
/** Set to false to prevent the build pipeline from running */
enabled?: boolean,
/** Set a project name (cloud only) */
projectName?: string,
/** Enable for verbose log output */
verbose?: boolean,
/** Set to a specific version of the Needle Build Pipeline.
* @default "latest"
* @example "2.2.0-alpha"
*/
version?: string;
/** If defined the access token will be used to run compression on Needle Cloud */
accessToken?: string | undefined;
/**
* The 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)
* @default 60000
*/
maxWaitDuration?: number; // in ms, default 60000 (60 seconds)
}
/** required for @serializable https://github.com/vitejs/vite/issues/13736 */
vite44Hack?: boolean;
/** set to true to disable poster generation */
noPoster?: boolean;
// posterFormat?: "image/webp";// | "image/png";
/**
* Use "default" to always generate the poster after 'src' has changed
* Use "once" to generate the poster only once, when no poster already exists
*/
posterGenerationMode?: "default" | "once";
/** Pass in PWA options, `true` to enable with defaults, or `false` to disable.
* Options are forwarded to `vite-plugin-pwa`.
*/
pwa?: Record<string, unknown> | boolean;
/** used by nextjs config to forward the webpack module */
modules?: needleModules;
/**
* Use to activate a needle engine license
*/
license?: License;
/** Enable verbose logging */
debugLicense?: boolean;
/**
* 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 features
*
* Available 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 assets
*/
makeFilesLocal?: boolean | "auto" | {
enabled: boolean;
/** URL patterns to exclude from making local */
exclude?: string[];
/** Target platform preset */
platform?: "discord" | "facebook-instant" | null;
/**
* Feature categories to include.
* - `"auto"` — Automatically detect which features the project uses.
* - `FeatureName[]` — Explicit list. When set, ONLY these features are processed.
* - When omitted, ALL features are included.
*/
features?: "auto" | Array<"draco" | "ktx2" | "materialx" | "xr" | "skybox" | "fonts" | "needle-fonts" | "needle-models" | "needle-avatars" | "polyhaven" | "cdn-scripts" | "github-content" | "threejs-models" | "needle-uploads">;
/** Feature categories to exclude. Applied after `features` (including after auto-detection). */
excludeFeatures?: Array<"draco" | "ktx2" | "materialx" | "xr" | "skybox" | "fonts" | "needle-fonts" | "needle-models" | "needle-avatars" | "polyhaven" | "cdn-scripts" | "github-content" | "threejs-models" | "needle-uploads">;
}
/**
* When set to `true` a plugin will automatically attempt to open the browser using a network ip address when the local server has started
* @default undefined
*/
openBrowser?: boolean;
disableLogging?: boolean;
/** Set to true to disable the plugin that ensures VSCode workspace settings for custom-elements.json data */
noCustomElementData?: boolean;
}