VRCW-Recovery 1.4: Linux, a built-in sha ...

VRCW-Recovery 1.4: Linux, a built-in shader decompiler, and VR shaders that look right

Oct 22, 2026
142

VRCW-Recovery 1.4 is out. It now runs on Linux, decompiles shaders itself (much faster, with one less thing to download), and fixes a shader bug that a lot of you will have seen in VR without knowing what caused it.

As always: only recover worlds you own or are authorized to inspect.


VR shaders now render correctly in the right eye

Shaders often read from a list of values at a position they work out while running, for example "the matrix for the eye I'm drawing right now" or "the transform of the instance I'm drawing right now". The decompiler always replaced that position with the first entry. The shader still compiled and looked right on a flat screen, so none of the existing checks caught it. In practice this meant:

  • VR stereo: both eyes used the left eye's camera matrices. This was the stretching in the right eye.

  • GPU instancing: every instance in a batch was drawn with the first instance's position and properties. Instanced objects could stack on top of each other or all share one color.

  • Light probes and lightmaps for instanced objects: every instance used the first instance's values.

  • LightVolumes: the light volume loop only ever tested the first volume.

1.4 keeps the real index everywhere. Across the ten test worlds this touched thousands of shader functions (stereo matrices alone appeared in about 150 shader files). Every changed shader was compiled again in Unity to make sure nothing that worked before broke. Shaders that never did this kind of lookup come out byte for byte the same as in 1.3.

If you recovered a world with VR-facing custom shaders, instanced props or LightVolumes on 1.3, it is worth recovering it again on 1.4.


Linux support

VRCW-Recovery now runs natively on x86-64 Linux, window and command line, in both the full and free editions. The Linux builds are a single file each, just like on Windows: VRCW-Recovery-1.4.0 . No .NET install and no extra files beside it.

What you need on Linux:

  • Unity 2022.3.22f1 for Linux, installed through Unity Hub. VRCW finds it in Hub's default folder and in a custom install folder you set in Hub. Windows Build Support is not required.

  • On Arch based systems, install libxml2-legacy. The Unity editor needs libxml2.so.2 and won't start in batch mode without it.

  • ALCOM for the VRChat SDK package cache. It uses the same folder layout as VCC, so VRCW picks it up automatically.

  • X11 or XWayland for the window. Command-line recoveries and the normal Unity validation need no display at all.

  • noto-fonts-cjk if you use the Japanese or Chinese interface.

The app also fits into your desktop: it follows your light/dark theme setting, chooses its language from your locale, opens folders with your file manager, and uses your window manager's title bar.

Same results as Windows. I recovered the same world on Linux and on Windows and compared the reports. The shader, Udon, material and fallback counts all match. The Udon recovery report was identical in all 14,190 values.

One Windows-only feature: the shader render check (--shader-render-check). A VRChat world only ships compiled Direct3D 11 shaders, and the Linux editor draws with OpenGL, so it can't render the originals to compare against. On Linux the option is greyed out, and a recovery records the check as skipped with the reason. Everything else in validation still runs.


Shader decompilation is built in, and much faster

Before 1.4, the full edition downloaded a separate tool (USCSandbox) and started several copies of it. Each copy unpacked the whole world bundle again, so memory limited how many could run, and very large worlds could fail outright.

The decompiler is now part of VRCW-Recovery itself:

  • No download. USCSandbox is gone from Setup. Your Setup page now lists just four things: Unity, the VRChat SDK, AssetRipper and udon-decompiler.

  • It reuses work already done. The decompiler reads the shaders the extraction pass has already unpacked, so the bundle is never unpacked a second time.

  • Much faster. On my test world, the shader pass went from about 169 seconds to 7 seconds, and the whole recovery from 14.8 to 11.2 minutes. Shader results were identical.

  • Very large worlds work now. a 1.2 GB bundle used to spend over half an hour in this step and decompile 0 of 87 shaders. 1.4 decompiles all 87 in about 12 seconds.

  • Crashes stay contained. Decompiling still runs in a separate process. If one shader crashes or hangs it, every finished shader is kept, the rest carry on in a new process, and only the shader that caused it gets retried on its own.

  • Shader workers now means "how many shaders to decompile at once", and it no longer depends on your RAM or on the bundle size. Auto uses your processor count, up to 8.

