Mods / Synergy

Tags:
Utility Other Tweak Optimization
Author:
Zaldaryon
Side:
Both
Created:
Apr 25th at 2:02 AM
Last modified:
Jun 25th at 11:50 AM
Downloads:
8932
Recommended download (for Vintage Story 1.22.0 - 1.22.3):
Synergy-1.1.24.zip  1-click install

Coordinated server-side performance and fluidity optimizations for Vintage Story. Reduces TPS overhead, bandwidth, and GC pressure while improving multiplayer smoothness.

Works as server-only or with both client+server installed. Clients are not required - but installing on both enables delta position encoding (~70% bandwidth reduction). Compatible with Tungsten and OptiTime.

All 15 optimizations are individually toggleable. Runtime circuit breaker with auto-fallback to vanilla on any error.

Optimizations

Server-Side Performance (9)

  • Entity Activation Range - Skip ticking entities beyond 48 blocks of any player (whitelisted behaviors still tick)
  • Collision Fast-Path - Skip collision resolution for stationary entities with zero motion
  • Network Flush Consolidation - Batch small TCP packets into fewer SendAsync calls per tick
  • Block Tick Pooling - Pool 512 BlockPos objects per thread in random tick loop
  • Inventory Dirty Scan - Skip full inventory iteration when nothing has been modified
  • Pathfinding Node Pooling - Pool 4096 PathNode objects per thread (transpiler, zero heap allocs)
  • Pathfinding Distance Throttle - Reduce pathfinding frequency based on distance to player
  • Repulse Agents Throttle - Throttle O(N²) repulsion checks for distant entities
  • AI Brain Tick Throttle - Distance-based AI evaluation LOD (DEAR formula)

Server-Client Fluidity (6)

  • Entity Tracking Hysteresis - Speed-proportional buffer zone prevents entity pop-in flickering
  • Distance-Based Send Frequency - 15Hz for distant entities, stationary suppression
  • Attribute Sync No-Op Skip - Skip unnecessary full tree resyncs on no-op RemoveAttribute calls
  • Entity Spawn Priority Ordering - Nearest entities appear first after teleport/login
  • Entity Load Budgeting - Eliminate login/teleport frame spikes (5 entities/tick budget)
  • Delta Position Encoding - Varint/zigzag delta encoding (~70% bandwidth reduction with Synergy client)

Built-in Diagnostics

Per-optimization measurement framework. See exactly how much each optimization saves:

  • /synergy diag all on - enable counters (auto-dumps every 5 min to server log)
  • /synergy diag all dump - print stats immediately
  • /synergy stats - live metrics (entities, AI throttle %, bandwidth saved)

Real measurements from a dedicated server session (~2 min, 1 player, ~234 entities):

Optimization Metric Result
Entity Activation Range Entities sleeping 68% of ticks saved
AI Brain Throttle StartNewTasks skipped 62% CPU saved
Network Flush Packets consolidated 80% (1263 buffered, 302 passthrough)
Delta Encoding Bandwidth reduction 70% (~56 KB/s saved)
Repulse Throttle O(N²) checks skipped 69% at distance
Send Frequency Position packets saved 29% bandwidth
Tracking Hysteresis Flicker prevented 96% of boundary entities kept
Pathfinding Pool Heap allocations 100% reuse (3352 nodes pooled)
Inventory Scan Scans skipped 100% while idle
Block Tick Pool Heap allocations 100% reuse

Combined: ~68% entity tick reduction, ~70% position bandwidth reduction, 80% TCP syscall reduction, 100% pathfinding GC elimination.

Safety

  • Circuit breaker: each optimization auto-disables after 5 errors, falls back to vanilla
  • Conflict detection: checks Harmony.GetPatchInfo() before patching - skips if another mod is there
  • Graceful degradation: all prefixes return true (run vanilla) on any unexpected exception
  • No client-side requirement: works with vanilla clients (delta encoding is optional enhancement)

Commands

  • /synergy - show optimization status + circuit breaker health
  • /synergy stats - live metrics (entities, AI throttle, bandwidth)
  • /synergy all on|off - toggle all optimizations (restart required)
  • /synergy <opt> on|off - toggle individual optimization
  • /synergy reload - reload config from disk
  • /synergy diag [all|<module>] [on|off|dump|reset] - per-optimization diagnostics

Compatibility

Compatible with most mods. Harmony conflicts are auto-detected - Synergy skips its patch when another mod already patches the same method. Verified compatible with Tungsten, OptiTime, and 200+ content mods.

License

Copyright (c) 2026 Zaldaryon - All Rights Reserved

Synergy - Coordinated optimizations so your server runs smoother.

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
1.1.24 synergy
1.22.0 - 1.22.3
1381 Jun 25th at 11:50 AM Synergy-1.1.24.zip 1-click install

Fixes hostile mobs rendering at stale positions after burst packet loss. ACKs are now exact per-datagram: when a snapshot generation splits across multiple UDP datagrams, receiving one datagram no longer acknowledges entities in a lost sibling. Entity baselines promote only when the exact datagram carrying that entity is acknowledged.

1.1.23 synergy
1.22.0 - 1.22.3
216 Jun 24th at 1:49 PM Synergy-1.1.23.zip 1-click install

Fix delta encoding cumulative ack advancing when any entity in the batch could not be applied. Prevents stationary mobs from appearing at stale positions after packet loss.

1.1.22 synergy
1.22.0 - 1.22.3
302 Jun 22nd at 5:41 PM Synergy-1.1.22.zip 1-click install

Fix dropped items spinning forever after landing. Exclude EntityItem from delta position encoding, distance-based send frequency throttling, and collision fast-path. Integer quantization in delta encoding introduced sub-pixel Y offsets that broke client-side collision detection. Includes v2 ack-based delta protocol for all other entity types. Automated integration test harness for packet-loss testing.

