Muster uses a standard json format to describe the armies, factions and units that make up an army list. Describing the json format is outside of the scope of this document. The following sections describe how to write and update army factions so that the community can prepare their own files and contribute to the upkeep of existing files.

Each file must contain the following mandatory sections

  • factions -> the faction details such as name, type and version
  • detachments -> a list of all the detachments specific to this faction
  • enhancements -> a list of all the enhancements specific to the detachments
  • units -> a list of the units and their configuration rules that make up this faction

An example file to use as a starting point can be found here.


In the factions section, the faction being described in the remainder of the file is described. The settings here are used to determine the version of the faction loaded into the app and the type e.g. core or expansion.

"factions": [
{ "faction": "Vikings", "type": "Core", "version": 0.1}


Factions commonly come with the own unique rules which are described in detachments. Each detachment is described by its name only.

"detachments" : [
 { "detachment": "Raiders"},
 { "detachment": "Traders"}

The detachment fields is string.


Detachments often come with their own unique upgrades which can be applied to leaders. These are called enhancements and described here. Each enhancement needs a corresponding detachment and cost.

"enhancements": [
 { "detachment": "Raiders", "enhancement": "Horned Helmet" , "cost": 10},
 { "detachment": "Raiders", "enhancement": "Fearsome warpaint" , "cost": 15},
 { "detachment": "Raiders", "enhancement": "Courageous Brew" , "cost": 25},
 { "detachment": "Traders", "enhancement": "Sleek Ships" , "cost": 20},
 { "detachment": "Traders", "enhancement": "Comely Face" , "cost": 20},
 { "detachment": "Traders", "enhancement": "Large Cargohold" , "cost": 25}
  • The detachment and enhancement fields are strings, cost is an integer.
  • Each detachment used should have a corresponding entry in the detachments section.


The bulk of the factions definition is in the units section, a list of “unit” definitions. The following example describes a unit of Viking Warriors. They come in sizes of 10 or 20 and can be kitted out with either Swords & Shields or Longbows. Muster refers to these as multiple loadouts.

"units" : [
 {"unit": "Viking Warriors",
  "type": "Battleline",
  "isEpic": "N",
  "isLegend": "N",
  "keywords": ["INFANTRY","VIKINGS"],
  "unitsizes": [{"models": 10, "cost":60},
                {"models": 20, "cost":120}],
  "models": [{"quantity": 10, "model": "Viking Warriors", "cost": 0, "varies": "Y"}],
  "loadout_labels": [{"label": 0, "text": "Swords & Shields"},
                     {"label": 1, "text": "Longbows"}],
  "loadouts" : [{"label": 0, "model": "Viking Warriors", "quantity": 1, "weapon": "Sword", "varies": "Y", "type": "None"},
                {"label": 0, "model": "Viking Warriors", "quantity": 1, "weapon": "Shield", "varies": "Y", "type": "None"},
                {"label": 1, "model": "Viking Warriors", "quantity": 1, "weapon": "Longbow", "varies": "Y", "type": "None"}]
  • All fields are mandatory with the exception of “loadout_labels” which is only necessary when a unit has multiple base loadouts available.


The models section sets the size of the unit and the cost field defines the cost. This should be set to the total number of models in the unit. When a unit is first added to an army list, the first entry in this set will be used e.g. in this case a unit of 10 Viking Warriors will be added costing 60pts.

For example:

"unitsizes": [{"models": 10, "cost":60},
              {"models": 20, "cost":120}],
  • Both fields are integers.


The models section defines the models that make up the unit size.

For example, this unit contains 10 models in total: 1 leader and 9 warriors. Using the unitsizes example above, if the size is changed to 20 models, there will be 1 leader and 19 warriors.

"models": [{"quantity": 1, "model": "Viking Leader", "cost": 0, "varies": "N"}
           {"quantity": 9, "model": "Viking Warriors", "cost": 0, "varies": "Y"}],

  • The quantity and cost fields are integers
  • The model field is a string.
  • When setting varies, either Y or N should be used. If set to Y, the number of these models varies in size depending on the size of the unit.
  • If a unit contains multiple types of models e.g. a leader and warriors then only one of the models can be set to vary in size.


This section is optional and should only be used when a unit has multiple loadout options that are applied to the whole unit e.g. configuring the unit to have melee or missile weapons.

For example:

"loadout_labels": [{"label": 0, "text": "Swords & Shields"}, 
                   {"label": 1, "text": "Longbows"}],
  • The label field is an integer.
  • The text field a string – this is the label shown to the user on the unit editing screen.


The bulk of the configuration is in this section. Each item that a model carries is defined here with an entry for each item for every model.

This example defines 2 different load outs for Viking Warriors – the classic swords and shields or longbows:

"loadouts" : [{"label": 0, "model": "Viking Warriors", "quantity": 1, "weapon": "Sword", "varies": "Y", "type": "None"}, 
              {"label": 0, "model": "Viking Warriors", "quantity": 1, "weapon": "Shield", "varies": "Y", "type": "None"}, 
              {"label": 1, "model": "Viking Warriors", "quantity": 1, "weapon": "Longbow", "varies": "Y", "type": "None"}]
  • The label and quantity fields are integers. Label must match the labels defined in the loadout_labels section (if any).
  • Quantity is the number of items each model has e.g. each warrior has 1 sword and 1 shield
  • Models must match the models defined in the models section
  • Varies is either Y or N. If you want the size to vary according to the number of models use Y. Set it to N otherwise.
  • Type defines the specific rules that apply to this item – several are available but are not documented yet. Set this to “None”.