Reference · 2026

VRM 0.x vs VRM 1.0: compatibility matrix

This is VTubeMe's reference on the two VRM versions: which VTubing apps read 0.x, which read 1.0, what changes inside the file, and what is lost when you convert. It matters because the most popular exporter and the most popular app sit on opposite sides of the split — VRoid Studio 2.x writes VRM 1.0, and VSeeFace reads VRM 0.x only.

Which apps read which version

Only what our own pages and vendor documentation actually state. Where the version an app accepts is not documented in those sources, the cell says not verified rather than guessing — the app reads VRM, but we have not confirmed which versions.

AppVRM 0.xVRM 1.0Source / notes
VSeeFaceYesNoOpens .vrm directly and supports the VRM 0.x standard only — a VRM 1.0 file will not open. Vendor doc: vseeface.icu.
3teneYesNoReads VRM 0.x only, the same constraint as VSeeFace. Stated on our VRM version converter page; no vendor doc is cited for it here.
VMagicMirrorYesYesRecent versions load both VRM 0.x and VRM 1.0. Vendor doc: malaybaku.github.io/VMagicMirror.
Desktop MateNoYesIts Custom Avatar Loader wants VRM 1.0, while most models in circulation are 0.x. Stated on our VRM version converter page; no vendor doc is cited for it here.
WarudoNot verifiedNot verifiedReads VRM natively — load the .vrm as a Character asset, no conversion step. Which versions it accepts is not stated in our sources.
VNyanNot verifiedNot verifiedLoads standard VRM files directly. Which versions it accepts is not stated in our sources. Vendor page: suvidriel.itch.io/vnyan.
AnimazeNot verifiedNot verifiedSupports VRM import. Which versions it accepts is not stated in our sources.
ResoniteNot verifiedNot verifiedImports VRM natively — drag the .vrm into a session, no Unity or SDK. Which versions it accepts is not stated in our sources.
VRChatn/a — Unity SDKn/a — Unity SDKDoes not load .vrm at all. The model goes through Unity with the VRChat SDK, so the VRM version is not what decides whether it works. Vendor doc: creators.vrchat.com.
ChilloutVRn/a — Unity SDKn/a — Unity SDKDoes not load .vrm directly either — you import it into Unity and upload through the Creation Kit (CCK).
VTubeMe VRM ViewerYesYesOpens VRM 0.x, VRM 1.0 and plain .glb in the browser, and tells you which version a file is.

Two writers, for context: VRoid Studio 2.x writes VRM 1.0, and VTubeMe exports VRM 0.x — which is why an avatar made here loads in VSeeFace with no conversion step.

What changes between 0.x and 1.0

VRM 1.0 is not a newer flavour of the same file. Everything below is what our own converter has to rewrite to turn one version into the other.

