Documentation

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.

Before You Begin

Prerequisites

FiveM Artifact6000+Check your server artifact version before installing
ox_libv3.0.0+Must be installed and started before metro_radio
Lua 5.4lua54 'yes'Add to server.cfg if not already present
OneSyncRequiredInfinity or Legacy — both work
01

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
Expected directory structure
resources/
  └── [standalone]/
        └── metro_radio/
              ├── client/
              ├── server/
              ├── web/
              ├── config/
              └── fxmanifest.lua
02

Add 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
server.cfg
# Dependencies — start these first
ensure ox_lib
ensure ox_inventory   # optional — only if using item radios

# Metro Radio
ensure metro_radio
03

Enable 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
server.cfg
# Add this line anywhere in server.cfg
lua54 'yes'
04

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.lua
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' },
    },
  },
}
05

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
server.cfg
# 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 allow
06

Start & 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
Server console
# 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)
Default Keybinds

Keybinds

All keybinds are configurable in config/keybinds.lua and can also be rebound by players in the FiveM keybind settings.

F2Open / close handheld radio NUI
F3Open / close vehicle console NUI (in vehicle only)
CAPS LOCKPush-to-talk (hold)
LEFT ALT + RToggle radio on / off
LEFT ALT + ETrigger emergency override broadcast
Troubleshooting

Common Issues

Resource fails to start with a Lua syntax errorFix: You are missing lua54 'yes' in server.cfg. Add it and restart the server.
NUI does not open when pressing the keybindFix: Confirm ox_lib is started before metro_radio. Check the server console for ox_lib errors. Also verify the player's job matches a configured department.
Players can hear channels they should not have access toFix: Check that ACE permissions are correctly assigned and that the channel's encrypted flag and key are set in config/departments.lua.
Web dispatch panel is not accessibleFix: The player must have the metro_radio.admin ACE permission. Confirm it is assigned in server.cfg and that the server has been restarted since the change.
Item-based radio not working with ox_inventoryFix: Ensure ox_inventory is started before metro_radio and that Config.UseItemRadio is set to true in config/config.lua. The radio item must exist in your ox_inventory items list.

Need More Help?

Check the Compatibility page for framework-specific notes, or join the Metro Radio Discord for community support.

View Compatibility
METRO RADIO

Department-controlled first-responder communications suite for FiveM. Built for realism, designed for operations.

Platform

Built for FiveM

Lua & JavaScript

ox_lib compatible

© 2026 Metro Radio. All rights reserved.

FiveM Resource · Not affiliated with Cfx.re