Vintage Story 12 min read

Stratum vs Vanilla Vintage Story Server: We Benchmarked It (1.22.7)

Stratum against vanilla Vintage Story 1.22.7, measured inside one of our own 4-core, 6 GB game servers: world generation, lag spikes, memory, and the verdict.

The short version

  • World generation is 21% faster: 31.5 s against 39.9 s to generate 1,681 chunk columns.
  • Lag spikes shrink. With about 1,500 creatures the worst 1% of ticks fell from 16.7 ms to 10.1 ms, and the single worst tick to less than half.
  • About twice the creature headroom: vanilla drops below 29 TPS at 3,000 spawned creatures, Stratum at 6,000. At 10,000 it still runs 19 TPS against 11.
  • It costs memory: about 900 MB more at peak for the same world. Give it an extra gigabyte.
  • It costs CPU while generating terrain (34% more total CPU time) and ticks a hair slower when idle. Neither shows up in play.
  • Worth it for busy servers and explorers. Harmless on small ones as long as the plan has memory headroom.
21%
faster world generation
31.5 s vs 39.9 s for 1,681 chunk columns
2×
the creatures at full tick rate
29+ TPS up to 4,000 spawned; vanilla 2,000
19 TPS
at 10,000 creatures, vanilla 11
52 ms vs 89 ms mean tick
+900 MB
peak memory
2.69 GB vs 1.76 GB for the same world

Stratum is a server-side fork of Vintage Story that promises better performance on busy multiplayer servers. We host a lot of Vintage Story servers, so we wanted real numbers instead of release-note claims. We built a repeatable benchmark and ran it where it matters: inside an ordinary 4-core, 6 GB game server on one of our production nodes, with other customers' servers running alongside. Then we kept piling on creatures until both servers fell over, to see which one fell over later.

Short answer: if your players explore a lot, or your world is full of creatures and you see lag spikes, Stratum is a real improvement. Budget an extra gigabyte of RAM for it.

What Stratum is

Stratum is an open-source (MIT) fork of the Vintage Story server. It is not a mod you drop into the Mods folder. Its launcher downloads the official server for the matching game version and patches a handful of core files on top. Your players keep using the normal client, your world keeps its save format, and server mods keep working because the modding API is unchanged.

The 1.22.6 and 1.22.7 releases list dozens of performance changes. The ones most likely to show up in a benchmark:

  • World generation runs several chunk columns in parallel, with lock-free merging and bulk-copied rock strata.
  • Lighting is batched, with AVX2 code paths for bulk chunk data.
  • Entities skip work nothing reads: skeleton poses are computed lazily, far-away creatures tick less often, and ticking can be split across regions.
  • Allocation is lower across the chunk scheduler and chunk setup, so the garbage collector has less to do.

Stratum also ships admin features (kits, homes, anticheat, backups, announcements, packet limits). We did not measure any of those.

How we tested

  • Versions: the official Vintage Story 1.22.7 dedicated server against Stratum v1.22.7-stratum.2, which patches that exact build. Both on .NET 10.
  • Where: a normal Vintage Story server created through our panel on our NY 8 node (AMD Ryzen 9 9950X, NVMe), with a typical plan's limits of 4 CPU cores and 6 GB of RAM, in the same image every Vintage Story server on our nodes uses. The node was serving customers at the time. This is the real environment, not a quiet lab machine.
  • Workload: a small benchmark mod drives the server with no players connected, so every run does identical work: start a fresh world with a fixed seed, generate a 41 × 41 chunk-column area around spawn, idle, spawn 500 always-active creatures for 45 seconds, then restart and reload the same area from disk. A second series spawns creatures in steps up to 10,000 to find the breaking point.
  • Runs: four per server, alternating vanilla and Stratum. Charts show the median, with every run drawn as a dot.
  • Settings: defaults on both sides. On Stratum we only switched off the update checker, the usage report and the scheduled backups so they could not add disk or network activity mid-run.

No real players were connected, so Stratum's player-distance throttling and its network changes get no credit here. Forcing every creature active is harsher than a normal server, where most creatures are idle. Treat these numbers as the cost of the simulation itself. The mod, the harness, the chart script and the raw results are all in the benchmark repository if you want to run it yourself.

