<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://developer.vellocetsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Grimwar%2FAddons</id>
	<title>Grimwar/Addons - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://developer.vellocetsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Grimwar%2FAddons"/>
	<link rel="alternate" type="text/html" href="https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Addons&amp;action=history"/>
	<updated>2026-08-25T08:02:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Addons&amp;diff=28&amp;oldid=prev</id>
		<title>DocumentationBot: Publish SDK documentation</title>
		<link rel="alternate" type="text/html" href="https://developer.vellocetsoftware.com/w/index.php?title=Grimwar/Addons&amp;diff=28&amp;oldid=prev"/>
		<updated>2026-08-25T05:13:08Z</updated>

		<summary type="html">&lt;p&gt;Publish SDK documentation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GameNav}}&lt;br /&gt;
{{Notice|title=Version target|These instructions cover addon schema 9 and the Grimwar addon catalog shipped with Vellocet SDK 1.0.3.}}&lt;br /&gt;
&lt;br /&gt;
An &amp;#039;&amp;#039;&amp;#039;addon&amp;#039;&amp;#039;&amp;#039; is the folder Grimwar discovers, validates, enables, and mounts. Maps, VMods, and addon-owned audio all use this package boundary. Do not install a loose scene, asset bundle, &amp;lt;code&amp;gt;.csx&amp;lt;/code&amp;gt; file, or &amp;lt;code&amp;gt;mod.json&amp;lt;/code&amp;gt; by itself.&lt;br /&gt;
&lt;br /&gt;
== Package layout ==&lt;br /&gt;
&lt;br /&gt;
Every addon starts with &amp;lt;code&amp;gt;addon.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
community.example/&lt;br /&gt;
  addon.json&lt;br /&gt;
  maps/&lt;br /&gt;
    as_example/&lt;br /&gt;
      compile-receipt.json&lt;br /&gt;
      StandaloneWindows64/&lt;br /&gt;
      StandaloneOSX/&lt;br /&gt;
      StandaloneLinux64/&lt;br /&gt;
  mod.json&lt;br /&gt;
  ExampleMod.csx&lt;br /&gt;
  audio/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The manifest&amp;#039;s &amp;lt;code&amp;gt;contents&amp;lt;/code&amp;gt; array declares each map, VMod, or other supported content entry. A mixed package can contain a map and the VMod that supplies its game mode. The complete folder remains one install and update unit.&lt;br /&gt;
