# Overview

Typed, import-once 3D format conversion in Node.js, browsers, and workers.

Canonical page: https://libassimp.xyz/docs

libassimp compiles the Open Asset Import Library to WebAssembly behind a typed TypeScript API. It converts files; it does not expose a retained scene graph or a Wasm handle.

## What it costs to ship [#what-it-costs-to-ship]

- `libassimp.wasm`: 11696786 B raw, 2061982 B brotli
- JavaScript entrypoint: 894 B raw, 395 B gzip

The single root entry has one glue file and one `libassimp.wasm` file, and publishes its exact static format graph without loading either artifact.

## Import once, export many [#import-once-export-many]

<CodeBlockTabs defaultValue="npm">
  <CodeBlockTabsList>
    <CodeBlockTabsTrigger value="npm">
      npm
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="pnpm">
      pnpm
    </CodeBlockTabsTrigger>
  </CodeBlockTabsList>

  <CodeBlockTab value="npm">
    ```bash
    npm install libassimp
    ```
  </CodeBlockTab>

  <CodeBlockTab value="pnpm">
    ```bash
    pnpm add libassimp
    ```
  </CodeBlockTab>
</CodeBlockTabs>

```typescript
import { convertFormats } from 'libassimp';
import { readFile, writeFile } from 'node:fs/promises';

const bytes = new Uint8Array(await readFile('cube.obj'));
const [glb, stl] = await convertFormats(
  { name: 'cube.obj', bytes },
  {
    targets: [{ to: 'glb' }, { to: 'stl', exportOptions: { binary: true } }],
  },
);

await writeFile(glb.files[0].name, glb.files[0].bytes);
await writeFile(stl.files[0].name, stl.files[0].bytes);
```

The source is imported and post-processed once. Results map positionally to the target tuple, exports run sequentially, and any failure rejects without exposing partial output. Use singular `convert` when only one output is needed or when you want to persist and release outputs one at a time.

Typed `importOptions`, `postProcess`, and format-specific `exportOptions` reject invalid configuration before Wasm work. A Promise-returning `resolve` callback can fetch sidecars on demand on every supported host.

## Next [#next]

* [Convert one model](https://libassimp.xyz/docs/guides/convert-a-model.mdx)
* [Convert to multiple formats](https://libassimp.xyz/docs/guides/convert-to-multiple-formats.mdx)
* [Resolve sidecars asynchronously](https://libassimp.xyz/docs/guides/resolve-sidecar-files.mdx)
* [API reference](https://libassimp.xyz/docs/api.mdx)
* [Compatibility](https://github.com/taucad/libassimp/blob/main/compatibility.md)