World generation: 21% faster, paid for in CPU

This is the headline result. New players exploring, a world reset or a pregen job all hammer world generation, and it is the part of Vintage Story that most often drags a server down.

Bar chart: generating 1,681 chunk columns took 39.9 seconds on vanilla and 31.5 seconds on Stratum; reloading them from disk took 1.5 and 2.0 seconds
Time to generate 1,681 chunk columns (13,448 chunks) around spawn, and to reload them from disk. Bars are the median of four runs, dots are the individual runs.
VanillaStratumChange
Generate 1,681 columns39.9 s31.5 s21% faster
Throughput42.1 columns/s53.3 columns/s+27%
Total CPU time, all threads44.4 s59.4 s34% more
Reload the same columns from disk1.53 s1.96 s0.4 s slower

All four Stratum runs landed between 30.5 and 31.6 seconds. Vanilla ranged from 39.6 to 40.3. The gap is far larger than the run-to-run noise.

Bar chart: world generation wall-clock time 39.9 versus 31.5 seconds, total CPU time 44.4 versus 59.4 seconds, vanilla versus Stratum
World generation: wall-clock time against total CPU time across all threads. CPU time above wall time means the work ran in parallel.

The CPU chart shows how, and what it costs. Vanilla generates terrain on one or two threads and leaves the other cores partly idle: 44 seconds of CPU over 40 seconds of wall-clock. Stratum keeps all four cores busy: 59 seconds of CPU in 31.5 seconds. On a 4-core plan the faster result is bought with CPU, not saved. Stratum's world generation is faster, not more efficient.

Loading already-generated chunks is not something Stratum speeds up. It was consistently about 0.4 seconds slower, once per restart. Not worth weighing.

Lag spikes with 1,500 creatures: much shorter

The server runs 30 ticks per second, which gives each tick a 33.3 ms budget. When a tick takes longer, the server falls behind and players feel it as rubber-banding and delayed block updates. The average tick is usually fine. The spikes are what players notice.

We loaded the generated area, let it settle, then spawned 500 creatures (wolves, drifters, deer, foxes and hares), flagged them always-active so their AI and physics ran at full rate, and measured every tick for 45 seconds. The area already held about 1,000 wild animals, so each server was ticking roughly 1,500 entities.

Bar chart of tick time with 500 active creatures: mean 5.03 versus 4.25 ms, median 4.56 versus 4.09 ms, 95th percentile 6.95 versus 5.23 ms, 99th percentile 16.7 versus 10.1 ms, vanilla versus Stratum
Main-thread tick time with 500 active creatures plus about 1,000 wild animals. Lower is better; the budget is 33.3 ms.
Tick time, 500 active creaturesVanillaStratumChange
Mean5.03 ms4.25 ms15% lower
Median4.56 ms4.09 ms10% lower
95th percentile6.95 ms5.23 ms25% lower
99th percentile16.7 ms10.1 ms40% lower
Worst single tick, across runs159 to 215 ms67 to 87 msless than half
Ticks per second achieved29.830.0same
Line chart of the share of ticks at or below each duration, log scale; the Stratum curve sits left of the vanilla curve and reaches 100% sooner
Every tick from every run, pooled. Further left is faster; a curve that reaches 100% sooner has fewer slow ticks.

The distribution chart tells the story better than the averages. Stratum's curve sits to the left of vanilla's the whole way and reaches 100% sooner: fewer slow ticks, and the slow ones are shorter. Both servers stayed under the 33 ms budget almost all of the time at this load. Vanilla crossed it a handful of times per run; Stratum did not cross it at all after the spawn itself.

We also timed every server subsystem. Entity simulation (AI, behaviours, despawn checks) cost 3.58 ms per tick on vanilla and 2.94 ms on Stratum, 18% cheaper. That is the lazy pose matrices and the allocation work paying off. With four cores, entity work dominates the tick, and that is where Stratum wins.

How many creatures before it breaks