&lt;br /&gt;
Use the SDK exporter to produce map packages. For VMods, follow [[Grimwar/VMod#What a VMod package contains|the VMod manifest format]]. Keep addon IDs stable between releases; a changed ID is a different addon rather than an update.&lt;br /&gt;
&lt;br /&gt;
== Use the Addons screen ==&lt;br /&gt;
&lt;br /&gt;
Open &amp;#039;&amp;#039;&amp;#039;Addons&amp;#039;&amp;#039;&amp;#039; from Grimwar&amp;#039;s main menu. The library combines every discovered source and reports whether each candidate is installed, valid, enabled, current, or in conflict.&lt;br /&gt;
&lt;br /&gt;
The available actions depend on the source and package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Enable&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;Disable&amp;#039;&amp;#039;&amp;#039; || Changes whether the selected addon may be mounted.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Use This Copy&amp;#039;&amp;#039;&amp;#039; || Selects this physical copy when several sources provide the same addon ID.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Open Folder&amp;#039;&amp;#039;&amp;#039; || Opens the install location for a disk-backed package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;View on Steam&amp;#039;&amp;#039;&amp;#039; || Opens the selected Workshop item.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Download/Update&amp;#039;&amp;#039;&amp;#039; || Requests the current Workshop build from Steam.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Unsubscribe&amp;#039;&amp;#039;&amp;#039; || Removes the Steam subscription. Steam controls final file removal.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Publish / Update&amp;#039;&amp;#039;&amp;#039; || Publishes an eligible local map-only Release package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An invalid, incomplete, unavailable, or currently downloading candidate cannot be enabled or selected.&lt;br /&gt;
&lt;br /&gt;
== Sources and conflicts ==&lt;br /&gt;
&lt;br /&gt;
Grimwar groups physical copies by the &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;addon.json&amp;lt;/code&amp;gt;. Initial source priority is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Priority !! Source !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300 || SDK overlay || Read-only folder supplied with &amp;lt;code&amp;gt;--addon-root&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GRIMWAR_ADDON_ROOT&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 200 || Steam Workshop || Steam-managed client install.&lt;br /&gt;
|-&lt;br /&gt;
| 200 || Dedicated-server Workshop || Steam-managed or operator-staged server copy with a Workshop identity.&lt;br /&gt;
|-&lt;br /&gt;
| 100 || Manual or FastDL || Writable addon library below the active Grimwar data root.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Use This Copy&amp;#039;&amp;#039;&amp;#039; overrides that priority and stores the selection in &amp;lt;code&amp;gt;state/addons.json&amp;lt;/code&amp;gt;. Only one valid copy of an addon ID is mounted. Built-in maps cannot be replaced by an addon, and a duplicate map ID that collides with built-in or already mounted content is rejected.&lt;br /&gt;
&lt;br /&gt;
If an edited local package appears to have no effect, check the Addons screen for another selected copy with the same ID.&lt;br /&gt;
&lt;br /&gt;
== Test an authored map ==&lt;br /&gt;
&lt;br /&gt;
# Export a Development package from the SDK Map Exporter.&lt;br /&gt;
# Put the package below Grimwar&amp;#039;s addon directory, or start Grimwar with &amp;lt;code&amp;gt;--addon-root &amp;amp;lt;absolute-export-folder&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Open &amp;#039;&amp;#039;&amp;#039;Addons&amp;#039;&amp;#039;&amp;#039;, confirm the package is valid and enabled, and select &amp;#039;&amp;#039;&amp;#039;Use This Copy&amp;#039;&amp;#039;&amp;#039; when necessary.&lt;br /&gt;
# Open &amp;#039;&amp;#039;&amp;#039;Host&amp;#039;&amp;#039;&amp;#039;. Entering or returning to the Host tab rescans addon folders.&lt;br /&gt;
# Select the map. If it has no guest download source, Grimwar sets Access to &amp;#039;&amp;#039;&amp;#039;Local&amp;#039;&amp;#039;&amp;#039; and changes the action to &amp;#039;&amp;#039;&amp;#039;Test Map&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Start the map and test the compiled package, not only the Unity authoring scene.&lt;br /&gt;
&lt;br /&gt;
Local test mode admits only the listen host. It creates no public listing or join string, disables invites, and rejects remote connections. This allows an unpublished map to run without pretending that clients can download it.&lt;br /&gt;
&lt;br /&gt;
== Install a Workshop map ==&lt;br /&gt;
&lt;br /&gt;
# Launch Grimwar through Steam.&lt;br /&gt;
# Open &amp;#039;&amp;#039;&amp;#039;Addons&amp;#039;&amp;#039;&amp;#039; and choose &amp;#039;&amp;#039;&amp;#039;Browse Steam Workshop&amp;#039;&amp;#039;&amp;#039;, or open [https://steamcommunity.com/app/4219460/workshop/ Grimwar Workshop].&lt;br /&gt;
# Subscribe to the map.&lt;br /&gt;
# Return to the Addons screen and wait for Steam&amp;#039;s download and installation to finish.&lt;br /&gt;
# Enable the package if it is disabled.&lt;br /&gt;
# Open &amp;#039;&amp;#039;&amp;#039;Host&amp;#039;&amp;#039;&amp;#039; or join a server that requires the same Workshop build.&lt;br /&gt;
&lt;br /&gt;
Steam owns subscribed files and their updates. Grimwar validates and mounts Steam&amp;#039;s installed folder directly. An installed item can remain visible from the local cache while Steam is offline, but subscription, update, and Workshop enable-state changes require Steam online.&lt;br /&gt;
&lt;br /&gt;
When joining a server, Grimwar downloads only the addon that owns the active map plus any session-wide requirements. Login completes only after every advertised package has the required addon ID and exact build ID and passes Release validation.&lt;br /&gt;
&lt;br /&gt;
== Install a VMod on a server ==&lt;br /&gt;
&lt;br /&gt;
# Run &amp;lt;code&amp;gt;vmod_runtime_paths&amp;lt;/code&amp;gt; from authenticated server console or RCON.&lt;br /&gt;
# Copy the complete folder containing &amp;lt;code&amp;gt;addon.json&amp;lt;/code&amp;gt; into the printed &amp;lt;code&amp;gt;&amp;amp;lt;data&amp;amp;gt;/addons&amp;lt;/code&amp;gt; root.&lt;br /&gt;
# Restart the process, or run &amp;lt;code&amp;gt;vmod_runtime_reload&amp;lt;/code&amp;gt; while no scripted game mode is active.&lt;br /&gt;
# Run &amp;lt;code&amp;gt;vmod_runtime_list&amp;lt;/code&amp;gt; and check that the VMod loaded without a compiler, capability, or dependency error.&lt;br /&gt;
&lt;br /&gt;
VMod-only packages are not currently publishable through Grimwar Workshop. Use manual installation or the SDK overlay. See [[Grimwar/VMod#Install and test a VMod|Install and test a VMod]].&lt;br /&gt;
&lt;br /&gt;
== Dedicated-server addon files ==&lt;br /&gt;
&lt;br /&gt;
The first server launch creates its operator-owned layout without replacing existing files. Relevant paths below the active data root are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Path !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;addons/&amp;amp;lt;addon-id&amp;amp;gt;/&amp;lt;/code&amp;gt; || Manual and FastDL-installed packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;config/server-addons.json&amp;lt;/code&amp;gt; || Workshop item IDs, manual Workshop bindings, collections, and the optional depot override.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;config/rotation.json&amp;lt;/code&amp;gt; || Whitelist or blacklist of map IDs and optional game modes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;state/addons.json&amp;lt;/code&amp;gt; || Enabled candidates and explicit source selections.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cache/steam-workshop-server/&amp;lt;/code&amp;gt; || Steam-managed dedicated-server Workshop installs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use [[Grimwar/Dedicated servers#Install Workshop maps|Dedicated servers]] for &amp;lt;code&amp;gt;server-addons.json&amp;lt;/code&amp;gt;, manual bindings, and rotation examples.&lt;br /&gt;
&lt;br /&gt;
== Fix a package that does not load ==&lt;br /&gt;
&lt;br /&gt;
Check these in order:&lt;br /&gt;
&lt;br /&gt;
# The selected directory itself contains &amp;lt;code&amp;gt;addon.json&amp;lt;/code&amp;gt;; it is not one level above or below it.&lt;br /&gt;
# The package is complete and has not been copied while an export or Steam download is still running.&lt;br /&gt;
# The Addons screen marks the candidate valid and enabled.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Use This Copy&amp;#039;&amp;#039;&amp;#039; points to the build you intend to test.&lt;br /&gt;
# The addon and content IDs do not collide with another installed package or built-in map.&lt;br /&gt;
# The package was rebuilt with the current schema and contains the platform artifact needed by this process.&lt;br /&gt;
# For a Release package, every declared file, size, SHA-256 hash, path, and compilation receipt is unchanged.&lt;br /&gt;
&lt;br /&gt;
The validator also rejects absolute or escaping paths, symbolic links or reparse points, unsupported file types, more than 8,192 files, and packages larger than 20 GiB.&lt;br /&gt;
&lt;br /&gt;
[[Category:Grimwar]] [[Category:Addons]]&lt;/div&gt;</summary>
		<author><name>DocumentationBot</name></author>
	</entry>
</feed>