1.1.21 synergy
1.22.0 - 1.22.3
361 Jun 20th at 12:22 AM Synergy-1.1.21.zip 1-click install

The AI brain throttle now keeps full-rate AI for tasks whose urgency does not depend on how far away a player is:

  • Animals that still need to eat to breed are never throttled, so feeding, breeding, and domestication generation progress are not delayed.
  • Land animals escaping water and aquatic creatures stranded on land react immediately.
  • Owned pets answer their owner and herd animals stay together at any distance.

Diagnostics: the aithrottle dump now reports feedBypass and safetyBypass counts.

1.1.20 synergy
1.22.0 - 1.22.3
119 Jun 19th at 6:16 PM Synergy-1.1.20.zip 1-click install

Load-adaptive activation range and AI throttle.

  • Activation range shrinks proportionally to tick duration when server exceeds 200ms/tick (floor: 16 blocks)
  • AI brain throttle scales DEAR divisor down under server pressure
  • Post-save cooldown halves activation range for 3 ticks after autosave
  • Servers under heavy load recover in 2-3 ticks instead of staying overloaded for minutes

Config: AdaptiveRangeEnabled (true), AdaptiveRangeMinBlocks (16), AdaptiveRangeThresholdMs (200)

1.1.19 synergy
1.22.0 - 1.22.3
92 Jun 19th at 1:18 PM Synergy-1.1.19.zip 1-click install

Fixed crafting output desync. The InventoryDirtyScan optimization was skipping dirty slot sync for the crafting grid because vanilla's FindMatchingRecipe() writes to dirtySlots directly without calling MarkSlotDirty(). Players could see the craft output appear briefly then vanish, making items uncraftable until another inventory event triggered the sync.

Added postfix patches on FindMatchingRecipe and ConsumeIngredients to properly signal dirty state.

1.1.18 synergy
1.22.0 - 1.22.3
226 Jun 18th at 12:55 PM Synergy-1.1.18.zip 1-click install

Fix invisible entities (dropped items, FallingTree) for remote clients when delta encoding is active.

  • Client no longer treats relative deltas without a baseline as absolute positions
  • Server forces periodic absolute resync for all entities via slot-based stagger
  • Entity baselines pruned on despawn to prevent unbounded memory growth
1.1.17 synergy
1.22.1 - 1.22.3
125 Jun 17th at 7:30 PM Synergy-1.1.17.zip 1-click install

Fix VSVillage compatibility: entities from the vsvillage mod are now excluded from activation range sleeping, AI brain throttle, and repulsion throttle. Their custom pathfinding and AI tasks require full ticking to function.

Also includes translations for 11 missing i18n keys across all 30 languages.

1.1.16 synergy
1.22.0 - 1.22.3
627 Jun 10th at 10:43 AM Synergy-1.1.16.zip 1-click install

Fixed block tick pooling NullReferenceException that occurred under high time speed or heavy block tick load. Pool reset now guards against overwriting in-flight entries awaiting main thread consumption. Added FluidBlockPos pool for correct fluid block dispatch.

1.1.15 synergy
1.22.1 - 1.22.3
230 Jun 8th at 11:44 PM Synergy-1.1.15.zip 1-click install

Fix NullReferenceException spam in BlockSoil.OnServerGameTick when Block Tick Pooling is active.

The pooled BlockPos was being passed by reference into BlockPosWithExtraObject, creating a race condition where the position could be overwritten before the main thread consumed it. Additionally, the Activator.CreateInstance path for constructing the wrapper object was fragile with private nested types.

Changes:

  • Cache ConstructorInfo at init instead of using Activator.CreateInstance
  • Copy position for extra-carrying ticks instead of referencing the pool
  • Skip patch entirely if the internal wrapper type can't be resolved
1.1.14 synergy
1.22.0 - 1.22.3
152 Jun 8th at 2:45 PM Synergy-1.1.14.zip 1-click install

Fixes a client hard-freeze when Synergy clients approach areas with high entity density (10+ traders/NPCs in one spot).

Changes:

  • Delta encoding baseline resets are now staggered per-entity across a 1-second window, eliminating the synchronized absolute-packet storm that overloaded the client's main thread
  • Added server-side send budget (12 absolute packets per client per tick max) to prevent UDP flooding
  • Fixed first-packet baseline storage bug that caused position desync on newly tracked entities
1.1.13 synergy
1.22.0 - 1.22.3
387 Jun 4th at 10:32 PM Synergy-1.1.13.zip 1-click install

Sleeping entities with AI (taskai behavior) now maintain their running tasks via ProcessRunningTasks, preventing timer corruption in mods like VSVillage that use ElapsedMilliseconds for internal state tracking.

What was fixed:

  • Entities beyond 48 blocks no longer have their AI tasks silently corrupted
  • VSVillage villagers (and other modded AI entities) stay on-task instead of wandering aimlessly
  • Running AI tasks continue executing during entity sleep (ContinueExecute + PathTraverser)
  • New task evaluation (StartNewTasks) is still skipped for performance (~90% AI CPU saved)

Compatibility:

  • Automatically works with all mods using AiTaskBase subclasses (no config needed)
  • Explicitly tested: VSVillage, PrimitiveSurvival, Pet AI
1.1.12 synergy
1.22.0 - 1.22.2
850 May 25th at 3:17 PM Synergy-1.1.12.zip 1-click install

Fix infinite heightmap building loop when used with Farseer mod and no players online.

  • Skip whitelisted behavior ticks for sleeping entities when no players are connected
  • Prevents chunk freshness from being maintained indefinitely by breathe behavior block reads
  • Allows proper chunk unloading that Farseer depends on for ChunkColumnLoaded events