Five hundred creatures did not get either server near its limit, so we ran a second series to find it. Same world, same 4-core, 6 GB server. After the idle phase the mod spawns always-active creatures in steps of 1,000, 2,000, 3,000, 4,000, 6,000, 8,000 and 10,000 in total, on top of the roughly 1,000 wild animals already there, and measures 30 seconds of ticks after each step. Three runs per server.

Line chart of mean and 99th-percentile tick time as spawned creatures climb from 1,000 to 10,000; vanilla crosses the 33.3 ms budget near 4,000, Stratum near 6,000
Tick time as the creature count climbs. Solid lines are the mean, dashed lines the 99th percentile, both the median of three runs.
Creatures spawned (plus ~1,000 wild)Vanilla mean / p99Vanilla TPSStratum mean / p99Stratum TPS
1,0008.6 / 31.6 ms29.86.4 / 18.9 ms30.0
2,00017.2 / 47.3 ms29.411.4 / 32.2 ms29.9
3,00025.7 / 57.9 ms28.516.8 / 42.9 ms29.7
4,00035.2 / 81.8 ms25.822.1 / 51.5 ms29.2
6,00058.6 / 106 ms17.133.0 / 64.1 ms27.0
8,00068.0 / 119 ms14.839.8 / 71.6 ms24.9
10,00089.4 / 159 ms11.251.7 / 93.8 ms19.4

Each creature costs Stratum about 40% less, all the way up. Both lines are close to straight: every extra thousand creatures adds about 8 ms of tick time on vanilla and about 5 ms on Stratum. The ratio holds from 1,000 to 10,000, so it is not a trick that only works at small scale.

That is roughly twice the creature load at full tick rate. Vanilla's mean tick crosses the 33 ms budget between 3,000 and 4,000 spawned creatures. Stratum crosses it at 6,000. If "fine" means 29 TPS or better, vanilla manages 2,000 creatures and Stratum 4,000.

Line chart of achieved ticks per second as creatures climb to 10,000: vanilla falls from 29.8 to 11.2, Stratum from 30.0 to 19.4
Tick rate as the creature count climbs. The server targets 30 ticks per second.

Past the breaking point, Stratum degrades more gracefully. At 10,000 creatures vanilla runs at 11 TPS, barely playable, with one tick in a hundred taking 160 ms or more. Stratum at the same load is at 19 TPS with a 94 ms p99. A server overrun by drifters is bad on both, but on Stratum it is still a server.

This is a main-thread test: at 10,000 creatures both servers used only about 1.5 of their 4 cores, because entity AI runs on the main thread in both. More cores would not have helped either of them. Memory under this load peaked at 2.6 GB on vanilla and 3.3 GB on Stratum, both inside the 6 GB plan.

Memory: budget an extra gigabyte

Bar chart: peak working set 1,761 MB on vanilla versus 2,686 MB on Stratum; managed heap after world generation 1,216 versus 1,931 MB; after the creature phase 1,169 versus 1,986 MB
Memory use. Working set is what the operating system sees; managed heap is .NET's own allocation after each phase.
VanillaStratumChange
Peak working set1.76 GB2.69 GB+53%
Managed heap after world generation1.22 GB1.93 GB+59%
Managed heap after the creature phase1.17 GB1.99 GB+69%
Peak working set, reloading the saved world1.43 GB1.29 GB10% less

This is the clearest trade-off in the whole test, so we dug into where the extra memory goes.

It is a world-generation cost, not a per-chunk cost. When the same 1,681 columns were loaded from disk instead of generated, Stratum used about 140 MB less than vanilla. The extra 900 MB appears while terrain is being generated and then stays. A server whose map is mostly explored sits much closer to vanilla; a server with players pushing into new land does not.

Most of it is not live data. A heap dump taken 50 seconds after world generation found 1.40 GB of reachable objects on Stratum against 1.16 GB on vanilla. Stratum genuinely holds about 230 MB more for the same world, mostly the lighting buffers that let it light columns in parallel and the pooled arrays vanilla allocates and throws away. The rest is headroom the .NET garbage collector keeps because Stratum allocates in bigger bursts from more threads. With memory to spare, it has no reason to give it back.

