Oxide Dispatch
Multi-framework dispatch and responder alert system for FiveM servers.
Oxide Dispatch is the alert broadcast and responder lifecycle backbone for FiveM servers. It distributes job-targeted alerts to police, EMS, fire, and custom responder groups, tracks who's responding, persists every transition to MySQL, and exposes a public olink.dispatch.* API so downstream MDTs can build on top of it — oxide-police is the recommended consumer. It supports QBCore, QBx (Qbox), and ESX Legacy through o-link with no source changes per framework.
It replaces the scattered ecosystem of ps-dispatch, cd_dispatch, qs-dispatch, and the legacy police:server:policeAlert / hospital:server:ambulanceAlert flows with a single code-driven pipeline that every responder group shares. Compatibility shims keep third-party scripts that fire the legacy events working without modification.
Key Features
- Real-Time Job-Targeted Broadcast — Alerts fan out to on-duty responders by responder group (
police,ems,fire) or raw job names, with server-authoritative coordinates and per-source rate limiting - Non-Focused Stacked NUI Popup — Up to 3 alerts visible at once, mini-map preview, GTA sound, auto-dismiss after 20s by default — never blocks player input
- Persistent MySQL Audit Trail — Every alert and every responder transition is written to
dispatch_alerts/dispatch_responders; the resource rehydrates active alerts on restart - Auto-Expiry Sweeper — Unresolved alerts move to
expiredafter a configurable TTL (15 min default) — closed/expired alerts remain in MySQL for reporting and the heatmap - Dispatch Hub — A centered window over a dimmed backdrop giving any responder group an overview: live alerts, map view, heatmap overlay, and quick respond/clear/close actions. Master-switched via
Config.DispatchHub.RadialEnabled - AI Radio Dispatcher (optional) — One AI dispatcher per department channel (LSPD, BCSO, SASP, EMS, fire). Officers PTT and the AI files alerts through the same pipeline. Realtime (~500ms) or chained (~2s, cheaper) provider modes; each chained step can be repointed at a cheaper provider (Groq, OpenRouter, DeepInfra, Lemonfox) or self-hosted software (Ollama, LM Studio, Kokoro, Speaches) with no code changes
- Civilian 911 / 311 — Radial menu,
/911 <text>, and/311 <text>chat commands with category routing, anonymity, and two-way responder replies — responders answer a caller with/replycaller <id> <message>, and the caller gets a private toast even when the report was anonymous - Panic / Responder Backup — F4 keybind,
/panic, and radial item with per-group routing, off-duty bypass, auto-waypoint, and 60s per-responder cooldown - Automatic Crime Detection — Shooting (
10-71), drive-by (10-72), melee (10-34), explosion (10-77), death (10-52), and vehicle theft (10-30) with weapon, zone, and job blacklists - Per-Group Responder Statuses + Callsigns — Police, EMS, and Fire each have their own status lists; persistent callsigns surface on alerts, replies, and status broadcasts
oxide-policeIntegration — Readsoxide-police.police_departmentsat boot and on a 60-second timer, defers police duty checks tooxide-police:IsPlayerOnDuty, and falls back toConfig.ResponderGroups.police.jobswhenoxide-policeisn't installed- Shared Map — The Dispatch Hub map and alert previews use the o-link shared map;
Config.MapModechooses how Cayo Perico is shown - Legacy QB/ESX Compatibility Shims — Forwards
police:server:policeAlert,hospital:server:ambulanceAlert/emergencyAlert,esx_policejob:alert,esx_outlawalert:*,esx_phone:send, andesx_ambulancejob:onPlayerDistressinto the modern pipeline so existing scripts keep working unedited
Requirements
| Resource | Minimum Version | Purpose |
|---|---|---|
ox_lib | latest | Commands, callbacks, locale, input dialogs |
oxmysql | latest | Database driver |
o-link | latest | Framework abstraction used by dispatch |
| Framework | latest | One of qb-core, qbx_core, or es_extended |
| FXServer | a recent version | The resource includes a small Node.js script and needs the server's built-in Node 22 runtime |
pma-voice | latest | Only required for the optional AI Radio Dispatcher |
Supported Frameworks
| Framework | Support |
|---|---|
QBCore (qb-core) | Full |
QBX (qbx_core) | Full |
ESX Legacy (es_extended) | Full |
Quick Start
Place oxide-dispatch in your server's resources directory.
Start ox_lib, oxmysql, your framework, o-link, and oxide-dispatch in that order.
Run sql/install.sql to create the dispatch_alerts and dispatch_responders tables.
Review shared/config.lua and the files under shared/config/.
See the Installation Guide for the full setup flow.
Documentation
Installation
Full setup flow.
Configuration
Per-config-file reference.
Features
Detailed feature reference.
Jobs & Responder Groups
Recipe for adding jobs and groups.
QBCore Setup
QBCore-specific setup.
QBX Setup
QBX-specific setup.
ESX Setup
ESX-specific setup.
AI Radio Dispatcher
AI dispatcher setup and pricing.
Exports & Integration
API reference.
Admin Tools
Admin commands and keybinds.
Troubleshooting
Common issues and fixes.