Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Stavebound
Travel to any portal off the map. What you may carry through is decided by the staves standing at the far end.
| Date uploaded | 19 hours ago |
| Version | 1.2.1 |
| Download link | MinionFactory-Stavebound-1.2.1.zip |
| Downloads | 64 |
| Dependency string | MinionFactory-Stavebound-1.2.1 |
This mod requires the following mods to function
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.2333ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.30.0README
Stavebound
Valheim will not let you carry ore or metal through a portal. You sail it home instead, and that sail is meant to be the price of the metal.
Letting every portal carry everything throws that away. Still hauling copper by boat long after the Elder is dead is just tedious. Stavebound sits between the two. Kill a biome's boss and you can build its stave; stand one beside a portal and that portal will carry that biome's ore — and only that biome's.
It also drops the pairing. Normally two portals connect by being given the same name; here you interact with a portal and pick where it leads off the map, from every portal in the world. Where it leads belongs to the portal rather than to you, so everyone who walks in arrives at the same place, until somebody points it somewhere else. Walking in still travels, exactly as it always did.
The staves are the part worth having. Build an Elder's Stave beside a portal and that portal will accept copper, tin and bronze. It will still refuse iron — until you go and build a Bonemass's Stave there too, and it says so in as many words:
Iron cannot enter "Copper Mine" — no Bonemass's Stave there.
One end of a trip needs the right stave. By default either end counts, so a portal with a Bonemass's Stave beside it both receives iron from anywhere and sends iron anywhere. Only a trip between two portals that both lack one refuses iron. Which end has to have the stave is the setting most worth knowing about; see Which end counts.
A portal tells you before you step through it. Standing next to one, its runes go dark if you are carrying something it will not take. Open your inventory there and the stacks it will not take are marked. Walk in anyway and it tells you which resource stopped you, and which stave would have carried it.
Installing
Built for Valheim 1.0 and needs Jotunn 2.30.0 or newer — earlier Jotunn predates the game's
1.0 release. With a mod manager both it and BepInEx arrive as dependencies and there is nothing else
to do; by hand, drop Stavebound.dll into BepInEx/plugins.
Install it on the server and in every player's game. The server works out what each portal accepts; each player's game needs it for the map and the check when you travel. The rules come from the server, so no one player can loosen them for themselves.
Removing the mod removes its pieces, so any staves you built will vanish — normal for any mod that adds buildables. The extra data it writes is harmless to an unmodded game.
The staves
Each is built from that biome boss's trophy plus a little of what the biome gives you. Stand one within ten metres of a portal and it starts working on that portal. Nothing to connect or configure.
| Stave | Costs | Lets through |
|---|---|---|
| Elder's | The Elder trophy · 10 copper · 20 stone | Copper, tin, bronze |
| Bonemass's | Bonemass trophy · 10 iron · 20 stone | Iron and scrap iron |
| Moder's | Moder trophy · 10 silver · 20 stone | Silver, dragon eggs |
| Yagluth's | Yagluth trophy · 10 black metal · 20 stone | Black metal |
| Queen's | The Queen trophy · 3 dvergr extractors · 20 stone | Dvergr extractors, mechanical springs |
| Ashen | Fader trophy · 10 flametal · 20 stone | Flametal and the Ashlands' spoils |
Each stave works on its own, so a portal with Moder's Stave beside it takes silver while still refusing iron. Nothing makes you build them in order.
While you are holding a stave, a beam shows which portal it would work on, and if none is close enough, a circle shows how far it would reach.
Which end counts
Every trip has two portals: the one you step into, and the one you come out of. MaterialFlow, under
2 - Clearance, decides which of them needs the stave. It is one rule for the whole world, set on the
server, and it changes how the mod feels more than anything else here — so it is worth settling before
you start a world.
| Which portal needs the stave | What that gives you | |
|---|---|---|
Both (default) |
Either one | A stave covers arriving and leaving, so ore moves freely between that portal and anywhere else. Only a trip between two portals that both lack the stave is refused. The most forgiving: a stave you forgot to build leaves nothing stranded |
Receive |
The one you come out of | The strictest, and what the mod was designed around. A mining camp with no staves can send ore home forever and never receive any back. Ore only moves towards the places you have built staves, and a camp stays cheap and one-way |
Deliver |
The one you step into | Receive reversed. A well-equipped base can supply a bare camp with anything, but that camp cannot send its own ore home until it has staves of its own |
Under all three, ore that neither portal has a stave for never moves. None of these lets you carry something you have not earned; they only decide which end has to have earned it.
One thing to know about Both, since it is the default: with a base that has every stave, ore can
reach anywhere in two trips — camp to base, then base to another camp. A direct trip between two camps
still needs a stave at one of them. If that feels too loose once you have played it, switching to
Receive restores the stricter rule.
Controls
| E at a portal | Open the list of destinations |
| Shift+E at a portal | Rename the portal, as the base game does |
| ← → | Move through the list |
| P | Confirm |
| Escape | Cancel |
| O | Sort by distance or name |
| K | Show only destinations that accept what you are carrying |
Every one of these can be changed under 5 - Selector keys, and each has a gamepad button beside it.
The whole list is playable on a controller.
Or use the mouse. The keys move through the list and P picks; a click picks straight away.
| Click a destination, or pick one from the dropdown | Choose it |
| Click a portal's pin on the map | Choose it and close the map |
| Mouse wheel over the list | Move the highlight — the map does not zoom |
| Hover a destination | Show it on the map without choosing it |
| The buttons along the bottom | Do the same as their keys |
The portal nearest your bed is drawn in light blue, and every other destination's pin is orange while
you are choosing. Every mouse behaviour above, and both colours, can be switched off under
8 - Selector.
Settings worth knowing
| Setting | Does |
|---|---|
ReaimPermission |
Who may change where a portal leads — anyone, only players a ward permits, or admins |
MaterialFlow |
Which end of a trip needs the stave. Both by default — either end. Receive: only where you arrive, so mining camps are one-way. Deliver: only where you set out |
StaveRadius |
How close a stave has to be to the portal it works on. Ten metres by default |
PortalBinding |
Whether a stave works on only the nearest portal, or on every portal in range |
StrictLadder |
Off by default. On, a portal stops at the first stave you have not built there: with Moder's but no Bonemass's, it takes copper and refuses both iron and silver |
SealedItems |
Resources no stave ever carries. Bloodgold and Petrified Tissue by default |
SeamlessTransit |
Off by default. Ends the loading screen as soon as the far side is ready, instead of always waiting eight seconds. Somewhere your game has loaded recently skips the screen altogether |
ShowBlockedCargoOverlay |
Marks the stacks a nearby portal will refuse, when you open your inventory beside it |
HidePortalNames |
Hides portal names in the list, if you would rather find places on the map |
PortalNameLength |
How long a portal's name may be. 32 by default, where the base game allows 10, and the list widens to suit. Set it to 10 to keep the base game's limit |
ClearLeftBehindBodies |
On by default. Removes the copy of another player left standing at a portal after they travel. The game stops telling you where they went, so your game asks for them |
ClickPicksPortal |
On by default. Clicking a destination in the list or dropdown picks it at once; off, a click only highlights and the confirm key picks |
MapClickPicksPortal |
On by default. Clicking a portal's pin on the map picks it and closes the map; off, it only highlights |
ColourHomePortal |
On by default. The portal nearest your bed is drawn in its own colour |
ColourPortalPins |
On by default. Destination pins on the map are orange while choosing, so they stand out from your own pins |
HoverPreviewsOnMap |
On by default. Hovering a destination shows it on the map |
WheelScrollsList |
On by default. The mouse wheel over the list moves the highlight instead of zooming the map |
Two resources are sealed: the Deep North's Bloodgold and Petrified Tissue. No stave carries them
and none ever will — the base game moves those by stone portal and nothing else, and this mod leaves
that alone rather than selling them back to you for a trophy. If you disagree, SealedItems is the
list of what counts as sealed.
Which resource belongs to which stave can be changed too, under 2 - Clearance. The list of
resources portals refuse is never written by hand — the mod reads it from the game at startup, so an
update that adds a new ore cannot break it. Anything the mod does not recognise needs the last stave,
the Ashen — and is named in the log, so you can move it somewhere more sensible.
LogNetworkSync is off by default. Turn it on before reporting two players' games disagreeing
about a portal: it writes down everything the mod sends and receives, which is the first thing anyone
will ask you for.
A changed default only reaches a config file that has not been written yet. If you have played an
earlier build, your com.recognizerhd.stavebound.cfg keeps the values it already has — edit it, or
delete it and let the game write a fresh one.
Console commands
Type help in the F5 console for the full list. The useful ones:
stave_portals— every portal this game knows of, where it leads, and which staves stand beside itstave_items— every resource the game will not teleport, and which stave carries itstave_net— whether your game and the server agree about portals. Run it on both and comparestave_players— where each player is, according to your game and according to the server. For working out why a player looks like they are still standing at a portal after travelling
None of these need devcommands — only the console, which you can switch on in the game's settings.
A note on cheating
What you are carrying is checked by your own game, because that is the only place your inventory exists. Someone determined could get around it. This is a rule for playing with people you like, not anti-cheat — the server decides what each portal accepts, never what is in your pockets.
Licensing
Code: MIT — see LICENSE.
Valheim and its assets are the property of Iron Gate Studio. No game files are redistributed here. The mod builds its pieces by recolouring one that already exists in the game rather than shipping any art of its own.
CHANGELOG
Changelog
1.2.1 — 2026-09-29
Opening your inventory no longer costs you most of your framerate. Since 1.2.0, opening the inventory or a chest dropped the game to 15-30 FPS and held it there for as long as the panel was open — on any world, including a brand new one with no portals built in it.
The overlay that marks the stacks a portal will refuse has to know which portal you are standing at, and it asked the game to find that by searching the whole scene. That search costs the same whether the world holds fifty portals or none, and the inventory panel redraws every frame — twice, with a chest open. The mod now keeps a list of the portals loaded around you and reads that instead, which is the same answer for none of the cost.
If you turned the overlay off to get your framerate back, turn it back on. Set
ShowBlockedCargoOverlay = true and CargoPreviewRange back to 8 in
com.recognizerhd.stavebound.cfg. Nothing rewrites a config file that already exists, so those have
to go back by hand.
Also fixed, from the same pass: in a world whose TeleportAll key lets everything through portals, the
overlay marked stacks the game would have carried. It now only ever removes one of the base game's
marks, never adds one.
Safe to update alone. A patch release, so this and 1.2.0 still connect to each other, and the fix asks nothing of the server.
1.2.0 — 2026-09-17
Everyone has to update together this time. Stavebound will not connect across different minor versions, so a 1.1.x player cannot join a 1.2.0 server, or the other way round. Update the server and every player at the same time. (1.1.1 was a patch release, which is why that one could be taken up one player at a time.)
Portal names can be 32 characters, against vanilla's 10, which runs out fast
once a world has enough portals to tell apart. The selector's panel widens to
suit, so a full-length name still fits a row whole. PortalNameLength sets it
anywhere from 10 to 32.
Set on the server, so every portal in a world is named under one rule — though a player on an older build still types under vanilla's 10 while seeing everyone else's longer names normally.
1.1.1 — 2026-09-15
A player who walks through a portal no longer leaves their body standing there on everyone else's screen, still emoting, until those players teleport somewhere themselves.
That was the game's doing, not this mod's: your position travels only to players
near you, and a portal is the one way to leave an area without crossing its edge,
so everyone watching keeps their last copy of you — at the portal — forever. It
shows up here because portals are what this mod is for, so it is fixed here.
Nothing is faked: your game asks the server for a fresh copy of anyone who looks
stuck, and the game then clears the body itself. ClearLeftBehindBodies turns it
off.
Safe to update alone. This is a patch release, so 1.1.1 and 1.1.0 still connect to each other. The fix is entirely on your own machine and asks nothing of the server, which does not need updating — or even to be running this mod.
1.1.0 — 2026-09-14
Update the server and every player together. Stavebound refuses to connect across minor versions, so a 1.0.0 player cannot join a 1.1.0 server, or the other way round. That is the check working as intended — it stops two builds quietly disagreeing about portals — but it means nobody can update alone.
The destination selector works with a mouse. Each destination is a clickable row with its clearance chips right-aligned; a dropdown lists them all; the key hints along the bottom are buttons; the wheel scrolls the list without zooming the map; and hovering a row pans the map to it. Arrow keys and gamepad still highlight and the confirm key still picks — a click picks straight away, and clicking a portal's pin on the map picks it and closes the map.
Your home portal stands out. The portal nearest your bed is coloured in the list and on the map, and every other destination's pin is orange while you choose, so the selector's pins no longer blend in with the ones you placed yourself.
Every mouse behaviour is a per-player setting under 8 - Selector.
stave_players, for diagnosing a player who looks left behind at a portal
after going through. Needs the console, not devcommands.
Fixed: with the cargo filter emptying the list, pressing confirm or the arrow keys crashed. Fixed: closing the selector could leave the map open, because it checked a flag the game never changes. Fixed: clicking the map to choose a destination read the pointer through Unity's old input API, which the game stopped using in 1.0.
1.0.0 — 2026-09-10
Valheim 1.0 compatibility. 0.9.0 does not run on 1.0 — update.
Numbered 1.0.0 because it has now been played on a real network and on the game's own 1.0 release, and nothing in it is known to be wrong. The costs in the ladder still have not been tuned over a long game — that is a dial, not a defect, and every one of them is config.
Two things the game moved out from under the mod. The inventory grid's slot type
was promoted out of InventoryGrid and its position field became a property,
which the cargo overlay reads. And portal ZDOs are now bucketed by sector, so the
call the server sweeps use to list every portal returns a dictionary rather than
a list — there is a new one with the old shape, and the sweeps use it.
Jotunn 2.30.0 is now required, since 2.29.2 predates 1.0.
The Deep North's metals are sealed. Bloodgold and Petrified Tissue cannot
travel by portal at all, whatever a site has built — the base game moves those
by stone portal and nothing else, and this mod now leaves that alone instead of
selling them back to you for a Fader trophy. The refusal says so in its own
words rather than naming a stave that would not have helped. SealedItems is
config if you disagree, and a stone portal is unaffected either way.
The staves are filed under Transportation in the build menu and carry the up-arrow vanilla puts on upgrades. On 1.0 they were appearing only under "show all".
The categories are worked around rather than fixed upstream: Jotunn has not yet ported them to 1.0's rebuilt build menu, so the mod sets each piece's category itself once Jotunn is done registering.
Everything else came through 1.0 unchanged — every patch target, every private field read, and the teleport timing seamless transit depends on were all checked against the new assembly rather than assumed.
0.9.0 — 2026-09-06
First release. Both features have been played in single player and confirmed on a real network. Numbered 0.9 rather than 1.0 because the costs have not been tuned over a long game, not because anything is known to be wrong.
Any-portal travel. Interact with a portal to pick any portal in the world off the map. The choice belongs to the portal and applies to everyone until someone re-aims it. Pointers are one-way: aiming a portal at your base does not make the return trip. Vanilla tag pairing still works untouched on any portal nobody has re-aimed.
Destination clearance. Six staves, each bought with a boss trophy and a little of the metal it unlocks. Stand one near a portal and that portal accepts those metals — and refuses the rest by name: "Iron cannot enter "Copper Mine" — no Bonemass's Stave there." Only the destination is ever checked, so an outpost with no staves can send ore to your base forever and never receive any.
Knowing before you commit. The portal's runes go dark when it will refuse what you are carrying. Inventory slots mark the stacks that cannot make this trip while you are near a portal, rather than the ones that can never teleport at all. Walking up gets you the reason in words. Holding a stave shows its range and a beam to the portal it would bind to.
Optional seamless transit. Off by default. A destination already in memory skips the loading screen; one that is not shows it for as long as loading actually takes, rather than for vanilla's fixed eight seconds.
Five console commands for looking at what the mod believes: stave_portals,
stave_aim, stave_net, stave_items, and the prefab tools
stave_prefabs / stave_inspect / stave_preview.
Which end pays. MaterialFlow decides whether a site's staves count for
arriving, departing, or both. Both is the default: either end is enough, so a
site with an iron stave takes iron from anywhere and sends it anywhere, and only
two sites that both lack iron cannot pass it between them. Receive is the
sharper original rule — only the destination counts, so outposts are one-way.
Deliver mirrors that, for supplying a frontier rather than feeding a capital.
Known gaps
Clearance and MaterialFlow have both now been played on a real network, which
were the two things holding this back. LogNetworkSync defaults off as of
that confirmation — turn it on before reporting anything about portals
disagreeing between machines.
What is left is judgement rather than correctness, and is listed in TESTING.md:
the §4 costs have never been tuned, and whether Both is the right shipped
default is an open question about how it feels over a long game.