# Install libassimp

Add the ESM package and load its single Wasm artifact.

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

<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>

libassimp requires Node.js 22.14 or newer and is ESM-only. CommonJS callers use dynamic `import()`.

## Package entry [#package-entry]

`libassimp` reads all 69 compiled extensions and writes all 15 canonical formats.

Format unions, metadata, and `conversionEdges` describe that complete catalog.

```typescript
import { conversionEdges } from 'libassimp';

console.log(conversionEdges.some(({ from, to }) => from === 'glb' && to === 'stl'));
```

This import reads static JavaScript data and does not fetch or compile Wasm.

## Loading [#loading]

Vite and webpack 5 can emit the entry-relative glue and Wasm assets. To control the location or provide already-fetched bytes, create an instance:

```typescript
import { createAssimp } from 'libassimp';

const response = await fetch('/assets/libassimp.wasm');
using assimp = await createAssimp({ wasmBinary: await response.arrayBuffer() });

console.log(assimp.formats.export.map(({ id }) => id));
```

`CreateAssimpOptions` remains `wasmUrl`, `wasmBinary`, and `onLog`. There is no async-mode selector: the artifact automatically uses JSPI when available or replay otherwise. The published binary subpath is `libassimp/wasm`.

Workers require no pthread bootstrap or cross-origin isolation. See the canonical [compatibility matrix](https://github.com/taucad/libassimp/blob/main/compatibility.md) for host floors and feature routing.