shudnal-ConditionalConfigSync icon

ConditionalConfigSync

Shared config synchronization and server policy library for Valheim mods. Installed as a dependency and compatible with Jotunn and ServerSync.

CHANGELOG

1.0.0

Initial release of Conditional Config Sync, a standalone shared dependency for Valheim mods.

For players

  • Provides synchronization infrastructure for mods that declare Conditional Config Sync as a dependency.
  • Adds no gameplay content, items, UI, or standalone configuration of its own.
  • Can run alongside Jotunn and mods that use ServerSync without replacing, modifying, or intercepting either library.
  • Keeps synchronization fixes centralized, so dependent mods can receive runtime fixes by updating this package.

For server administrators

  • Provides three setting ownership modes: AlwaysServerControlled, Conditional, and AlwaysClientControlled.
  • Supports exact-setting and whole-section ownership rules through ConditionalConfigSync.SyncPolicy.cfg.
  • Supports exact-setting and whole-section visibility rules through ConditionalConfigSync.HiddenConfigs.cfg.
  • Loads policy during server startup and applies stable file changes at runtime on the Unity main thread.
  • Provides a protected locking setting with administrator exemption and non-admin write validation.
  • Includes status, policy_reload, policy_validate, and policy_dump commands for policy operation and diagnostics.
  • Synchronizes regular BepInEx configuration values and runtime custom values with bounded payloads, fragmentation support, and explicit rejection errors.
  • Restores local client values and ownership state correctly when policy changes or the server connection ends.

For mod authors

  • Distributed as a standalone BepInEx hard dependency; reference ConditionalConfigSync.dll instead of embedding or ILRepacking a private copy.
  • Provides familiar ConfigSync, SyncedConfigEntry, CustomSyncedValue, and VersionCheck APIs with XML IntelliSense documentation.
  • Lets each mod explicitly require a compatible copy on the remote client or server through the documented ModRequired option.
  • Supports one-call bind-and-register overloads that assign ownership before registration.
  • Provides fixed and policy-controlled config modes for shared mechanics, client-local presentation, and administrator-selectable behavior.
  • Provides state-like and sequenced custom values, priorities, equality comparers, explicit assignment modes, and ISerializableParameter support.
  • Uses TOML conversion for regular BepInEx entries and length-prefixed package entries for safer parsing and forward handling.
  • Provides lifecycle, policy, lock, connection-reset, rejection, and initial-sync events.
  • Supports late registration, automatic resynchronization, and explicit RequestFullSync().
  • Isolates failures from individual SettingChanged handlers so remaining package entries can still be applied.
  • Uses an independent numeric wire protocol and requires an exact client/server protocol match.
  • Includes release SHA-256 hashes for both runtime DLL files.