1.1.11 synergy
1.22.0 - 1.22.2
366 May 23rd at 1:12 AM Synergy-1.1.11.zip 1-click install

Fix

  • Add ActivationRangeExcludedEntities config option (default: ["smoke"])
  • Entities matching the exclusion list always get full tick regardless of distance
  • Prevents lifecycle-dependent mod entities (Real Smoke) from accumulating when their OnGameTick dissipation logic was being skipped by the activation range optimization
  • Configurable: server admins can add other entity codes as needed

Root Cause

Smoke entities rely entirely on OnGameTick for dissipation, merging, and despawn. When Synergy's activation range skipped their tick (>48 blocks from players), smoke could never dissipate — leading to unbounded accumulation (24,000+ entities reported).

1.1.10 synergy
1.22.0 - 1.22.2
337 May 19th at 10:00 PM Synergy-1.1.10.zip 1-click install

Fixed AttributeSyncResyncPrevention causing players to get stuck on mounts (spinning wheels, rafts, etc).

The optimization was converting RemoveAttribute into partial delta updates, but the client's PartialUpdate(path, null) code path does not fire OnModified listeners. This prevented client-side mount state machines (updateMountedState) from reacting to attribute removal.

Fix: only skip RemoveAttribute when the key doesn't exist (no-op removal). When the key exists, vanilla handles it with full resync — required for client listener notification.

1.1.9 synergy
1.22.0 - 1.22.2
340 May 16th at 4:03 PM Synergy-1.1.9.zip 1-click install

What's New

Full diagnostic system for all 15 optimizations:

  • /synergy diag all on — enable per-optimization counters
  • /synergy diag all dump — see exactly what each optimization saves
  • /synergy stats — live metrics (entities, AI throttle %, bandwidth)
  • Auto-dump every 5 minutes to server log
  • Circuit breaker visibility in /synergy status

Bug fixes:

  • Network Flush Consolidation now works on dedicated servers (was patching dead method)
  • Delta Encoding bandwidth savings tracked correctly
  • Entity counts and delta client metrics wired to stats
1.1.8 synergy
1.22.0 - 1.22.2
308 May 15th at 10:17 AM Synergy-1.1.8.zip 1-click install

Remove GC sustained low latency mode (GcSustainedLowLatencyEnabled). Setting SustainedLowLatency on long-running servers risks unbounded heap growth. GC diagnostics logging remains for admin visibility.

1.1.7 synergy
1.22.0 - 1.22.2
112 May 15th at 12:52 AM Synergy-1.1.7.zip 1-click install

Removed auto-save optimization (caused SQLite transaction crash on chunk thread after server resume). 15 optimizations remain unaffected.

1.1.6 synergy
1.22.0 - 1.22.2
207 May 13th at 11:40 PM Synergy-1.1.6.zip 1-click install

New Server Optimizations

  • AI Brain Tick Throttle — DEAR-based distance LOD for AI task evaluation
  • Block Tick Pooling — ThreadStatic BlockPos pool, eliminates ~16 MB/s GC pressure
  • Auto-Save Optimization — Players written inline (crash-safe), map regions deferred to post-resume. 60-80% freeze reduction with zero player data loss risk.

New Client-Server Features

  • Delta Position Encoding — ~50-60% bandwidth reduction for Synergy clients
  • Entity Load Budgeting — 5 entities/tick after teleport, eliminates frame spikes
  • Unified Metrics — .NET Meters API + /synergy stats command
  • Network Handshake — Server-client capability negotiation

Bug Fixes

  • Drowning fix — Entities in water get full tick beyond activation range
  • Animation fix — Stationary entities with dirty animations no longer skipped
  • Thread safety — Atomic circuit breakers on all multi-threaded paths
  • Command reload — Config reference now updates correctly
  • Login crash fix — Entity load budgeting skips initial login
  • 1.22.2 compat — ServerUdpNetwork namespace resolved correctly
1.1.5 synergy
1.22.0 - 1.22.2
151 May 13th at 2:40 PM Synergy-1.1.5.zip 1-click install

 - Removed BlockTickPooling — race condition between producer/consumer threads made it unsafe
 - Rewritten NetworkFlushConsolidation — now truly consolidates packets into single SendAsync (default disabled until validated)
 - Fixed InventoryDirtyScan — patches MarkSlotDirty instead of DidModifyItemSlot, catching all dirty paths (ovens, crafting grids, discard)
 - Fixed TrackingHysteresis — caches sqrt(trackingRangeSq) outside loop, respects TrackedEntitiesPerClient cap (256)
 - Fixed DistanceSendFrequency — per-entity phase throttle eliminates synchronized burst pattern
 - Fixed SpawnPriorityOrdering — reuses sort buffer via [ThreadStatic] to eliminate per-call allocations
 - Added GC heap monitor — prevents unbounded heap growth under SustainedLowLatency (warns at 4GB, background GC at 8GB)
 - Removed dead-code harvestable from EntityActivationRange whitelist

1.1.4 synergy
1.22.0 - 1.22.2
541 May 8th at 12:08 PM Synergy-1.1.4.zip 1-click install
  • Fixed inventory sync delay — Berry picking (and other actions using ItemSlot.MarkDirty()) was not triggering the dirty flag in the Inventory Dirty Scan optimization. The single-parameter DidModifyItemSlot(ItemSlot) overload was not patched, causing SendDirtySlots to be skipped until a different code path set the flag. Items now appear in inventory immediately as expected.
1.1.3 synergy
1.22.0 - 1.22.1
736 Apr 30th at 10:38 AM Synergy-1.1.3.zip 1-click install

Bug

  • Fixed rift drifter spawning — Entities beyond activation range were not despawning due to incorrect behavior whitelist entry (despawn vs timeddespawn). This caused entity accumulation that hit the MaxQuantity cap, preventing new drifters from spawning near rifts.