I compared the new decompiler with the old one across 21 test worlds (1,546 shaders). Every shader the old tool could decompile comes out byte for byte the same.


Use the VRChat SDK you already have

1.3 required exactly VRChat SDK 3.10.4. If your package cache had 3.10.5, Setup showed the SDK as missing and made you download an older copy.

Now any Worlds + Base SDK from 3.5.0 onward counts, and the newest one in your cache is used. Get it only downloads when you have none, and then it fetches the latest stable release straight from VRChat's official package listing, checking each download's checksum.

Note: the recovery's Unity checks were tested end to end with 3.10.4. Much newer or older SDKs should work, but if VRChat changes something the checks depend on, please tell me.


UnityDataTools removed

UnityDataTools was an optional 34 MB download, it had no Linux build, and nothing actually used what it produced, because VRCW's own extraction already writes the same data. The one useful thing it added, the bundle's internal layout, is now written by the extraction pass to archive.json. This works on both platforms and survives a bundle that fails partway through unpacking.

You can delete the old tools/unitydatatools/ and tools/uscsandbox/ folders inside the app's data folder. 1.4 never uses them.


New option: Tool time limit

The Recover page has a new Tool time limit setting next to the Unity time limit. Before, a very large world could hit the fixed 30-minute limit during consolidation, and raising the Unity time limit didn't help, because that limit only covers Unity. Auto still means 30 minutes, with at least 3 seconds per MB of bundle for big worlds, and 0 means no limit. The limit now also applies to every tool the app runs, including the small Udon and version-check steps, so none of them can hang a run forever.


A fresh, consistent look

The window used to look right only on Windows 11. On Windows 10 and Linux, some icons showed up as stray letters, the font was whatever the system had, and the background could turn see-through.

  • The app now ships its own fonts: Inter for the interface and JetBrains Mono for the log and code in reports. It looks the same everywhere.

  • All icons come from the app's built-in icon font, so they never turn into broken characters.

  • Mica is still used on Windows 11. Elsewhere (Windows 10, Windows 11 with transparency effects off, and Linux) you get a proper light or dark background with a separate shade for the side panel, instead of a flat or transparent fill.


Recovery fixes

  • Rebuilt meshes with several parts. When VRCW rebuilds a mesh itself (a "fallback" mesh), parts that start partway through the vertex list now point at the right vertices. Before, some fallback meshes came out with scrambled triangles.

  • World names with brackets or quotes. A world named something like [JP] My World produced a ProjectSettings file Unity couldn't read. Names are now written safely.

  • Worlds with two scenes of the same name (in different folders) no longer overwrite each other. Each one gets its own scene and GUIDs.

  • Two different assets with the same name in different parts of a bundle no longer overwrite each other's fallback previews.

  • Bundles with a stripped Unity version. Some bundles report their Unity version as 0.0.0 inside each file. The shader decompiler used to take that literally and silently use old-Unity code paths. It now uses the version from the bundle header, and gives a clear error if that's stripped too.

  • Re-running with "Reuse staging" now matches previously dumped Udon programs to the scene again on every rebuild, instead of losing them when the dump came from an earlier run.

  • Changes to shader libraries that hold only .graphlit shaders are now noticed, so a reused run picks up a library you've changed.

  • Reports page: each installed package is listed once in the packages table (shader packages were showing up twice).

  • Lower memory use on long runs. Tool output goes straight to the step log on disk, and only the excerpt shown in reports is kept in memory.

  • Fewer "too many open files" failures on worlds with hundreds of Udon programs.


Reliability and safety

  • Settings can't get corrupted by a crash. Settings are now saved to a temporary file first and then swapped in, so a crash or power cut in the middle of a save keeps your previous settings. If settings.json is damaged anyway (for example by a bad hand edit), the app moves it aside as settings.damaged-.json and starts with defaults instead of failing to open. Empty values in an otherwise valid file fall back to their defaults.

  • Package listings can't write outside your project. Package names and versions from a repository listing must be plain names, and every install and download is checked to stay inside the project's Packages/ folder and the cache.

  • On Linux, two input files whose names differ only in letter case are treated as two different files, as they should be.


Get it from here free for members.
Virustotal for 1.4 Windows
Virustotal for 1.4 Linux

Gefällt dir dieser Beitrag?

Kaufe Kirin einen Kaffee

Mehr von Kirin

DatenschutzNutzungsbedingungenMelden