Ein Auto-Updater für BepInEx-Mods, der ohne Einstellungen auskommt. Beim Start des Spiels findet er die installierten Mods selbst, fragt nach neueren Versionen und ersetzt die Dateien. Es gibt keine Liste, die du pflegen musst. Er läuft unter Windows und Linux (auch mit Proton und auf dedizierten Servern).
Der Code ist nicht auf Valheim festgelegt und plattformneutral.
Der Updater ist ein BepInEx-Patcher. Patcher laufen, bevor BepInEx irgendein Plugin lädt. Eine aktualisierte Mod ist deshalb schon im selben Spielstart die neue Version, und es gibt keine Probleme mit gesperrten Dateien unter Windows. Ein Update beim Schließen des Spiels wäre dagegen unsicher: Unter Windows ist die DLL dann noch gesperrt, und ein Absturz würde das Update verlieren.
Er sucht in BepInEx/plugins und BepInEx/patchers und ordnet jeder Mod eine Quelle zu, in dieser Reihenfolge:
- Config: Eine
Mod-Zeile nennt die Quelle ausdrücklich (nur nötig für Sonderfälle). - Eingebaute Quelle: Die DLL nennt ihr Repository selbst (
AssemblyMetadata("UpdateRepo", "Owner/Repo"), siehe Eigene Mods anschließen). - Thunderstore: Mods aus r2modman oder Gale liegen in einem Ordner
Namespace-Namemitmanifest.json. Der Updater fragt Thunderstore nach der neuesten Version. - GitHub-Konto der Vertrauten: Ein BepInEx-Plugin ohne Angabe wird mit den öffentlichen Repositories der vertrauten GitHub-Nutzer verglichen. Der Name des Repositories muss dem DLL-Namen gleichen oder ihn enthalten (Groß-/Kleinschreibung und Trennzeichen egal) und der einzige Treffer sein. So wird
KongStrong.dlldem Repovalheim-kong-strongzugeordnet. Eine falsche Zuordnung richtet nichts an: Das Release-Zip muss dieselbe DLL enthalten, und die Prüfsumme muss passen.
Standardmäßig vertraut er dem Besitzer, der in seiner eigenen DLL als Quelle steht (bei dieser Version Stanni97).
- Alle Mods werden erkannt und die Quellen zugeordnet. Neue Mods brauchen keine Eintragung.
- Pro Mod wird die neueste Version abgefragt, höchstens alle 6 Stunden (
CheckIntervalHours). - Ist sie neuer, hängt es vom Besitzer ab: Mods vertrauter Besitzer werden aktualisiert. Bei allen anderen schreibt der Updater nur eine Zeile ins Log (
ThirdParty = Notify), außer du stellstThirdParty = Updateein. - Bei GitHub muss die SHA-256-Prüfsumme des Downloads zu GitHubs Angabe passen. Aus dem Zip werden nur die DLLs übernommen, die die Mod schon hat. Bei Thunderstore-Paketen werden die Dateien des Mod-Ordners ersetzt, nichts außerhalb davon.
- Von jeder ersetzten DLL bleibt die alte als
<Name>.dll.oldliegen, falls du zurückwillst.
Ist das Netz weg, passiert nichts, und es wird 10 Minuten lang nicht erneut versucht. Ein Problem im Updater hält das Spiel nie vom Starten ab. Der Updater aktualisiert auch sich selbst, diese Version wird aber erst beim nächsten Start aktiv.
Der Updater ist eine einzelne Datei, BifrostUpdater.dll. Sie gehört in den Ordner BepInEx/patchers/BifrostUpdater/ im Valheim-Ordner. Du brauchst nur ein installiertes BepInEx 5 (für Valheim das Paket BepInExPack_Valheim). Das Zip BifrostUpdater-<version>.zip mit der DLL gibt es auf der Release-Seite.
Ob BepInEx schon läuft, siehst du am Ordner BepInEx im Spielordner und an der Datei BepInEx/LogOutput.log nach dem ersten Start.
Am einfachsten mit r2modman oder Gale. Der Manager richtet BepInEx selbst ein.
- Ein Valheim-Profil anlegen. BepInExPack_Valheim wird mitinstalliert.
- Das Zip von der Release-Seite herunterladen und über Settings → Import local mod einbinden (Gale: Import → Local mod).
- Valheim über den Mod-Manager starten (r2modman: Start modded).
- Den Spielordner öffnen: in Steam Rechtsklick auf Valheim → Verwalten → Lokale Dateien durchsuchen. Hier liegt
valheim.exe. - Falls BepInEx noch fehlt: BepInExPack_Valheim herunterladen und den Inhalt des Ordners
BepInExPack_Valheimaus dem Zip in den Spielordner kopieren. Danach liegenBepInEx\,winhttp.dllunddoorstop_config.ininebenvalheim.exe. - Das Zip des Updaters entpacken und
patchers\BifrostUpdater.dllnachBepInEx\patchers\BifrostUpdater\kopieren (den OrdnerBifrostUpdateranlegen, falls er fehlt). - Valheim ganz normal über Steam starten. Startoptionen sind unter Windows nicht nötig.
- Den Spielordner öffnen, meist
~/.local/share/Steam/steamapps/common/Valheim. Hier liegtvalheim.x86_64. - Falls BepInEx noch fehlt: den Inhalt des Ordners
BepInExPack_Valheimaus dem Zip in diesen Ordner kopieren und das Startskript ausführbar machen:chmod +x start_game_bepinex.sh
- Die Startoption setzen: in Steam Rechtsklick auf Valheim → Eigenschaften → Startoptionen:
./start_game_bepinex.sh %command% - Den Updater ablegen:
cd ~/.local/share/Steam/steamapps/common/Valheim mkdir -p BepInEx/patchers/BifrostUpdater unzip -j BifrostUpdater-*.zip 'patchers/BifrostUpdater.dll' -d BepInEx/patchers/BifrostUpdater/
- Valheim über Steam starten.
Der Updater lädt Dateien mit der eingebauten Verbindung des Spiels. Scheitert die, nimmt er curl, und danach unter Linux wget (unter Windows PowerShell). Windows 10 und 11 bringen curl.exe und PowerShell mit, die meisten Linux-Distributionen curl oder wget. Steam setzt für das Spiel eigene Bibliotheken, die diese Programme stören. Der Updater startet sie deshalb mit bereinigter Umgebung.
Läuft Valheim über Proton (Kompatibilität in den Steam-Eigenschaften erzwungen), ist es die Windows-Version des Spiels. Installiere BepInEx und den Updater wie unter Windows (Ordner .../steamapps/common/Valheim) und setze die Startoption:
WINEDLLOVERRIDES="winhttp=n,b" %command%
Auf dem Steam Deck (Desktop-Modus) gilt dasselbe wie bei Linux oder Proton, je nachdem, welche Version du startest. Der Spielordner liegt dort meist unter ~/.local/share/Steam/steamapps/common/Valheim.
Die Datei kommt auf dem Server in BepInEx/patchers/BifrostUpdater/. Der Updater erkennt den Server selbst (valheim_server oder -batchmode -nographics) und prüft dort bei jedem Start (ServerCheckIntervalHours = 0). So läuft der Server mit denselben Versionen, die die Updater der Spieler installieren.
Docker (lloesche/valheim-server): Das Image kopiert bei jedem Start /config/bepinex/plugins und patchers ins Spiel. Der Updater erkennt das und schreibt ein Update auch dorthin (MirrorTo = auto). Ohne das würde der nächste Start die alte Version zurückbringen. Den Updater selbst legst du nach /config/bepinex/patchers/BifrostUpdater/.
Auf dem Server solltest du ThirdParty = Update nicht einschalten. Fremde Mods brauchen meist auf Server und Clients dieselbe Version, und die Spieler bekommen sie nicht automatisch.
- In
BepInEx/LogOutput.logsteht beim Start die ZeileLoaded 1 patcher method from [BifrostUpdater ...]. - Im Ordner
BepInEx/configliegt danachbifrost.updater.cfgundbifrost.updater.state. In der State-Datei stehtlastcheck=..., wenn die Abfrage geklappt hat. Steht dortlastfail=..., war das Netz nicht erreichbar (auch ein Hinweis im Log, dann nach 10 Minuten erneut versuchen). - Gibt es ein Update, steht im Log
Updating <Mod> ...oderUpdate available: .... Sind alle Mods aktuell, bleibt es still. - Die alte DLL einer aktualisierten Mod liegt als
<Name>.dll.oldneben der neuen.
Die Datei BepInEx/patchers/BifrostUpdater/BifrostUpdater.dll löschen, optional auch bifrost.updater.cfg und bifrost.updater.state in BepInEx/config. Schon aktualisierte Mods bleiben, wie sie sind.
| Problem | Lösung |
|---|---|
Keine Zeile BifrostUpdater im Log |
Die DLL liegt nicht in BepInEx/patchers/..., oder BepInEx startet nicht (Linux: Startoption prüfen, Windows: winhttp.dll neben valheim.exe) |
Could not reach GitHub im Log |
Kein Netz, oder weder die eingebaute Verbindung noch curl, wget (Linux) beziehungsweise PowerShell (Windows) funktionieren. Die Meldung nennt den Grund jedes Weges |
| Mod wird nie aktualisiert | Das Release muss einen Versions-Tag wie v1.2.0 haben und die DLL im Zip enthalten, siehe Eigene Mods anschließen. Die Mod muss einem vertrauten Besitzer gehören (Trusted), sonst meldet der Updater nur |
| Updater ganz aus | Enabled = false in bifrost.updater.cfg |
Manche Mods brauchen Dateien, die sie nicht mitliefern dürfen, zum Beispiel einen eigenen Sound. Der Spielserver kann sie anbieten, und der Updater holt sie beim Spielstart:
FileSource = http://192.168.178.83:8457, http://100.74.56.53:8457
- Der Server liefert unter
/bifrost/manifest.jsoneine Liste{"files": [{"path": "config/...", "sha256": "..."}]}und unter/bifrost/files/<path>die Dateien. - Installiert wird nur, was unter
BepInEx/configlandet und kein Programm ist. Jede Datei muss zur Prüfsumme passen. - Hast du die Datei schon (eigene Version), bleibt sie unverändert. Hat der Updater sie installiert und du hast nichts daran geändert, kommt eine neue Version vom Server automatisch nach.
- Mehrere Adressen werden der Reihe nach probiert. Ist keine erreichbar (z. B. unterwegs), geht es nach höchstens 3 Sekunden pro Adresse weiter.
Es ist keine Konfiguration nötig. Nach dem ersten Start liegt BepInEx/config/bifrost.updater.cfg mit den Standardwerten und Erklärungen bereit:
| Schlüssel | Bedeutung |
|---|---|
Enabled |
false schaltet den Updater aus |
CheckIntervalHours |
Mindestabstand zwischen zwei Prüfungen, 0 = bei jedem Start |
ServerCheckIntervalHours |
Dasselbe auf einem dedizierten Server, Standard 0 (bei jedem Start) |
TimeoutSeconds |
Wie lange eine Anfrage dauern darf |
Trusted |
GitHub-Nutzer und Thunderstore-Teams (oder einzelne Owner/Repo, Owner-Name), deren Mods ohne Rückfrage aktualisiert werden. Standard: der Besitzer des Updaters |
ThirdParty |
Was bei Updates aller anderen Mods passiert: Off (ignorieren), Notify (nur ins Log schreiben, Standard) oder Update (installieren) |
RequireChecksum |
GitHub-Downloads nur installieren, wenn die SHA-256-Prüfsumme zu GitHubs Angabe passt (Standard true) |
Disable |
Mods, die nie angefasst werden, kommagetrennt: Ordnername, Owner/Repo oder Owner-Name |
Mod |
Optional, mehrfach möglich: Owner/Repo:Datei.dll legt die Quelle einer Mod fest |
FileSource |
Adressen des Datei-Angebots deines Spielservers, kommagetrennt, siehe Dateien vom Spielserver |
MirrorTo |
BepInEx-Ordner, der bei jedem Start ins Spiel kopiert wird (Server-Images). Updates werden auch dorthin geschrieben. auto (Standard, erkennt lloesche/valheim-server), off oder ein Pfad |
Vorsicht mit ThirdParty = Update im Multiplayer: Die meisten Mods brauchen auf Client und Server dieselbe Version. Aktualisiert nur dein Client, kommst du nicht mehr auf den Server. Der Updater prüft auch keine Abhängigkeiten, ein Update kann also eine neuere Version von Jotunn oder BepInEx verlangen.
Damit eine Mod von dir sicher erkannt wird, trägst du in ihre .csproj eine Zeile ein:
<ItemGroup>
<AssemblyMetadata Include="UpdateRepo" Value="Owner/mein-repo" />
</ItemGroup>Ohne diese Zeile klappt es oft trotzdem, siehe Punkt 4 oben. Damit ein Update ankommt, muss das neueste GitHub-Release:
- einen Tag wie
v1.2.0haben, - ein Zip enthalten, in dem die DLL der Mod liegt (egal in welchem Unterordner),
- und die
<Version>der Mod muss zum Tag passen. Der Updater vergleicht sie mit der Version der installierten DLL.
Der Updater lädt Code aus dem Internet und führt ihn im Spiel aus. Deshalb gilt:
- Es wird nur per HTTPS von
github.com,api.github.comundthunderstore.iogeladen. GitHub-Downloads müssen aus dem Repository der Mod stammen. - Automatisch wird nur bei Mods vertrauter Besitzer aktualisiert. Fremde Mods meldet er nur.
- Bei GitHub muss die Prüfsumme zu GitHubs Angabe passen. Das schützt vor kaputten oder abgebrochenen Downloads. Wer Zugriff auf das GitHub-Konto hat, könnte aber Release und Prüfsumme gemeinsam austauschen. Thunderstore liefert keine Prüfsumme, dort schützt nur HTTPS.
- Pakete werden vor dem Schreiben vollständig geprüft: keine Pfade aus dem Mod-Ordner heraus, Größenlimits, mindestens eine DLL. Ein kaputtes Zip ändert nichts.
- Wer das nicht möchte, setzt
Enabled = falseoder installiert den Updater gar nicht.
Du brauchst das .NET SDK 8 oder neuer und Valheim mit BepInExPack. Der Build nutzt die DLLs aus dem Spielordner.
git clone https://github.com/Stanni97/bifrost-updater.git
cd bifrost-updater
dotnet build -c ReleaseDas kopiert BifrostUpdater.dll nach BepInEx/patchers/BifrostUpdater/ und legt das Zip unter dist/ ab. Mit -p:InstallToGame=false wird nur gebaut, mit -p:ValheimDir="..." ein anderer Spielordner benutzt (Windows z. B. -p:ValheimDir="D:\SteamLibrary\steamapps\common\Valheim").
Wer den Updater für ein eigenes GitHub-Konto baut, ändert den Wert von UpdateRepo in der BifrostUpdater.csproj. Dieser Besitzer ist danach der Standard für Trusted.