Skip to content

@voxel-tool/svelte ​

Svelte 5 (runes) 3D viewer component (built on @voxel-tool/viewer + Three.js). Real 3D cubes + depth buffer + face culling + orthographic isometric camera + OrbitControls.

js
import { VoxViewer } from '@voxel-tool/svelte';

<VoxViewer /> Props ​

PropTypeDefaultDescription
srcArrayBuffer | Uint8Arraynull.vox binary; when provided, parseVox is called internally
model{ size, voxels }nullA parsed model (from parseVox's models[0])
paletteArray<[r,g,b,a]>nullA 256-entry palette; pairs with model
backgroundstring'#16181e'Canvas background color
size[number, number][480, 480]Canvas size [width, height] (px)

Provide either src or model; if both are given, model wins. The Svelte version uses a size array (like Vue); the other frameworks use separate width / height props.

Interaction ​

  • Left-drag: rotate the view
  • Scroll: zoom
  • Right-drag: pan

The component auto-frames the model (Box3 bounding-box centering + zoom-to-fit) and shows voxel count · face count at the bottom-left.

Example ​

svelte
<script>
  import { VoxViewer } from '@voxel-tool/svelte';
  import { parseVox } from '@voxel-tool/core';

  let data = $state(null);
  async function onFile(e) {
    const buf = new Uint8Array(await e.currentTarget.files[0].arrayBuffer());
    data = parseVox(buf);
  }
</script>

<input type="file" accept=".vox" onchange={onFile} />
{#if data}
  <VoxViewer model={data.models[0]} palette={data.palette} size={[640, 480]} />
{/if}

See Component Examples · Svelte.

MIT Licensed © 2026 Maicarons