Requirements
| Requirement | Detail |
|---|---|
| FiveM server artifact | 4752 or newer — run version in your server console to check |
| tLib | v0.6+. Install the release zip, not the source zip — the source zip has no built files |
| A free TCP port | Default 7777. It cannot be shared with FiveM (30120) or txAdmin (40120) |
| Framework | Optional. 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.
- In your panel, find Network, Ports, or Allocations and add a port (for example
50978) - Set both values in
config/config.luato that port:
Config = {
serverPort = 50978,
serverAddress = "http://203.0.113.10:50978",
}- Restart the entire server from the panel — restarting the resource alone does not bind a new allocation
- 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 serverPortand the port insideserverAddressnot matching- Omitting the
http://prefix or the port — the format is exactlyhttp://IP:PORT - Testing before the resource starts — the port only opens while tRadio is running
Start the resource
server.cfg
ensure tLib
ensure tRadiotLib 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:
| Row | Healthy value |
|---|---|
| Status | Server started successfully |
| Panel | http://203.0.113.10:7777 — the dispatch panel |
| Admin | http://203.0.113.10:7777/admin — the admin panel |
| NAC ID | Your dispatchNacId |
| FX Ver | bodacious |
| Config | 3 zones, 12 channels |
| Warnings | Empty |
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.
- Join your server as a player whose job is
police,sheriff,ambulance, orfire - Press F6 — the radio opens
- Press the on-radio CH button, pick DISP, and press CON
- 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:
| Item | Shipped content |
|---|---|
| Zones | Statewide, Los Santos, Blaine County |
| Channels | DISP, C2C (trunked), 10-1, OPS-1 (encrypted) in each zone |
| Codeplug | One, with ID leo, NAC 141 |
| Job mapping | police, sheriff, ambulance, fire → leo, in config/sv_functions.lua |
| Alerts | SIGNAL 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.
| Keep | Replace |
|---|---|
config/config.lua | Everything else |
config/cl_functions.lua | |
config/sv_functions.lua | |
config/locales.json | |
data.json | |
layouts/ |
- Download the new release zip and extract it somewhere temporary
- Delete everything in your existing folder except the six items above
- Copy the new files in
- 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.
