Getting Started

Updated a week ago

HeimKit adds independently configurable quality-of-life features to Windows Valheim dedicated servers. Install it on the server; players use unmodified clients. Linux is not supported. See the supported environment for current game and loader requirements.

All ten HeimKit features

Install or update

Stop the server gracefully and wait for saving and shutdown to finish before replacing plugins. Back up the world, the active configuration and both HeimKit/SharedMap/ and HeimKit/ForestRenewal/ directories beneath the active configuration directory. Restore each store together with its matching world backup. Follow the backup guide and read safety and limitations.

Thunderstore Mod Manager: Use a separate dedicated-server profile, install HeimKit and its required BepInExPack Valheim dependency, and launch through the manager's server mode. Point it at the folder containing valheim_server.exe. If server mode is unavailable, install manually.

Manual installation: Install BepInExPack Valheim beside valheim_server.exe, then place HeimKit.dll in BepInEx/plugins/HeimKit/. Keep only one HeimKit DLL in the active installation and launch with the server's normal script.

For updates, use the same profile or replace the DLL in the same active location. Preserve heimkit.cfg and the world-specific plugin stores. See installation details for server paths and launch arguments. Release notes are on the package's Changelog tab.

Choose your features

Startup creates heimkit.cfg in the loader's active configuration directory, preserves existing values and adds missing defaults. The startup log gives its full path. Do not overwrite it with the reference config.

All ten features default enabled in a fresh configuration. DoorKeeper, ForestRenewal, SeaSalvage, TameTravel and HeimMender also default enabled when their settings are first added during an upgrade. Review the guides and disable any features you do not want.

Change the owning section's Enabled value. HeimMender reloads its section during play; other sections require a server restart.

Feature and guide Config section What it does
InfiniteTorches Torches Refills eligible torches and braziers without inventory fuel. Optional fireplaces are described below.
WeatherGuard WeatherGuard Protects player-built structures from rain and underwater wear while preserving creators. Combat, repair and structural support remain native.
AFKNightWatch AFKNightWatch Configurable majority sleep and inferred-AFK exclusion. Native bed and time requirements remain.
AFKRaidWatch AFKRaidWatch Excludes idle-only locations from new automatic raids. Active or uncertain nearby players retain eligibility.
SharedMap SharedMap Saves community exploration and discoveries, shared through vanilla cartography tables.
TameTravel TameTravel Brings explicitly following or portal-waiting supported tames through linked player-built portals outside dungeons.
DoorKeeper DoorKeeper Closes eligible player-built doors and gates after a delay once the doorway is clear.
ForestRenewal ForestRenewal Renews supported stumps or confirmed-cleared stump locations with matching vanilla saplings, subject to delay, chance and clearance rules.
SeaSalvage SeaSalvage Recovers eligible settled sunken loose items into floating cargo crates while preserving item data. Tombstones are excluded.
HeimMender HeimMender Gradually repairs existing damaged player-built structures without materials. Also supports bounded administrative repairs.

Regular player-dependent work pauses when nobody has joined the world and resumes after a player spawns and native services are ready. Configuration stays enabled during this pause.

InfiniteTorches: optional fireplaces

Under [Torches], IncludeFireplaces = false excludes campfires, hearths and bonfires by default. Enable it and choose the desired types with Campfires, Hearths and Bonfires. Those three switches default true but do nothing while IncludeFireplaces is false. Existing torch/brazier lists are preserved. See the fireplace settings.

SharedMap: Read Map and marker options

Choose Read Map at a vanilla cartography table to receive shared exploration and markers. Exploration is collected even before a table exists and persists across restarts. Shared death pins are filtered; personal death markers remain.

These settings belong in [SharedMap]. Marker options are independent; their configuration keys retain the Sync suffix.

Option Setting Default Purpose
Portal Marker PortalMarkerSync true Named player-built portals; blank tags use NoName.
Resource Marker ResourceMarkerSync true Outdoor Copper, Tin, Silver, Obsidian and supported static Flametal deposits. Silver requires qualifying pickaxe discovery.
Dungeon Marker DungeonMarkerSync true Labeled exterior dungeon entrances with hammer markers.
Dungeon pickup progress DungeonLootProgress true Supported remaining-pickup percentages after observed entry or verified already-picked items. False keeps plain entrance names and saved progress.
Runestone Marker RunestoneMarkerSync true Placed lore-runestone landmarks, including eligible points in community-explored terrain.
Spawner Marker SpawnerMarkerSync true Visible, destructible recurring sources. Confirmed source destruction removes the shared marker; killing spawned creatures does not.
Player uploads AllowPlayerMapWrites true Accept terrain/pin uploads through Write Map. False leaves automatic collection and Read Map active.
Shared X marks SharePinCheckmarks false Share checkmarks through accepted Write Map uploads. An X does not request deletion.