New features

  • GC Sustained Low Latency — Eliminates 10-50ms GC pause stutters for the entire server and singleplayer
  • GC Diagnostics — Logs GC configuration at startup
  • Stationary position suppression — Skip force-update position packets for entities that haven't moved
  • IL-emitted delegates — Replace MethodInfo.Invoke with near-native speed DynamicMethod calls
  • End-of-tick network flush — Fix inventory interaction lag
  • Descriptive log tags — All log messages use readable names

New config options

  • GcSustainedLowLatencyEnabled (default: true)
  • GcDiagnosticsEnabled (default: true)
1.1.2 synergy
1.22.0 - 1.22.1
115 Apr 30th at 12:53 AM Synergy-1.1.2.zip 1-click install
  • Add GC SustainedLowLatency mode to eliminate GC pause stutters
  • Add GC diagnostics logging at startup
  • Fix inventory interaction lag: flush network packets at end-of-tick
  • Replace reflection hot paths with DynamicMethod IL-emitted delegates
  • Replace FieldInfo.GetValue with Harmony FieldRefAccess across 4 files
1.1.1 synergy 398 Apr 26th at 7:42 PM Synergy-1.1.1.zip 1-click install

Fix

  • S3 Attribute Sync: Replace reflection-based base method call with Harmony reverse patch to eliminate infinite recursion in SyncedTreeAttribute.RemoveAttribute prefix
  • Fixes stack overflow crash when XSkills calls RemoveAttribute during player skill loading (OnLuminiferous)
  • Fixes crash when dismounting Immersive Fibercraft spinning wheel or loom (vanilla TryUnmount → RemoveAttribute("mountedOn"))

Safety

  • Reverse patch failure guard: S3 skips entirely if the reverse patch cannot be applied (safe fallback to vanilla)
  • All existing safety layers preserved: conflict detection, circuit breaker (5 errors → auto-disable), exception catch
1.1.0 synergy 153 Apr 26th at 3:17 PM Synergy-1.1.0.zip 1-click install

New optimization:

  • Entity Repulsion Throttle — Reduce O(N²) repulsion for distant entities. 3-8% TPS in dense animal pens.

 

Fixes:

  • CollisionFastPath: never skip collision for players (prevents singleplayer crash)
  • SpawnPriorityOrdering: thread-safe client list iteration (Tungsten compatibility)
  • DistanceSendFrequency: fix packet type namespaces for VS 1.22
1.0.0 synergy 89 Apr 26th at 12:51 PM Synergy-1.0.0.zip 1-click install

Server Performance (7)

  • Entity Activation Range — Skip ticking distant entities (>48 blocks). Whitelisted behaviors still run. Entities in lava/fire always tick. ~10-30% TPS gain.
  • Collision Fast-Path — Skip collision for stationary entities. ~5-15% physics CPU saved.
  • Network Flush Consolidation — Batch small TCP packets within MTU. ~3-5% CPU with 10+ players.
  • Block Tick Pooling — Pool BlockPos in random tick loop. Reduces GC pressure.
  • Inventory Dirty Scan — Skip inventory iteration when nothing changed. Volatile dirty flag.
  • Pathfinding Node Pooling — Pool A* PathNode objects via transpiler. ~87% allocation reduction.
  • Pathfinding Distance Throttle — Reduce pathfinding frequency by distance to players. ~30-60% pathfinding CPU saved.

Multiplayer Fluidity (4)

  • Entity Tracking Hysteresis — Buffer zone prevents entity pop-in/pop-out flickering.
  • Distance-Based Send Frequency — 15Hz for distant entities (50-128 blocks). 30-40% bandwidth saved.
  • Attribute Sync Delta Updates — Delta instead of full resync on RemoveAttribute. Saves 500-2000 bytes/event.
  • Entity Spawn Priority Ordering — Nearest entities appear first after teleport/login.

Safety

  • Auto-disable on Harmony conflict (200+ mods verified compatible)
  • Circuit breaker: 5 errors → auto-disable, fallback to vanilla
  • All optimizations individually toggleable via config
  • Safe uninstall — no persistent changes to world data

73 Comments (oldest first | newest first) (threaded | flat)

metasynthie, Jul 10th at 3:26 AM

Getting a warning "10.7.2026 03:23:19 [Server Warning] [Synergy] PathfindingPool: Transpiler found no PathNode constructors to replace — IL may have changed"
This is with Optimum (client, not mod) and Stratum server, but I thought I should report it.

Zaldaryon , Jul 10th at 11:36 PM
@metasynthie: Getting a warning "10.7.2026 03:23:19 [Server Warning] [Synergy] PathfindingPool: Transpiler found no PathNode constructors to replace — IL may have changed"This is with Optimum (client, not mod) and Stratum server, but I thought I should report it.

If you have Stratum server, I've implemented almost all of my optimizations from tungsten and synergy (I am a collaborator there). you need to only let the Delta position encoding enabled. But if you don't want to - you can ignore the warning.

Lamatu, Jun 18th at 7:56 PM

hi and sometimes we cant craft. The craft output just bugged we can put items on the crafting grid but we cant take the result. It just exist for like quarter of a second then disappear on the grid.

Lamatu, Jun 29th at 4:10 PM (modified Jun 29th at 6:10 PM)
@MiseryAwoof: its still having the bug

@MiseryAwoof yeah still have a bug sometimes when i split the item to half inventory system just bugged so bad we cant craft and entire item bugged sometimes its vanishes and this is also effects other players for no reason.I think this is vanilla bug cause even disabling synergy not fix it and too many mods maybe cause that

Edit:Using optitime looks like fixes that issue. W mod dev is the best <3

