You are viewing a potentially older version of this package. View all versions.
Ezomic-Yoke-1.0.1 icon

Yoke

Bigger stacks, earned biome by biome.

Date uploaded 2 weeks ago
Version 1.0.1
Download link Ezomic-Yoke-1.0.1.zip
Downloads 50
Dependency string Ezomic-Yoke-1.0.1

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2333 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2333

README

Yoke

Bigger stacks, without turning the game into a sandbox.

Built against the installed game (0.221.12, Unity 6000.0.61, BepInEx 5.4.23.3, Harmony 2.9).

The defaults are the point

The usual version of this mod ships x10 stacks and halved weight. That does not make Valheim more convenient so much as remove a system from it. The mid game is largely a logistics problem, and the tedium and the difficulty are the same mechanic seen from two sides.

So the defaults here fix the annoying half and leave the interesting half alone:

Default Effect
StackMultiplier = 2 Stacks double. Wood 50 → 100
WeightMultiplier = 1 Weight untouched. Carry limit still decides what comes home
IncludeNonTeleportable = false Ore and metal bars are not modified at all
StackCap = 200 Ceiling regardless of multiplier

That third one is the important one. Metal cannot go through a portal, so hauling it by cart and boat is a deliberate part of the game's pacing rather than an oversight. Leaving ore alone means your inventory stops being a nuisance for berries and wood while the trip home from a copper mine is still a trip.

Everything is a knob. If you decide you want the easy version, it is one edit away.

Each boss raises one kind of stack

A flat multiplier cannot tell the two halves of that argument apart. Meadows scarcity is the game teaching you to plan; your ninth trip to the same copper deposit is not teaching you anything. So stacks start at vanilla and each boss raises one group:

Kill a biome's boss and the things that biome gives you stack better.

Boss Raises
Eikthyr Meadows
The Elder Black Forest
Bonemass Swamp and Ocean
Moder Mountain
Yagluth Plains
The Queen Mistlands
Fader Ashlands

So the copper you carry out of the Black Forest stops being a nuisance once the Black Forest's boss is dead, and not before. Every boss matters, and each one eases exactly the hauling you have just finished proving you can survive.

Bonemass carries the Ocean as well as its own biome, because nothing lives in the water that sets a global key when it dies. Without that row every fish, and chitin, and the bait you catch them with would sit at vanilla for the whole game. Bonemass rather than an earlier boss because the longship is the boat that makes a day's fishing worth hauling home.

The change lands when the boss falls, not when you next log in. Stacks already in your pack are rewritten on the spot, and a chest catches up the moment you open it.

Which biome an item belongs to is worked out, not listed

There is no table of items in this mod. Four routes, all reading the game's own data:

  • The world's vegetation table places a copper deposit in the Black Forest, and the deposit says it drops copper ore. So copper ore is a Black Forest item.
  • The spawn tables place Fulings in the Plains, and the Fuling's drop list says black metal scrap. So black metal is a Plains item.
  • Recipes and stations. Anything made takes the biome of its latest ingredient, because that is when you could first make it. Barley is Plains, so flour is Plains, so dough is Plains, so bread is Plains, through a mill, a recipe and an oven in turn, none of it written down here. Every mead lands the same way, off the fermenter.
  • Spawners. A greydwarf nest or a surtling geyser is placed in a biome, and it is the nest rather than the creature that the tables know about.
  • Bosses place their own drops. A boss prefab knows the global key its death sets, and the tier table knows which biome that key belongs to, so Moder's trophy is a Mountain item without either side naming it.
  • BiomeOverrides for the roots none of that reaches: ore deposits, dungeon loot, fish and the trophies of creatures that only appear inside a location. Roots only: the recipe pass turns each one into everything made from it.

That lands 665 of 671 stackable items. The six it does not reach are crafting oddities, left unplaced rather than guessed at, because a wrong biome is worse than vanilla. Anything unplaced stays at vanilla.

An item found in several biomes belongs to the earliest, because that is where you first had to carry it home. A crafted one takes the latest of its ingredients. Those two rules sound contradictory and are not: found is about where it turns up, made is about when you can make it.

The groups are read off the game's own systems, not a list in this mod. Building material is whatever appears as a build cost on the Hammer's piece table, so an item a content mod adds lands in the right group by itself. Metal is whatever the game refuses to send through a portal, the same flag the pacing rule already used.

