Back to mods

Vintage Story Mod DB · Vintage Story mod

Progression Framework

Quests, training, and evolving traders for Vintage Story modders. Progression Framework is a content-empty mod that provides three reusable systems for other mods to build on: a quest engine, a training/profession engine, and an evolving-trader engine. Drop J

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which Progression Framework release should I use?

Updated 2 months ago
Latest stable file 1.1.0
Game version 1.22.0-pre.1, 1.22.0-pre.2, 1.22.0-pre.3
Loader Built-in Vintage Story mod system

Progression Framework 1.1.0 targets 1.22.0-pre.1, 1.22.0-pre.2, 1.22.0-pre.3. It must be installed on the client. Installation on the dedicated server is optional. No extra mods listed for this file.

Where it goes

Is Progression Framework required on the client, server, or both?

It must be installed on the client. Installation on the dedicated server is optional.

Client Required
Dedicated server Optional
Loader for this release Built-in Vintage Story mod system
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

This release supports both sides, but the source does not require it on the server.

What else does Progression Framework 1.1.0 need?

1.1.0. Change the file and its required mods may change too.

No extra mods listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

This file does not list any required or optional mods.

Before you install it

Add Progression Framework without breaking your instance.

Built for Progression Framework 1.1.0. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use 1.1.0. It targets 1.22.0-pre.1, 1.22.0-pre.2, 1.22.0-pre.3; another release may have different loader, side or dependency requirements.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Put it on the correct side

    It must be installed on the client. Installation on the dedicated server is optional.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside 1.1.0. It opens that exact file at the source.

About this project

What does Progression Framework add?

Quests, training, and evolving traders for Vintage Story modders.

Progression Framework is a content-empty mod that provides three reusable systems for other mods to build on: a quest engine, a training/profession engine, and an evolving-trader engine. Drop JSON into your mod's asset folders and the framework discovers it at load time.


✨ For Players

This mod adds nothing on its own it was built for the Seafarer mod to provide quests, training, and unlocks.

What it gives you in-game

  • Training Ledger (L) — A tabbed dialog showing your training progress and active quests.
  • Quest log — Quests track automatically as you talk to NPCs and turn in items.
  • Evolving traders — NPC stock and dialogue change as you complete work for them.

🧩 For Modders — Overview

The framework scans every loaded mod domain for content at AssetsFinalize. Drop JSON into the conventional paths below and you have working content.

Subsystem Path Notes
Quests <yourmod>:config/quests/*.json First-loaded wins on collisions.
Training <yourmod>:config/training/*.json Recognised filenames: professions.json, xp.json, config.json.
Tradelists <yourmod>:config/tradelists/*.json Looked up by stem from EntityEvolvingTrader JSONs.
Dialogue base-game NPC conversation system Quests subscribe to dialogue triggers.

Registered identifiers

These names are stable for cross-mod use: entity class EntityEvolvingTrader, item class ItemTrainingBook, hotkey progressionframeworkledger, network channel progressionframework:questsync, Harmony id progressionframework.


📋 Adding a Quest

Save a JSON file under your mod's config/quests/. The code is its identifier; npc is the entity code that gives it. delivery objectives count items the player turns in to that NPC; rewards fire when the threshold is hit.

{
  "code": "harvest-help",
  "npc": "mymod:trader-farmer",
  "scope": "server",
  "autoEnable": true,
  "objectives": [{
    "code": "deliver-wheat",
    "type": "delivery",
    "items": [{ "item": "game:grain-spelt", "quantity": 1 }],
    "required": 32,
    "rewards": [{ "type": "addSellingItem", "itemCode": "game:scythe-copper", "itemType": "item", "stacksize": 1, "stockAvg": 1, "stockVar": 0, "priceAvg": 8, "priceVar": 1 }]
  }]
}

Quest titles, descriptions, and group names go through your mod's lang/en.json using the titleLangKey, descriptionLangKey, and groupLangKey fields.


🎓 Adding Training

A profession contains one or more trainings; each training has levels; each level grants a trait. Save the list at config/training/professions.json.

[
  {
    "code": "gardening",
    "color": "#4F7F3C",
    "trainings": [{
      "code": "gardener",
      "levels": [{ "level": 1, "xp": 100, "title": "Gardener", "trait": "green-thumb" }]
    }]
  }
]

XP sources go in config/training/xp.json. The craft kind grants XP whenever a matching grid recipe completes; book when an ItemTrainingBook is read; dialogue when a registered dialogue trigger fires.

[
  { "type": "craft", "training": "gardener", "recipe": "mymod:flowerpot-*", "xp": 5 },
  { "type": "book",  "training": "gardener", "item": "mymod:trainingbook-gardener", "xp": 100 }
]

🔒 Gating a Recipe with a Crafting Trait

Once a training level grants a trait (green-thumb in the example above), any grid recipe variant with requiresTrait: "green-thumb" only matches when the player has earned that trait. A common pattern is to ship two variants — one ungated with extra ingredients (so untrained players can still build it the hard way), one trait-gated with a simpler ingredient list.

[
  {
    "ingredientPattern": "S,F,R",
    "ingredients": {
      "S": { "type": "item", "code": "mymod:schematic-greenhouse" },
      "F": { "type": "item", "code": "game:firewood",   "quantity": 5 },
      "R": { "type": "item", "code": "game:rope",       "quantity": 4 }
    },
    "width": 1, "height": 3, "shapeless": true,
    "output": { "type": "block", "code": "mymod:greenhouse-frame", "quantity": 1 }
  },
  {
    "requiresTrait": "green-thumb",
    "ingredientPattern": "F,R",
    "ingredients": {
      "F": { "type": "item", "code": "game:firewood", "quantity": 5 },
      "R": { "type": "item", "code": "game:rope",     "quantity": 4 }
    },
    "width": 1, "height": 2, "shapeless": true,
    "output": { "type": "block", "code": "mymod:greenhouse-frame", "quantity": 1 }
  }
]

requiresTrait is a base-game GridRecipe field, not a Progression Framework one — the framework's contribution is granting the trait via training so the recipe gate fires.


🛠 Built-in Handlers

  • Quest objective typesdelivery, kill.
  • Quest reward typesaddSellingItem, giveItem, awardTrainingXP, incrementEntityVariable.
  • XP source kindscraft, dialogue, book.

Need something custom? Register your own handler from C# in your mod's Start(): questSystem.RegisterObjectiveType("fetch", new MyFetchHandler());. Implement IQuestObjectiveHandler, IQuestRewardHandler, or IXpSourceHandler.


🔧 Compatibility & Requirements

Required: Vintage Story 1.22.0-rc.7 or newer.

Known incompatibilities: none reported.

Project description from Vintage Story Mod DB.

Pick your setup

Progression Framework releases for each Vintage Story version.

Choose the version and loader you play, then open the matching release.

19 available setups

Showing the newest 12 of 19 game versions. Older files are in the list below.

Check the dependencies, then try the file in a copied instance before changing a world you care about.

Recent files

Progression Framework versions and loaders

2 of 2 releases match

Looking for an older file? The official Vintage Story Mod DB project page is in Resources.