Configuration
Full configuration reference for vx_mdt.
All configuration lives in config/shared/global.lua.
Full Config
return {
exportAllowlist = {},
bridges = {
debug = false,
framework = "",
license = "",
interaction = "",
inventory = "",
properties = "",
billing = "",
prison = "",
garages = "",
radar = "",
camera = "",
voice = "",
},
forensics = {
providerManaged = false,
providers = { "r14-evidence", "framework" },
},
evidence = {
allowStashIdEdit = true,
},
vehicles = {
autoLinkOwner = true,
},
weapons = {
autoLinkOwner = true,
},
bolos = {
autoFlagRadar = true,
syncOnStartup = false,
},
terminal = {
keybind = true,
defaultKey = "K",
},
dispatch = {
globalOverlay = true,
overlayKeybind = "F5",
newCallNotifications = true,
panicButton = true,
panicKeybind = "F9",
panicCooldown = 30,
notificationDuration = 8000,
exportAllowlist = {},
maxCallAge = 1800,
maxCalls = 100,
dispatchCompat = "",
autoExpireAge = 86400,
autoExpireCheckInterval = 60,
autoDetection = {
enabled = false,
events = {
gunshot = { enabled = true, cooldown = 15, priority = 2 },
fight = { enabled = true, cooldown = 30, priority = 3 },
carjacking = { enabled = true, cooldown = 20, priority = 1 },
vehicleTheft = { enabled = true, cooldown = 30, priority = 2 },
explosion = { enabled = true, cooldown = 20, priority = 1 },
speeding = { enabled = true, cooldown = 45, speedThreshold = 130, priority = 3 },
},
fields = {
plate = true,
vehicleColor = true,
speed = true,
heading = true,
suspect = true,
owner = true,
},
},
blips = {
enabled = true,
defaultSprite = 161,
defaultColour = 1,
defaultScale = 0.8,
},
},
radio = {
enabled = true,
canUseRadio = function(srcNetId)
return true
end,
},
departments = {
["police"] = {
type = "law",
title = "Los Santos Police Department",
shortTitle = "LSPD",
symbol = "#",
accentColor = "#3b82f6",
allowAccessOffDuty = false,
defaultRadioFrequency = 1,
defaultTags = GLOBAL.DEFAULTS.TAGS,
defaultLicenses = GLOBAL.DEFAULTS.LICENSES,
defaultCertificates = GLOBAL.DEFAULTS.CERTIFICATES,
defaultTemplates = GLOBAL.DEFAULTS.TEMPLATES,
defaultUnits = GLOBAL.DEFAULTS.UNITS,
},
},
}Bridges
| Field | Type | Default | Description |
|---|---|---|---|
debug | boolean | false | Print resolver diagnostics for every bridge candidate during startup |
framework | string | "" | Force a specific framework bridge, or "none" to disable. Empty = auto-detect |
license | string | "" | Force a specific license bridge, or "none" to disable. Empty = auto-detect |
interaction | string | "" | Force a specific interaction bridge, or "none" to disable. Empty = auto-detect |
inventory | string | "" | Force a specific inventory bridge, or "none" to disable. Empty = auto-detect |
properties | string | "" | Force a specific properties bridge, or "none" to disable. Empty = auto-detect |
billing | string | "" | Force a specific billing bridge, or "none" to disable. Empty = auto-detect |
prison | string | "" | Force a specific prison bridge, or "none" to disable. Empty = auto-detect |
garages | string | "" | Force a specific garages bridge, or "none" to disable. Empty = auto-detect |
radar | string | "" | Force a specific radar bridge, or "none" to disable. Empty = auto-detect |
camera | string | "" | Force a specific camera bridge, or "none" to disable. Empty = auto-detect |
voice | string | "" | Force a specific voice bridge, or "none" to disable. Empty = auto-detect |
Bridges are auto-detected by default. You only need to set these if you want to force a specific bridge or disable a category with "none". See the Bridges page for supported resources.
Forensics
| Field | Type | Default | Description |
|---|---|---|---|
providerManaged | boolean | false | When true, fingerprint and blood type are read-only in the MDT and fetched from external providers instead |
providers | string[] | { "r14-evidence", "framework" } | Ordered provider list — first provider that returns a value wins |
Available provider values:
"r14-evidence"— reads from r14-evidenceev_identifiers"framework"— uses QB/QBox metadata fallback (aliases:"qb","qbx","qbox")
ESX has no built-in metadata provider for biometrics. ESX servers should only list explicit providers like "r14-evidence".
Export Allowlist
exportAllowlist restricts which resources can call vx_mdt server exports. An empty table means all resources are allowed.
exportAllowlist = { "my-resource", "another-resource" },Evidence
| Field | Type | Default | Description |
|---|---|---|---|
allowStashIdEdit | boolean | true | Allow editing the stash ID field on evidence items in the UI |
Vehicles
| Field | Type | Default | Description |
|---|---|---|---|
autoLinkOwner | boolean | true | Automatically link the vehicle owner's profile when registering a vehicle |
Weapons
| Field | Type | Default | Description |
|---|---|---|---|
autoLinkOwner | boolean | true | Automatically link the weapon owner's profile when registering a weapon |
BOLOs
| Field | Type | Default | Description |
|---|---|---|---|
autoFlagRadar | boolean | true | Automatically flag/unflag vehicle plates in the radar bridge when BOLOs are created, updated, or cancelled |
syncOnStartup | boolean | false | Re-flag all active BOLO plates in radar on resource start. Disable if your radar script persists flags in its own database |
When autoFlagRadar is enabled and a radar bridge is detected, vehicle plates linked to active BOLOs are automatically flagged in the radar system. Plates are unflagged when a BOLO is cancelled, expired, or deleted — even if the same plate appears in multiple BOLOs, it is only unflagged when no active BOLO references it.
Terminal
| Field | Type | Default | Description |
|---|---|---|---|
keybind | boolean | true | Enable the keybind to toggle the MDT (set false to use /mdt command only) |
defaultKey | string | "K" | Default key to toggle the MDT |
Dispatch
| Field | Type | Default | Description |
|---|---|---|---|
globalOverlay | boolean | true | Enable the global dispatch overlay panel (toggled via keybind) |
overlayKeybind | string | "F5" | Keybind to toggle the dispatch overlay |
newCallNotifications | boolean | true | Show popup notifications for new dispatch calls |
panicButton | boolean | true | Enable the panic button keybind |
panicKeybind | string | "F9" | Keybind to send a panic signal |
panicCooldown | number | 30 | Seconds between panic signals |
notificationDuration | number | 8000 | How long dispatch notifications stay visible (ms) |
exportAllowlist | table | {} | Restrict which resources can create dispatch calls via exports (empty = all) |
maxCallAge | number | 1800 | Seconds before inactive calls are eligible for eviction |
maxCalls | number | 100 | Max active calls before oldest are evicted |
dispatchCompat | string | "" | Name of third-party dispatch resource to intercept ("cd_dispatch", "cd_dispatch3d", "ps-dispatch", "rcore_dispatch", "fd_dispatch") |
autoExpireAge | number | 86400 | Seconds before completed/expired calls are auto-deleted |
autoExpireCheckInterval | number | 60 | How often (seconds) to check for expired calls |
autoDetection.enabled | boolean | false | Master toggle for auto-detection of game events (shots fired, carjacking, etc.) |
autoDetection.events.<event>.enabled | boolean | true | Enable/disable a specific event type |
autoDetection.events.<event>.cooldown | number | varies | Seconds before the same event can trigger again |
autoDetection.events.<event>.priority | number | varies | Dispatch call priority (1 = highest) |
autoDetection.events.speeding.speedThreshold | number | 130 | Speed in km/h above which a speeding event triggers |
autoDetection.fields.plate | boolean | true | Attach vehicle plate as a structured field |
autoDetection.fields.vehicleColor | boolean | true | Attach vehicle color with hex swatch |
autoDetection.fields.speed | boolean | true | Attach vehicle speed (speeding events) |
autoDetection.fields.heading | boolean | true | Attach compass heading |
autoDetection.fields.suspect | boolean | true | Attach suspect sex description |
autoDetection.fields.owner | boolean | true | Look up registered vehicle owner by plate (server-side, cached) |
blips.enabled | boolean | true | Show GTA map blips for active dispatch calls |
blips.defaultSprite | number | 161 | Default GTA blip sprite ID |
blips.defaultColour | number | 1 | Default GTA blip colour ID |
blips.defaultScale | number | 0.8 | Default blip scale on the map |
Radio
| Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Master toggle for all radio integration (auto-tuning, channel guarding) |
canUseRadio | function | nil | returns true | Called before auto-tuning a player. Return true to allow, or false, reason to deny. |
canUseRadio Example
canUseRadio = function(srcNetId)
if not sv_inventory.hasItem(srcNetId, "radio") then
return false, "Please equip a radio."
end
return true
end,Departments
Each key in the departments table is a job name that maps to a department definition. Add or remove departments as needed.
| Field | Type | Description |
|---|---|---|
type | "law" | "ems" | "judge" | Determines routing, UI layout, and available features |
title | string | Full display name |
shortTitle | string | Abbreviated name shown in compact UI elements |
symbol | string | Single character shown in UI badges |
accentColor | string | Hex color for department theming |
allowAccessOffDuty | boolean | Allow opening MDT while off duty |
defaultRadioFrequency | number | Radio frequency auto-assigned to officers |
defaultTags | table | Tags seeded on first boot |
defaultLicenses | table | Licenses seeded on first boot |
defaultCertificates | table | Certificates seeded on first boot |
defaultTemplates | table | Report/incident templates seeded on first boot |
defaultUnits | table | Units seeded on first boot |
Defaults (tags, licenses, certificates, templates, units) are only seeded the first time a department is created. Changing them in config after the initial boot has no effect — manage them through the MDT UI instead.