Longhouse 0.1.0
16 August 2026.
First assembly of the pack. Not published.
Members
Six mods. Devkit is deliberately absent, and so is every mod that is published on its own or has not been played.
| Core | the version gate the rest depend on |
| Yoke | quality of life |
| Rist, Utangard | progression and pressure |
| Vaettir, Dyrr | the spirits, and the door policy |
Held out, each for its own reason: Thralls, Tether, Stoker and Dovetail have never been played through; Surge, Fiends and Delve are published on their own; Nidling is a creature, and a published creature commits the suite to its prefab name forever; Saga writes per-player state and is at 0.1.0. Stow and Furrow are not separate mods any more - both ship inside Vaettir, so the pack gets them through that member.
Generated pins
- Pins are built by
tools/build-manifest.ps1from each member's ownmanifest.json, so a pin cannot drift from the version that mod actually publishes. - A missing or malformed member is a loud failure rather than a shorter pack. A pack one mod short leaves every player failing Core's version gate for a reason none of them can see from inside the game.
- That failure did its job and was then ignored: the list named
witherafter the mod became Utangard, so the generator refused to run and the manifest was hand-edited for two days instead. The pins here are generated again.
Known limits
- Nothing in this pack has been published, so none of the pins resolve on Thunderstore yet. The pack is assembled ahead of the uploads rather than after them.
- Several members are at 0.x and have never been run in a session. The pack pins what exists, not what is finished.
What moved · 6
Core joins at 1.0.0
1.0.0
Core is what the suite actually needs from it and nothing else.
Removed
The deed registry and the soft-reference asset loader are gone. Both were written for mods that are not in this release, and shipping the plumbing for something nobody can install is how a shared library turns into a junk drawer. They live on the
discussdeeds-and-softrefbranch and come back with the mods that use them, not before.The
discussSoftReferenceableAssetsreference goes with them, so Core now builds against assembly_valheim, assembly_utils, four Unity assemblies, BepInEx and Harmony.
Changed
The README describes all three of the things this does. It described two, and the inventory height had never been written down anywhere a person would look.
discuss
discussEnforceBuildsis in the config table. It has been in the config file since 0.2.0 and missing from the documentation for exactly as long.
Dyrr joins at 1.0.0
1.0.0
First published release.
The number means published and nothing else. It sat at 0.9.0 while the repo was public and Thunderstore had nothing on it, because a 1.0 with no package behind it claims a release that does not exist, and because a Thunderstore version can never be reissued once uploaded - so the number had to be spent on the build that actually ships rather than on one that drifted away from it on disk.
Everything below this line was already true at 0.9.0. Nothing about the mod's behaviour changed to get here.
Renamed from Threshold, 2026-08-18
The config file. BepInEx names it after the plugin GUID, so a rename hands everyone a file of defaults. That is not merely lost preferences:
discussEnforcedefaults to off, so a server that had the door on would quietly have it off with nothing said. The plugin now copiesezomic.valheim.threshold.cfgto its new name on first run, before binding anything, and leaves the old file alone.The character bindings.
discussthreshold-home.txtis adopted the same wayboon-home.txtalready was, and the fallback is now an ordered chain rather than a single name, so a machine that skipped a release cannot fall between the two. Losing these would hand every character one free trip to another world, silently and exactly once, and that trip has no undo.
Fixed since the split
The dedicated server no longer binds a character it does not have. A server has a
discussPlayerProfileobject with nobody behind it, so the binding ran there too and minted a fresh phantom id on every startup, one junk line per restart, forever. Binding now requires a local player, which is also the more correct moment: a character has not played anywhere until it spawns.Bindings are adopted from Rist's
discussrist-home.txton first run ifdyrr-home.txtdoes not exist. Without that, moving the feature between mods would have silently unbound every character on the machine and handed everyone one free trip to another world.
Verified against a real dedicated server
Both branches, which matters more than it sounds. It refuses a character that has been elsewhere, with the reason on the client's own screen and in its own log, and it admits a clean character on an enforcing server. Until the second one happened, "works" and "refuses everybody" were indistinguishable, because every test until then used a character that had genuinely travelled.
Also confirmed: the menu guard's binding, the adoption of bindings from Rist's old
rist-home.txt, and restoring a character backup as the documented recovery. A refused
character came back from backup and was admitted.
Every server must enforce
Found by running two servers, one enforcing and one not. The menu guard covers local worlds
only; the door covers servers only where Enforce is on. A non-enforcing server is therefore a
hole a bound character walks into, and all the mod can do afterwards is log "too late to stop
it - that world is now written into the character". The lenient server is the one that ruins
the character.
Enforce on every server, and keep a separate character for each.
Known limits
discussRefuseCheatsis untested; it needs a character deliberately flagged bydevcommands.
Rist joins at 1.0.1
1.0.1
Documentation and the text players read, with no change to what the mod does.
Threshold is Dyrr
The companion mod that decides who may join a world was renamed, and Rist pointed at the old
name in two places that matter: the config descriptions, which are read by anyone who opens
rist.cfg, and the notes on what Rist deliberately does not do. Both now say Dyrr.
The README is shorter
The design argument and the technical notes moved to DESIGN.md, leaving the README as what
someone reads before installing. The reasoning is all still there, one link away, rather than
in front of a reader who only wanted to know what the mod is.
Its two links are absolute now. Thunderstore builds the package page from the README alone, so
a sibling-folder path pointed at nothing there and DESIGN.md is not in the zip at all - both
would have rendered as dead links on the store page and nowhere else, which is the kind of
fault you only see after publishing.
Em-dashes are gone from the docs throughout.
Utangard joins at 1.1.0
1.1.0
An API for other mods to ask what the group has earned
UtangardApi.GroupHasKey(bossKey) answers the one question this mod knows and nothing else
does: whether the group has earned a boss, rather than whether the world has merely seen it
die. Those two answers part company the moment somebody is offline for a kill.
It exists because Hoard scales stack sizes by world progression. Reading the raw defeated_
key there would hand out Plains-era stacks for a biome still fenced off here, which is two mods
disagreeing out loud about the same word in a way that reads as a bug in whichever one the
player happens to be looking at.
A facade rather than making Progression public: the roster, the latch and the deadline are
nobody else's business. Read-only by construction, so a consumer cannot open a biome by asking
about it.
The README is half the length
The source-code archaeology moved to DESIGN.md - why Character.OnDeath credits one player
rather than all of them, what the global keys are called and why, and the handful of things
that were nearly bugs. None of it is needed to play, and it was sitting between a new reader
and the part that says what the mod does.
Nothing about the gameplay changed in this release.
Vaettir joins at 1.0.0
1.0.0
First release. The number sat at 1.0 once before, early, and was taken back down when whole mods arrived on top of it without it moving. This is the version that earns it: one chain, finished, with everything that was not finished cut out and held on its own branch.
The chain, played end to end in a real world: an ancient seed planted, fed on greydwarf deaths through its growth, opened into a forest spirit, communed with, and the heartwood carried away and built into a stowing post that sorts the chests around it.
The sapling
Plant an ancient seed in the Black Forest. It does not grow on time, it grows on death, and only on the deaths of greydwarfs, and only within sight of it. About thirty of them and it opens, which is one raid if the forest comes to you.
discussGreydwarfs specifically, not "forest creatures". An early version used the game's own forest faction and swept up trolls, boars and the Elder, which turned clearing out a nest into killing anything anywhere near here. Greylings are on the list at zero, so it is visible that they were considered and refused.
discussIt can be destroyed, because being asked to fight for an hour beside something you cannot lose is not defending it. Around ten hits from a brute: a fight happening nearby is survivable, a mob left to work on it is not. It says when something is chewing on it and when it is gone, because losing an hour in silence is a mystery rather than a difficulty.
discussOne hand-built model, with its own icon so the cultivator stops offering a carrot. Built to the game's own measurements rather than to taste, because smoothness is most of what reads as modded and nothing else in the game at that size is round.
discussThe sapling does not change shape as it fills, and the hover text is what tells you how far along it is. Four staged models exist and work, and three of them were not good enough to ship, so the staging is held for 1.1 rather than released and apologised for.
discuss
The spirit and the heartwood
The sapling opens into a forest spirit. Light with no body, bobbing and pulsing, and waking as you approach. Two rings of beads turn around it in step with each other, with no visible hoop, so it reads as one thing turning rather than as a swarm.
discussPress use once and it folds itself into a piece of heartwood you carry away. It is a home rather than a heart: the spirit does not die and hand over a piece of itself.
discussBuild the heartwood somewhere and you have housed it.
discuss
The stowing post
One mod, not two shipped together. Stow arrived carrying its own
discuss[BepInPlugin], and leaving it there meant one DLL announcing two plugins in the log, writing two config files, registering with Core's version gate twice, and reporting two different version numbers. It reads as two mods in a trenchcoat, and it was one. The post's half is now driven by Vaettir's own plugin class: one GUID, one config file, one Harmony instance, one registration.Nothing you have built is affected. The piece keeps its internal name, so posts already standing survive.
discussIts settings moved into
discussezomic.valheim.vaettir.cfg, under[Post],[Sorting],[Carrier]and[Keys]. Anyone who had tunedezomic.valheim.stow.cfgcopies those values across once; nothing reads that file any more.Delete
discussBepInEx/plugins/Stowif you are upgrading by hand. Two copies loaded at once is the one thing that will go wrong.One spirit, not two. Each mod used to build its own from its own script and they had drifted into visibly different creatures. There is one now, and the carrier is that one at 0.62 scale so it is the size it has always been on screen. Set the scale to 1 for a full-size spirit.
discussOne setting still drops the heartwood from the recipe and puts the post back to wood and nails, for anyone who wants the sorting without the ritual.
discussA spirit carries ten items a trip, so a stack of fifty wood leaves the post in five trips rather than crossing the room in one. A big load looks like a big load.
discussItemsPerTripsets it and 0 restores the whole stack. This is the number the post upgrades are meant to raise.The carrying spirit and the one you commune with are the same creature, which took three passes to actually mean. The merge gave them one mesh; they still resolved their material through two different lookups against two different donor lists, and even once that was fixed only one of them glowed. The glow is a Light and an emission write, and the carrier had half of one, so the room around it lit up while its own mesh stayed flat. Colour, range, pulse depth and pulse period were each a second value too.
discussThe last of the seams from when these were two repos are gone. Icons and PropIndex each existed in two diverged copies, one per old namespace, and the comment justifying that said a copy was better than reaching into a sibling repo. There is no sibling repo.
discuss
Requires
Longhouse Core is optional. Without it nothing refuses a client that lacks this mod, and that matters: the sapling, the spirit, the heartwood and the post are registered pieces, and a client that cannot resolve one throws the object away rather than erroring. A server without Vaettir silently destroys everything already standing. Solo, none of that applies.
Known gaps
Dedicated servers are untested. Everything here has been exercised in single-player. Each spirit, sapling and post is driven by whoever owns it, so co-op should be fine, and should is doing real work in that sentence.
discussThe spirit's parting has no effect on it. The setting names a vanilla particle to play where it stood and ships blank, because a wrong name costs the moment its flourish rather than breaking anything. It is a flourish that is missing, not a step that fails.
discussThe sapling stirs while it grows, and that motion is new enough that it has had far less play than the rest of the chain.
discuss
Held for later releases
1.2 - sowing a rank of seeds by Farming skill, and the sapling's staged growth. The staging works and has been played; three of its four models were not good enough. It sits directly behind 1.1 rather than ahead of it because the staged models are the visible half of the same piece, and it is worth knowing how a sapling plays once it is worth standing next to before choosing how it should look while you do.
discuss1.3, a refinement pass - better animation throughout, and the post's own panel: fetch, tidy and presence. All three were built and none of them were proven, and with the three of them out the panel had nothing left in it, so it goes whole.
discuss1.4 - bonemeal, and the bone mill that grinds it.
discuss1.5 - upgrades for the stowing post. It starts out carrying ten items a trip and each upgrade raises that, so a post becomes something you improve rather than something you finish. It also gives the heartwood somewhere to go after the post is built.
discuss1.6 - an upgrade that houses a second spirit, so two stacks are in the air at once rather than one moving faster. Two of them working is worth watching; one of them hurrying is a number.
discussUnscheduled - the vaettr visitor and the market they were to stand in.
discuss
Late fixes
A dropped heartwood no longer falls through the floor. Stripping the donor's mesh took the collider with it, because on that donor both live on the same object, and an item with weight and nothing to rest on simply keeps going. Found by throwing one away.
discussThe spirit's parting effect setting was renamed before release rather than after, when it would have stranded the old key in other people's configs.
discuss
Archived history
Stow and Furrow were separate repos before this. Their history is in archive/, one git
bundle each, clonable with git clone archive/stow.bundle. See archive/README.md.
Yoke joins at 1.0.0
1.0.0
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.
Discussion
Nothing said yet.
Sign in or make an account to join in.