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.
| App | VRM 0.x | VRM 1.0 | Source / notes |
|---|---|---|---|
| VSeeFace | Yes | No | Opens .vrm directly and supports the VRM 0.x standard only — a VRM 1.0 file will not open. Vendor doc: vseeface.icu. |
| 3tene | Yes | No | Reads VRM 0.x only, the same constraint as VSeeFace. Stated on our VRM version converter page; no vendor doc is cited for it here. |
| VMagicMirror | Yes | Yes | Recent versions load both VRM 0.x and VRM 1.0. Vendor doc: malaybaku.github.io/VMagicMirror. |
| Desktop Mate | No | Yes | Its 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. |
| Warudo | Not verified | Not verified | Reads VRM natively — load the .vrm as a Character asset, no conversion step. Which versions it accepts is not stated in our sources. |
| VNyan | Not verified | Not verified | Loads standard VRM files directly. Which versions it accepts is not stated in our sources. Vendor page: suvidriel.itch.io/vnyan. |
| Animaze | Not verified | Not verified | Supports VRM import. Which versions it accepts is not stated in our sources. |
| Resonite | Not verified | Not verified | Imports VRM natively — drag the .vrm into a session, no Unity or SDK. Which versions it accepts is not stated in our sources. |
| VRChat | n/a — Unity SDK | n/a — Unity SDK | Does 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. |
| ChilloutVR | n/a — Unity SDK | n/a — Unity SDK | Does not load .vrm directly either — you import it into Unity and upload through the Creation Kit (CCK). |
| VTubeMe VRM Viewer | Yes | Yes | Opens 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.
| What | VRM 0.x | VRM 1.0 |
|---|---|---|
| glTF extension | One 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 direction | The 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 naming | leftThumbProximal, 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 / blendshapes | blendShapeMaster.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 bones | secondaryAnimation.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 direction | gravityDir 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-at | Lives 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 materials | A 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 fields | title, 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?
What is the difference between VRM 0.x and VRM 1.0?
Can VRM 1.0 be converted to 0.x?
Does VRoid Studio export VRM 0.x?
Which VRM version does Desktop Mate use?
Is VRM 1.0 backwards compatible with 0.x?
Convert between the versions
VRM 1.0 ↔ 0.x in the browser. Drop the file and its own version decides the direction.
Which version is my file?
The free VRM Viewer shows the version of any .vrm, plus its metadata, license and expressions.
What is VRM?
The avatar format itself — what a .vrm holds and why it is built on glTF.
Sources
- VRM specification (source repository) — VRM Consortium
- VRM documentation — vrm.dev
- VSeeFace official site and documentation — Emiliana
- VMagicMirror official site (download & docs) — malaybaku
- VNyan on itch.io (official download) — Suvidriel
- Creating your first avatar — VRChat