Every row is one line of ProgressionTiers, so a different table is one edit. Any global key works, not just a boss key.

An earned metal tier lifts the portal rule. That is on purpose and it is the point: the haul is real pacing while you are doing your first copper runs, and by the boss that hands you the iron age you have already paid it. IncludeNonTeleportable remains for anyone who disagrees and does not want to wait.

In multiplayer, it is the world's progress

Global keys are world state the server pushes to every client, so everyone computes the same answer with no new networking. A fresh character joining a Mistlands-era world gets Mistlands-era stacks, which is the deliberate trade: progress is the world's, not yours.

Keys only ever accumulate, so the multiplier only ever rises. Nothing here can leave a stack sitting above its own limit.

With Utangard

Utangard opens a biome only when every member of the group was personally at that boss's death, which is not the same as the boss having died in the world. Those answers part company the moment somebody is offline for a kill.

When Utangard is installed, Yoke asks it instead of reading the key, so stacks never arrive for a biome Utangard still has fenced off. It is a soft dependency in both directions: neither mod needs the other, and DeferToUtangard = false turns it off.

What it will not do

It never makes equipment stackable. Only items with a vanilla stack size above 1 are touched. An item that does not stack in vanilla is a weapon, a tool or a piece of armour, and those carry per-item durability and quality, and collapsing several into a count silently throws all but one of those away.

Design notes

Why both ObjectDB entry points are patched, why every value is computed from the item's captured original, why the biome routes stop where they do, and the release checklist: DESIGN.md.

Core is optional

Yoke installs and runs on its own. Core is a soft dependency: present, it is used; absent, nothing here is degraded. Installing Yoke from Thunderstore no longer installs Core with it.

What Core adds is the version gate, a handshake that compares mod versions and build ids on connect and refuses a client that does not match. Without it nothing reports two ends running different item data, which desyncs inventories. The ObjectDB.CopyOtherDB patch still puts a joining client on the server's numbers, which covers the common case on its own.

Solo, none of that applies and Core is not needed at all.

Config

BepInEx\config\ezomic.valheim.yoke.cfg

Key Default What it does
ScaleWithProgression true Each boss raises one group. Off falls back to StackMultiplier
ProgressionBase 1 Multiplier for a group no boss has unlocked; 1 is vanilla
ProgressionTiers see above boss:group:multiplier, comma separated
ProgressionStep 0 Later bosses re-raise earlier groups by this fraction, compounding
ProgressionOrder the seven bosses What "later" means; idle while ProgressionStep is 0
DeferToUtangard true Ask Utangard what the group has earned, when it is installed
StackMultiplier 2 Flat multiplier, used only when ScaleWithProgression is off
StackCap 200 Hard ceiling on the result
WeightMultiplier 1 Multiplies item weight; 1 leaves it alone
IncludeNonTeleportable false Also affect ore, bars and anything portal-blocked
IncludeTrophies true Also affect trophies
ExcludeItems Comma-separated prefab names to skip entirely
WriteItemList true Write the item list described below beside the .cfg
Verbose false Log every item that changed

A value already written to the .cfg beats a new default in code. Change the .cfg.

The item list

BepInEx\config\ezomic.valheim.yoke.items.txt, rewritten on every run.

ExcludeItems takes prefab names, and prefab names are not guessable: copper ore is CopperOre but raspberries are Raspberry and a draugr's arrow is draugr_arrow. So the mod writes down every item it saw, what it did to each one, and which rule stopped it when it did nothing:

Prefab       Name          Type        Stack       Weight  Left alone because
Wood         Wood          Material    50 -> 100   2
CopperOre    Copper Ore    Material    30          10      portal-blocked
SwordIron    Iron Sword    OneHanded   1           0.8     equipment

An arrow means Yoke changed that value. A single number means it did not, and the last column says why. The header carries the settings that pass ran under and a count of each reason, so equipment 677, portal-blocked 22 is the whole safety story at a glance.

This is also the answer to "why did this item not change", which is the only question a mod like this ever gets asked. ## Building

dotnet build

Deploys to the repo-local testprofile\. Override with -p:ProfileDir=..., or build it into the shared play profile with valheim-own-profile\build-all.ps1.

Reporting bugs

The Discord is the fastest route, and the right one if you are not sure whether what you are seeing is a bug at all. Issues on the repo work too and suit anything long.

Bring BepInEx\LogOutput.log if you can, and say whether you were on a server or your own world. The log is most of the difference between a fix and a guess, and it is written every session whether or not anything went wrong.

