October 5, 2026
GLB vs USDZ: the two formats your product page needs
GLB and USDZ are not alternatives. They are the twin outputs of the same model, and a product page that wants AR on both iPhone and Android ships both. GLB is the web’s format; USDZ is Apple’s AR format. Quick Look on iOS only opens USDZ; the web viewer on a page opens GLB.
What they actually are
- GLB is the binary form of glTF (GL Transmission Format), maintained by the Khronos Group. Geometry, materials, and textures package into one file, it streams, and it is the file
<model-viewer>opens on the page. - USDZ is Apple’s usdz container for AR experiences. It bundles the model and its textures for Apple’s Quick Look renderer, which is the augmented-reality surface an iPhone shopping session actually launches.
Both come from the same exporter in the same pass. A pipeline that hands you GLB should hand you the USDZ of the same model a step later.
Who reads which
| Surface | Reads | Mechanism |
|---|---|---|
| Product page on desktop / Android Chrome | GLB | <model-viewer> WebGL |
| Android AR (Scene Viewer / WebXR) | GLB | Scene Viewer consumes GLB |
| iPhone / iPad AR | USDZ | AR Quick Look launches from USDZ |
| Print or other desktop tools | often USDZ | DCC apps that import USD |
If your export path produced GLB only, every iPhone AR session stops at the on-page viewer — no “View in your space,” no in-room preview. If it produced USDZ only, the web viewer on the page has nothing to render. Ship both.
How to ship both in the same viewer
The snippet that pairs them is two attributes on one element:
<model-viewer
src="/models/chair.glb"
ios-src="/models/chair.usdz"
ar
ar-modes="webxr scene-viewer quick-look"
></model-viewer>
<model-viewer> uses src on the page for every platform, uses ios-src to feed Quick Look when the shopper taps the AR button on iOS, and dispatches WebXR/Scene Viewer to the GLB on Android. One element, one model pair, three AR paths. The full walkthrough is the 3D viewer embed guide.
The file-size and texture budget applies to both
Both containers carry textures, and both feed a phone over cellular. Shopify’s partner guidance holds across formats: keep the model near 4 MB and textures at 2048×2048. A GLB that compressed well does not guarantee a USDZ that did — both need the same budget check before they go live.
Where importers trip up
The most common confusion on a storefront is seeing a USDZ file, loading it into <model-viewer>, and watching it fail — because <model-viewer> is a GLB/glTF renderer, not a USDZ one. USDZ is consumed by Quick Look (the phone’s own AR sheet), not by the on-page viewer. The correct assembly is: GLB for the page viewer, USDZ wired through ios-src for the iOS AR handoff.
Likewise, shipping only USDZ to Android via Scene Viewer is inconsistent because Scene Viewer expects GLB. The pair exists so neither platform hits a dead end.
The short version
- GLB → the viewer on the page, WebXR on Android.
- USDZ → Quick Look on iOS.
- Both → the only assembly that covers every shopper from one embed line.
- Same model → both should come from the same export, at the same 1:1 scale, within the same ~4 MB budget.
When a tool quotes “3D model for e-commerce” and lists only one of the two, ask for both formats on the same export. That is the deliverable a product page needs, and it is what a finished, hosted pipeline returns. For what to do with those files, the 3D viewer embed guide is the canonical next step, and you can see the finished version in the homepage sandbox.
Your product photos, back as a 3D model in hours
Upload a photo, get a web-ready 3D asset, and drop it on your storefront with a one-line embed — AR included.
