Skip to content
Velkin LogoVelkin Logo
Velkin
VELKIN/UI

Modern UI components for product teams and their AI agents. Lit core, typed wrappers, live MCP.

sales@velkinui.com

Product

  • Docs
  • Components
  • Studio
  • Pricing

Resources

  • Quick start
  • Blog
  • Changelog
  • Roadmap
  • Status

Project

  • About
  • Contact
  • License
  • Privacy
  • Terms

© 2026 Velkin. MIT core · Pro licenses available.

VELKIN

Model Viewer

Pro

A 3D model viewer component with orbit controls and staging options.

vu-model-viewer · @velkin/react-pro/model-viewer

Copy page

Import

React
npm i @velkin/react-pro

import { LicenseInfo } from "@velkin/license";
// Vite: import.meta.env.VITE_VELKIN_LICENSE_KEY
// Next: process.env.NEXT_PUBLIC_VELKIN_LICENSE_KEY
LicenseInfo.setLicenseKey(import.meta.env.VITE_VELKIN_LICENSE_KEY ?? process.env.NEXT_PUBLIC_VELKIN_LICENSE_KEY ?? "");

// @velkin-pro
import { VuModelViewer } from "@velkin/react-pro/model-viewer";

Examples

API

Props

PropTypeDefaultDescription
srcstring""Model source URL.
altstring"3D model"Accessible description text.
posternull | stringnullPoster image URL shown before reveal.
revealVuModelViewerReveal"auto"Reveal mode for poster/model transition.
loadingVuModelViewerLoading"auto"Loading behavior hint.
cameraControlsbooleantrueEnables orbit controls.
cameraOrbitstring"0deg 75deg 105%"Camera orbit string (theta phi radius).
cameraTargetstring"auto auto auto"Camera target string.
autoRotatebooleanfalseEnables continuous auto-rotation.
pmiSrcstring""Sidecar PMI JSON source.
pmiVisiblebooleantrueToggles PMI visibility.
loadingLabelstring""Override for loading poster / progress accessible copy.
interactionPromptLabelstring""Override for the orbit/zoom hint text.
fullscreenLabelstring""Override for enter-fullscreen accessible name.
exitFullscreenLabelstring""Override for exit-fullscreen accessible name.
showPmiLabelstring""Override for show-PMI button copy.
hidePmiLabelstring""Override for hide-PMI button copy.
unlimitedOrbitbooleanfalseWhen true, orbit has no angle limits so the model can rotate freely on all axes.
axesIndicatorVuModelViewerAxesIndicator"none"Show X/Y/Z axis lines in a corner for orientation reference. Use "none" to hide.
axesIndicatorSpaceVuModelViewerAxesSpace"world"`world` = screen-projected world axes; `model` = local axes after `heightAxis` (CAD / Z-up).
environmentstring""HDR environment map URL (.hdr — loaded via RGBELoader).
skyboxImagestring""Equirectangular HDR for background (.hdr, loaded via RGBELoader).
disableContextMenubooleanfalseWhen true, right-click context menu on the canvas is disabled.
withFullscreenButtonbooleanfalseShows a fullscreen toggle in the corner.
withPmiToggleButtonbooleanfalseShows a built-in PMI visibility toggle in the corner.
dracoDecoderPathstring""Optional DRACO decoder base path for compressed glTF.
ktx2TranscoderPathstring""Optional KTX2/Basis transcoder path for glTF textures.
texturestring""Comma-separated base-color map URLs mapped onto materials in order (cycles if fewer).
pmiWorldLeaderLengthnumber40Default leader length in **model units** for simple leaders (`leader.leader_points` not used).
pmiDefaultLineColorstring"var(--vu-color-foreground)"PMI line/arrow/datum color; supports `var(--token)` resolved via computed style.
pmiDefaultTextColorstring""PMI label fill when JSON omits `textColor`; empty uses the resolved line color.
pmiLabelOrientationPmiLabelOrientation"billboard"PMI label orientation: `billboard` (face camera) or `plane` (annotation normal).
heightAxisVuModelViewerHeightAxis"z"Model up axis: `y` (glTF/Blender) or `z` (CAD); `z` rotates so Z is vertical in the viewer.
formatVuModelViewerFormat""Explicit format (`gltf` | `stl` | `obj`) when URL/MIME sniffing is insufficient.
preserveCameraOnSrcChangebooleanfalseKeep orbit/target and interaction state when `src` changes instead of reframing.

Events

EventDetailDescription
vu-loadEventFired when the model has finished loading.
vu-errorVuModelViewerErrorDetailFired when model loading fails.
vu-progressVuModelViewerProgressDetailFired during model loading.
vu-cameraVuModelViewerCameraChangeDetailFired when camera orbit or target changes.
vu-posterVuModelViewerPosterDetailFired when the poster is hidden and the model is revealed.
vu-visibilityVuModelViewerModelVisibilityDetailFired when model visibility changes.
vu-pmiVuModelViewerPmiVisibilityChangeDetailFired when PMI visibility is toggled.

Slots

SlotDescription
posterContent shown while the model is loading (e.g. placeholder image or spinner).

CSS parts

PartDescription
containerWrapper around the canvas and chrome overlays.
posterLoading/poster overlay.
interaction-promptOrbit/zoom interaction hint.
progressDeterminate load progress bar.
fullscreen-buttonFullscreen toggle control.
pmi-toggle-buttonPMI visibility toggle control.

Methods

MethodDescription
resetViewRestores default camera orbit/target and reapplies camera transforms.

Types

NameDefinition
PmiLabelOrientation
"billboard" | "plane"
string | null
null | string
VuModelViewerAxesIndicator
"none"
| "top-right"
| "top-left"
| "bottom-right"
| "bottom-left"
VuModelViewerAxesSpace
"world" | "model"
VuModelViewerCameraChangeDetail
{ source: string; }
VuModelViewerErrorDetail
unknown
VuModelViewerFormat
"" | "gltf" | "stl" | "obj"
VuModelViewerHeightAxis
"y" | "z"
VuModelViewerLoading
"auto" | "lazy" | "eager"
VuModelViewerModelVisibilityDetail
{ visible: boolean; }
VuModelViewerPmiVisibilityChangeDetail
{ visible: boolean; }
VuModelViewerPosterDetail
{ dismissed: true; }
VuModelViewerProgressDetail
{ totalProgress: number; reason?: string; }
VuModelViewerReveal
"auto" | "manual"

Related

Data display

  • AvatarAn avatar component with image, initials, icon, or custom content.
  • Avatar GroupAn avatar group component that stacks overlapping avatars.
  • BadgeA badge component for counts, status dots, and overlay marks.
  • ChipA chip component for tags and filters with dismiss or toggle actions.
  • Data TableA data table component with sorting, filtering, and selection.
  • DividerA divider component for horizontal or vertical layout separation.

Guides

  • Pro licenseLicenseInfo and Pro imports
  • AppearanceShared visual props
  • EventsSelection and change events

Browse

  • Previous: ListEarlier in the sidebar
  • Next: TreeLater in the sidebar
  • All componentsBrowse the full index