Part of the Longhouse pack

This is one of the Longhouse pack, a pinned set of my mods that installs in one click and is what the Longhouse server runs. You do not need the pack to use this on its own, and nothing here behaves differently outside it.

The Discord is where the server lives if you want to play on it: small, EU, hard combat difficulty and everything else vanilla.

Author

Yoke is an original mod by Robbin Thijssen (Thijssen Software). Copyright (c) 2026 Robbin Thijssen. MIT licensed. See LICENSE.

CHANGELOG

Changelog

Notable changes to Yoke. Format follows Keep a Changelog, and the mod uses semantic versioning.

1.0.0 is the first published version. The numbers below it were development builds; the rule was that 1.0 is spent on the build that actually ships, and it was.

[1.2.0] - 2026-09-09

Rebuilt for Valheim 1.0. This version does not run on pre-1.0 Valheim, and the previous one does not run on 1.0.

Fixed

  • Stacks above the vanilla limit are no longer destroyed when a world loads. The load-path guard targets one exact method, and Valheim 1.0 moved the clamp onto a different overload - the string-keyed one became a two-line forwarder holding no clamp at all. So the guard silently stopped guarding, and stored stacks were clamped on load and saved clamped, which destroys the excess permanently. Retargeted, and the guard still covers only the load path, so pickup, crafting and splitting keep vanilla's rules exactly as before.

Added

  • A group carrying items no boss will ever raise is now reported at startup, once, naming the group. Deep North is the first case: nothing in ProgressionTiers names it, so its items sit at the base multiplier however many bosses fall - and the progression summary deliberately omits tierless groups, so that was the one thing nothing would have mentioned.

[1.1.0] - 2026-08-29

Changed

  • Metals wait for their own biome now, like everything else does. Ore and bars are held out of the ramp on purpose, because hauling metal is pacing rather than an oversight - but which boss lifted that was a single global switch, and it cut the wrong way at both ends. Black metal got a bigger stack the moment Bonemass died, before the Plains had been seen; copper and tin sat at their vanilla thirty through the entire bronze age with the Elder long dead. Metals were the one thing in this mod not following the mod's own rule.

    Each metal now waits for the boss of the biome it comes from: copper and tin at the Elder, iron at Bonemass, silver at Moder, black metal at Yagluth. It asks the same question the multiplier already asks of the same item, so the two cannot drift apart. The pacing survives - never a bigger stack of a metal before you are established where it is mined - and in practice only copper, tin and iron move, since Bonemass is always down long before silver is worth carrying.

  • LiftPortalRuleAt is removed. Naming one biome for every metal was exactly what was wrong, so there is nothing left for it to say. An orphan line in an existing config file is harmless.

  • The item list says metal-held instead of portal-blocked, and names that metal's own boss rather than one answer copied across all of them. The old word described the flag used to FIND the metals rather than the rule being applied, and it read as though the mod had opinions about portals. It does not: nothing here reads or writes what may go through one, and IncludeNonTeleportable now says so plainly - it is about stack size and nothing else.

[1.0.5] - 2026-08-29

Fixed

  • Stack sizes were wrong for a lot of items, permanently, and quietly. The biome index was lying three ways. BlackMetal sat in the plains while BoltBlackmetal sat in the meadows, in the same file: the bolt is black metal, wood and feathers, and on the first pass the bar had not been mapped yet - it is a blast furnace conversion rather than a drop - so the recipe answered from the wood alone. Nineteen recipe outputs were frozen that way. Separately the meadows tier carried Mistlands and Ashlands drops - carapace, charred bone, entrails, the Draugr, Seeker and Fuling trophies - because vanilla ships rows whose biome mask says Meadows and whose spawn is gated behind a global key, and the mask was read without the gate. Twelve rows do this. Both were permanent rather than transient because every writer took the earliest answer and refused every later one, so a wrong first pass could never be corrected.

Changed

  • BiomeIndex moves to Longhouse Core's shared source rather than being owned here. It is compiled into this mod, not into Core's DLL, so Core is unchanged and remains a soft dependency.

[1.0.4] - 2026-08-26

Fixed

  • 1.0.3's package contained 1.0.2's DLL. The publish zipped a stale staging folder, so the load-guard fix below never actually shipped under that number. This version is the same code, packaged from a fresh build. 1.0.3 should not be installed.

