Getting Started
Everything you need to install, configure, and run Metro Radio on your FiveM server. Follow the steps below in order and you'll have department radio running in minutes.
Prerequisites
Download & Extract
Download the Metro Radio resource from your purchase confirmation. Extract the archive and rename the folder to metro_radio — the folder name must match exactly or the resource will not start.
- Folder must be named metro_radio
- Do not rename or move files inside the resource
- Place inside a [standalone] or [custom] category folder
resources/
└── [standalone]/
└── metro_radio/
├── client/
├── server/
├── web/
├── config/
└── fxmanifest.luaAdd to server.cfg
Open your server.cfg and add the ensure lines. Metro Radio must start after ox_lib. If you are using ox_inventory for item-based radios, ensure that starts first too.
- Order matters — ox_lib must come before metro_radio
- ox_inventory line is optional — remove it if not using item radios
- Do not use start — use ensure so the resource restarts on crash
# Dependencies — start these first
ensure ox_lib
ensure ox_inventory # optional — only if using item radios
# Metro Radio
ensure metro_radioEnable Lua 5.4
Metro Radio is written in Lua 5.4. If your server.cfg does not already have the Lua 5.4 flag set, add it now. Without this the resource will throw a syntax error on start.
- Only needs to be set once per server.cfg
- Affects all resources — safe to enable globally
- Restart the server after adding this line
# Add this line anywhere in server.cfg
lua54 'yes'Configure Departments
Open config/departments.lua and define your in-game departments. Each department gets a label, a list of channel numbers, and optional encryption keys per channel. The example below shows a basic Police department setup.
- Add as many departments as your server needs
- job field maps to your ESX or QBCore job name
- Leave job blank for standalone / ACE-only mode
- Encryption keys are server-side only — clients cannot read them
Config.Departments = {
['police'] = {
label = 'Police Department',
job = 'police', -- ESX/QBCore job name
channels = {
[1] = { label = 'Patrol', encrypted = false },
[2] = { label = 'Command', encrypted = true, key = 'alpha-7' },
[3] = { label = 'TAC', encrypted = true, key = 'bravo-3' },
},
},
['fire'] = {
label = 'Fire Department',
job = 'fire',
channels = {
[1] = { label = 'Dispatch', encrypted = false },
[2] = { label = 'Command', encrypted = true, key = 'delta-9' },
},
},
}Set ACE Permissions
Assign ACE permissions in server.cfg to control which player groups can access each department's radio. Metro Radio uses the metro_radio.<department> permission pattern. Admins should also receive metro_radio.admin for the dispatch panel.
- Replace group.police with your actual ACE group names
- metro_radio.admin grants access to the web dispatch panel
- Permissions take effect on next server restart or resource restart
# Police access
add_ace group.police metro_radio.police allow
# Fire access
add_ace group.fire metro_radio.fire allow
# EMS access
add_ace group.ems metro_radio.ems allow
# Admin — dispatch panel + all departments
add_ace group.admin metro_radio.admin allow
add_ace group.admin metro_radio.police allow
add_ace group.admin metro_radio.fire allow
add_ace group.admin metro_radio.ems allowStart & Verify
Restart your server (or use refresh and ensure metro_radio in the server console). Join the server and open the radio with the default keybind. If the NUI opens, Metro Radio is running correctly.
- Default keybind to open handheld radio: F2 (configurable)
- Check server console for any Lua errors on start
- If NUI does not open, check that ox_lib started before metro_radio
# In the server console:
refresh
ensure metro_radio
# Check for errors:
[metro_radio] Resource started successfully
[metro_radio] Loaded 2 department(s), 5 channel(s)Keybinds
All keybinds are configurable in config/keybinds.lua and can also be rebound by players in the FiveM keybind settings.
Common Issues
Need More Help?
Check the Compatibility page for framework-specific notes, or join the Metro Radio Discord for community support.
View Compatibility