← Back to KnowledgeEngine Limits Every Server Owner Should Know Before They Hit Them

Most performance problems degrade gradually - a server gets a little choppier as load rises, and there’s time to react. A specific category of Garry’s Mod problem doesn’t work that way: a small set of hard, inherited-from-Source ceilings that don’t warn you as you approach them and fail outright, not gracefully, the moment you cross them. These matter most for prop-heavy Sandbox derivatives, DarkRP-style servers with large persistent prop counts, and any addon that spawns entities in bulk.

The entity/edict ceiling

Source’s engine supports up to 8,192 networked entities, but the practical networked-edict ceiling is a range, not a fixed number - Facepunch’s own wiki documents ents.Create starting to fail somewhere between 8,064 and 8,176, depending on what else is holding a reserved slot at that moment. This is not a soft warning threshold - ents.Create() returns NULL once you’re near it, and a real production crash log (tracked in a Facepunch GitHub issue) shows the exact failure message: "Not creating entity 'XYZ' - too many edicts! (8064 current, 8192 max)". That specific incident happened on a map with roughly 4,000 entities where game.CleanUpMap spawned new map entities before old ones had finished being removed - a timing issue, not a raw prop-count issue, which is part of why this ceiling catches server owners by surprise.

The critical detail for sizing and audit purposes: this budget is shared server-wide across every entity on the server - props, players, weapons, world brushes, and every custom Scripted Entity your addons spawn. A burst-spawning tool (a portal effect that spawns several decorative props at once, for example) should check remaining headroom and fail gracefully rather than spam failed ents.Create calls into an already-tight budget. One mitigation worth investigating for purely visual, non-interactive entities: ents.CreateClientProp/ClientsideModel creates non-networked, client-only fake props that don’t consume the 8,192 networked-edict budget at all.

Model precache: 8,192, and it’s a crash, not a warning

Separately from the entity ceiling, the engine supports precaching at most 8,192 unique models. Exceeding it crashes the game outright - again, not a graceful error a server operator can catch and work around at runtime. For servers running a large, accumulated addon library where each addon brings its own models, this is worth an explicit audit rather than an assumption that “it’ll just get slower.”

Models precached8,192
Networked entities~8,176
NWVar stringtable slots4,095
NetworkVar slots per entity32 + 4 string

Networking budgets are separate from the entity ceiling - and easy to conflate

Garry’s Mod has three distinct entity-state networking systems, and each has its own budget:

Conflating these three is a common source of confusing bugs: a NetworkVar-slot exhaustion error and an NWVar stringtable exhaustion error look similar in symptom (a value silently fails to network) but require entirely different fixes.

What this means for sizing and audits

Related reading: Why Garry’s Mod Won’t Scale on Threads covers the hardware side of sizing decisions - tick rate and single-core bottlenecks - that these ceilings sit alongside.