
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
gltf-js-utils
Advanced tools
Helper library for creating glTF 2.0 models with JavaScript.
Create a GLTFAsset structure using the provided types.
import {
GLTFAsset, Scene, Node, Material, Texture, Mesh, Vertex, WrappingMode
} from "gltf-js-utils";
const asset = new GLTFAsset();
const scene = new Scene();
asset.addScene(scene);
const node = new Node();
node.setTranslation(x, y, z);
node.setRotationRadians(x, y, z);
node.setScale(x, y, z);
scene.addNode(node);
const material = new Material();
// Supported texture types: HTMLImageElement | HTMLCanvasElement | ArrayBuffer (PNG) | Data URL (PNG)
const texture = new Texture(image);
texture.wrapS = WrappingMode.CLAMP_TO_EDGE;
texture.wrapT = WrappingMode.REPEAT;
material.pbrMetallicRoughness.baseColorTexture = texture;
const mesh = new Mesh();
mesh.material = [material];
node.mesh = mesh;
const v1 = new Vertex();
v1.x = 1;
v1.y = 1;
v1.z = 1;
v1.u = 0;
v1.v = 0;
const v2 = new Vertex();
// ...
const faceColor = undefined;
const faceMaterialIndex = 0;
mesh.addFace(v1, v2, v3, faceColor, faceMaterialIndex);
mesh.addFace(v4, v5, v6, faceColor, faceMaterialIndex);
// ...
import { Node, Animation, InterpolationMode, Transformation } from "gltf-js-utils";
const node = new Node();
scene.addNode(node);
const nodeAnim = new Animation(Transformation.TRANSLATION);
nodeAnim.keyframes = [
{
time: 0,
value: [1, 2, 3],
interpType: InterpolationMode.LINEAR
},
{
time: 0.3,
value: [4, 5, 6],
interpType: InterpolationMode.LINEAR
}
];
// or add keyframes via addKeyframe function
nodeAnim1.addKeyframe(0.8, [7, 8, 9], InterpolationMode.STEP);
node.animations = [nodeAnim];
With the default options, you'll receive an object keyed with the glTF JSON and binary buffers.
import { exportGLTF } from "gltf-js-utils";
const gltfFiles = await exportGLTF(asset);
// {
// "model.gltf": string /* JSON glTF string */
// "data1.bin": ArrayBuffer /* ArrayBuffer of buffer data */
// "data2.bin": ArrayBuffer,
// "data3.bin": ArrayBuffer,
// ...
// "img1.png": ArrayBuffer /* Texture image */
// "img2.png": ArrayBuffer
// ...
// }
Buffers and/or images can be embedded within the JSON as data URIs.
import { exportGLTF, BufferOutputType } from "gltf-js-utils";
const gltfFiles = await exportGLTF(asset, {
bufferOutputType: BufferOutputType.DataURI,
imageOutputType: BufferOutputType.DataURI,
});
// {
// "model.gltf": string /* JSON glTF string, all data embedded */
// }
Requires a JSZip reference. The result will be a ZIP blob.
import * as JSZip from "jszip";
import { exportGLTFZip } from "gltf-js-utils";
exportGLTFZip(asset, JSZip).then(blob => {
// Use FileSaver as an example.
saveAs(blob, "model.zip");
});
Use the separate gtlf-js-utils-three package
to create glTF models from Three.js models.
See the gtlf-js-utils-three documentation for more details.
import { exportGLTF } from "gltf-js-utils";
import { glTFAssetFromTHREE } from "gltf-js-utils-three";
// Create a Three.js Scene or Object3D structure...
const scene = new THREE.Scene();
...
const gltfFiles = await exportGLTF(glTFAssetFromTHREE(scene));
Calling exportGLB will produce a single GLB model in an ArrayBuffer.
import { exportGLB } from "gltf-js-utils";
const glbArrayBuffer = await exportGLB(asset);
You can also use exportGLTF with the GLB output type to selectively keep some assets external.
import { exportGLTF, BufferOutputType } from "gltf-js-utils";
const gltfFiles = await exportGLTF(asset, {
bufferOutputType: BufferOutputType.GLB,
imageOutputType: BufferOutputType.External,
});
// {
// "model.glb": ArrayBuffer
// ...
// // Only images follow, data bins are in the GLB file
// "img1.png": ArrayBuffer /* Texture image */
// "img2.png": ArrayBuffer
// }
To build:
npm install
npm run build
To test:
npm run test
MIT
FAQs
Helper library for creating glTF 2.0 models with JavaScript.
We found that gltf-js-utils demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.