Installation
- Download the latest release from your Cfx Portal and extract the archive into your server's
resourcesdirectory. You should have a folder calledamzn_smartradioinside yourresourcesdirectory. - Add
ensure amzn_smartradioto yourserver.cfgafter your framework, inventory, and voice resources. - Configure
config.lua(see Configuration). - Add a
radioitem to your inventory framework (or changeConfig.RequireItemto match your existing item name). - Grant radio admin ACE permission to staff who will manage zones, channels, and repeaters (see Admin access).
- 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 = 0prevents the item from being removed on use.client.exportwires 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, ordescriptionas 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_smartradioAdmin 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.adminOr grant a single license directly:
add_ace identifier.license:XXXX smartradio.admin allowOpen 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.