Server configuration
vimp-server reads config.json from its working directory. If the file is missing, the server writes a complete default configuration.
{
"host": "0.0.0.0",
"server_name": "My VIMP Server",
"port": 7777,
"max_players": 100,
"max_vehicles": 1000,
"max_objects": 2000,
"max_markers": 2000,
"max_blips": 2000,
"max_checkpoints": 2000,
"max_colshapes": 2000,
"max_peds": 1000,
"shard_size": 100,
"world_radius": 100,
"streaming_tick_rate_ms": 40,
"streaming_visibility_radius": 2,
"scripts_path": "./scripting",
"script_ready_timeout_secs": 30,
"devtools": {
"enabled": false,
"allowed_social_clubs": [],
"allowed_names": [],
"allow_localhost": true,
"max_code_bytes": 65536
},
"heartbeat": {
"enabled": false,
"server_token": ""
},
"voice": {
"enabled": true,
"proximity": {
"enabled": true,
"full_volume_distance": 3,
"max_distance": 25
},
"codec": {
"bitrate": 24000,
"expected_packet_loss_percent": 10
},
"limits": {
"max_channels": 1024,
"max_memberships_per_player": 8,
"max_members_per_channel": 256,
"max_simultaneous_speakers_per_channel": 8,
"max_packets_per_second": 60,
"packet_burst": 10
}
}
}The example binds all interfaces for remote players. Keep the default 127.0.0.1 when only local access is intended.
Field reference
| Field | Type | Default | Description |
|---|---|---|---|
host | string | "127.0.0.1" | Address the game server binds to. |
server_name | string | "VIMP Server" | Public server name. |
port | integer | 7777 | TCP and UDP game port. |
max_players | integer | 100 | Maximum simultaneous players. |
max_vehicles | integer | 1000 | Maximum server-created vehicles. |
max_objects | integer | 2000 | Maximum server-created objects. |
max_markers | integer | 2000 | Maximum server-created markers. |
max_blips | integer | 2000 | Maximum server-created blips. |
max_checkpoints | integer | 2000 | Maximum server-created checkpoints. |
max_colshapes | integer | 2000 | Maximum server-created colshapes. |
max_peds | integer | 1000 | Maximum server-created peds. |
shard_size | number | 100 | World-space size of one streaming shard. |
world_radius | integer | 100 | World radius measured in shards. |
streaming_tick_rate_ms | integer | 40 | Interval between visibility updates in milliseconds. |
streaming_visibility_radius | integer | 2 | Visibility radius measured in shards; voice requires at least 1. |
scripts_path | string | "./scripting" | Root containing server/main.js and client resources. |
script_ready_timeout_secs | integer | 30 | Time allowed for the script to call vimp.markReady(). |
devtools | object | {} | Remote script DevTools access policy. |
devtools.enabled | boolean | false | Enable DevTools execution. |
devtools.allowed_social_clubs | array | [] | Allowed Social Club identifiers. |
devtools.allowed_names | array | [] | Allowed player names. |
devtools.allow_localhost | boolean | true | Allow DevTools from localhost. |
devtools.max_code_bytes | integer | 65536 | Maximum submitted code size in bytes. |
heartbeat | object | {} | Directory heartbeat and authentication. |
heartbeat.enabled | boolean | false | Publish heartbeats. |
heartbeat.server_token | string | "" | Secret server-directory token. |
voice | object | {} | Integrated voice configuration. |
voice.enabled | boolean | true | Enable the voice service. |
voice.proximity | object | {} | Proximity voice behavior. |
voice.proximity.enabled | boolean | true | Enable proximity routing. |
voice.proximity.full_volume_distance | number | 3 | Distance at which volume starts to fall. |
voice.proximity.max_distance | number | 25 | Maximum audible distance; must not exceed shard_size. |
voice.codec | object | {} | Opus encoder settings. |
voice.codec.bitrate | integer | 24000 | Opus bitrate in bits per second. |
voice.codec.expected_packet_loss_percent | integer | 10 | Expected packet loss percentage. |
voice.limits | object | {} | Voice abuse and capacity limits. |
voice.limits.max_channels | integer | 1024 | Maximum voice channels. |
voice.limits.max_memberships_per_player | integer | 8 | Maximum channel memberships per player. |
voice.limits.max_members_per_channel | integer | 256 | Maximum members in one channel. |
voice.limits.max_simultaneous_speakers_per_channel | integer | 8 | Maximum simultaneous speakers per channel. |
voice.limits.max_packets_per_second | integer | 60 | Per-player packet rate limit. |
voice.limits.packet_burst | integer | 10 | Allowed packet burst above the sustained rate. |
Streaming scale
The approximate world-space extent is world_radius × shard_size. Visibility radius is measured in shards. Larger visibility, faster ticks, and higher entity caps increase CPU, bandwidth, and client load; tune them with realistic player movement rather than only idle connections.
Secrets
Treat heartbeat.server_token as a secret. Do not commit a production token or place config.json under the client resource tree. DevTools allowlists are also server-only configuration.
Voice validation runs during startup. Invalid distances, bitrate, packet-loss, or capacity settings stop the server with a configuration error.