modwright 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +212 -0
  3. package/assets/claude/agents/mw-explore.md +46 -0
  4. package/assets/claude/agents/mw-fixture.md +33 -0
  5. package/assets/claude/agents/mw-rule-author.md +51 -0
  6. package/assets/claude/agents/mw-scaffold-author.md +48 -0
  7. package/assets/claude/skills/mw-author.md +59 -0
  8. package/assets/claude/skills/mw-new-item.md +51 -0
  9. package/assets/claude/skills/mw-new-spell.md +50 -0
  10. package/assets/claude/skills/mw-scaffold.md +59 -0
  11. package/assets/claude/skills/mw-ship.md +57 -0
  12. package/assets/claude/skills/mw-validate.md +51 -0
  13. package/assets/claude/skills/mw-verify.md +59 -0
  14. package/assets/nivalisnights/extract_resources.py +177 -0
  15. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
  16. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
  17. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
  18. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
  19. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
  20. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
  21. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
  22. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
  23. package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
  24. package/bridges/bg3-se/README.md +99 -0
  25. package/bridges/bg3-se/bridge.json +68 -0
  26. package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
  27. package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
  28. package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
  29. package/bridges/cp2077-cet/README.md +165 -0
  30. package/bridges/cp2077-cet/bridge.json +53 -0
  31. package/dist/core/bridge/arm.js +175 -0
  32. package/dist/core/bridge/cet-console.js +26 -0
  33. package/dist/core/bridge/cet-log.js +362 -0
  34. package/dist/core/bridge/index.js +11 -0
  35. package/dist/core/bridge/locate.js +35 -0
  36. package/dist/core/bridge/paths.js +34 -0
  37. package/dist/core/bridge/pending.js +89 -0
  38. package/dist/core/bridge/poll.js +155 -0
  39. package/dist/core/bridge/stage.js +100 -0
  40. package/dist/core/bridge/status.js +97 -0
  41. package/dist/core/bridge/types.js +145 -0
  42. package/dist/core/bridge/validate.js +107 -0
  43. package/dist/core/build/index.js +6 -0
  44. package/dist/core/build/manifest.js +47 -0
  45. package/dist/core/build/paths.js +32 -0
  46. package/dist/core/build/run.js +342 -0
  47. package/dist/core/build/stage.js +265 -0
  48. package/dist/core/build/steps/bg3.js +129 -0
  49. package/dist/core/build/steps/core.js +195 -0
  50. package/dist/core/build/steps/cyberpunk.js +95 -0
  51. package/dist/core/build/steps/listing.js +35 -0
  52. package/dist/core/build/types.js +13 -0
  53. package/dist/core/build/zip.js +148 -0
  54. package/dist/core/compat/check.js +113 -0
  55. package/dist/core/compat/pe.js +220 -0
  56. package/dist/core/compat/types.js +1 -0
  57. package/dist/core/compat/version.js +70 -0
  58. package/dist/core/deploy/guards.js +292 -0
  59. package/dist/core/deploy/index.js +5 -0
  60. package/dist/core/deploy/plan.js +696 -0
  61. package/dist/core/deploy/reload-apply.js +361 -0
  62. package/dist/core/deploy/reload.js +358 -0
  63. package/dist/core/deploy/sources.js +169 -0
  64. package/dist/core/deploy/types.js +1 -0
  65. package/dist/core/epic.js +54 -0
  66. package/dist/core/fsutil.js +191 -0
  67. package/dist/core/home.js +70 -0
  68. package/dist/core/knowledge/facts.js +229 -0
  69. package/dist/core/knowledge/index.js +4 -0
  70. package/dist/core/knowledge/search.js +112 -0
  71. package/dist/core/knowledge/store.js +123 -0
  72. package/dist/core/knowledge/types.js +1 -0
  73. package/dist/core/ledger/check.js +42 -0
  74. package/dist/core/ledger/hooks.js +80 -0
  75. package/dist/core/ledger/index.js +7 -0
  76. package/dist/core/ledger/query.js +17 -0
  77. package/dist/core/ledger/record.js +84 -0
  78. package/dist/core/ledger/status.js +53 -0
  79. package/dist/core/ledger/store.js +98 -0
  80. package/dist/core/ledger/types.js +108 -0
  81. package/dist/core/logs/index.js +4 -0
  82. package/dist/core/logs/registry.js +50 -0
  83. package/dist/core/logs/scan.js +195 -0
  84. package/dist/core/logs/triage.js +160 -0
  85. package/dist/core/logs/types.js +1 -0
  86. package/dist/core/lsx.js +10 -0
  87. package/dist/core/lz4.js +66 -0
  88. package/dist/core/mods.js +229 -0
  89. package/dist/core/process.js +49 -0
  90. package/dist/core/project/build-steps.js +83 -0
  91. package/dist/core/project/describe.js +74 -0
  92. package/dist/core/project/index.js +5 -0
  93. package/dist/core/project/load.js +146 -0
  94. package/dist/core/project/schema.js +264 -0
  95. package/dist/core/project/types.js +3 -0
  96. package/dist/core/prompts.js +72 -0
  97. package/dist/core/registry.js +35 -0
  98. package/dist/core/safety/backup.js +206 -0
  99. package/dist/core/safety/execute.js +188 -0
  100. package/dist/core/safety/index.js +5 -0
  101. package/dist/core/safety/plan.js +122 -0
  102. package/dist/core/safety/restore.js +172 -0
  103. package/dist/core/safety/types.js +1 -0
  104. package/dist/core/scaffold/bootstrap.js +7 -0
  105. package/dist/core/scaffold/catalog.js +28 -0
  106. package/dist/core/scaffold/claude-assets.js +271 -0
  107. package/dist/core/scaffold/collisions.js +64 -0
  108. package/dist/core/scaffold/emit.js +356 -0
  109. package/dist/core/scaffold/engine.js +680 -0
  110. package/dist/core/scaffold/ids.js +78 -0
  111. package/dist/core/scaffold/index.js +10 -0
  112. package/dist/core/scaffold/jsonpath.js +121 -0
  113. package/dist/core/scaffold/load.js +81 -0
  114. package/dist/core/scaffold/render.js +85 -0
  115. package/dist/core/scaffold/sequence.js +396 -0
  116. package/dist/core/scaffold/types.js +309 -0
  117. package/dist/core/steam.js +63 -0
  118. package/dist/core/surfaceutil.js +36 -0
  119. package/dist/core/testplan/check.js +67 -0
  120. package/dist/core/testplan/index.js +5 -0
  121. package/dist/core/testplan/load.js +100 -0
  122. package/dist/core/testplan/registry.js +317 -0
  123. package/dist/core/testplan/run.js +389 -0
  124. package/dist/core/testplan/types.js +82 -0
  125. package/dist/core/text/converters/bg3.js +50 -0
  126. package/dist/core/text/converters/cyberpunk.js +36 -0
  127. package/dist/core/text/converters/index.js +261 -0
  128. package/dist/core/text/diff/cr2w.js +180 -0
  129. package/dist/core/text/diff/index.js +16 -0
  130. package/dist/core/text/diff/loca.js +43 -0
  131. package/dist/core/text/diff/lsx.js +126 -0
  132. package/dist/core/text/handles.js +86 -0
  133. package/dist/core/text/index.js +6 -0
  134. package/dist/core/text/json.js +46 -0
  135. package/dist/core/text/templates/cache.js +71 -0
  136. package/dist/core/text/templates/index.js +3 -0
  137. package/dist/core/text/templates/library.js +245 -0
  138. package/dist/core/text/templates/types.js +51 -0
  139. package/dist/core/text/toolchain.js +16 -0
  140. package/dist/core/text/types.js +1 -0
  141. package/dist/core/text/validate.js +149 -0
  142. package/dist/core/text/xml.js +58 -0
  143. package/dist/core/toolchain/datafetch.js +151 -0
  144. package/dist/core/toolchain/env.js +63 -0
  145. package/dist/core/toolchain/features.js +170 -0
  146. package/dist/core/toolchain/index.js +8 -0
  147. package/dist/core/toolchain/install.js +191 -0
  148. package/dist/core/toolchain/locate.js +275 -0
  149. package/dist/core/toolchain/remember.js +84 -0
  150. package/dist/core/toolchain/run.js +318 -0
  151. package/dist/core/toolchain/specs.js +351 -0
  152. package/dist/core/toolchain/types.js +1 -0
  153. package/dist/core/types.js +1 -0
  154. package/dist/core/userconfig.js +66 -0
  155. package/dist/core/validate/context.js +139 -0
  156. package/dist/core/validate/index.js +5 -0
  157. package/dist/core/validate/registry.js +58 -0
  158. package/dist/core/validate/run.js +131 -0
  159. package/dist/core/validate/suppressions.js +91 -0
  160. package/dist/core/validate/types.js +2 -0
  161. package/dist/core/yamledit.js +51 -0
  162. package/dist/index.js +389 -0
  163. package/dist/server.js +1914 -0
  164. package/dist/surfaces/baldursgate3/compat.js +164 -0
  165. package/dist/surfaces/baldursgate3/identity.js +110 -0
  166. package/dist/surfaces/baldursgate3/index/build.js +331 -0
  167. package/dist/surfaces/baldursgate3/index/index.js +17 -0
  168. package/dist/surfaces/baldursgate3/index/info.js +40 -0
  169. package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
  170. package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
  171. package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
  172. package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
  173. package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
  174. package/dist/surfaces/baldursgate3/index/queries.js +327 -0
  175. package/dist/surfaces/baldursgate3/index/schema.js +62 -0
  176. package/dist/surfaces/baldursgate3/index.js +3 -0
  177. package/dist/surfaces/baldursgate3/logs.js +278 -0
  178. package/dist/surfaces/baldursgate3/modsettings.js +115 -0
  179. package/dist/surfaces/baldursgate3/pak.js +153 -0
  180. package/dist/surfaces/baldursgate3/settings.js +49 -0
  181. package/dist/surfaces/baldursgate3/surface.js +232 -0
  182. package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
  183. package/dist/surfaces/baldursgate3/validators/files.js +476 -0
  184. package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
  185. package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
  186. package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
  187. package/dist/surfaces/baldursgate3/validators/story.js +790 -0
  188. package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
  189. package/dist/surfaces/cyberpunk2077/compat.js +223 -0
  190. package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
  191. package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
  192. package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
  193. package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
  194. package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
  195. package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
  196. package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
  197. package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
  198. package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
  199. package/dist/surfaces/cyberpunk2077/index.js +3 -0
  200. package/dist/surfaces/cyberpunk2077/logs.js +742 -0
  201. package/dist/surfaces/cyberpunk2077/paths.js +12 -0
  202. package/dist/surfaces/cyberpunk2077/surface.js +218 -0
  203. package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
  204. package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
  205. package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
  206. package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
  207. package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
  208. package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
  209. package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
  210. package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
  211. package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
  212. package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
  213. package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
  214. package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
  215. package/dist/surfaces/eldenring/binders.js +111 -0
  216. package/dist/surfaces/eldenring/compat.js +166 -0
  217. package/dist/surfaces/eldenring/dcx.js +49 -0
  218. package/dist/surfaces/eldenring/index.js +13 -0
  219. package/dist/surfaces/eldenring/loaders.js +132 -0
  220. package/dist/surfaces/eldenring/logs.js +67 -0
  221. package/dist/surfaces/eldenring/paramdef.js +256 -0
  222. package/dist/surfaces/eldenring/params.js +129 -0
  223. package/dist/surfaces/eldenring/surface.js +121 -0
  224. package/dist/surfaces/eldenring/tools.js +52 -0
  225. package/dist/surfaces/eldenring/validators/binders.js +193 -0
  226. package/dist/surfaces/eldenring/validators/packages.js +159 -0
  227. package/dist/surfaces/eldenring/validators/params.js +334 -0
  228. package/dist/surfaces/eldenring/validators/profiles.js +287 -0
  229. package/dist/surfaces/index.js +34 -0
  230. package/dist/surfaces/nivalisnights/compat.js +229 -0
  231. package/dist/surfaces/nivalisnights/index/build.js +310 -0
  232. package/dist/surfaces/nivalisnights/index/index.js +5 -0
  233. package/dist/surfaces/nivalisnights/index/queries.js +231 -0
  234. package/dist/surfaces/nivalisnights/index.js +4 -0
  235. package/dist/surfaces/nivalisnights/logs.js +473 -0
  236. package/dist/surfaces/nivalisnights/surface.js +195 -0
  237. package/dist/surfaces/skyrimse/archives.js +229 -0
  238. package/dist/surfaces/skyrimse/compat.js +163 -0
  239. package/dist/surfaces/skyrimse/index.js +12 -0
  240. package/dist/surfaces/skyrimse/loadorder.js +174 -0
  241. package/dist/surfaces/skyrimse/logs.js +241 -0
  242. package/dist/surfaces/skyrimse/plugins.js +149 -0
  243. package/dist/surfaces/skyrimse/records.js +94 -0
  244. package/dist/surfaces/skyrimse/surface.js +240 -0
  245. package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
  246. package/dist/surfaces/skyrimse/validators/archives.js +110 -0
  247. package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
  248. package/dist/surfaces/skyrimse/validators/records.js +117 -0
  249. package/dist/surfaces/stardewvalley/compat.js +190 -0
  250. package/dist/surfaces/stardewvalley/config.js +42 -0
  251. package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
  252. package/dist/surfaces/stardewvalley/index/index.js +229 -0
  253. package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
  254. package/dist/surfaces/stardewvalley/index.js +12 -0
  255. package/dist/surfaces/stardewvalley/logs.js +307 -0
  256. package/dist/surfaces/stardewvalley/mods.js +182 -0
  257. package/dist/surfaces/stardewvalley/surface.js +244 -0
  258. package/dist/surfaces/stardewvalley/validators/content.js +321 -0
  259. package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
  260. package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
  261. package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
  262. package/dist/surfaces/subnautica2/compat.js +138 -0
  263. package/dist/surfaces/subnautica2/index.js +5 -0
  264. package/dist/surfaces/subnautica2/logs.js +129 -0
  265. package/dist/surfaces/subnautica2/paks.js +173 -0
  266. package/dist/surfaces/subnautica2/surface.js +151 -0
  267. package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
  268. package/dist/surfaces/valheim/compat.js +171 -0
  269. package/dist/surfaces/valheim/index/index.js +301 -0
  270. package/dist/surfaces/valheim/index/tables.js +103 -0
  271. package/dist/surfaces/valheim/index.js +11 -0
  272. package/dist/surfaces/valheim/logs.js +197 -0
  273. package/dist/surfaces/valheim/packaging.js +131 -0
  274. package/dist/surfaces/valheim/plugins.js +270 -0
  275. package/dist/surfaces/valheim/references.js +121 -0
  276. package/dist/surfaces/valheim/surface.js +223 -0
  277. package/dist/surfaces/valheim/validators/packaging.js +218 -0
  278. package/dist/surfaces/valheim/validators/plugins.js +287 -0
  279. package/dist/surfaces/valheim/validators/references.js +169 -0
  280. package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
  281. package/knowledge/baldursgate3/audio.voice.yaml +182 -0
  282. package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
  283. package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
  284. package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
  285. package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
  286. package/knowledge/baldursgate3/crash.causes.yaml +90 -0
  287. package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
  288. package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
  289. package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
  290. package/knowledge/baldursgate3/dialogue.yaml +122 -0
  291. package/knowledge/baldursgate3/feats.classes.yaml +164 -0
  292. package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
  293. package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
  294. package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
  295. package/knowledge/baldursgate3/journal.quests.yaml +214 -0
  296. package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
  297. package/knowledge/baldursgate3/localization.handles.yaml +92 -0
  298. package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
  299. package/knowledge/baldursgate3/origins.companions.yaml +144 -0
  300. package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
  301. package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
  302. package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
  303. package/knowledge/baldursgate3/process.launch.yaml +34 -0
  304. package/knowledge/baldursgate3/progressions.yaml +92 -0
  305. package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
  306. package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
  307. package/knowledge/baldursgate3/races.progression.yaml +228 -0
  308. package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
  309. package/knowledge/baldursgate3/scriptextender.yaml +252 -0
  310. package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
  311. package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
  312. package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
  313. package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
  314. package/knowledge/baldursgate3/stats.spells.yaml +293 -0
  315. package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
  316. package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
  317. package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
  318. package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
  319. package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
  320. package/knowledge/baldursgate3/ui.icons.yaml +412 -0
  321. package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
  322. package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
  323. package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
  324. package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
  325. package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
  326. package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
  327. package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
  328. package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
  329. package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
  330. package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
  331. package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
  332. package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
  333. package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
  334. package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
  335. package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
  336. package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
  337. package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
  338. package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
  339. package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
  340. package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
  341. package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
  342. package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
  343. package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
  344. package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
  345. package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
  346. package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
  347. package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
  348. package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
  349. package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
  350. package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
  351. package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
  352. package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
  353. package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
  354. package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
  355. package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
  356. package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
  357. package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
  358. package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
  359. package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
  360. package/knowledge/cyberpunk2077/player.control.yaml +918 -0
  361. package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
  362. package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
  363. package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
  364. package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
  365. package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
  366. package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
  367. package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
  368. package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
  369. package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
  370. package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
  371. package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
  372. package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
  373. package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
  374. package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
  375. package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
  376. package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
  377. package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
  378. package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
  379. package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
  380. package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
  381. package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
  382. package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
  383. package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
  384. package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
  385. package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
  386. package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
  387. package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
  388. package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
  389. package/knowledge/eldenring/formats.binders.yaml +237 -0
  390. package/knowledge/eldenring/launcher.me3.yaml +230 -0
  391. package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
  392. package/knowledge/eldenring/params.paramdef.yaml +149 -0
  393. package/knowledge/eldenring/params.regulation.yaml +142 -0
  394. package/knowledge/eldenring/saves.online.yaml +118 -0
  395. package/knowledge/eldenring/toolchain.cli.yaml +256 -0
  396. package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
  397. package/knowledge/skyrimse/archives.bsa.yaml +212 -0
  398. package/knowledge/skyrimse/install.detection.yaml +41 -0
  399. package/knowledge/skyrimse/loadorder.files.yaml +242 -0
  400. package/knowledge/skyrimse/plugins.esl.yaml +189 -0
  401. package/knowledge/skyrimse/plugins.format.yaml +224 -0
  402. package/knowledge/skyrimse/skse.runtime.yaml +283 -0
  403. package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
  404. package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
  405. package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
  406. package/knowledge/stardewvalley/game.versions.yaml +202 -0
  407. package/knowledge/stardewvalley/install.layout.yaml +277 -0
  408. package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
  409. package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
  410. package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
  411. package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
  412. package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
  413. package/knowledge/subnautica2/game.build.yaml +331 -0
  414. package/knowledge/subnautica2/modding.state.yaml +210 -0
  415. package/knowledge/subnautica2/ue5.containers.yaml +72 -0
  416. package/knowledge/subnautica2/ue5.paks.yaml +203 -0
  417. package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
  418. package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
  419. package/knowledge/valheim/bepinex.loader.yaml +247 -0
  420. package/knowledge/valheim/bepinex.plugins.yaml +251 -0
  421. package/knowledge/valheim/game.versions.yaml +321 -0
  422. package/knowledge/valheim/install.layout.yaml +216 -0
  423. package/knowledge/valheim/jotunn.library.yaml +334 -0
  424. package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
  425. package/knowledge/valheim/toolchain.build.yaml +111 -0
  426. package/package.json +29 -0
  427. package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
  428. package/scaffolds/baldursgate3/new-item.yaml +264 -0
  429. package/scaffolds/baldursgate3/new-mod.yaml +174 -0
  430. package/scaffolds/baldursgate3/new-passive.yaml +100 -0
  431. package/scaffolds/baldursgate3/new-project.yaml +118 -0
  432. package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
  433. package/scaffolds/baldursgate3/new-spell.yaml +102 -0
  434. package/scaffolds/baldursgate3/new-status.yaml +119 -0
  435. package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
  436. package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
  437. package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
  438. package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
  439. package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
  440. package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
  441. package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
  442. package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
  443. package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
  444. package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
  445. package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
  446. package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
  447. package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
  448. package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
  449. package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
  450. package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
  451. package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
  452. package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
  453. package/scaffolds/stardewvalley/new-project.yaml +184 -0
  454. package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
  455. package/scripts/mw-tool.mjs +184 -0
