FiveM Resource Configuration
This page is the full convar and config reference for Kestrel's FiveM resources. For the minimal quick-start install steps, see Setting Up Your Community.
kestrel-cad
Convars
| Convar | Default | Purpose |
|---|---|---|
kestrel_api_url | https://cad.ashmeresoftware.com | Kestrel API origin (no /api/v1 suffix) |
kestrel_client_id / kestrel_client_secret | "" | Primary (first) department's FiveM credential |
kestrel_web_base_url | https://cad.ashmeresoftware.com | Web app origin, used for MDT handoff — often a different origin than kestrel_api_url, set it explicitly |
kestrel_cad_default_department_slug | "" | Required — the department slug this credential authenticates as |
kestrel_cad_credential_2_department_slug / _client_id / _client_secret (and _3_, _4_, ...) | — | Additional per-department credentials for a combined PD+Fire+EMS server; there's no _1_, the plain convars above are index 1 |
kestrel_cad_mobile_mdt_command | kmdt | Mobile MDT command name (no leading slash) |
kestrel_cad_vehicle_mdt_command | kvmdt | Vehicle MDT command name |
kestrel_cad_mdt_seats | driver | driver, front, or any — who may request the Vehicle MDT |
kestrel_cad_mobile_mdt_enabled | 1 | Master toggle, Mobile MDT |
kestrel_cad_vehicle_mdt_enabled | 1 | Master toggle, Vehicle MDT |
kestrel_cad_debug | 0 | Verbose console logging |
kestrel_cad_esx_dob_format | DD/MM/YYYY | DOB format your ESX identity resource stores, used by /kestrelclaim |
kestrel_cad_qb_dob_format | MM/DD/YYYY | Same, for QBCore/QBox |
kestrel_cad_location_report_enabled | 1 | Ambient live-position reporting (drives the dispatcher map) |
kestrel_cad_location_report_interval_ms | 5000 | How often on-duty officer coordinates are sent |
kestrel_cad_waypoint_poll_enabled | 1 | Assigned-call waypoint delivery |
kestrel_cad_waypoint_poll_interval_ms | 5000 | Poll interval |
kestrel_cad_presence_heartbeat_enabled | 1 | Concurrent-account presence heartbeat (reports the whole server's connected-player population for billing's concurrent_accounts.max) |
kestrel_cad_presence_heartbeat_interval_ms | 30000 | Presence heartbeat interval |
kestrel_cad_auto_update_enabled | 0 | Automatic update checking/downloading — opt-in |
kestrel_cad_auto_update_check_interval_ms | 3600000 | Update check interval |
kestrel_cad_station_duty_enabled | 1 | Master switch, station-zone auto duty detection (needs shared/zones.lua populated to do anything) |
kestrel_cad_station_check_interval_ms | 1000 | Poll tick for station-zone detection |
kestrel_cad_station_debounce_ms | 3000 | How long a consistent state must hold before an automatic duty change commits — avoids flapping when someone briefly walks through a zone |
kestrel_cad_station_blips_enabled | 1 | Station map blips |
kestrel_cad_station_target_enabled | 1 | qb-target/ox_target "Clock On/Off Duty" and locker interactions |
kestrel_cad_locker_enabled | 1 | Vehicle/equipment locker interactions |
Set these as convars in a gitignored file that you exec from server.cfg
— never commit credentials into config.lua directly. See
Setting Up Your Community if you haven't created
your FiveM credentials yet.
shared/zones.lua
This file is community-edited and safe to commit — no secrets belong in it. It maps your server's job names onto Kestrel department slugs, and optionally defines station zones for automatic duty clock-on/off, map blips, vehicle lockers, and armories:
JobDutyMap = { police = "police-department", ambulance = "ems-department" }
StationZones = {
{
label = "PD Station",
departmentSlug = "police-department",
coords = vector3(441.0, -982.0, 30.7),
radius = 15.0,
blip = { enabled = true, sprite = 60, colour = 38, visibleToAll = false },
locker = {
vehicles = { { model = "police", label = "Cruiser" } },
vehicleSpawnCoords = vector4(441.0, -982.0, 30.7, 90.0),
armory = { weapons = { { name = "WEAPON_PISTOL", ammo = 250 } } },
},
},
}
locker is fully optional per zone. blip.visibleToAll = false (the
default) shows that zone's blip only to players whose job maps to its
department via JobDutyMap.
server/config.lua — MDT vehicle allow-list
Edited directly in the resource, not via convar:
| Setting | Default | Purpose |
|---|---|---|
MdtVehicles | police, police2, police3, police4, fbi, fbi2, sheriff, sheriff2 | Exact vehicle model allow-list for the Vehicle MDT |
MdtVehicleClasses | {18} | Fallback GTA vehicle-class allow-list (18 = Emergency) |
Events fired by kestrel-cad
Other resources can listen for these to hook in custom UI or sound:
| Event | Payload | Purpose |
|---|---|---|
kestrel-cad:waypointSet | mapX, mapY | Sets an in-game GPS waypoint for an assigned call |
kestrel-cad:waypointClear | — | Clears the waypoint |
kestrel-cad:newAssignment | callNumber | New-incident notification, independent of MDT open state |
kestrel-cad:mdtHandoff | token, surface, webBaseUrl | Fired once a handoff token is minted, opens the in-game MDT overlay |
kestrel-cad doesn't define any exports of its own for other resources to call into.
kestrel-radio
Convars
| Convar | Default | Purpose |
|---|---|---|
kestrel_api_url | "" | Shares kestrel-cad's API origin |
kestrel_client_id / kestrel_client_secret | "" | Shares kestrel-cad's primary-department credential — no separate credential needed |
kestrel_radio_channel_map | "" | Comma-delimited slug:number pairs, e.g. police-department:1,fire-department:2 — maps a voice-plugin radio channel number to a Kestrel talkgroup |
kestrel_radio_poll_ms | 1000 | How often channel membership is re-checked |
kestrel_radio_debug | 1 | Verbose logging (on by default for this resource) |
kestrel_radio_test_command | 1 | Enables a /radiochannel <n> test command for joining a channel directly |
Exports
kestrel-radio has one server-side export, GetChannelMap(), that another
resource can call to read the parsed channel map.
See Radio & Communications for how this feature actually behaves for dispatchers and officers day to day — this page is just the config reference.
If your community also runs kestrel-ers-bridge (night_ers integration)
or kestrel-anpr-bridge (ANPR cameras), see
Setting Up Your Community for their setup —
their full convar references aren't included on this page yet.