What that means for your plan. Size for the peak, not the idle. If a plan is sized tightly for vanilla, Stratum will push it over while players explore. Below about 4 GB we would not recommend Stratum on memory grounds; above that, one tier of headroom is enough.

The small print: idle cost, garbage collection, startup

VanillaStratum
Idle tick, mean1.45 ms2.05 ms
Idle CPU, all threads5.5% of one core13% of one core
GC pauses during world generation1,010 ms686 ms
GC pauses during the creature phase215 ms142 ms
Startup, fresh world16.7 s14.8 s
Startup, existing world10.9 s10.5 s

Idle. With nothing happening, Stratum's tick is about 0.6 ms longer and it uses 7% more of a single core, for its region bookkeeping and background metrics. That is under 2% of the tick budget. Nobody will notice it on an idle server, and on a busy one it is already included in the numbers above.

Bar chart of time paused for garbage collection: world generation 1,010 versus 686 ms, idle 13 versus 9 ms, 500 creatures 215 versus 142 ms, vanilla versus Stratum
Time all threads were stopped for .NET garbage collection in each phase. Lower is smoother.

Garbage collection. Stratum allocates far less short-lived garbage: 112 gen-0 collections during world generation against vanilla's 350, and total pause time a third lower there and under creature load. It does trigger a few more full collections, which fits the larger heap.

Startup was 11% faster on a fresh world and about the same on an existing one. Both servers held the 30 TPS target throughout the standard test.

Should you run Stratum?

Yes, if your players regularly explore new terrain, or you have a lot of loaded chunks and creatures and you see periodic lag spikes. Faster world generation, a much shorter tail on tick time and roughly double the creature headroom are exactly what a busy server benefits from, and Stratum does it without changing the save format or the client.

The one thing to check is memory. A small, mostly idle server gains little from Stratum, but loses nothing either: the idle overhead is a rounding error. The only way Stratum makes a small server worse is a plan sized so tightly for vanilla that an extra gigabyte during world generation pushes it over.

Either way: give it an extra gigabyte of RAM compared with vanilla, expect it to use your whole CPU allocation while terrain generates, keep backups of your world, and test your mod list on a copy first. Stratum is API-compatible, but it patches the content assemblies, and a mod that Harmony-patches the same code paths can force Stratum back to the vanilla terrain pass.

Host your Vintage Story server with us

Plans from $8.25/month. Ryzen 9 nodes, NVMe storage, instant setup and a 14-day money-back guarantee.

View Vintage Story plans

Questions about this

No. Players connect with the normal Vintage Story client. Stratum patches the server only, and worlds move between vanilla and Stratum without conversion.
In our test, yes: 21% faster wall-clock time for 1,681 chunk columns on a 4-core game server, using 34% more total CPU time to get there.
Yes. With about 1,500 entities loaded the average tick was 15% shorter, the 99th-percentile tick was 40% shorter and the worst tick was less than half of vanilla's. Each extra thousand active creatures costs about 5 ms of tick time on Stratum against 8 ms on vanilla.
In our test, vanilla held 29 TPS up to about 2,000 always-active creatures (plus 1,000 wild animals) and Stratum up to about 4,000. At 10,000 creatures vanilla ran at 11 TPS and Stratum at 19 TPS. Real creatures are mostly idle, so a live server holds more than this; the ratio between the two is the useful number.
About 900 MB more at peak in our test (2.69 GB against 1.76 GB) for a 41 × 41 chunk-column area on a 6 GB server. Most of that is headroom the garbage collector keeps after Stratum's burstier world generation, not live data. When reloading an already-generated world, Stratum used about 140 MB less than vanilla.
It does no harm: the idle overhead is about 0.6 ms per tick and 7% of one core, which nobody will notice. The gains show up when players explore and when many creatures are loaded. The only thing to check on a small plan is that there is about a gigabyte of memory headroom for world generation.
Stratum releases are tagged with the game version they patch, such as v1.22.7-stratum.2 for Vintage Story 1.22.7. Use the release that matches your server's version.

Something Unique Hosting is not affiliated with the Stratum project. All measurements were taken by us on our own hardware on 30 October 2026. Benchmark code and raw data: github.com/Something-Unique-Hosting/vintagestory-stratum-benchmark.