@@ -0,0 +1,216 @@
1
+ game: valheim
2
+ topic: install.layout
3
+ title: Valheim install detection, folder layout, and the dedicated server as a second install kind
4
+ facts:
5
+ - id: valheim.install.layout.steam-app-ids
6
+ claim: Valheim is Steam app `892970` and the Valheim dedicated server is a separate Steam app,
7
+ `896660`; Thunderstore's ecosystem schema lists both under the same `valheim` community, plus
8
+ an Xbox Game Pass distribution identified as `CoffeeStainStudios.Valheim`.
9
+ status: community
10
+ source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
11
+ the `distributions` list
12
+ tags:
13
+ - install
14
+ - steam
15
+ - appid
16
+ - dedicated-server
17
+ - xbox
18
+ - detect
19
+ detail: A ModWright `detect` must therefore return up to three install kinds, not one. The client
20
+ and the server are different apps with different folder names, different data folders and
21
+ different executables, but the same BepInEx install procedure.
22
+ - id: valheim.install.layout.steam-folder-names
23
+ claim: The Steam `steamapps/common` folder is `Valheim` for the client and `Valheim dedicated
24
+ server` for the server (note the lowercase words); the corresponding Unity data folders are
25
+ `valheim_Data` and `valheim_server_Data`.
26
+ status: community
27
+ source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
28
+ `steamFolderName` and `dataFolderName` on both r2modman entries
29
+ tags:
30
+ - install
31
+ - steam
32
+ - folder-name
33
+ - detect
34
+ - dedicated-server
35
+ detail: '`findInSteam(["Valheim", "Valheim dedicated server"])` covers both in one call, and the two
36
+ are distinguished after the fact by which data folder exists.'
37
+ - id: valheim.install.layout.executable-names
38
+ claim: The client executables are `valheim.exe` (Windows) and `valheim.x86_64` (Linux); the
39
+ dedicated server's are `valheim_server.exe` and `valheim_server.x86_64`.
40
+ status: community
41
+ source: https://github.com/thunderstore-io/ecosystem-schema/blob/main/games/data/generated/valheim.yml,
42
+ the `exeNames` lists on both r2modman entries
43
+ tags:
44
+ - install
45
+ - executable
46
+ - processname
47
+ - dedicated-server
48
+ detail: "`GameSurface.processNames` should carry both Windows names, because ModWright's game-exit
49
+ wait in `core/deploy` must recognise a running dedicated server as much as a running client."
50
+ - id: valheim.install.layout.msbuild-install-resolution-order
51
+ claim: "The Valheim-Modding org's shared `Paths.props` resolves the install in this order on
52
+ Windows: the `VALHEIM_INSTALL` property/environment variable if it points at an existing
53
+ directory, then the registry value `InstallLocation` under
54
+ `HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App 892970`, then
55
+ `<SteamPath>\\steamapps\\common\\Valheim` where `SteamPath` comes from
56
+ `HKCU\\SOFTWARE\\Valve\\Steam`, then `C:\\Program Files\\Steam\\steamapps\\common\\Valheim`,
57
+ then `C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim`."
58
+ status: community
59
+ source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the Windows_NT
60
+ `<When>` block
61
+ tags:
62
+ - install
63
+ - detect
64
+ - registry
65
+ - msbuild
66
+ - valheim-install
67
+ - steam
68
+ detail: Two things ModWright can reuse directly. The `Steam App 892970` uninstall key is a per-app
69
+ install path Steam itself writes, so it finds an install in a library folder that
70
+ `libraryfolders.vdf` parsing might miss. And `VALHEIM_INSTALL` is the variable every Valheim
71
+ plugin project already sets, so a Valheim surface should honour it alongside its own
72
+ `MODWRIGHT_VALHEIM_ROOT`.
73
+ - id: valheim.install.layout.msbuild-bepinex-path-default
74
+ claim: "`Paths.props` derives `BEPINEX_PATH` as `$(VALHEIM_INSTALL)\\BepInEx` whenever
75
+ `BEPINEX_PATH` is unset, i.e. the convention is that BepInEx is installed into the game
76
+ directory itself rather than beside it."
77
+ status: community
78
+ source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the final
79
+ `<PropertyGroup Condition="$(BEPINEX_PATH)==''...">`
80
+ tags:
81
+ - install
82
+ - bepinex
83
+ - path
84
+ - msbuild
85
+ - id: valheim.install.layout.linux-mac-install-paths
86
+ claim: On non-Windows, `Paths.props` defaults `VALHEIM_INSTALL` to
87
+ `$(HOME)/.steam/steam/steamapps/common/Valheim` and then `$(HOME)/Library/Application
88
+ Support/Steam/steamapps/common/Valheim/Contents/MacOS`.
89
+ status: community
90
+ source: https://github.com/Valheim-Modding/CommonPackages/blob/master/Paths.props, the Unix/OSX
91
+ `<When>` block
92
+ tags:
93
+ - install
94
+ - linux
95
+ - macos
96
+ - path
97
+ detail: The macOS path ends in `Contents/MacOS`, a bundle-internal directory — a surface that
98
+ appends `valheim_Data` to a bare app-bundle path on macOS will miss.
99
+ - id: valheim.install.layout.assemblies-under-managed
100
+ claim: Plugin projects reference the game's managed assemblies from `valheim_Data\Managed\` —
101
+ `UnityEngine.dll` directly, and `assembly_valheim` from a
102
+ `valheim_Data\Managed\publicized_assemblies\` subfolder produced locally by a publicizer,
103
+ never shipped.
104
+ status: community
105
+ source: https://github.com/Valheim-Modding/Wiki/wiki/Best-Practices, section "Referencing Assemblies"
106
+ tags:
107
+ - assemblies
108
+ - managed
109
+ - publicized
110
+ - reference
111
+ - valheim-data
112
+ detail: The page's stated rule is "You only need to publicize the assemblies you are referencing
113
+ directly in your code", and that Unity assemblies do not normally need publicizing — only the
114
+ Valheim ones.
115
+ - id: valheim.install.layout.managed-assembly-set
116
+ claim: The `assembly_*.dll` set a plugin project can reference is exactly eight files —
117
+ `assembly_valheim`, `assembly_utils`, `assembly_guiutils`, `assembly_postprocessing`,
118
+ `assembly_googleanalytics`, `assembly_sunshafts`, `assembly_lux` and
119
+ `assembly_simplemeshcombine` — plus two non-`assembly_` game DLLs Jötunn also publicizes,
120
+ `SoftReferenceableAssets.dll` and `gui_framework.dll`.
121
+ status: community
122
+ source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnLib/BuildProps/JotunnLibRefsCorlib.props
123
+ (the `*_publicized.dll` reference list) and
124
+ https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnBuildTask/JotunnBuildTask.cs
125
+ (`GetFiles(managedFolder, "assembly_*.dll")` plus the two explicit extras)
126
+ tags:
127
+ - assemblies
128
+ - managed
129
+ - publicize
130
+ - reference
131
+ - jotunn
132
+ detail: The build task globs rather than hardcodes the `assembly_*` set, so the eight names above
133
+ are what the current install actually ships rather than a fixed contract.
134
+ `SoftReferenceableAssets.dll` being on the list is the code-side counterpart of the asset
135
+ system Iron Gate introduced in 0.217.40.
136
+ - id: valheim.install.layout.data-folder-casing-differs-by-platform
137
+ claim: The client data folder is spelled `Valheim_Data` on Windows and `valheim_Data` on Linux;
138
+ Jötunn's build task says so in a comment and probes both spellings, because "Both spellings
139
+ resolve on the case-insensitive filesystems of Windows and macOS, so a case-sensitive lookup
140
+ only ever fails on Linux". The server folder is `valheim_server_Data` on every platform.
141
+ status: community
142
+ source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnBuildTask/JotunnBuildTask.cs
143
+ (`ValheimData` / `ValheimServerData` constants and the comment above them)
144
+ tags:
145
+ - install
146
+ - data-folder
147
+ - casing
148
+ - linux
149
+ - detect
150
+ detail: Thunderstore's ecosystem schema records the lowercase `valheim_Data`. Both are right on
151
+ Windows; a surface should compare case-insensitively and never branch on the spelling.
152
+ - id: valheim.install.layout.dedicated-server-arguments
153
+ claim: "Iron Gate documents the dedicated server's arguments: `-name`, `-port` (which uses the given
154
+ port *and* port+1; default 2456-2457), `-world`, `-password`, `-savedir`, `-public 1`,
155
+ `-logFile`, `-saveinterval`, `-backups`, `-backupshort`, `-backuplong`, `-crossplay`,
156
+ `-instanceid`, `-preset`, `-modifier` and `-setkey`. The default save path that `-savedir`
157
+ overrides is `%USERPROFILE%/AppData/LocalLow/IronGate/Valheim` on Windows and
158
+ `~/.config/unity3d/IronGate/Valheim` on Linux."
159
+ status: community
160
+ source: https://valheim.com/support/a-guide-to-dedicated-servers
161
+ tags:
162
+ - dedicated-server
163
+ - arguments
164
+ - savedir
165
+ - port
166
+ - path
167
+ - crossplay
168
+ detail: Two things ModWright can use. `-savedir` means the server's data directory is not a fixed
169
+ path, so a log or permission-file location must be derived from the launch arguments where
170
+ they are known and reported as undetermined where they are not. And the Linux default is under
171
+ `~/.config/unity3d/`, not LocalLow — the same company/product pair, a different Unity
172
+ convention.
173
+ - id: valheim.install.layout.server-permission-files
174
+ claim: The dedicated server's `adminlist.txt`, `bannedlist.txt` and `permittedlist.txt` live in the
175
+ default save path (or wherever `-savedir` points), and each entry is a Platform User ID
176
+ written as `[Platform]_[User ID]`.
177
+ status: community
178
+ source: https://valheim.com/support/a-guide-to-dedicated-servers
179
+ tags:
180
+ - dedicated-server
181
+ - adminlist
182
+ - permissions
183
+ - path
184
+ - config
185
+ detail: Relevant to Jötunn's config sync, whose `IsAdminOnly` enforcement keys on whether the
186
+ connecting player is an admin — which is decided by `adminlist.txt` on the server, not by
187
+ anything on the client.
188
+ - id: valheim.install.layout.bepinex-installs-at-server-top-level
189
+ claim: "On the dedicated server BepInEx installs exactly as on the client: the BepInEx pack's extra
190
+ top-level files (not just the `BepInEx` folder) must be placed at the top level of the server
191
+ install, and the server's log is `BepInEx/LogOutput.log` relative to that same root."
192
+ status: community
193
+ source: https://github.com/Valheim-Modding/Wiki/wiki/Server-Troubleshooting
194
+ tags:
195
+ - dedicated-server
196
+ - bepinex
197
+ - install
198
+ - logoutput
199
+ detail: The page's diagnostic is that if no `BepInEx/LogOutput.log` is generated after deleting it
200
+ and restarting, no mods loaded at all — the same zero-byte/absent-log signal ModWright already
201
+ models for other games' loaders.
202
+ - id: valheim.install.layout.server-vs-client-mod-split
203
+ claim: Valheim mods divide into server-side, client-side and both-sides; the community's own
204
+ troubleshooting guidance is to check a mod's Thunderstore tags to learn which, because a
205
+ client-only mod does not need to be on the server and a server-side mod does nothing if only
206
+ the client has it.
207
+ status: community
208
+ source: https://github.com/Valheim-Modding/Wiki/wiki/Server-Troubleshooting
209
+ tags:
210
+ - dedicated-server
211
+ - client
212
+ - deploy
213
+ - mod-model
214
+ detail: "This is why a Valheim surface's deploy targets cannot be a single root: the same built DLL
215
+ may need to land in two different installs, and which ones is a property of the mod, not of
216
+ the game."
@@ -0,0 +1,334 @@
1
+ game: valheim
2
+ topic: jotunn.library
3
+ title: Jötunn, the Valheim modding library — managers, config sync, network compatibility, and its
4
+ mod stub
5
+ facts:
6
+ - id: valheim.jotunn.library.what-it-is-and-version
7
+ claim: Jötunn ("the Valheim Library") is a BepInEx-hosted C# library that gives Valheim mods a
8
+ curated set of helpers for custom content and network consistency; the current release is
9
+ 2.30.0, published 2026-09-09, whose notes say it "Updated the majority of systems for Valheim
10
+ 1.0.7" and that piece categories are incomplete because Valheim overhauled that system.
11
+ status: community
12
+ source: https://valheim-modding.github.io/Jotunn/ ;
13
+ https://github.com/Valheim-Modding/Jotunn/releases (v2.30.0, 2026-09-09)
14
+ tags:
15
+ - jotunn
16
+ - library
17
+ - version
18
+ - valheim-1.0
19
+ detail: Jötunn shipped a 1.0-compatible release the same day Valheim 1.0 launched, which is the
20
+ practical reason a Valheim surface's compat matrix has to treat Jötunn version, BepInEx pack
21
+ version and game version as three independent axes.
22
+ - id: valheim.jotunn.library.depends-on-the-valheim-bepinex-pack
23
+ claim: Jötunn's Thunderstore manifest declares exactly one dependency,
24
+ `denikson-BepInExPack_Valheim-5.4.2333`, and its guide states plainly that the Thunderstore
25
+ pack must be used because "a release from Github may not work properly".
26
+ status: community
27
+ source: https://thunderstore.io/api/experimental/package/ValheimModding/Jotunn/ ;
28
+ https://valheim-modding.github.io/Jotunn/guides/guide.html
29
+ tags:
30
+ - jotunn
31
+ - bepinex
32
+ - dependency
33
+ - bepinexpack
34
+ - compat
35
+ detail: "This is a real compat rule, not advice: stock BepInEx is not configured for Valheim's entry
36
+ point, so \"BepInEx is installed\" is not sufficient — a Valheim compat surface must
37
+ distinguish the pack from stock BepInEx."
38
+ - id: valheim.jotunn.library.manager-classes
39
+ claim: "Jötunn's public surface is a set of static managers in the `Jotunn.Managers` namespace:
40
+ AssetManager, CommandManager, CreatureManager, DungeonManager, GUIManager, InputManager,
41
+ ItemManager, KeyHintManager, KitbashManager, LocalizationManager, MinimapManager,
42
+ NetworkManager, PieceManager, PrefabManager, RenderManager, SkillManager,
43
+ SynchronizationManager, UndoManager and ZoneManager."
44
+ status: community
45
+ source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Managers.html
46
+ tags:
47
+ - jotunn
48
+ - managers
49
+ - api
50
+ - scaffold
51
+ detail: There is no `ConfigManager`, `RecipeManager`, `PieceTableManager` or `StatusEffectManager` —
52
+ config sync lives in `SynchronizationManager`, and recipes, piece tables and status effects
53
+ are handled through ItemManager, PieceManager and PrefabManager. A scaffold that emits a call
54
+ to a manager that does not exist produces a compile error, so the manager list is exactly the
55
+ kind of thing a validator should check against.
56
+ - id: valheim.jotunn.library.assetmanager-soft-referenceable
57
+ claim: Jötunn's `AssetManager` exists specifically to interact with Valheim's
58
+ "SoftReferenceableAssets" system, the custom asset-management layer Iron Gate introduced in
59
+ 0.217.40 that loads assets through AssetBundles instead of keeping everything in memory.
60
+ status: community
61
+ source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Managers.html ;
62
+ https://valheim.com/support/modding-faq-for-the-asset-bundle-update-0-217-40/
63
+ tags:
64
+ - jotunn
65
+ - assets
66
+ - softreferenceableassets
67
+ - assetbundle
68
+ - index
69
+ detail: "Iron Gate's own FAQ is the primary source for the system and says the quiet part directly:
70
+ \"if your mod relies on a certain asset having a certain path, it's likely that an update will
71
+ break your mod\", and to use AssetIDs instead because they \"will always stay the same for
72
+ each asset even if it's moved or renamed\". That is the strongest argument for a ModWright
73
+ vanilla index keyed on AssetIDs rather than paths."
74
+ - id: valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index
75
+ claim: "Jötunn ships a generated, machine-readable dump of the vanilla game's content, committed in
76
+ the repository under `JotunnLib/Documentation/data/` and published at
77
+ `https://valheim-modding.github.io/Jotunn/data/`: prefab, item, piece, piece-table, recipe,
78
+ status-effect, location, vegetation, RPC, sprite, character, material, mesh and shader lists
79
+ plus localization tables for English and ~40 other languages. Each file's header names the
80
+ game version it was generated from — `prefab-list.md` and `item-list.md` say Valheim 1.0.7,
81
+ `piece-list.md` says 1.0.12 — and the generator is Jötunn's own JotunnDoc mod."
82
+ status: community
83
+ source: 'https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnLib/Documentation/data (file
84
+ headers read directly: "This file is automatically generated from Valheim 1.0.7 using the
85
+ JotunnDoc mod found on our GitHub"); generator at
86
+ https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnDoc'
87
+ tags:
88
+ - jotunn
89
+ - jotunndoc
90
+ - index
91
+ - prefabs
92
+ - items
93
+ - assetid
94
+ - vanilla
95
+ detail: "This is the single most consequential find for ModWright's `index` subsystem on this game:
96
+ a vanilla index can be built **without the game installed**, by parsing markdown tables out of
97
+ a public repository. The prefab table's columns are `Name | AssetID | Token | English Name |
98
+ Components | Components in Children` and the item table's are `Item | AssetID | Token |
99
+ English Name | Type | Description` — so the index carries exactly the AssetIDs Iron Gate's own
100
+ FAQ says to key on, plus the localization token and the component list. `prefab-list.md` alone
101
+ is 1.3 MB. The caveat is that the files are regenerated by hand when a maintainer runs
102
+ JotunnDoc, so different tables can be stamped with different game versions at the same time —
103
+ the version must be read per-file from its header, never assumed uniform."
104
+ - id: valheim.jotunn.library.isadminonly-config-sync
105
+ claim: Jötunn enforces server-side config by binding a BepInEx `ConfigEntry` with a
106
+ `Jotunn.Utils.ConfigurationManagerAttributes` instance whose `IsAdminOnly` is true; every
107
+ client connecting to that server receives the server's values, and "Local settings will be
108
+ overriden by the servers values as long as the client is connected to that server". In
109
+ single-player the player is always considered admin.
110
+ status: community
111
+ source: https://valheim-modding.github.io/Jotunn/tutorials/config.html
112
+ tags:
113
+ - jotunn
114
+ - config
115
+ - sync
116
+ - isadminonly
117
+ - server
118
+ - admin
119
+ detail: "A consequence for any ModWright deploy or verification story: a value read out of
120
+ `BepInEx/config/<GUID>.cfg` on a client is not necessarily the value in force. Only default
121
+ mod configs sync automatically; a custom config file must be registered with the
122
+ SynchronizationManager and still needs `IsAdminOnly` per entry."
123
+ - id: valheim.jotunn.library.networkcompatibility-attribute
124
+ claim: "`Jotunn.Utils.NetworkCompatibilityAttribute` is applied to an assembly or a class as
125
+ `[NetworkCompatibility(CompatibilityLevel, VersionStrictness)]`; `CompatibilityLevel` is one
126
+ of NotEnforced, VersionCheckOnly, EveryoneMustHaveMod, ClientMustHaveMod, ServerMustHaveMod,
127
+ and `VersionStrictness` is one of None, Major, Minor, Patch."
128
+ status: community
129
+ source: https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.NetworkCompatibilityAttribute.html
130
+ ; https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.CompatibilityLevel.html ;
131
+ https://valheim-modding.github.io/Jotunn/api/Jotunn.Utils.VersionStrictness.html
132
+ tags:
133
+ - jotunn
134
+ - networkcompatibility
135
+ - multiplayer
136
+ - version
137
+ - attribute
138
+ - validator
139
+ detail: The tutorial page omits `None` from VersionStrictness; the API reference lists all four. A
140
+ static validator reading a plugin's source can check that the attribute's arguments are
141
+ members of these two enums, and that a mod declaring EveryoneMustHaveMod is deployed to both
142
+ the client and the server install.
143
+ - id: valheim.jotunn.library.mismatch-panel-strings
144
+ claim: A Jötunn version or install mismatch disconnects the client into a panel whose section
145
+ headers are localized as "Failed Connection:", "Valheim Version Error:", "Missing Mods:", "Mod
146
+ Updates Needed:", "Mod Downgrades Needed:", "Additional Mods Loaded:" and "Further Steps:",
147
+ with per-mod lines such as "$1 $2 was not loaded on your game" and "Please update $1 to
148
+ version $2".
149
+ status: community
150
+ source: https://github.com/Valheim-Modding/Jotunn/blob/dev/JotunnLib/Localization/English.json (keys
151
+ `mod_compat_*`), rendered by `JotunnLib/Utils/ModCompatibility/ModCompatibility.cs`
152
+ `CreateErrorMessage`
153
+ tags:
154
+ - jotunn
155
+ - mismatch
156
+ - multiplayer
157
+ - error-message
158
+ - triage
159
+ detail: The panel's own "Further Steps" text tells the user that this check only covers Jötunn mods
160
+ and to read `BepInEx/LogOutput.log` on both sides for other disconnects — i.e. Jötunn itself
161
+ points at the file ModWright would triage. A client without Jötunn gets Valheim's own
162
+ "Incompatible Version" message instead, which carries none of this detail.
163
+ - id: valheim.jotunn.library.modstub-shape
164
+ claim: "`JotunnModStub` is the org's mod skeleton: a C# plugin project targeting `net48` with a
165
+ `JotunnLib` PackageReference, a sibling Unity project stub, an `Environment.props` the author
166
+ creates to define `VALHEIM_INSTALL`, and `DoPrebuild.props` whose `ExecutePrebuild` flag turns
167
+ on automatic generation of publicized assemblies."
168
+ status: community
169
+ source: https://github.com/Valheim-Modding/JotunnModStub (README,
170
+ `JotunnModStub/JotunnModStub.csproj`, `DoPrebuild.props`)
171
+ tags:
172
+ - jotunn
173
+ - template
174
+ - scaffold
175
+ - msbuild
176
+ - net48
177
+ - publicize
178
+ - dotnet
179
+ detail: The stub's `JotunnLib` PackageReference is pinned to 2.27.1 while the current release is
180
+ 2.30.0, so "scaffold from the stub" and "scaffold at the current Jötunn version" are not the
181
+ same thing.
182
+ - id: valheim.jotunn.library.modstub-post-build-deploy
183
+ claim: "The stub's post-build step runs `scripts/publish.ps1` (or `publish.sh`) with the build
184
+ configuration: a Debug build copies the built `.dll` and its `.dll.mdb` into
185
+ `$(MOD_DEPLOYPATH)`, defaulting to `$(VALHEIM_INSTALL)\\BepInEx\\plugins`, while a Release
186
+ build produces a Thunderstore-ready zip under the project's `Packages` folder."
187
+ status: community
188
+ source: https://github.com/Valheim-Modding/JotunnModStub/blob/master/JotunnModStub/JotunnModStub.csproj
189
+ (`JotunnPostBuildTaskWin` / `JotunnPostBuildTaskUnix`) and the repo README
190
+ tags:
191
+ - jotunn
192
+ - deploy
193
+ - build
194
+ - msbuild
195
+ - thunderstore
196
+ - packaging
197
+ detail: "This is precisely the deploy-and-package step ModWright's `core/build` and `core/deploy`
198
+ already model, done today by an MSBuild target and a PowerShell script. A Valheim surface
199
+ should treat it as prior art to match, not to wrap: the interesting part is that Debug and
200
+ Release have different destinations, which is exactly ModWright's `variant` concept."
201
+ - id: valheim.jotunn.library.publicizer-is-vendored-not-a-separate-repo
202
+ claim: There is no publicizer repository in the Valheim-Modding organisation; the publicizer is
203
+ vendored inside Jötunn as `JotunnBuildTask/AssemblyPublicizer.cs`, and the community wiki's
204
+ manual route points at the third-party CabbageCrow AssemblyPublicizer instead.
205
+ status: community
206
+ source: https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnBuildTask ;
207
+ https://github.com/Valheim-Modding?tab=repositories ;
208
+ https://github.com/Valheim-Modding/Wiki/wiki/Best-Practices
209
+ tags:
210
+ - publicize
211
+ - assemblies
212
+ - jotunn
213
+ - buildtask
214
+ - toolchain
215
+ detail: Jötunn's build task globs the Managed folder for `assembly_*.dll` plus
216
+ `SoftReferenceableAssets.dll` and `gui_framework.dll`, finds Managed under either
217
+ `Valheim_Data` or `valheim_server_Data`, and writes `{OriginalName}_publicized.dll` into a
218
+ `publicized_assemblies` subfolder.
219
+ - id: valheim.jotunn.library.no-redistribution-of-game-assemblies
220
+ claim: "The project's stated norm on game assemblies is in the JotunnModStub README: \"These
221
+ assembly files are copyrighted material and you can theoretically get into trouble when you
222
+ distribute them in your github repository\", which is why the Unity project folder ships a
223
+ `.gitignore` the author is told to keep."
224
+ status: community
225
+ source: https://github.com/Valheim-Modding/JotunnModStub (README, Unity setup step 5)
226
+ tags:
227
+ - legal
228
+ - assemblies
229
+ - redistribution
230
+ - norm
231
+ - publicize
232
+ detail: The design consequence is Jötunn's asset-mocking system, documented as a way to "Duplicate
233
+ and modify Assets without the need to include copyrighted content in your plugin"
234
+ (https://valheim-modding.github.io/Jotunn/tutorials/asset-mocking.html). No stronger
235
+ licence-level clause about game-assembly redistribution was found on the Jötunn docs site or
236
+ repository.
237
+ - id: valheim.jotunn.library.jotunndoc-table-shapes
238
+ claim: "The JotunnDoc dumps live in subfolders of `JotunnLib/Documentation/data/` (`prefabs/` with
239
+ prefab, character, material, mesh and shader lists; `objects/` with item and recipe lists;
240
+ `pieces/` with piece and piece-table lists; `status-effects/`, `zones/` (location,
241
+ vegetation), `rpc/`, `gui/` (sprite), `input/`, `localization/`), every list named
242
+ `<kind>-list.md`. Each file opens with a title, a sentence and \"This file is automatically
243
+ generated from Valheim <version> using the JotunnDoc mod found on our GitHub\", then pipe
244
+ tables whose first column is the object's name; prefabs, items and pieces also carry
245
+ `AssetID`, `Token` and `English Name` columns, list-valued cells are `<ul><li>..</li></ul>`
246
+ (or `<dl><dd>..</dd></dl>`) HTML, and the piece and location lists are split into `## <group>`
247
+ sections. Three details bite a parser: the name column is written `Name<br><img
248
+ src=\"../../images/..\">` in the item, piece, location, character and vegetation lists, so the
249
+ raw cell is not the name; a long list is emitted in several chunks with the header repeated
250
+ after a blank line (the item list in 3, the prefab list in 4, mesh and material in 2), so one
251
+ file yields several tables; and the mesh list spells its key column `Asset ID`, not `AssetID`.
252
+ Versions disagree across the set — on the dev branch most lists say 1.0.7, the piece list says
253
+ 1.0.12 and the input list still says 0.221.12."
254
+ status: community
255
+ source: "https://github.com/Valheim-Modding/Jotunn/tree/dev/JotunnLib/Documentation (directory
256
+ listing and all sixteen `*-list.md` files under data/, read 2026-09-11: e.g.
257
+ prefabs/prefab-list.md \"|Name |AssetID |Token |English Name |Components |Components in
258
+ Children |\", objects/item-list.md \"|Item |AssetID |Token |English Name |Type |Description
259
+ |\" whose first cell reads \"Acorn<br><img src=../../images/items/Acorn.png>\",
260
+ prefabs/mesh-list.md \"|SoftReference Name |Asset ID |Internal Object Name |\",
261
+ input/input-list.md's \"generated from Valheim 0.221.12\" header)"
262
+ tags:
263
+ - jotunn
264
+ - jotunndoc
265
+ - index
266
+ - markdown
267
+ - table
268
+ - assetid
269
+ - token
270
+ - version
271
+ detail: "`src/surfaces/valheim/index/` builds ModWright's Valheim index from exactly this shape, one
272
+ `jotunn_table` row per table with the file's stated version and one `entry` per row keyed on
273
+ AssetID, name and token, so a lookup can say which game version its answer was dumped from.
274
+ Parsed over the dev-branch files that is 66 tables and 15,186 rows from sixteen lists — prefab
275
+ 4,810, mesh 3,191, sprite 2,015, material 1,696, item 1,517, piece 549, recipe 478, location
276
+ 213 in 41 `##` groups, vegetation 213, character 162, shader 106, input 100, status-effect 96,
277
+ language 36, piece-table 4, and rpc 0 (its table has a header and no rows). The location,
278
+ vegetation, sprite, shader, language, input, piece-table and RPC lists have no AssetID column
279
+ and are indexed by name only."
280
+ related:
281
+ - valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index
282
+ - id: valheim.jotunn.library.references-are-by-prefab-name-and-token
283
+ claim: "Jötunn's tutorials reference vanilla content by name string: a `CustomItem` or `CustomPiece`
284
+ clones an existing prefab by its name (`new CustomItem(\"EvilSword\", \"SwordBlackmetal\",
285
+ config)`, `new CustomPiece(\"our_rug_deer\", \"rug_deer\", rug)`), a recipe names the item it
286
+ crafts and the items it needs (`meatConfig.Item = \"CookedMeat\"; // Name of the item prefab
287
+ to be crafted`, `AddRequirement(\"Wood\", 1, 2)`; `RequirementConfig.Item` is documented as
288
+ \"Name of the item prefab of this requirement\"), a piece names its table (`PieceTable =
289
+ PieceTables.Hammer`, or a string — the blueprint-rune example assigns its own
290
+ `\"_BlueprintTestTable\"`), and display strings are `$`-prefixed localization tokens
291
+ (`\"$item_evilsword\"`) registered without the `$` (`AddTranslation(\"English\", new
292
+ Dictionary<string, string> { {\"item_evilsword\", \"Sword of Darkness\"} })`). The tutorials
293
+ say of both a clone source and a recipe's items: \"You must only use names of existing
294
+ prefabs. This can be prefabs you created, that have already been registered by another mod, or
295
+ that already exist in the game.\" When no translation for a token exists, \"the word to
296
+ translate will be fed to Valheim's own Translation class\" — so a token neither the mod nor
297
+ the game defines reaches the player unresolved."
298
+ status: community
299
+ source: "https://valheim-modding.github.io/Jotunn/tutorials/items.html (the EvilSword example, the
300
+ AssetBundle overload `new CustomItem(BlueprintRuneBundle, \"BlueprintTestRune\", fixReference:
301
+ false, runeConfig)`, and \"You must only use names of existing prefabs\");
302
+ https://valheim-modding.github.io/Jotunn/tutorials/pieces.html (the rug example, `PieceTable`,
303
+ `AddRequirement`, and `new CustomPieceTable(BlueprintRuneBundle, \"_BlueprintTestTable\",
304
+ runeTable)` followed by `makeConfig.PieceTable = \"_BlueprintTestTable\"`);
305
+ https://valheim-modding.github.io/Jotunn/tutorials/recipes.html (`meatConfig.Item =
306
+ \"CookedMeat\"` and the requirement rule);
307
+ https://valheim-modding.github.io/Jotunn/api/Jotunn.Configs.RequirementConfig.html (`Item`:
308
+ \"Name of the item prefab of this requirement\");
309
+ https://valheim-modding.github.io/Jotunn/api/Jotunn.Entities.CustomLocalization.html (the
310
+ three `AddTranslation` overloads: language plus dictionary, key plus text, and language plus
311
+ key plus text); https://valheim-modding.github.io/Jotunn/tutorials/localization.html
312
+ (\"language tokens are prefixed with a `$`\", \"the translation keys should not be prefixed
313
+ with a `$`\", the `Translations/{LanguageName}/{anyname}.json` layout, and the fallback to
314
+ Valheim's Translation class); all read 2026-09-11"
315
+ tags:
316
+ - jotunn
317
+ - prefab
318
+ - clone
319
+ - requirement
320
+ - piecetable
321
+ - token
322
+ - localization
323
+ - validator
324
+ - index
325
+ detail: "`valheim.plugins.vanilla-references` scans exactly these literal shapes and resolves each
326
+ against the JotunnDoc index or the project's own declarations — which include the names the
327
+ mod itself creates: a `CustomItem`/`CustomPiece` clone name, the asset name of the AssetBundle
328
+ constructor overload, a `CreateClonedPrefab` or `CreateEmptyPrefab` name, a `CustomPieceTable`
329
+ name, and every `AddTranslation` key. A name built from an expression, a constant from another
330
+ file, or a prefab registered by another mod is not seen or not resolvable, which is why every
331
+ miss is a warning."
332
+ related:
333
+ - valheim.jotunn.library.manager-classes
334
+ - valheim.jotunn.library.jotunndoc-publishes-a-vanilla-index