WhatVRM 0.xVRM 1.0
glTF extensionOne extension, VRM, holding meta, humanoid, firstPerson, blendShapeMaster, secondaryAnimation and materialProperties.Split across VRMC_vrm (meta, humanoid, firstPerson, lookAt, expressions), VRMC_springBone and VRMC_materials_mtoon. VRMC_node_constraint exists in 1.0 and has no 0.x counterpart.
Facing directionThe avatar is authored facing −Z in glTF space.The avatar is authored facing +Z. Nothing in the file says which way it is built: runtimes infer it from the declared version.
Thumb chain namingleftThumbProximal, leftThumbIntermediate, leftThumbDistal.leftThumbMetacarpal, leftThumbProximal, leftThumbDistal. 1.0's Metacarpal is the knuckle at the wrist, which 0.x calls Proximal, so every thumb bone shifts one place along the chain.
Expressions / blendshapesblendShapeMaster.blendShapeGroups bind a MESH index, with weights 0–100. Presets are named joy, angry, sorrow, fun, a/i/u/e/o, blink_l, blink_r, lookup, lookdown.expressions bind a NODE, with weights 0–1. Presets are named happy, angry, sad, relaxed, aa/ih/ou/ee/oh, blinkLeft, blinkRight, lookUp, lookDown — plus surprised, which has no 0.x preset.
Spring bonessecondaryAnimation.boneGroups: physics per GROUP, only the root bone listed (the runtime walks the subtree itself), spherical colliders only.VRMC_springBone.springs: physics per JOINT, every joint spelled out in order, and a spring is a single chain. Colliders can be spheres or capsules.
Spring gravity directiongravityDir is a direction in model space, so it does not ride along with the node hierarchy — it has to be turned by hand together with the facing change.Same, stored per joint instead of per group.
Look-atLives inside firstPerson, as a curve plus xRange / yRange per direction.Its own lookAt block, with linear range maps (inputMaxValue, outputScale) and no curve. The head offset moves from firstPersonBoneOffset to offsetFromHeadBone.
MToon materialsA parallel materialProperties list in Unity's vocabulary — shader VRM/MToon (or VRM_USE_GLTFSHADER for a plain material), _MainTex, _ShadeColor, _OutlineWidth, render queues.VRMC_materials_mtoon sits on the glTF material itself — shadeColorFactor, outlineWidthFactor, outlineWidthMode — and the core glTF material carries the base colour and alpha mode.
Meta / license fieldstitle, author (one free-text field), reference, allowedUserName, violentUssageName, sexualUssageName, commercialUssageName, licenseName, otherLicenseUrl. Thumbnail is meta.texture, an index into textures[].name, authors (a list), references, avatarPermission, allowExcessivelyViolentUsage, allowExcessivelySexualUsage, commercialUsage (personal-non-profit / personal-profit and up), plus fields 0.x has no room for at all: creditNotation, allowRedistribution, modification, allowPoliticalOrReligiousUsage, allowAntisocialOrHateUsage. Thumbnail is thumbnailImage, an index into images[].

Footnote on the facing row: the VRM 0.x documentation says an avatar faces +Z, and that is not a contradiction — it is written in Unity's left-handed axes. Read as glTF, which is right-handed, the same direction is −Z. Reading the 0.x wording as glTF is the origin of most backwards-facing avatars.

What is lost or guessed, by direction

Neither direction touches geometry: vertices, skins, images and animations pass through byte for byte, and only the extension objects are rewritten. What follows is the list our converter reports on the result screen rather than dropping in silence.

VRM 1.0 → 0.x (downgrade)

  • License terms 0.x cannot express: redistribution and modification terms have no 0.x field and survive only in the license URL, and the same goes for the political/religious and antisocial-usage answers.
  • Expressions with no 0.x preset — surprised, and any custom one — are kept as named custom groups, but apps will not trigger them automatically any more.
  • Capsule colliders become spheres, because VRM 0.x has no capsule shape.
  • Spring physics that varied along a chain collapses to one value per group: 0.x stores stiffness, drag and gravity per group, so the first joint's numbers become the group's.
  • Node constraints are a 1.0-only feature and are removed.

VRM 0.x → 1.0 (upgrade)

  • License fields have to be guessed: VRM 1.0 asks about political use, redistribution and modification, and VRM 0.x had no such fields — so the strictest answer is chosen (redistribution not allowed, modification prohibited) and reported, rather than handing out a licence the author never granted.
  • A 0.x commercialUssageName of "Allow" is ambiguous in 1.0, which splits commercial use into personal and corporate; it becomes personal-profit.
  • Expressions with no 1.0 preset become custom expressions — apps trigger presets automatically, custom ones only by name.
  • Look-at curves that were not linear are flattened, because VRM 1.0 has only linear range maps.
  • Branching spring groups are split: 0.x let one group cover a whole subtree, a 1.0 spring is a single chain, so each root-to-leaf path becomes its own spring with the same physics.

Why does my VRoid model not open in VSeeFace?