Alkopoligami, Jun 20th at 6:08 PM
@Lamatu: hi and sometimes we cant craft. The craft output just bugged we can put items on the crafting grid but we cant take the result. It just exist for like quarter of a second then disappear on the grid.

I had this bug even on single without this mod so i dont think its this mod fault, maybe vanilla? or other mod, bcs i have like 70 mods

Zaldaryon , Jun 18th at 12:56 PM

hey Buraak and Lamatu! Try 1.1.18, it should be fixed with the config enabled now.

ButahBabter, Jun 18th at 1:16 PM
@Zaldaryon: hey Buraak and Lamatu! Try 1.1.18, it should be fixed with the config enabled now.

You fixing the invisible entity bug is quite literally a godsend lmao, me and 2 of my friends were tweaking out trying to figure out what was causing it, synergy never actually came up as a reason why because of all the other wonderful changes, You're a hero ^.^

Buraak, Jun 21st at 2:20 PM (modified Jun 21st at 3:28 PM)
@Zaldaryon: hey Buraak and Lamatu! Try 1.1.18, it should be fixed with the config enabled now.

Thanks for the update. I tested version 1.1.18 with my friend (he is the host) with the config enabled again. The issue is partially fixed because the dropped items are no longer completely invisible. However there is a new visual bug on the client side. Sometimes dropped items fall to the ground normally and are perfectly visible. But most of the time when I drop an item it gets stuck hovering and spinning in mid air right at the players hand level. Its just a visual glitch and cannot be picked up, actual item drops to the ground exactly where it was supposed to go but i can't see that. The host sees it on the ground normally, and if I walk over to that specific spot on the ground, I can pick it up.

Buraak, Jun 18th at 2:02 AM

I had this issue while using synergy together with FallingTree, FallingEcoMachina, FallingSpawnManager, vsecomachina, OptiTime and Tungsten. When i dropped items they were invisible on my client, but the host could see them normally. Also with the FallingTree mod the falling tree animation was invisible for me, but again the host could see it normally.

i tried turning off these first:

DistanceBasedSendFrequencyEnabled
EntityTrackingHysteresisEnabled
EntitySpawnPriorityOrderingEnabled

but that did not fix it.

Then i only changed this

DeltaEncodingEnabled: false

and that fixed the issue. Dropped items became visible again and the FallingTree falling tree animation also started showing normally on the client.

Everything else in the synergy config is still true.

Lamatu, Jun 17th at 8:12 PM

Hi on my server when other player drop item we cant see it but we can take it.My item drops works fine as a server owner.

Buraak, Jun 18th at 2:06 AM
@Lamatu: Hi on my server when other player drop item we cant see it but we can take it.My item drops works fine as a server owner.

disabling ''DeltaEncodingEnabled: false'' in ModConfig/Synergy.json fixed it for me

Deven, Jun 8th at 10:16 PM (modified Jun 8th at 10:22 PM)

I've been doing some debugging for a server project I'm working on, and I discovered that Block Tick Pooling causes "NullReferenceException" spam in the console, but I only noticed it while also using Terrain Slabs and Terra Prety so far. Disabling Block Tick Pooling in the config fixes it. It looks like the IL patch might be losing or nullifying the out parameter during the loop. I have far less technical knowledge though, take me with a grain of salt lol.

Console Log Snippet
5.6.2026 23:52:08 [Server Error] Exception thrown in block.OnServerGameTick() for block code 'game:soil-medium-sparse': 5.6.2026 23:52:08 [Server Error] Exception: Object reference not set to an instance of an object. at Vintagestory.GameContent.BlockSoil.OnServerGameTick(IWorldAccessor world, BlockPos pos, Object extra) in VSSurvivalMod\Block\BlockSoil.cs:line 92 at Vintagestory.Server.ServerSystemBlockSimulation.OnServerTick(Single dt) in VintagestoryLib\Server\Systems\World\BlockSimulation.cs:line 1003 5.6.2026 23:52:20 [Server Error] Exception thrown in block.OnServerGameTick() for block code 'terrainslabs:soil-game-medium-sparse': 5.6.2026 23:52:20 [Server Error] Exception: Object reference not set to an instance of an object. at Vintagestory.GameContent.BlockSoil.OnServerGameTick(IWorldAccessor world, BlockPos pos, Object extra) in VSSurvivalMod\Block\BlockSoil.cs:line 92 at Vintagestory.Server.ServerSystemBlockSimulation.OnServerTick(Single dt) in VintagestoryLib\Server\Systems\World\BlockSimulation.cs:line 1003

Love the mod btw, it makes multiplayer 100x more tolerable.

Deven, Jun 10th at 12:08 AM
@Zaldaryon: pls check if that's fixed in 1.1.15! Doesn't look like it was caused by Terrain Slabs or Terra Prety tho.

I tested on the server, issue still seems to happen if I turn Block Tick Pooling back on. I've been testing by turning up the time speed so it happens often enough I don't have to wait ages to see if i got it setup right haha.

DrifterDread, Jun 8th at 4:27 AM

Not entirely sure what is the issue but on my server having Synergy installed client side results in folks hard freezing when near too many traders/npcs.
It could be the sheer density of my server's modlist/having like 10+traders RP NPCs in one spot but any looks at crash logs doesn't seem to give any info
(Especially since it doesn't even give us a log to begin with. It's a perpetual freeze/hang).

All I do know is when I had clients remove Synergy from their personal mod folder, they could play again.

MiraLeaps, Jun 3rd at 8:56 AM

Hey! Just wanted to give some user feedback about compatibility between this mod and the mod I develop for, VSVillage....apparently this mod makes the villagers quite brain-dead and they will wander away from their intended tasks and locations. I was wondering if it was possible to get some exceptions added for VSvillage's villagers? The source code for VSvillage and all its pathfinding and AI tasks is up on github.

