Skip to content

Deck building

Deck building panel

Everything under deckBuilding: which formats are offered when a player builds a deck, and what legality rules apply to each. This is the part of the file read before a match starts.

S stringN numberB boolean[] array{} object

deckBuilding

Everything that happens before a game starts: which formats are offered and how deck legality is enforced.

FieldTypeRequiredDescriptionExample
mainFilters[]requiredFilter names shown in the deck builder. ["type", "cost", "aspects"]
costCurveIgnoredTypes[]optionalCard types excluded from the mana/cost curve chart. ["Land"]
formats[]requiredOne entry per playable format. Each entry is a full object — see "formats[] entry" below. [{ "title": "Standard", ... }]
deckRulesets{}optionalDictionary of deck-building rulesets, keyed by name and referenced by formats[].deckRuleset. Optional — a format without a matching ruleset simply has no min/max enforcement. { "Classic": { ... } }
json
"deckBuilding": {
  "mainFilters": ["aspects", "type", "cost"],
  "formats": [
    { "title": "Premier", "gameplay": "Classic" },
    { "title": "Twin Suns", "gameplay": "Classic" }
  ]
}

A format doesn't need a ruleset

deckRuleset and deckRulesets are both optional. Star Wars Unlimited's file, for example, defines two formats that share the same gameplay block and skip deck-building restrictions entirely.

formats[] entry

Each element of deckBuilding.formats is a mode offered to the player, independent from the others.

One playable format, offered to the player when building a deck.

FieldTypeRequiredDescriptionExample
titleSrequiredDisplay name in the format picker. Give it a distinct name from the matching gameplay key to avoid confusion — e.g. "Standard format" rather than reusing "Standard". "Standard format"
customCategories[]optionalDeck categories specific to this format (e.g. a separate "Extra deck" or "Commander" slot). ["Extra deck"]
legalityCodeSoptionalCode used to filter which cards are legal in this format. "COR"
gameplaySrequiredMust match a key under the top-level gameplay object — this is what determines the game rules once the deck is built. "Standard"
deckRulesetSoptionalMust match a key under deckBuilding.deckRulesets. Omit if the format has no ruleset restrictions. "Classic"

Reusing a gameplay block across formats

In the Magic: The Gathering example, Modern, Vintage, Standard, Legacy and Pioneer all point at the same "gameplay": "Classic" and "deckRuleset": "Classic" — only title and legalityCode differ. You don't need a new gameplay block for every format if the match rules are identical.

deckRulesets{} entry

Not an array — an object keyed by ruleset name, referenced by formats[].deckRuleset.

Construction rules referenced by one or more formats.

FieldTypeRequiredDescriptionExample
checkCardLegalityBoptionalIf true, checks that every card carries the format's legalityCode. true
general.min / maxNoptionalTotal number of cards allowed in the main deck. { "min": 60 }
general.maxPerCardNoptionalMaximum copies of a single card allowed. 4
categories[]optionalPer-category rules (e.g. exactly 1 Coconut card). An array because a ruleset can constrain several categories at once. [ { "category": "Coconut", "min": 1, "max": 1 } ]
json
"deckRulesets": {
  "Coconut": {
    "general": { "min": 61, "max": 61, "maxPerCard": 4 },
    "categories": [
      { "category": "Coconut", "min": 1, "max": 1 }
    ]
  }
}

Continue with Gameplay → or Sections & layout →.