[1.0.3] - 2026-08-26

Fixed

  • Stored stacks survive loading. Seen on live: a chest holding 100 greydwarf eyes read 50/100 after a relog, the other 50 destroyed. For a moment after login - before the server's progression keys arrive - every stack limit is briefly vanilla again, the relogging player owns the chests around them, and the game's inventory loader clamps every stored stack to the limit of that moment. The clamp is now removed from the load path, and only there: an over-limit stack shows as 100/50 for a few seconds and normalises when the real limits land, where the clamped half of a stack was simply gone.

[1.0.2] - 2026-08-26

Fixed

  • The stack cap no longer shrinks items whose vanilla stack already exceeds it. It was written as a ceiling on the multiplied result, which quietly cut coins from their vanilla 999 to the default cap of 200 - the one item in the game above the cap. The cap now limits growth only; anything at or above it keeps its vanilla stack.

[Unreleased]

Fixed

A boss dying mid-session now moves the stacks you are carrying. 1.0.0 wrote the new numbers onto the item prefabs and stopped there, which is not where the game reads them from: an inventory item is a MemberwiseClone that only looks like it shares its prefab's data, so the wood in your pack kept its old limit until the next world load. That was the one path 1.0.0 shipped unproven, and it did not work. Stacks in your inventory are rewritten as soon as the key arrives, and a chest catches up the moment it is opened.

Changed

Bonemass now raises Ocean goods as well as Swamp ones. No boss lives in the water, so without a row naming it every fish, and chitin, and fishing bait sat at vanilla for the whole game with nothing ever coming to raise them. Bonemass rather than an earlier boss because the longship is the boat that makes a day's fishing worth hauling home.

This is a default, and BepInEx keeps the value already written to your .cfg. Add defeated_bonemass:ocean:2 to ProgressionTiers to pick it up on an existing install.

[1.0.1] - 2026-08-25

Stack sizes could revert to vanilla for a boss the group had already killed, and stay there for the rest of the session.

ZoneSystem.RPC_GlobalKeys clears the world's key list and re-adds it one key at a time, on every client, every time anybody sets any key. This mod's hook is on GlobalKeyAdd - the right place, because it is the only one that catches the bulk list a server sends on connect - but it acted there, which meant asking "what has the group earned?" once per key against a dictionary that was still filling up.

With Utangard installed that question goes to its roster, built from the same half-filled dictionary. On the live server it answered "not earned" mid-refill, this mod wrote vanilla stack sizes off the back of it, and no further key ever arrived to trigger a correction.

Fixed

  • The key hook marks rather than acts. The flag is drained in Update, which is the first moment the whole list is certainly in. As a side effect a connect's worth of keys is now one walk of the item database instead of one walk per key.

[1.0.0] - 2026-08-18

First release.

Yoke raises the stacks of a biome's own goods when you kill that biome's boss. Meadows timber doubles when Eikthyr falls, Black Forest ore when The Elder does, and so on to Fader and the Ashlands. Nothing else changes: weight is untouched, equipment never stacks, and until the Swamp is earned a portal still refuses ore.

What makes it different from the rest of its category is that nothing is listed. Which biome an item belongs to is worked out from the game's own tables, so an item a content mod adds lands in the right place by itself:

  • the world's vegetation table, where a copper deposit is Black Forest and the deposit says it drops copper ore;
  • the spawn tables and spawners, down to the nest that makes the creature rather than the creature itself;
  • recipes, smelters, cooking stations and fermenters, where a made thing takes the biome of its latest ingredient, so bread is Plains because barley is;
  • each boss's own drops, matched through the global key its death sets;
  • and a short override list for the roots that only exist inside locations.

That places 665 of 671 stackable items. The six it does not are crafting oddities, left alone rather than guessed at.

The generated item list beside the config names every item, what was done to it, and which rule or which boss it is waiting on.

Verified in play

Wood at 100 and blueberries at 50 on a world with Eikthyr down, with copper ore still portal-blocked. The biome index, the tier ramp, the portal rule and the retune when a world's keys arrive were all confirmed on a real client.

Not yet seen: a boss dying mid-session and the stacks moving without a restart. The path is exercised on every world load; what is unproven is that one arrival.

[0.13.0] - 2026-08-18

Hoard is now Yoke

A yoke is the bar across the shoulders that turns two loads into one carry, which is what this mod does. "Hoard" named the pile; it never named the carrying, and the carrying is the half the progression is about.

