Installation

  1. Download the latest release from your Cfx Portal and extract the archive into your server's resources directory. You should have a folder called amzn_smartradio inside your resources directory.
  2. Add ensure amzn_smartradio to your server.cfg after your framework, inventory, and voice resources.
  3. Configure config.lua (see Configuration).
  4. Add a radio item to your inventory framework (or change Config.RequireItem to match your existing item name).
  5. Grant radio admin ACE permission to staff who will manage zones, channels, and repeaters (see Admin access).
  6. Restart your server and open the radio in-game with the default key (F5) and/or by using the radio item.

Example `ox_inventory` radio item

If you are using ox_inventory, you must add a radio item to your data/items.lua file.
Here is a minimal example you can copy-paste:

['radio'] = {
    label = 'Radio',
    weight = 1000,
    stack = false,
    consume = 0,
    close = true,
    description = 'Smart radio',
    client = {
        export = 'amzn_smartradio.useRadioItem',
    },
},
  • consume = 0 prevents the item from being removed on use.
  • client.export wires the inventory use action to 919RADIO (required by ox_inventory).
  • Make sure Config.RequireItem = 'radio' in your radio config (or change the name here to match what you use).
  • Do not add a server export for this item — that would open the radio a second time.
  • Restart your server after editing items.lua.
  • Optionally, customize fields such as weight, label, or description as needed.

For qs-inventory, origen_inventory, codem-inventory, tgiann-inventory, ps-inventory, and framework default inventories, 919RADIO registers the usable item automatically when Config.ToggleSystem is "item" or "both".

Requirements

  • Up to date FiveM server artifact recommended
  • MariaDB database (via oxmysql)
  • OneSync enabled
  • ox_lib
  • oxmysql
  • pma-voice

No SQL file import is required. 919RADIO creates its database tables automatically on first start and seeds default zones, channels, and repeaters.

Supported frameworks

919RADIO auto-detects your framework on startup:

Framework Detection
QBX qbx_core
QBCore qb-core
ESX es_extended
Standalone fallback when none of the above are running

Supported inventories

Inventory Detection
ox_inventory ox_inventory
qs-inventory qs-inventory
origen_inventory origen_inventory
codem-inventory codem-inventory
tgiann-inventory tgiann-inventory
ps-inventory ps-inventory
Framework default falls back to QB / ESX inventory when no dedicated inventory is detected

Optional integrations

Resource Purpose
rcore_gangs Gang names for zone access when the resource is started; otherwise QB/QBX framework gang data is used

Example server.cfg

ensure ox_lib
ensure oxmysql
ensure pma-voice

# framework + inventory resources
ensure qbx_core
ensure ox_inventory

ensure amzn_smartradio

Admin access

Staff who configure zones, channels, repeaters, and defaults need the smartradio.admin ACE permission (or the blanket admin ACE):

add_ace group.admin smartradio.admin allow
add_principal identifier.fivem:YOUR_ID group.admin

Or grant a single license directly:

add_ace identifier.license:XXXX smartradio.admin allow

Open the admin panel in-game with /radioadmin (or whatever you set in Config.AdminOpenCommand).

Verifying the install

On server start you should see console lines similar to:

[amzn_smartradio] Framework: qbx | Inventory: ox
[amzn_smartradio] First-time seed v1 applied.
[amzn_smartradio] Config ready: 3 zones, 11 repeaters.
[amzn_smartradio] Voice routing: N unique frequencies registered.

First-time seed only appears on the first boot of an empty database. Later restarts skip the seed and load existing config from the database.

Open the radio in-game. A new character receives a unique radio ID automatically on first open.

Editable files

The following paths are not escrowed and are intended for server-side customization:

Path Purpose
modules_editable/bridge/ Framework, inventory, gang, and admin ACE hooks
modules_editable/radio_item/ Usable radio item registration
config.lua Shared configuration
config_s.lua Server-only configuration
locale.json All in-game UI strings

All other Lua in modules/ is escrow-protected.