But yeah, had a growing number of reports about villagers just starting to act 'strange' for no discernable reason and one user cracked the issue yesterday, removed this mod and saw an immediate change.

Thank you for your time <3

MiraLeaps, Jun 4th at 12:15 PM
@MiraLeaps: Hey! Just wanted to give some user feedback about compatibility between this mod and the mod I develop for, VSVillage....apparently this mod makes the villagers quite brain-dead and they will wander away from their intended tasks and locations. I was wond

Hey, so I think I figured out how to handle this on my side by adding an exclusion into the entities. I'll let you know if there is any further followup needed once QA gets back to me.

Zaldaryon , Jun 4th at 10:33 PM
@MiraLeaps: Hey, so I think I figured out how to handle this on my side by adding an exclusion into the entities. I'll let you know if there is any further followup needed once QA gets back to me.

it was the AI Brain Throttle optimization. I added some safeguards in 1.1.13. You can check that version and if it doesn't help, just disable ai brain throttle altogether.

DigitalHare, May 23rd at 3:47 PM (modified May 23rd at 3:50 PM)

Another thing that may need to be peeked at is, I've noticed with Synergy and Farseer (https://mods.vintagestory.at/show/mod/22371), while no one's online on the server I help manage, it seems to be continually trying to build heightmaps. Removing Synergy and restarting the server, the behavior stops. I'm not sure what interaction is causing it, but it's looping something.

Edit: This is also a fresh copy of the log after restarting the server before sleeping six hours ago, so it's not something that stops over time, it seems. It was cycling all night.