Nothing about the behaviour changed. What the rename touches:

  • The plugin GUID is now ezomic.valheim.yoke, so the config file is renamed with it. Hoard's config is adopted automatically on the first run under the new name, before anything binds, so settings carry over unchanged. That matters more than it sounds: BiomeOverrides runs to about a hundred entries, and a silent reset would drop the mod back to derived-only placement with nothing in the log to explain why the ore stopped stacking.
  • The assembly, namespace and plugin class follow the name.
  • The icon is redrawn: two stacks under a notched bar, rendered through the suite's shared icon script so it sits correctly beside the others.

No world data is at risk. This mod registers no prefabs, so nothing saved is keyed to a name that would stop resolving.

[0.12.1] - 2026-08-17

Everything is placed

665 items placed, six left. Two more derivations and a filled-in override list took the unplaced count from 122 to 6.

  • Spawners. A greydwarf nest, a surtling geyser, the skeleton piles in a crypt: the creature is not in the world's spawn table, the thing that makes it is. Walking SpawnArea finds them, which is where most of the missing trophies were.
  • Bosses place their own drops. A boss stands in a location so nothing else can see it, but the boss prefab knows the global key its death sets and the tier table knows which biome that key belongs to. Moder's trophy is a Mountain item because Moder's key is the Mountain's key, since neither side names an item, and a modded boss added to ProgressionTiers brings its drops with it.
  • BiomeOverrides now ships the roots that live inside locations: ore deposits, dungeon loot, dvergr and charred material, fish, and the trophies of creatures that only appear in a location. Roots, not a full list: the recipe pass turns each one into everything made from it, so cooked fish, chicken, spices and meads all placed themselves from these.

The six that remain are AxeHead1, AxeHead2, BarrelRings, FireworksRocket_White, Ironpit and ScytheHandle, crafting oddities nobody hauls. They are unplaced rather than guessed at, because a wrong biome is worse than vanilla, and they stay at vanilla.

[0.12.0] - 2026-08-17

A boss raises the biome it guards

The four hand-made categories are gone. Each boss now raises the stacks of everything that comes from its own biome: Eikthyr the Meadows, The Elder the Black Forest, Bonemass the Swamp, and so on through Fader and the Ashlands. Copper stops being a nuisance once the Black Forest's boss is dead, and not before.

This also settles what the last three versions kept circling: with a biome each, all seven bosses matter without inventing categories for the late ones or adding a percentage drift.

Nothing is listed. Which biome an item belongs to is worked out from four sources:

  • ZoneSystem.m_vegetation: a copper deposit is Black Forest and the deposit says it drops copper ore, so copper ore is Black Forest.
  • The spawn tables plus CharacterDrop: Fulings are Plains, so black metal scrap is Plains.
  • Recipes, smelters, cooking stations and fermenters, where a made thing takes the biome of its latest ingredient. Barley is Plains, so flour is, so dough is, so bread is, across a mill, a recipe and an oven. Every mead lands off the fermenter the same way.
  • BiomeOverrides, for what none of that reaches.

Found items take the earliest biome they appear in, made items the latest of their ingredients. Not a contradiction: found is about where it turns up, made is about when you could make it. That rule also repairs a wrong answer for free: Charred warriors drop bronze, so the spawn tables call bronze an Ashlands item, and the recipe calling it Black Forest wins.

On this machine it places 543 items, with 122 stackables left over, mostly fish, trophies and chest loot, all of which stay at vanilla. The item list prints them so BiomeOverrides is filled in from what is really missing.

The overrides shipped by default are the ones no table can see: iron scrap and the copper and silver deposits live inside locations, whose prefabs are soft references that are not loaded until the game wants them, and forcing dungeon interiors to load on the way into a world is not worth what it buys.

LiftPortalRuleAt replaces the old metal group: the Swamp tier now lifts the portal rule, because Bonemass is where iron begins and the copper runs are behind you by then.

Fixed

  • The index rebuilt once per item while incomplete, walking every prefab in the scene a thousand times per pass. It is built once per pass now.
  • SpawnSystem.Awake fires more than once in a loaded world; the rebuild is guarded so it happens on the first one only.
  • Overrides were applied after the conversions, so copper bars came out unplaced. The smelter pass went looking for copper ore before the override had put it on the map. They are applied before the derivation as well as after.
  • Conversions and recipes ran in sequence, which left bread unplaced whatever the pass count, because the step it waited on lived in the other list. They interleave until it settles.