Because of the version, not the file. VRoid Studio 2.x writes VRM 1.0, and VSeeFace supports VRM 0.x only — so VSeeFace does not see a broken model, it sees no VRM data at all, since 1.0 stores it under a different extension name. Nothing about the mesh, textures or rig is wrong. Convert the export down to 0.x and the same file loads.

If you are not sure which version you have, open the file in the free VRM Viewer — it shows the version of any .vrm, along with its metadata and license. Then run it through the VRM version converter, which reads the file's own version and rewrites it to the other one, so there is no wrong direction to pick.

Why does my avatar face the wrong way after converting?

The two versions build the avatar facing opposite ways, and the file never says which: VRM 0.x models are authored facing −Z, VRM 1.0 models facing +Z, and every runtime works it out from the declared version instead. three-vrm is explicit about it — it turns the scene a half-turn about Y whenever the metadata version reads "0".

So a conversion that rewrites the extensions without turning the model produces a file whose declared version and actual orientation disagree, and the runtime then applies — or skips — that half-turn on the wrong file. The avatar stands with its back to the camera, and any retargeted animation is played onto a skeleton facing the other way: a walk cycle reads as walking backwards with the arms crossing through the body. A correct converter turns the model 180° about Y in both directions.

The trap underneath it is the documentation. VRM 0.x's own docs say the avatar faces +Z, because they are written in Unity's left-handed axes; glTF is right-handed, and the same direction there is −Z. Reading the 0.x wording as if it were glTF is how the error gets made in the first place. One more thing does not follow the model when it turns: spring-bone gravity is a direction in model space, not a node, so it has to be flipped by hand or the hair falls sideways.

FAQ

Which VRM version does VSeeFace need?
VRM 0.x. VSeeFace opens .vrm files directly but supports the VRM 0.x standard only — a VRM 1.0 file will not open, which is the single most common reason a model that looks fine everywhere else is refused. If your file is 1.0, VTubeMe's VRM version converter rewrites it to 0.x in the browser and the geometry is untouched. Open the VRM version converter →
What is the difference between VRM 0.x and VRM 1.0?
They are different glTF extensions, not two flavours of one file. VRM 0.x keeps everything in a single VRM extension; VRM 1.0 splits it into VRMC_vrm, VRMC_springBone and VRMC_materials_mtoon. Along the way it renames the thumb chain, rebinds expressions from meshes to nodes and rescales their weights from 0–100 to 0–1, moves look-at out of firstPerson, requires spring bones to be single chains, adds license fields 0.x has no room for — and flips the direction the avatar faces, from −Z to +Z.
Can VRM 1.0 be converted to 0.x?
Yes, and it is a rewrite of the extension data rather than a re-export: geometry, skins, textures and animations pass through untouched. Humanoid bones (including the thumb chain the versions name differently), expressions, look-at, spring bones with their colliders and MToon materials all carry over. What 0.x genuinely cannot express — the extra license fields, capsule colliders, per-joint spring physics, node constraints — is listed on the result instead of being dropped silently. VTubeMe's VRM version converter does it in the browser; Unity with UniVRM only goes the other way, 0.x up to 1.0. Convert a VRM between versions →
Does VRoid Studio export VRM 0.x?
VRoid Studio 2.x writes VRM 1.0. That is the mismatch behind almost every “my VRoid model will not open in VSeeFace” report: the file is fine, the version is wrong for the app. Converting the export down to 0.x makes it load.
Which VRM version does Desktop Mate use?
VRM 1.0. Desktop Mate's Custom Avatar Loader wants 1.0, while most models in circulation are 0.x — the opposite problem to VSeeFace, and the reason a version converter has to work in both directions.
Is VRM 1.0 backwards compatible with 0.x?
No. An app that reads one version does not see the other at all, because the data lives under a different extension name: a 0.x reader looks for VRM and a 1.0 file has VRMC_vrm instead. A file that declared both at once would also be refused, which is why a conversion has to remove every trace of the version it came from rather than leave it alongside.

Sources