Defines passive production (chicken → egg every 60s) or a recipe (2 wood + 1 rope → 1 shield).

production#

Defines how an item is produced: passively over time (mode passive) or through a recipe with ingredients (mode recipe). Each timer/quantity can be linked to a progression table to scale with level.

Why it matters#

Production is the backbone of clicker, farming, crafting, and idle games. Without a dedicated schema, every recipe becomes an ad-hoc JSON in the code, and balance changes require a rebuild. Here you define everything in the GDD, export to JSON, and adjust values without touching code.

Where it usually lives#

  • Pages of type 📜 Recipe (one recipe per page).
  • Pages of type 📦 Producible Item (rare — for passive production items).

Singleton — 1 production per page.

Schema#

CampoTipoPadrãoDescrição
idYesstringInternal ID.
nameYesstringAddon name.
modeYes"passive" | "recipe"passive: produces X per interval (chicken lays egg). recipe: requires ingredients to produce.
outputRefstring (sectionId)Passive mode: which item is produced.
minOutputnumberPassive mode: minimum amount per cycle.
maxOutputnumberPassive mode: maximum amount per cycle (rolled between min and max).
intervalSecondsnumberPassive mode: interval between cycles (accepts decimals).
requiresCollectionbooleanPassive mode: does the player need to collect actively, or does it go straight into inventory?
capacitynumberPassive mode: maximum stock that can accumulate before the player collects.
ingredientsYesProductionIngredient[]Recipe mode: list of itemRef + quantity required.
outputsYesProductionOutput[]Recipe mode: list of itemRef + quantity produced.
craftTimeSecondsnumberRecipe mode: crafting time in seconds (accepts decimals).
notesstringFree-form notes.

Almost all numeric fields can be linked to a column of a progression table:

  • minOutputProgressionLink, maxOutputProgressionLink
  • intervalSecondsProgressionLink, craftTimeSecondsProgressionLink
  • capacityProgressionLink

When linked, the engine reads the value from the table at the player's current level, instead of the static value in the schema. This lets production and crafting scale as the player progresses.

"intervalSecondsProgressionLink": {
  "progressionAddonId": "section-prog-table",
  "columnId": "col-craft-time",
  "columnName": "Craft Time"
}

Example: passive production#

Chicken lays 1–3 eggs every 60s, capacity of 10 eggs:

{
  "id": "prod-chicken",
  "name": "Chicken",
  "mode": "passive",
  "outputRef": "section-egg",
  "minOutput": 1,
  "maxOutput": 3,
  "intervalSeconds": 60,
  "requiresCollection": true,
  "capacity": 10,
  "ingredients": [],
  "outputs": []
}

Example: recipe#

2 Wood + 1 Rope → 1 Bow, in 30 seconds:

{
  "id": "prod-bow-recipe",
  "name": "Recipe: Bow",
  "mode": "recipe",
  "ingredients": [
    { "itemRef": "section-wood", "quantity": 2 },
    { "itemRef": "section-rope", "quantity": 1 }
  ],
  "outputs": [
    { "itemRef": "section-bow", "quantity": 1 }
  ],
  "craftTimeSeconds": 30
}

Wizard#

The 📜 Recipe page type automatically creates:

  1. This production addon in recipe mode
  2. Pre-filled with 1 empty ingredient + 1 empty output
  3. The wizard asks for craftTimeSeconds in the initial dialog

You fill in the item references afterwards.

Who references production#

  • craftTable.entries[].productionRef — a craft table aggregates multiple recipes via refs.

See also#