[0.11.1] - 2026-08-17

Progression finishes at Bonemass

ProgressionStep now defaults to 0, so nothing after Bonemass changes a stack size. The mechanism from 0.11.0 stays as a knob; it is simply off.

Three reasons it should not be the default, and none of them is that it did not work:

  • Ten percent is imperceptible. Wood going 100 to 110 is not a reward anyone feels, and it lands at the moment a boss dies, when there is a great deal else to notice.
  • The numbers read as a bug. Vanilla stacks are round: 20, 30, 50, 100. Compounding produces 121, 133, 146, 177, which look like a fault rather than a design.
  • It drifts past the honest amount. Building ended at 3.54x, well beyond the flat 2x this mod ships and defends. A narrow table that quietly widens forever is the x10 mod taking the long way round.

Ending at Bonemass is a complete design and not an unfinished one: by then you have portals, a cart and a longship, which is the game solving hauling on its own.

[0.11.0] - 2026-08-17

Every later boss adds ten percent (off by default since 0.11.1)

A boss now raises the group it is assigned and every group unlocked before it, by ProgressionStep, ten percent, compounding. Building unlocked at Eikthyr is 2x, 2.2x once The Elder is down, 2.42x after Bonemass, and 3.54x with everything dead.

Only three of the seven bosses unlock a group, so without this the whole feature was over by Bonemass and the back half of the game got a reward table that had stopped paying. It also gives the four bosses that unlock nothing something to do, without inventing a category for them or reaching for a second axis like weight.

Ten percent is small enough that it never turns into the x10 mod by accident: six of them on a doubled stack is 3.5x, and StackCap still caps all of it. ProgressionStep = 0 restores flat tiers.

  • ProgressionOrder is new, because "later" needs an order and the tier table never had one. A key that is not listed still unlocks its own group; it simply never counts as before or after anything, which is the honest answer for a modded boss key somebody added to the tiers and not the order.
  • A group still at the base multiplier does not compound. Untouched is untouched, not "unlocked at zero percent".

Untested: the compounding itself. The dev world has only defeated_eikthyr, so no run here has had two keys down at once, so the unlock path and the retune when a key arrives are both verified live, the ten percent is verified only by reading it.

[0.10.1] - 2026-08-17

The table is shorter on purpose

Ammo, food and the catch-all group lost their tiers, and trophies moved to Bonemass. Three entries remain: Eikthyr raises building material, The Elder the crops, Bonemass the metal and the trophies.

A group with no entry stays at vanilla forever, and most of the game's stackables are meant to. A mod that eventually doubles everything is a slower version of the one that doubles it on day one; what is left here is the hauling that is actually repetitive.

  • The portal rule now says when it lifts. Ore read portal-blocked, which is a half-truth once a metal tier exists. It now reads portal-blocked until defeated_bonemass. Tallies match on the rule, so a qualified note still counts under it.
  • "Earned so far" lists only groups a tier can reach. Printing the others at 1x read as a promise that some boss would come for them, and with this table none will.

[0.10.0] - 2026-08-17

Each boss raises one kind of stack

Stacks now start at vanilla and each boss unlocks one group. ScaleWithProgression = false restores the old flat multiplier.

A flat multiplier cannot tell the two halves of this mod's own argument apart. Meadows scarcity is the game teaching you to plan; the ninth trip to the same copper deposit is not teaching you anything.

  • The groups are read off the game's own systems. Building material is whatever appears as a build cost on the Hammer's piece table, crops are the Cultivator's, metal is whatever a portal refuses. So an item a content mod adds lands in the right group by itself, and there is no list here to go stale.
  • An earned metal tier lifts the portal rule. The haul is real pacing during the first copper runs and paid off by the boss that hands you the iron age. IncludeNonTeleportable stays for anyone who wants it sooner.
  • The item list names the boss each group is waiting for, so "why is my wood still 50" is answered in the file rather than by reading the tier table.

It hangs on the world's progress, not each player's

Stack size lives on the item prefab, so per-player stacks would mean two clients holding different item databases. One drops a hundred wood in a shared chest, the other opens it holding a slot over its own maximum, and the next move writes back through the smaller rules. Global keys are world state pushed to every client, so everyone computes the same answer with no new networking, and since keys only accumulate the multiplier only ever rises.

