Skip to content

Installation

Install Tommy's Radio on your FiveM server, open the voice port, and confirm players can transmit.

Requirements

RequirementDetail
FiveM server artifact4752 or newer — run version in your server console to check
tLibv0.6+. Install the release zip, not the source zip — the source zip has no built files
A free TCP portDefault 7777. It cannot be shared with FiveM (30120) or txAdmin (40120)
FrameworkOptional. ESX, QBCore, QBX, ND_Core, ox_core, and nat2k15 are auto-detected; standalone works too

tRadio runs its own voice server inside the FiveM process. That server needs its own port, reachable from the internet. Opening that port is the step that goes wrong most often, so it has its own section below.


Extract the files

Download the release zip, transfer it to your server, and unzip it on the server. Place the extracted folder in resources/.

Never transfer individual .lua files

FTP clients in ASCII mode (FileZilla's default) and Windows Remote Desktop drag-and-drop corrupt Lua files, producing a <\1> syntax error on start. Transfer the .zip and unzip on the server, or use WinSCP in binary mode. Also enable "show hidden files" so the dot-prefixed .fxap escrow file comes across.

Name the folder anything you like. provide 'tRadio' in fxmanifest.lua aliases the exports, so other scripts calling exports['tRadio']:someExport() find it regardless of folder name. Use your real folder name in server.cfg.

Set the five required values

Open config/config.lua. Only these five fields must be set before first start — everything else is configured later in the web admin panel.

config/config.lua

Config = {
    serverAddress = "http://203.0.113.10:7777", -- Ships as "localhost", which only works if the
                                                -- server runs on your own PC. Set your public
                                                -- IP/domain WITH the port, or "" to auto-detect.
    serverPort    = 7777,                       -- Must be free and open (next step)
    authToken     = "<20+ random characters>",  -- Generate one at randomkeygen.com
    adminPassword = "<your admin password>",    -- Web admin panel login
    dispatchNacId = "4417",                     -- Code dispatchers type on the panel login screen
}

Change all three secrets

authToken protects your voice server. adminPassword protects a panel that can change every server setting and install marketplace content. dispatchNacId ships as "141", which is also the public demo server's dispatch code — leave it and anyone who knows it can log into your dispatch panel.

Setting adminPassword = "" disables password login for the admin panel. Only do that if you set up Discord authentication instead — with neither, nobody can log in, and tRadio prints a startup warning saying so.

Open the port

The voice server needs its own TCP port, separate from FiveM and txAdmin.

  1. In your panel, find Network, Ports, or Allocations and add a port (for example 50978)
  2. Set both values in config/config.lua to that port:
Config = {
    serverPort    = 50978,
    serverAddress = "http://203.0.113.10:50978",
}
  1. Restart the entire server from the panel — restarting the resource alone does not bind a new allocation
  2. With the resource running, test the port at portchecker.co

Most Pterodactyl hosts need a support ticket

Gravel Host, RocketNode, VibeGames and similar providers often block the port at the network level even after you add it in the panel. Open a ticket saying: "I need port [PORT] opened for a custom voice server resource."

Port mistakes that account for nearly every failed install:

  • Using 30120 or 40120 — already taken by FiveM and txAdmin
  • Leaving serverAddress = "localhost" on a remote server, so no player can reach it
  • serverPort and the port inside serverAddress not matching
  • Omitting the http:// prefix or the port — the format is exactly http://IP:PORT
  • Testing before the resource starts — the port only opens while tRadio is running

Start the resource

server.cfg

ensure tLib
ensure tRadio

tLib must load before tRadio. Use your real folder name (for example ensure [tScripts]/tRadio). Restart the server.

A healthy start prints a banner with these rows:

RowHealthy value
StatusServer started successfully
Panelhttp://203.0.113.10:7777 — the dispatch panel
Adminhttp://203.0.113.10:7777/admin — the admin panel
NAC IDYour dispatchNacId
FX Verbodacious
Config3 zones, 12 channels
WarningsEmpty

If Status is amber saying the port is reachable on localhost but the public probe failed, the radio works for players — this host just can't reach its own public IP (hairpin NAT, CGNAT, or a reverse proxy). Confirm from portchecker.co or a phone on mobile data. If it is red, the port is genuinely closed — see Troubleshooting.

Confirm a player can transmit

tRadio ships preconfigured, so this should work immediately.

  1. Join your server as a player whose job is police, sheriff, ambulance, or fire
  2. Press F6 — the radio opens
  3. Press the on-radio CH button, pick DISP, and press CON
  4. Hold B and speak — the display shows TX: with your name

If the radio does not open at all, the server has not granted radio access — see Give your players radios.


What ships preconfigured

A new install is not empty. data.json arrives with a working starter configuration:

ItemShipped content
ZonesStatewide, Los Santos, Blaine County
ChannelsDISP, C2C (trunked), 10-1, OPS-1 (encrypted) in each zone
CodeplugOne, with ID leo, NAC 141
Job mappingpolice, sheriff, ambulance, fireleo, in config/sv_functions.lua
AlertsSIGNAL 100, SIGNAL 3, Ping, Bonk
Announcement groups* DISP and * C2C, each spanning all three zones

Everything above is editable live in the admin panel at http://your-server-ip:port/admin — no restart. Only config/config.lua and config/sv_functions.lua need a restart tRadio.

Your first real configuration jobs are usually: rename the zones and channels to match your city, then split the single leo codeplug into one per department. Both are covered in Configuration.


Updating tRadio

Six items hold your configuration. Everything else is replaceable.

KeepReplace
config/config.luaEverything else
config/cl_functions.lua
config/sv_functions.lua
config/locales.json
data.json
layouts/
  1. Download the new release zip and extract it somewhere temporary
  2. Delete everything in your existing folder except the six items above
  3. Copy the new files in
  4. Run restart tRadio

Release notes call out any change to config.lua keys. Read them before updating — new keys are not added to your existing file automatically.

To reset every admin-panel setting to factory defaults, stop the resource, delete data.json, and start it again. You lose all zones, channels, codeplugs, alerts, speakers, towers, and audio settings; the panel then offers Load Defaults buttons on the Zones, Alerts, and Codeplugs pages to rebuild the starter set.