Skip to content

Server configuration

vimp-server reads config.json from its working directory. If the file is missing, the server writes a complete default configuration.

json
{
  "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

FieldTypeDefaultDescription
hoststring"127.0.0.1"Address the game server binds to.
server_namestring"VIMP Server"Public server name.
portinteger7777TCP and UDP game port.
max_playersinteger100Maximum simultaneous players.
max_vehiclesinteger1000Maximum server-created vehicles.
max_objectsinteger2000Maximum server-created objects.
max_markersinteger2000Maximum server-created markers.
max_blipsinteger2000Maximum server-created blips.
max_checkpointsinteger2000Maximum server-created checkpoints.
max_colshapesinteger2000Maximum server-created colshapes.
max_pedsinteger1000Maximum server-created peds.
shard_sizenumber100World-space size of one streaming shard.
world_radiusinteger100World radius measured in shards.
streaming_tick_rate_msinteger40Interval between visibility updates in milliseconds.
streaming_visibility_radiusinteger2Visibility radius measured in shards; voice requires at least 1.
scripts_pathstring"./scripting"Root containing server/main.js and client resources.
script_ready_timeout_secsinteger30Time allowed for the script to call vimp.markReady().
devtoolsobject{}Remote script DevTools access policy.
devtools.enabledbooleanfalseEnable DevTools execution.
devtools.allowed_social_clubsarray[]Allowed Social Club identifiers.
devtools.allowed_namesarray[]Allowed player names.
devtools.allow_localhostbooleantrueAllow DevTools from localhost.
devtools.max_code_bytesinteger65536Maximum submitted code size in bytes.
heartbeatobject{}Directory heartbeat and authentication.
heartbeat.enabledbooleanfalsePublish heartbeats.
heartbeat.server_tokenstring""Secret server-directory token.
voiceobject{}Integrated voice configuration.
voice.enabledbooleantrueEnable the voice service.
voice.proximityobject{}Proximity voice behavior.
voice.proximity.enabledbooleantrueEnable proximity routing.
voice.proximity.full_volume_distancenumber3Distance at which volume starts to fall.
voice.proximity.max_distancenumber25Maximum audible distance; must not exceed shard_size.
voice.codecobject{}Opus encoder settings.
voice.codec.bitrateinteger24000Opus bitrate in bits per second.
voice.codec.expected_packet_loss_percentinteger10Expected packet loss percentage.
voice.limitsobject{}Voice abuse and capacity limits.
voice.limits.max_channelsinteger1024Maximum voice channels.
voice.limits.max_memberships_per_playerinteger8Maximum channel memberships per player.
voice.limits.max_members_per_channelinteger256Maximum members in one channel.
voice.limits.max_simultaneous_speakers_per_channelinteger8Maximum simultaneous speakers per channel.
voice.limits.max_packets_per_secondinteger60Per-player packet rate limit.
voice.limits.packet_burstinteger10Allowed 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.

VIMP developer documentation