# gltf-validator

> Library for validating glTF 2.0 assets, compiled from Dart to JS.

Latest version **2.0.0-dev.3.10** (published 2024-10-22) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install gltf-validator
pnpm add gltf-validator
yarn add gltf-validator
bun add gltf-validator
```

## Health

**Score 45/100 (D)** — status: stable.

Positive: esm support; no vulnerabilities; high maintenance score.

Warnings: low downloads; no types.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 2.0.0-dev.3.10 |
| Published | 2024-10-22 |
| First published | 2017-10-09 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 374.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 471 |
| Author | The Khronos Group Inc. |
| Maintainers | emackey, khronos |
| Keywords | gltf, webgl, 3d |

## Links

- npm: https://www.npmjs.com/package/gltf-validator
- Repository: https://github.com/KhronosGroup/glTF-Validator
- Issues: https://github.com/KhronosGroup/glTF-Validator/issues
- npm.io page: https://npm.io/package/gltf-validator

## Recent versions

- 2.0.0-dev.3.10 (latest) — 2024-10-22
- 2.0.0-dev.3.9 — 2022-06-24
- 2.0.0-dev.3.8 — 2022-05-08
- 2.0.0-dev.3.7 — 2022-04-29
- 2.0.0-dev.3.6 — 2022-04-09
- 2.0.0-dev.3.5 — 2021-06-23
- 2.0.0-dev.3.4 — 2021-06-17
- 2.0.0-dev.3.3 — 2020-12-02
- 2.0.0-dev.3.2 — 2020-01-21
- 2.0.0-dev.3.1 — 2020-01-17
- 2.0.0-dev.3.0 — 2020-01-09
- 2.0.0-dev.2.7 — 2018-12-18
- 2.0.0-dev.2.6 — 2018-10-23
- 2.0.0-dev.2.5 — 2018-08-26
- 2.0.0-dev.2.4 — 2018-07-11
- … 14 more at https://npm.io/package/gltf-validator/versions

## README

# gltf-validator

This is an npm package for the official [glTF Validator](https://github.com/KhronosGroup/glTF-Validator/) compiled from Dart to JS.

## Installation

    npm install --save gltf-validator

## Examples

### Basic usage (Node.js)

```javascript
const fs = require('fs');
const validator = require('gltf-validator');

const asset = fs.readFileSync('./Box.gltf');

validator.validateBytes(new Uint8Array(asset))
    .then((report) => console.info('Validation succeeded: ', report))
    .catch((error) => console.error('Validation failed: ', error));
```

### Basic usage (Browser)

```javascript
const validator = require('gltf-validator');

fetch('Box.gltf')
    .then((response) => response.arrayBuffer())
    .then((asset) => validator.validateBytes(new Uint8Array(asset)))
    .then((report) => console.info('Validation succeeded: ', report))
    .catch((error) => console.error('Validation failed: ', error));
```

### Full usage

```javascript
const fs = require("fs");
const path = require("path");
const validator = require('gltf-validator');

const filename = 'Box.gltf';
const fullpath = __dirname + '/' + filename;
const asset = fs.readFileSync(fullpath);

validator.validateBytes(new Uint8Array(asset), {
    uri: filename,
    format: 'gltf', // skip auto-detection and parse the input as glTF JSON
    maxIssues: 10, // limit max number of output issues to 10
    ignoredIssues: ['UNSUPPORTED_EXTENSION'], // mute UNSUPPORTED_EXTENSION issue
    onlyIssues: ['ACCESSOR_INVALID_FLOAT'], // only consider ACCESSOR_INVALID_FLOAT an issue. Cannot be used along with ignoredIssues.
    severityOverrides: { 'ACCESSOR_INDEX_TRIANGLE_DEGENERATE': 0 }, // treat degenerate triangles as errors
    externalResourceFunction: (uri) =>
        new Promise((resolve, reject) => {
            uri = path.resolve(path.dirname(fullpath), decodeURIComponent(uri));
            console.info("Loading external file: " + uri);
            fs.readFile(uri, (err, data) => {
                if (err) {
                    console.error(err.toString());
                    reject(err.toString());
                    return;
                }
                resolve(data);
            });
        })
}).then((result) => {
    // [result] will contain validation report in object form.
    // You can convert it to JSON to see its internal structure. 
    console.log(JSON.stringify(result, null, '  '));
}, (result) => {
    // Promise rejection means that arguments were invalid or validator was unable 
    // to detect file format (glTF or GLB). 
    // [result] will contain exception string.
    console.error(result);
});
```

## API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### Table of Contents

*   [version](#version)
*   [supportedExtensions](#supportedextensions)
*   [validateBytes](#validatebytes)
    *   [Parameters](#parameters)
*   [validateString](#validatestring)
    *   [Parameters](#parameters-1)
*   [ValidationOptions](#validationoptions)
    *   [Properties](#properties)
*   [ExternalResourceFunction](#externalresourcefunction)
    *   [Parameters](#parameters-2)

### version

Returns a version string.

Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 

### supportedExtensions

Returns an array of supported extensions names.

Returns **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** 

### validateBytes

Validates an asset from bytes.

#### Parameters

*   `data` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)** Byte array containing glTF or GLB data.
*   `options` **[ValidationOptions](#validationoptions)** Object with validation options.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Promise with validation result in object form.

### validateString

Validates an asset from JSON string.

#### Parameters

*   `json` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** String containing glTF JSON.
*   `options` **[ValidationOptions](#validationoptions)** Object with validation options.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Promise with validation result in object form.

### ValidationOptions

Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)

#### Properties

*   `uri` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Absolute or relative asset URI that will be copied to validation report.
*   `format` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Set to `glb` or `gltf` to skip auto-detection of the asset format based on the first byte; any other value will be ignored. This option has no effect on `validateString`.
*   `externalResourceFunction` **[ExternalResourceFunction](#externalresourcefunction)** Function for loading external resources. If omitted, external resources are not validated.
*   `writeTimestamp` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Set to `false` to omit timestamp from the validation report. Default is `true`.
*   `maxIssues` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** Max number of reported issues. Use `0` for unlimited output.
*   `ignoredIssues` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** Array of ignored issue codes.
*   `onlyIssues` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** Array of only issues to consider. Cannot be used along with ignoredIssues.
*   `severityOverrides` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object with overridden severities for issue codes.

### ExternalResourceFunction

Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)

#### Parameters

*   `uri` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Relative URI of the external resource.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Promise with Uint8Array data.

---
_Source: https://npm.io/package/gltf-validator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
