<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://g1r-mp.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Server_configuration_limits</id>
	<title>Server configuration limits - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://g1r-mp.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Server_configuration_limits"/>
	<link rel="alternate" type="text/html" href="https://g1r-mp.com/wiki/index.php?title=Server_configuration_limits&amp;action=history"/>
	<updated>2026-09-19T08:19:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://g1r-mp.com/wiki/index.php?title=Server_configuration_limits&amp;diff=863&amp;oldid=prev</id>
		<title>QCherry: Document expanded scripting capacities and complete audited limits for 0.1.3 BUILD81</title>
		<link rel="alternate" type="text/html" href="https://g1r-mp.com/wiki/index.php?title=Server_configuration_limits&amp;diff=863&amp;oldid=prev"/>
		<updated>2026-09-12T11:51:31Z</updated>

		<summary type="html">&lt;p&gt;Document expanded scripting capacities and complete audited limits for 0.1.3 BUILD81&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:Server configuration limits}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left:4px solid #c33;padding:0.7em 1em;background:#fff5f5&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;CURRENT IN UPDATE 0.1.3 — expanded-budget BUILD81 (2026-09-12).&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
All numeric ranges below are extracted from the production configuration parser, not guessed from a running server. Defaults are the compiled defaults; an explicit setting in your existing configuration overrides them. Invalid out-of-range values fail configuration loading instead of being silently clamped. Restart with the new server executable/configuration to apply changes. Do not overwrite your passwords, keys or other custom settings with a sample configuration.&lt;br /&gt;
&lt;br /&gt;
See [[Scripting limits]] for fixed API capacities and client limits. Server &amp;lt;code&amp;gt;[lua]&amp;lt;/code&amp;gt; settings do not propagate to the client VM.&lt;br /&gt;
&lt;br /&gt;
== Complete numeric configuration table ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Setting !! Compiled default !! Minimum !! Maximum !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.port&amp;lt;/code&amp;gt; || 7777 || 1 || 65535 || TCP/UDP port&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.maxPlayers&amp;lt;/code&amp;gt; || 500 || 1 || 5000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.tickrate&amp;lt;/code&amp;gt; || 30 || 1 || 240 || ticks/s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.syncDistance&amp;lt;/code&amp;gt; || 15000 || 500 || 200000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.peerTimeoutMinimumMs&amp;lt;/code&amp;gt; || 20000 || 5000 || 60000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.peerTimeoutMaximumMs&amp;lt;/code&amp;gt; || 40000 || 5000 || 120000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server.peerTimeoutLimit&amp;lt;/code&amp;gt; || 32 || 4 || 64 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.port&amp;lt;/code&amp;gt; || 7780 || 1 || 65535 || TCP/UDP port&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.workerThreads&amp;lt;/code&amp;gt; || 8 || 1 || 64 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.maxQueuedRequests&amp;lt;/code&amp;gt; || 1024 || 8 || 16384 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.requestsPerMinutePerIp&amp;lt;/code&amp;gt; || 1200 || 60 || 100000 || per minute&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.maxTrackedAddresses&amp;lt;/code&amp;gt; || 8192 || 256 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.readTimeoutMs&amp;lt;/code&amp;gt; || 5000 || 500 || 120000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http.writeTimeoutMs&amp;lt;/code&amp;gt; || 30000 || 1000 || 600000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nameplates.maxPairs&amp;lt;/code&amp;gt; || 250000 || 1 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nameplates.maxPairsPerResource&amp;lt;/code&amp;gt; || 250000 || 1 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nameplates.mutationsPerSecond&amp;lt;/code&amp;gt; || 4096 || 1 || 250000 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nameplates.mutationBurst&amp;lt;/code&amp;gt; || 8192 || 1 || 250000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.port&amp;lt;/code&amp;gt; || 7778 || 1 || 65535 || TCP/UDP port&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.ticketTtlMs&amp;lt;/code&amp;gt; || 15000 || 1000 || 120000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.idleTimeoutMs&amp;lt;/code&amp;gt; || 5000 || 2000 || 120000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.heartbeatIntervalMs&amp;lt;/code&amp;gt; || 1000 || 250 || 10000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxFramesPerSecond&amp;lt;/code&amp;gt; || 55 || 10 || 200 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxBytesPerSecond&amp;lt;/code&amp;gt; || 65536 || 8192 || 1048576 || bytes/s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxPendingHandshakes&amp;lt;/code&amp;gt; || 128 || 1 || 4096 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxConnectionsPerIp&amp;lt;/code&amp;gt; || 32 || 1 || 1000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxTrackedAddresses&amp;lt;/code&amp;gt; || 16384 || 256 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.whisperRange&amp;lt;/code&amp;gt; || 500 || 50 || 200000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.defaultRange&amp;lt;/code&amp;gt; || 1800 || 50 || 200000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.shoutRange&amp;lt;/code&amp;gt; || 3500 || 50 || 200000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voice.maxRange&amp;lt;/code&amp;gt; || 10000 || 50 || 200000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;lua.memoryLimitMB&amp;lt;/code&amp;gt; || 1024 || 4 || 4096 || MiB&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;lua.instructionLimit&amp;lt;/code&amp;gt; || 10000000 || 10000 || 1000000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;lua.timeoutMs&amp;lt;/code&amp;gt; || 5000 || 10 || 60000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;lua.hookInstructionInterval&amp;lt;/code&amp;gt; || 10000 || 100 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;magic.projectileTickrate&amp;lt;/code&amp;gt; || 30 || 10 || 120 || ticks/s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;magic.maxCastsPerSecond&amp;lt;/code&amp;gt; || 6 || 1 || 30 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;magic.maxSnapshotAgeMs&amp;lt;/code&amp;gt; || 1000 || 100 || 10000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;magic.playerCapsuleRadius&amp;lt;/code&amp;gt; || 45 || 10 || 500 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;magic.playerCapsuleHalfHeight&amp;lt;/code&amp;gt; || 90 || 20 || 1000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.projectileTickrate&amp;lt;/code&amp;gt; || 30 || 10 || 120 || ticks/s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.maxShotsPerSecond&amp;lt;/code&amp;gt; || 8 || 1 || 30 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.maxSnapshotAgeMs&amp;lt;/code&amp;gt; || 1000 || 100 || 10000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.developmentArrowCount&amp;lt;/code&amp;gt; || 0 || 0 || 65535 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.developmentBoltCount&amp;lt;/code&amp;gt; || 0 || 0 || 65535 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.playerCapsuleRadius&amp;lt;/code&amp;gt; || 45 || 10 || 500 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ranged.playerCapsuleHalfHeight&amp;lt;/code&amp;gt; || 90 || 20 || 1000 || cm (100 cm = 1 m)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rcon.port&amp;lt;/code&amp;gt; || 7781 || 1 || 65535 || TCP/UDP port&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rcon.timestampWindowSeconds&amp;lt;/code&amp;gt; || 30 || 5 || 300 || s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rcon.requestsPerMinute&amp;lt;/code&amp;gt; || 60 || 1 || 600 || per minute&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.handshakeTimeoutMs&amp;lt;/code&amp;gt; || 5000 || 1000 || 30000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.maxConnectionsPerIp&amp;lt;/code&amp;gt; || 32 || 1 || 1000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.maxPendingHandshakes&amp;lt;/code&amp;gt; || 128 || 1 || 2048 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.connectionAttemptsPerMinute&amp;lt;/code&amp;gt; || 120 || 1 || 100000 || per minute&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.preAuthPacketsPerSecond&amp;lt;/code&amp;gt; || 12 || 1 || 1000 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.authenticatedPacketsPerSecond&amp;lt;/code&amp;gt; || 240 || 30 || 10000 || per second&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.authenticatedBytesPerSecond&amp;lt;/code&amp;gt; || 524288 || 65536 || 67108864 || bytes/s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.invalidPacketsPerMinute&amp;lt;/code&amp;gt; || 16 || 1 || 10000 || per minute&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.temporaryBlockSeconds&amp;lt;/code&amp;gt; || 120 || 10 || 86400 || s&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.maxTrackedAddresses&amp;lt;/code&amp;gt; || 16384 || 256 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.maxPacketBytes&amp;lt;/code&amp;gt; || 65536 || 16384 || 1048576 || bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.maxWaitingDataPerPeerBytes&amp;lt;/code&amp;gt; || 524288 || 65536 || 16777216 || bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.day&amp;lt;/code&amp;gt; || 0 || 0 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.hour&amp;lt;/code&amp;gt; || 8 || 0 || 23 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.minute&amp;lt;/code&amp;gt; || 0 || 0 || 59 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.minuteDurationMs&amp;lt;/code&amp;gt; || 1000 || 0 || 3600000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.weatherTransitionMs&amp;lt;/code&amp;gt; || 3000 || 0 || 300000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;world.syncIntervalMs&amp;lt;/code&amp;gt; || 5000 || 500 || 60000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.workerThreads&amp;lt;/code&amp;gt; || 8 || 1 || 64 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxConnectionsPerResource&amp;lt;/code&amp;gt; || 16 || 1 || 128 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxPendingQueriesPerResource&amp;lt;/code&amp;gt; || 1024 || 1 || 100000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxQueryBytes&amp;lt;/code&amp;gt; || 4194304 || 1024 || 67108864 || bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxResultRows&amp;lt;/code&amp;gt; || 50000 || 1 || 1000000 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxResultBytes&amp;lt;/code&amp;gt; || 67108864 || 1024 || 536870912 || bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.connectTimeoutMs&amp;lt;/code&amp;gt; || 5000 || 100 || 120000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.readTimeoutMs&amp;lt;/code&amp;gt; || 15000 || 100 || 300000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.writeTimeoutMs&amp;lt;/code&amp;gt; || 15000 || 100 || 300000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;database.maxBlockingPollMs&amp;lt;/code&amp;gt; || 100 || 0 || 5000 || ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordWorkerThreads&amp;lt;/code&amp;gt; || 4 || 1 || 8 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordQueueCapacity&amp;lt;/code&amp;gt; || 1024 || 8 || 4096 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordPendingPerResource&amp;lt;/code&amp;gt; || 256 || 1 || 512 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordMemoryKiB&amp;lt;/code&amp;gt; || 65536 || 8192 || 1048576 || KiB&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordIterations&amp;lt;/code&amp;gt; || 3 || 1 || 10 || count / integer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;security.passwordParallelism&amp;lt;/code&amp;gt; || 1 || 1 || 4 || count / integer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional validation and units ==&lt;br /&gt;
* Peer timeout maximum must be at least the minimum. Voice idle timeout must be at least twice its heartbeat interval.&lt;br /&gt;
* Voice ranges must satisfy whisper &amp;lt;= default &amp;lt;= shout &amp;lt;= max. These configuration values and &amp;lt;code&amp;gt;server.syncDistance&amp;lt;/code&amp;gt; are &amp;#039;&amp;#039;&amp;#039;centimetres&amp;#039;&amp;#039;&amp;#039;, not the metre units used by camera, NPC route and 3D-text Lua functions.&lt;br /&gt;
* &amp;lt;code&amp;gt;world.minuteDurationMs=0&amp;lt;/code&amp;gt; pauses time. Day 0..1000000, hour 0..23 and minute 0..59 are separate limits.&lt;br /&gt;
* Enabled voice must use a different port from gameplay, resource HTTP and enabled RCON.&lt;br /&gt;
* At least one autostart resource and a nonempty navigation map filename are required. Navigation geometry settings are not exposed as numeric serverconf settings; see [[Scripting limits#Navigation]].&lt;br /&gt;
* Listing/name text: server name at most 96 UTF-8 bytes and 48 codepoints; description at most 320 bytes and 160 codepoints. Game mode is an ASCII token up to 24 bytes, region 12, version 24; at most 8 tags of 16 bytes each. Join password is at most 128 bytes.&lt;br /&gt;
* Production master-list heartbeat is fixed at 20 seconds and authorization maximum staleness at 300 seconds. These are not operator-adjustable Lua limits. Device identity verification remains mandatory.&lt;br /&gt;
* Rate controls are shared traffic budgets, not one independent allowance per Lua event. Increasing Lua storage does not disable anti-abuse controls.&lt;br /&gt;
&lt;br /&gt;
== Source audit ==&lt;br /&gt;
&amp;lt;code&amp;gt;server/src/config/ServerConfig.cpp&amp;lt;/code&amp;gt; (every numeric &amp;lt;code&amp;gt;parse_unsigned&amp;lt;/code&amp;gt; setting), &amp;lt;code&amp;gt;ServerConfig.hpp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server/src/database/DatabaseTypes.hpp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;shared/native_protocol.hpp&amp;lt;/code&amp;gt;. Audit: 2026-09-12, protocol 34, expanded-budget 0.1.3 BUILD81.&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua API]]&lt;/div&gt;</summary>
		<author><name>QCherry</name></author>
	</entry>
</feed>