Contains executable files or external scripts. Ensure you trust the creator and apply your own security measures.
Personal Note
I recently learned that @MonsterShinkai is no longer with us. Although I did not have the chance to interact with him much, I deeply admired his work. He was one of those creators whose every new release I looked forward to, and his passing feels like a personal loss. I only wish I had reached out while I still had the chance.
This release is dedicated to you, my friend, @MonsterShinkai. Rest in peace.
From now on, I plan to dedicate each of my releases to one or more of the creators whose work has inspired me. Creating for a community can often feel like a thankless effort, and I want to do my small part to recognize the people who have given us so much.
Test Hardware
- CPU — Intel Core i7-13700K
- GPU — NVIDIA RTX 4080
- RAM — 64 GB
- Storage — Crucial P3 Plus 4 TB NVMe SSD
- VAR library — 3,713 physical VAR archives totaling 230.01 GiB; 3,591 packages accepted by VaM
- LeanCore benchmark worker count — 8
Your mileage may vary.
VaM LeanCore 0.7.0 | For The Impatient
On the tested large VAR library, LeanCore reduced cache-cleared VaM startup from 2 minutes 43 seconds to 25 seconds. That is 138 seconds saved and a 6.52x faster startup. The end!!
VaM LeanCore 0.7.0 | For The Patient
LeanCore is an additive BepInEx plugin for VaM 1.x that targets two measured scaling problems on large installations:
- VaM's slow serial preparation of package JSON cache files.
- Thousands of unused package morphs remaining in every Person's active/hot morph list.
LeanCore keeps the full VAR library visible to VaM. It does not hide packages, modify VAR files, replace Assembly-CSharp.dll, or change saved package preload preferences. The preload override exists only in memory while LeanCore is enabled.
Main features
- Parallel package-cache preparation — intercepts MVR.FileManagement.FileManager.SyncJSONCache() and replaces its serial all-package loop with concurrent generation of VaM-compatible cache files. VaM's original VarPackage.SyncJSONCache() remains responsible for per-package validation, parsing, and fallback when content is requested.
- Persistent package index — validates unchanged VARs by normalized path, size, timestamp, and game-assembly identity, then hydrates their catalog information from a binary index.
- Demand-loaded morph activation — keeps unused package morphs out of the active/hot morph list while preserving UID/name lookup and automatic activation when a scene, appearance, animation, favorite, or plugin requests them.
- Favorite morph support — saved favorite package morphs remain visible and usable.
- Safe fallback paths — changed, removed, corrupt, or non-indexable packages rebuild or fall back to VaM's original handling.
- Configurable worker count — choose how much CPU/storage concurrency LeanCore may use during package-cache generation.
- Master kill switch — Enabled=false restores VaM's original paths after restart.
- Launcher independent — no cache-builder command or custom batch file is required.
Measured performance
These measurements come from one populated installation with 3,591 accepted packages. Results will vary with package count, CPU, storage, antivirus, other plugins, and Windows filesystem-cache warmth. The startup benefit may scale with package count, but this has not yet been measured on libraries larger than 3,713 physical VAR archives. Please test and share your results.
Test-scope disclaimer: The populated test repository contained 3,713 physical VAR archives totaling 230.01 GiB. After VaM resolved duplicates, ignored archives, and package identity, it accepted 3,591 packages for LeanCore's indexed/cache-preparation path. The timings below describe that specific library and hardware; they are not guaranteed results for every installation.
Controlled cache-cleared, warm-disk startup
| Configuration | Responsive startup | Result |
|---|---|---|
| LeanCore disabled — original VaM path | 163 seconds | Baseline |
| LeanCore enabled, 8 workers | 25 seconds | 138 seconds saved; 84.7% lower; 6.52x faster |
Reboot-cold, cache-cleared LeanCore run
- Responsive menu: approximately 33 seconds.
- All 3,591 package-cache pairs built in 17.40 seconds with zero failures.
- Three-Person scene structure: approximately 45 seconds.
- All unrelated VaM asset loading completed at approximately 120 seconds.
Immediate warm-disk LeanCore run
- All 3,591 package-cache pairs built in 11.00 seconds with zero failures.
- The scene demand-parsed 2,848 package records in 3.19 seconds.
Active/hot morph reduction
| Scene | Original | LeanCore | Reduction |
|---|---|---|---|
| One Person | 8,155 | 1,576 | 6,579 fewer — 80.7% |
| Three People | 19,607 | 4,005 | 15,602 fewer — 79.6% |
The three-Person morph-count tests used @whatsupbrody's Victoria Charity scene.
Important performance boundary
LeanCore has not demonstrated a material FPS improvement or materially faster Person/scene loading. In the controlled comparison, the three-Person structural scene time was approximately 35 seconds with LeanCore disabled and 34 seconds enabled. Complete asset time was approximately 80 versus 82 seconds. Those differences are timing noise.
No FPS improvement is claimed. Community measurements on different CPUs and larger libraries are welcome.
The proven gains are package-cache/startup preparation and a much smaller active morph set. Person geometry, skin, physics, hair, clothing, textures, shaders, and asset-bundle initialization remain VaM work.
Fresh-install validation
LeanCore was also installed by drag and drop into a fresh VaM installation using BepInEx 5.4.23.2 Windows x64. On the validated indexed start:
- LeanCore loaded successfully.
- 822/822 packages hit the persistent index.
- Index hydration completed in 119.6 ms.
- All 822 existing package-cache pairs validated in 33.8 ms.
- Zero misses, bypasses, builds, or failures.
- The complete VaM Hub package-update list remained visible with LeanCore enabled.
Requirements
- Windows x64.
- VaM 1.x.
- BepInEx 5.4.23.2 Windows x64, or a compatible BepInEx 5 build.
Do not use a BepInEx 6 prerelease for this BepInEx 5 plugin.
Installing BepInEx
Skip this section if BepInEx 5 is already working in your VaM installation.
- Close VaM.
- Download BepInEx 5.4.23.2 from the official release page:
Release BepInEx 5.4.23.2 · BepInEx/BepInEx
Doorstop has been upgraded from v3.4 to v4.3, bringing some new features for developers. It's for the most part a drop-in replacement. Doorstop 4 debugging works on all platforms and IDEs that sup...github.com
- Download BepInEx_win_x64_5.4.23.2.zip.
- Extract the contents of that ZIP directly into the folder containing VaM.exe. Copy the BepInEx folder, winhttp.dll, doorstop_config.ini, .doorstop_version, and the included changelog. Do not copy the enclosing ZIP-name folder.
- Start VaM once, wait for the main menu, and close VaM.
- Confirm that BepInEx/config and BepInEx/LogOutput.log were created.
Installing LeanCore
- Close VaM.
- Extract VaMLeanCore-0.7.0.zip directly into the folder containing VaM.exe.
- Confirm that BepInEx/plugins/VaMLeanCore/VaMLeanCore.dll exists.
- Start VaM normally through Desktop, OpenVR, Virtual Desktop, or your usual launcher.
- To verify loading, open BepInEx/LogOutput.log and look for: Loading [VaM LeanCore 0.7.0]
No custom launcher, cache command, or session plugin is required.
Configuration
Configuration file:
Code:
BepInEx/config/com.wanderer.vam.leancore.cfg
Public defaults:
INI:
[CacheBuilder]
Threads = 4
[General]
Enabled = true
Diagnostics = false
[Compatibility]
PreloadPackageWhitelist =
- Threads = 4 — recommended general default.
- Threads = 8 — more aggressive option for a modern CPU and fast storage.
- Threads = 1 or 2 — lowers temporary CPU and storage pressure.
- Threads = 0 — automatically uses half the logical processors, clamped to 1–64.
- Enabled = false — complete compatibility kill switch. Restart VaM after changing it.
- Diagnostics = true — logs morph-bank counts every ten seconds. Normally leave this disabled.
- PreloadPackageWhitelist — comma- or semicolon-separated exact package-group names that must retain VaM's original morph-preload behavior.
Restart VaM after changing the configuration.
First launch and VaM Clear Cache
If Cache/PackageJSON is empty, LeanCore prepares package-cache files during startup. CPU and disk usage will temporarily be higher. Later starts validate existing cache pairs quickly.
VaM's Clear Cache also removes unrelated texture and asset caches. LeanCore rebuilds package JSON at the next startup, but textures, clothing, hair, and other assets can continue loading after the scene structure is ready.
Compatibility tested
- Desktop and normal VR launch workflows.
- Saved scenes and appearances.
- Package morph search and application.
- Favorite package morph visibility.
- VAR-based hair and clothing.
- Package Browser.
- Morph-control and animation plugins exercised during the compatibility soak.
- Package refresh and complete Hub package-update listing.
- Master kill switch.
- Fresh VaM drag-and-drop installation.
Uninstallation
Close VaM and remove:
Code:
BepInEx/plugins/VaMLeanCore/VaMLeanCore.dll
Optional derived files that can also be removed:
Code:
BepInEx/config/com.wanderer.vam.leancore.cfg
BepInEx/cache/VaMLeanCore
Do not remove BepInEx if another installed plugin uses it.
Troubleshooting
- Confirm BepInEx/LogOutput.log contains Loading [VaM LeanCore 0.7.0].
- Confirm the DLL is not inside an extra nested directory.
- Temporarily set Enabled=false, restart VaM, and compare behavior.
- Restore Threads=4 if a higher value causes excessive CPU or storage activity.
- If BepInEx itself does not initialize, confirm that winhttp.dll, doorstop_config.ini, and the BepInEx folder are beside VaM.exe.
Reporting an issue
Please include:
Code:
LeanCore version:
VaM package/VAR count:
CacheBuilder Threads:
Desktop or VR launcher:
Was VaM Clear Cache used immediately before the problem?:
What scene or action triggered it?:
Does Enabled=false avoid the problem?:
Relevant BepInEx/LogOutput.log attached:
Download integrity
Code:
VaMLeanCore.dll SHA-256:
0498ED1BB3ECED51A739D7BC9550618B2385AB7CD1136181081CBA515C3474F8
VaMLeanCore-0.7.0.zip SHA-256:
F72BEFE517512FB58B50321E8BCAEAF1218EC5403F3AB6F26BF7949CB8A8AB5A
License and acknowledgements
VaM LeanCore is released under the MIT License. Copyright 2026 Wanderer.
LeanCore uses BepInEx and Harmony/HarmonyX as its plugin and runtime-patching foundation. These dependencies are not bundled in the LeanCore ZIP.
Contains executable files or external scripts. Ensure you trust the creator and apply your own security measures.