Read through the string global-key lookup, not the GlobalKeys enum: that enum stops at defeated_goblinking in this build, with no defeated_queen or defeated_fader member, so the enum route would have silently capped the ramp at the Plains.

Utangard decides what counts, when it is installed

Utangard opens a biome only when every member of the group was personally at that boss's death, which is not the same as the boss having died in the world. Yoke now asks it rather than reading the raw key, so stacks never arrive for a biome Utangard still has fenced off. Soft dependency; DeferToUtangard = false turns it off, and neither mod needs the other.

Changed

  • The item list gained a Group column, sorts by group, and its header counts describe the state of the database rather than the last pass, so they no longer appear to contradict the Retuned n line in the log, which counts only what that pass moved.

[0.9.2] - 2026-08-17

Added

  • An item list, written beside the config on every run. ezomic.valheim.yoke.items.txt. Every item in the game, its vanilla stack size and weight, what Yoke made them, and which rule left it alone when it did nothing. Off with WriteItemList = false.

    ExcludeItems takes prefab names and prefab names are not guessable: raspberries are Raspberry and a draugr's arrow is draugr_arrow, so a per-item setting without a list beside it is a setting nobody can spell. It doubles as the answer to "why did this item not change", which is the only question a mod like this ever gets, and it answers it without asking anyone to turn on Verbose and read a log.

    The rows are built by the tuning pass as it runs rather than by a second walk over the database. A separate walk would be a second copy of the eligibility rules, and the first thing it would do is disagree with the real one.

Fixed

  • Weights are written with a decimal point on every machine. float.ToString follows the machine's locale, so on a Dutch install resin came out as 0,3, and a comma in a file whose other numbers come from a .cfg that uses points, sitting next to a column of integers. Both the item list and the Verbose log now format invariantly.

Changed

  • The pass logs three counts rather than two: changed, already at those values, and left alone. They add up to the item count now. Retuned 0 on the second setup of a session reads like a failure until you know the other items were already at the right numbers.

[0.9.1] - 2026-08-17

Core is optional

  • Core is now a soft dependency rather than a hard one. Yoke installs and runs on its own, and the Thunderstore package no longer drags Core in with it. Present, Core is used; absent, nothing here is degraded.
  • What is given up standing alone is the version gate, not the mod. Item data that differs between two ends desyncs inventories, and without Core nothing reports that. The ObjectDB.CopyOtherDB patch still puts a joining client on the server's numbers, which covers the common case on its own. Solo, none of it applies.
  • The registration call sits in its own method that is never inlined, because the JIT resolves the assemblies a method needs when it first compiles that method. A Core call written directly into Awake would drag the assembly in before the installed-check could prevent it, and the missing-assembly exception would land during plugin load, which is precisely the failure the soft dependency exists to avoid.

[0.9.0] - 2026-08-16

First complete build. Carried the number 1.0.0 until the release policy above was settled; it was never published under it.

Stacks

  • Stacks double. Wood 50 becomes 100, with a hard ceiling of 200 whatever the multiplier says.
  • Weight is untouched by default. The carry limit still decides what comes home, which is the half of the logistics problem worth keeping.
  • Ore and metal bars are not modified at all. Metal cannot go through a portal, so hauling it by cart and boat is deliberate pacing rather than an oversight. One config line turns it on if you disagree.
  • Equipment is never made stackable. Only items with a vanilla stack size above 1 are touched, because anything that does not stack in vanilla carries per-item durability and quality, and collapsing several into a count throws all but one of those away silently.

Why the defaults are low

The usual version of this mod ships x10 stacks and halved weight, which does not make Valheim more convenient so much as remove a system from it. The tedium and the difficulty are the same mechanic seen from two sides, so the defaults here fix the annoying half and leave the interesting half alone. Everything is a knob if you want the easy version.

Correctness

  • Both ObjectDB.Awake and ObjectDB.CopyOtherDB are patched. Awake builds the database at startup and CopyOtherDB rebuilds it when a world loads, so patching only the first means untouched values quietly replace yours the moment you join a game.
  • Every value is computed from the item's original, captured the first time it is seen and never overwritten. The database is set up more than once, and a mod that multiplies whatever it currently finds squares its own multiplier on the second pass.
  • Loads on dedicated servers, and declares to Core's version gate so a host and a client cannot disagree about stack sizes.

Known limits

  • If another mod changes an item before this one first sees it, that changed value is what gets recorded as the original.