Spoiler
[39;49m23.5.2026 15:27:15 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:27:23 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:27:31 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:27:36 [Server Notification] [Synergy] Stats: 0 active, 3 sleeping, 83% AI throttled, 0 delta clients
[39;49m23.5.2026 15:27:39 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:27:47 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:27:55 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:03 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:12 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:20 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:28 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:36 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
[39;49m23.5.2026 15:28:36 [Server Notification] [Synergy] Stats: 0 active, 3 sleeping, 83% AI throttled, 0 delta clients
[39;49m23.5.2026 15:28:44 [Server Notification] [farseer] Building heightmaps for 1 faraway region(s)..
Mafroz, May 22nd at 10:31 PM

Hi! I've encountered an issue with excessive smoke entity spawning. I contacted the developer of the real smoke mod, and they advised me to contact the developers of synergy. It's possible that using synergy on the server is causing the smoke entity to malfunction. On my server, there was a sudden increase in smoke entities, with over 24,000 entities appearing. Could you please investigate the possible causes of this issue?

Mafroz, May 23rd at 3:08 AM
@Zaldaryon: done in 1.1.11

Wow!! It was so fast =D Thank you i'll check it asap and let you know if all ok

Mafroz, May 23rd at 9:58 PM
@Zaldaryon: done in 1.1.11

Hey! While testing the second day, I flew around the villages, lit torches and bonfires, and moved a long distance away from them. Apparently, the smoke entity is not spawning in crazy amounts. Thank you

Screwy, May 19th at 8:55 PM

Regarding the bug I discovered with the spinning wheel from immersive fibre craft:
Setting the "AttributeSyncResyncPreventionEnabled" to false does the trick.
Having it on definitly causes players to get stuck on spinning wheels and I don't know what else.
We also had rare encounters of people getting stuck on rafts, having this feature enabled.

foxolot, May 16th at 10:21 PM

Do you think this is possible to be used for 1.21.6? If tweaks must be made, that wouldn't be suprising.

foxolot, May 17th at 1:06 AM
@Zaldaryon: Sorry, only 1.22 onwards.

No worries! Tungsten works in it's place, so its all good in the neighborhood.

Cecer, May 15th at 2:06 AM (modified May 15th at 2:08 AM)

FYI: I have disabled GcSustainedLowLatencyEnabled on our (particularly large) server as it appears to be causing extremely long freezes (10+ minutes). This started after adding Synergy.

 

The last line before the freeze was: "[Server Warning] [Synergy] Heap 31,648 MB exceeds threshold - triggering background Gen2 GC."

 

I was also able to dump the stacktrace using dotnet-stack. Here is the main thread:

Spoiler
Thread (0x17044):
[Native Frames]
  System.Private.CoreLib.il!System.GC.Collect(int32,value class System.GCCollectionMode,bool,bool,bool)
  System.Private.CoreLib.il!System.GC.Collect(int32,value class System.GCCollectionMode,bool,bool)
  Synergy!Synergy.SynergyMod.MonitorHeap(class Vintagestory.API.Server.ICoreServerAPI)
  Synergy!Synergy.SynergyMod+<>c__DisplayClass13_0.<ApplyGcLatencyMode>b__0(float32)
  VintagestoryLib!Vintagestory.Common.GameTickListener.OnTriggered(int64)
  MonoMod.Utils!dynamicClass.Vintagestory.Common.EventManager.TriggerGameTick_Patch1(pMT: 00007FFCD7EA7280,int64,pMT: 00007FFCD7ADE080)
  VintagestoryLib!Vintagestory.Server.CoreServerEventManager.TriggerGameTick(int64,class Vintagestory.API.Common.IWorldAccessor)
  MonoMod.Utils!dynamicClass.Vintagestory.Server.ServerMain.Process_Patch1(pMT: 00007FFCD7AF1A40)
  VintagestoryLib!Vintagestory.Server.ServerProgram.Main()
  VintagestoryLib!Vintagestory.ClientNative.CrashReporter.Start(class System.Threading.ThreadStart)
  VintagestoryLib!Vintagestory.Server.ServerProgram..ctor()
  VintagestoryLib!Vintagestory.Server.ServerProgram.Main(class System.String[])
  VintagestoryServer!Vintagestory.ServerWindows.Main(class System.String[])
Raek, May 15th at 7:49 PM
@Cecer: FYI: I have disabled GcSustainedLowLatencyEnabled on our (particularly large) server as it appears to be causing extremely long freezes (10+ minutes). This started after adding Synergy. The last line before the freeze was: "[Server Warning] [Synergy] Heap

So THAT is what was happening? I wasn't having issues, but the other players in the server were and couldn't explain it. I'll add this back, it's too useful for a server not to.

Zaldaryon , May 15th at 8:58 PM
@Raek: So THAT is what was happening? I wasn't having issues, but the other players in the server were and couldn't explain it. I'll add this back, it's too useful for a server not to.

yeah. I'll do some extensive benchmarking in the next weeks to make it really smooth, but it is good enough for now nonetheless

Arxwa, May 15th at 1:05 AM

any chance for 1.21.6?

Zaldaryon , May 15th at 9:31 AM
@Arxwa: any chance for 1.21.6?

only 1.22 onwards

GotoFinal, May 14th at 11:52 PM

I expect this is related to this mod, as got a crash during auto save:

Crash Report
15.5.2026 01:29:56 [Notification] Server ticking has been resumed
15.5.2026 01:29:56 [Fatal] Caught unhandled exception in thread 'chunkdbthread'. Shutting down server.
15.5.2026 01:29:56 [Error] Exception: Execute requires the command to have a transaction object when the connection assigned to the command is in a pending local transaction. The Transaction property of the command has not been initialized.
at Vintagestory.Common.Database.SQLiteDbConnectionv2.GetChunk(UInt64 position, DbCommand preparedCmd) in VintagestoryLib\Common\FileIO\Database\SQLiteDbConnectionv2.cs:line 275
at Vintagestory.Server.ServerSystemSupplyChunks.TryLoadMapChunk(Int32 chunkX, Int32 chunkZ) in VintagestoryLib\Server\Systems\World\LoadThread\SupplyChunks.cs:line 1483
at Vintagestory.Server.ServerSystemSupplyChunks.loadOrGenerateChunkColumn_OnChunkThread(ChunkColumnLoadRequest chunkRequest, Int32 stage) in VintagestoryLib\Server\Systems\World\LoadThread\SupplyChunks.cs:line 784
at Vintagestory.Server.ServerSystemSupplyChunks.tryLoadOrGenerateChunkColumnsInQueue() in VintagestoryLib\Server\Systems\World\LoadThread\SupplyChunks.cs:line 710
at Vintagestory.Server.ServerSystemSupplyChunks.OnSeparateThreadTick() in VintagestoryLib\Server\Systems\World\LoadThread\SupplyChunks.cs:line 535
at Vintagestory.Server.ServerThread.Process() in VintagestoryLib\Server\ServerThread.cs:line 55
15.5.2026 01:29:57 [Event] [Synergy] SaveOptimize: Wrote 64 map regions to DB (post-resume)
thatKazzy, May 14th at 3:11 AM

Hey using all three of your optimization mods for my server and players, wondering which config controls water and rain animations as I can't seem to find that out. Thanks in advance!

SkepticJoker, May 13th at 9:30 PM

What could cause small animals (baby deers, racoons, rabbits, etc.) to drown frequently in one block deep ponds? I suspect Entity Activation Range...
Perhaps they are underwater when I move more then 48 blocks away, but because breathing in whitelisted, they suffocate while not being allowed to move?

iamSent, May 13th at 6:42 AM

Hey I'm curious, ever since installing your mods (all 3), there's been a desych between players where i can hear their sounds, but they don't show up for me.  I can hear her running around in her chain mail, but she'll still be on the elk.

Also, which settings can i adjust because of the animals being really choppy in movement?

Zaldaryon , May 13th at 11:34 AM (modified May 13th at 12:04 PM)
@iamSent: Hey I'm curious, ever since installing your mods (all 3), there's been a desych between players where i can hear their sounds, but they don't show up for me. I can hear her running around in her chain mail, but she'll still be on the elk. Also, which sett

PLAYER INVISIBLE / STUCK ON THE ELK

So this one's actually a vanilla bug that's been around since 2021 — nothing to do with Synergy. The game sometimes just forgets to tell your client that another player moved or dismounted. Sounds still work because those go through a different system.

You can find other people reporting the exact same thing with zero mods installed:

- https://github.com/anegostudios/VintageStory-Issues/issues/3773

- https://github.com/anegostudios/VintageStory-Issues/issues/6687

- https://www.vintagestory.at/forums/topic/5643-players-sometimes-turn-invisible/

Synergy skips players entirely in every single optimization — player position sync uses a completely separate network path that we don't touch at all. Only workaround: the person who looks "stuck" disconnects and reconnects. That's it. It's been the only fix since this bug first appeared.


CHOPPY ANIMAL MOVEMENT

Yeah, this one's on me. Synergy reduces how often distant animal positions get sent to your client — from 30 updates/sec down to 15 for anything beyond 50 blocks. Fewer updates = choppier movement on your screen. To fix it, open Synergy.json in your ModConfig folder and set:

"DistanceBasedSendFrequencyEnabled": false

Still choppy? Also try:

"RepulseAgentsThrottleEnabled": false

Restart the server after making changes.

--

I will see what I can do to mitigate that in the next version.

El_Neuman, May 8th at 12:10 PM

Your mods is amazing!!

SkepticJoker, May 8th at 3:35 AM

Inventory Dirty Scan is making it so there is a big delay to picked barries showing up in my inventory.

Zaldaryon , May 8th at 12:08 PM
@SkepticJoker: Inventory Dirty Scan is making it so there is a big delay to picked barries showing up in my inventory.

Thank you for the report. I released 1.1.4 that fixes this issue.

Alindrome, Apr 30th at 7:32 AM (modified Apr 30th at 7:33 AM)

This mod causes a bug that prevents drifters/other temporal mobs from spawning in rifts.

I confirmed this by testing this mod in isolation (using /debug rift spawnhere, on days past the introduction, with non-calm rift activity)

OldManYells, Apr 29th at 4:30 PM

Hi, we were having a small lag with item interaction. Moving them in inventory, picking them up. Which seemed to go away when the mod was removed (this even with low player count). I'm not the server owner, so there's not a lot i can provide from this particular case. It's not a heavily modded server, literally just a few mods (Carry on, butchering, notice board, probably one or two more but that's it). It was updated to 1.22.1, the issue remained and disappeared after removing the mod.

Natikop, Apr 27th at 8:44 AM

Will be on a 1.21.x ?

Zaldaryon , Apr 27th at 10:18 AM
@Natikop: Will be on a 1.21.x ?

only 1.22.0 onwards.

OlafGunnerson, Apr 26th at 8:04 PM

Is this like Tungsten in terms of "*might* convey a benefit to singleplayer sessions" or is this purely a multiplayer optimization package?

Thank you for your invaluable work in getting this resource hog of a game working 🤟

Zaldaryon , Apr 26th at 8:38 PM
@OlafGunnerson: Is this like Tungsten in terms of "*might* convey a benefit to singleplayer sessions" or is this purely a multiplayer optimization package?Thank you for your invaluable work in getting this resource hog of a game working 🤟

It's like Tungsten! Since VS is already optimized this helps more servers with more players. You can maybe see it locally but it's close to negligible. It probably won't make it worse, for sure.

Comeaves, Apr 26th at 6:32 PM

Not compatible with Immersive Fibercraft

Crashes when getting out of the the mod's chair (spinning wheel or loom)

TyrianSuvious, Apr 26th at 6:16 PM

Incompatible with XSkills


Stack overflow.
Repeated 16363 times:
SyncedTreeAttribute.RemoveAttribute
Synergy.Server.AttributeResyncPrevention.Prefix_RemoveAttribute

XSkills.Survival.OnLuminiferous
→ Ability.OnTierChanged
→ LoadPlayerSkillSet
→ RemoveAttribute (patched)

Crash Report
Stack overflow.
Repeated 16363 times:
--------------------------------
   at DynamicClass.Vintagestory.API.Datastructures.SyncedTreeAttribute.RemoveAttribute_Patch1(Vintagestory.API.Datastructures.SyncedTreeAttribute, System.String)
   at DynamicClass.InvokeStub_TreeAttribute.RemoveAttribute(System.Object, System.Span1<System.Object>)
 at System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) at Synergy.Server.AttributeResyncPrevention.Prefix_RemoveAttribute(Vintagestory.API.Datastructures.SyncedTreeAttribute, System.String) -------------------------------- at DynamicClass.Vintagestory.API.Datastructures.SyncedTreeAttribute.RemoveAttribute_Patch1(Vintagestory.API.Datastructures.SyncedTreeAttribute, System.String) at System.RuntimeMethodHandle.InvokeMethod(System.Runtime.CompilerServices.ObjectHandleOnStack, Void**, System.Runtime.CompilerServices.ObjectHandleOnStack, BOOL, System.Runtime.CompilerServices.ObjectHandleOnStack) at System.RuntimeMethodHandle.InvokeMethod(System.Runtime.CompilerServices.ObjectHandleOnStack, Void**, System.Runtime.CompilerServices.ObjectHandleOnStack, BOOL, System.Runtime.CompilerServices.ObjectHandleOnStack) at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(System.Object, IntPtr*) at System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) at Synergy.Server.AttributeResyncPrevention.Prefix_RemoveAttribute(Vintagestory.API.Datastructures.SyncedTreeAttribute, System.String) at DynamicClass.Vintagestory.API.Datastructures.SyncedTreeAttribute.RemoveAttribute_Patch1(Vintagestory.API.Datastructures.SyncedTreeAttribute, System.String) at XSkills.Survival.OnLuminiferous(XLib.XLeveling.PlayerAbility, Int32) at XLib.XLeveling.Ability.OnTierChanged(XLib.XLeveling.PlayerAbility, Int32) at XLib.XLeveling.XLevelingServer.LoadPlayerSkillSet(Vintagestory.API.Server.IServerPlayer) at XLib.XLeveling.XLevelingServer.OnPlayerNowPlaying(Vintagestory.API.Server.IServerPlayer) at Vintagestory.Server.ServerEventManager+<>c__DisplayClass136_0.<TriggerPlayerNowPlaying>b__0(Vintagestory.API.Common.PlayerDelegate) at Vintagestory.Common.EventManager.Trigger[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Delegate[], System.String, System.Action1<System.__Canon>, System.Action)
 at Vintagestory.Server.ServerEventManager.TriggerPlayerNowPlaying(Vintagestory.API.Server.IServerPlayer) at Vintagestory.Server.CoreServerEventManager.TriggerPlayerNowPlaying(Vintagestory.API.Server.IServerPlayer) at Vintagestory.Server.ServerMain.HandleClientLoaded(Packet_Client, Vintagestory.Server.ConnectedClient) at Vintagestory.Server.ServerMain.HandleClientPacket_mainthread(Vintagestory.Server.ReceivedClientPacket) at Vintagestory.Server.ServerMain.ProcessMain() at Vintagestory.Server.ServerMain.Process() at Vintagestory.Server.ServerProgram.Main() at Vintagestory.ClientNative.CrashReporter.Start(System.Threading.ThreadStart) at Vintagestory.Server.ServerProgram..ctor() at Vintagestory.Server.ServerProgram.Main(System.String[]) at Vintagestory.ServerLinux.Main(System.String[])
DUCATISLO, Apr 26th at 3:21 PM

pretty cool