Previously explored resource/dungeon discovery is separately optional and defaults off. Runestone and spawner discovery includes eligible points in saved community exploration. Resource markers exclude scraps, dungeon resources and creature sources. Tin shows node counts; Copper and Silver show remaining mining-section percentages. Resource spacing retains discovery history while hiding crowded publications. Dungeon percentages measure supported pickups, not enemies defeated or overall dungeon completion; established percentages remain visible while temporary empty scans await confirmation.

Read Map again after table reconciliation. See the SharedMap guide for grouping, spacing, discovery and configuration, and client map limitations for existing personal copies and publication updates.

SharedMap: Portal Marker, Resource Marker, Dungeon Marker, Runestone Marker and Spawner Marker

Remove an unwanted shared pin

Use the server-side request file while SharedMap is enabled, the server is running and someone has joined. Clicking a marker, adding X and choosing Write Map does not delete its shared source.

  1. Under the active configuration directory, open HeimKit/SharedMap/. Match the request filename to the world's map prefix: for world-0000000000000123.map, use world-0000000000000123.pin-admin.request. Substitute your actual world prefix.
  2. Save a UTF-8 request containing find Vile, replacing Vile with the full case-sensitive label. Check the server log results and copy the intended pin's complete ID, using its owner, icon and location to distinguish matches.
  3. After the accepted request is consumed, recreate it with remove <pin ID>, replacing the entire placeholder with that ID. Read Map after the cleanup sweep and replication.

To permit future uploads of that exact record again, use allow <pin ID>. This removes the exclusion; it does not recreate the pin. Ensure the filename ends in .request, not .request.txt. See the full pin administration guide.

TameTravel: follow, stay and portals

Supported adult tames are wolves, boars, lox, asksvin, hens and moose. Stand near the uniquely closest eligible tame when asking it to follow or wait.

Normal chat Vanilla emote fallback Action
!follow /comehere Follow through successive portal trips until stopped.
!stay /nonono Stop your nearby followers/waiting animals and cancel portal permission.
!wait /wave Stop following but keep one nearby portal trip authorized for an associated animal.
!tame — Show command help.

Wait for private HUD confirmation. Follow/wait selection defaults to eight metres; Stay addresses up to sixteen associated animals within thirty-two metres. Closely packed animals can make follow/wait selection ambiguous. Ordinary chat follows native delivery rules; use the emote fallback if no response arrives. Unknown slash commands such as /follow cannot be added to unmodified clients.

Use /comehere once, then enter a linked player-built wood or stone portal yourself. The tame must be near you and the source portal; it need not fit through the doorway. At the destination, walk clear to leave room for checked placement. Ordinary above-ground buildings and suitable static ruin floors can qualify; dungeons, riding and juvenile/summoned creatures are excluded.

Stay clears saved following and cached AI targets before confirmation. Logout stops associated followers, and startup clears interrupted HeimKit sessions. A fresh follow request can reclaim a stale follower from an offline player; connected players remain protected. Older unmarked wolves retain native following until a fresh authenticated Stay. See the TameTravel guide and travel limitations.

TameTravel: authorize following, use a linked portal and reunite after checked placement

HeimMender: live settings and administrative repairs

Save edits to [HeimMender] in the existing heimkit.cfg; this section reloads during play, including Enabled and DebugMode. Invalid values retain the previously loaded settings. Other feature sections still require a restart.

For a configuration-driven repair batch, set RepairTarget to the exact joined player name or peer UID, increase RepairRequestId, and save. Repairs are bounded by AdminRadiusMeters and AdminMaxPieces. An empty target requires one ready player; startup never replays the saved request ID. Destroyed pieces, world ruins, furniture and containers are outside its repair scope. See HeimMender administration for the dedicated-server console and authenticated admin-chat alternatives.

Sleep, AFK and diagnostics

Default sleep requires strictly more than half of participating players: one of two is insufficient; two of three is enough. At least one living player must be in bed. The default delay is thirty seconds after reaching the threshold; everyone entering bed bypasses it.

Shared [PlayerActivity] defaults to five minutes without observed activity and one minute of join/recovery grace; both must have elapsed. Health loss does not reset AFK. Named AFK entry/exit notices appear without debugging. See AFK limitations.

Logs include local timestamps and feature topics. Enable the relevant DebugMode and permit Debug in the loader's log filters. Under [Diagnostics], DebugVerbosity = Normal gives concise evidence; Verbose adds details only when debugging is already enabled. WeatherGuard combines routine weather-prevention results into nonempty ten-minute summaries. See debug configuration.

Troubleshooting

  • Not loading: Check the active server/profile's BepInEx/LogOutput.log for HeimKit's version, configuration path and errors. Keep one DLL and use that same installation's launch route.
  • Version mismatch: Affected features disable themselves. Consult the supported environment linked above; a manual override does not bypass runtime API checks.
  • Ready but no effect: Ready means services are available. Regular gameplay still requires joined players, eligible objects and native conditions.
  • Report a problem: Include HeimKit/game versions, the affected feature, expected versus observed behavior and relevant warnings/errors. Remove passwords, join codes and other private information from logs.