Installation

Step-by-step guide to install and configure Tommy's Radio on your FiveM server.

Setup

Prerequisites

  • FiveM server (artifact 4752 or higher)
  • tLib installed — download the release zip, not the source code. The source code does not contain the built files required to run.
  • An available port for the voice server (default: 7777)

Extract Files

  1. Download the radio resource
  2. Transfer the .zip to your server and unzip it there — do not move files one-by-one
  3. Place it in your resources folder

Resource Name

The resource folder can be named anything. The provide 'radio' directive in fxmanifest.lua ensures exports work regardless of folder name.

Configure Settings

Edit config.lua with your basic settings:

config.lua
Config = {
    serverPort = 7777,                       -- Port for voice server (must be unused)
    authToken = "CHANGE_ME_TO_RANDOM_TEXT",  -- Security key for the voice server API
    dispatchNacId = "CHANGE_ME",             -- Dispatch panel login password
}

What are authToken and dispatchNacId?

authToken — A secret string that secures communication between clients and your voice server. Pick any random string and change it from the default before going live.

dispatchNacId — The password used to log into your dispatch panel. Anyone who knows it can access the panel.

Open Your Port

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

Port Requirements

Your server needs three separate ports:

ServiceDefault
FiveM30120
txAdmin40120
Radio7777 (configurable)

You cannot reuse an existing port.

Web Panel Hosting (Pterodactyl / Most Providers)

  1. In your hosting panel, find Network, Ports, or Allocations
  2. Add a new port allocation (e.g., 50978)
  3. Update config.lua:
config.lua
Config = {
    serverPort = 50978,
    serverAddress = "http://YOUR_SERVER_IP:50978/",
}
  1. Restart your entire server from the panel (not just the resource)
  2. Verify at portchecker.co

Port Still Closed?

Many Pterodactyl-based hosts (Gravel Host, RocketNode, VibeGames, etc.) require a support ticket to actually open the port, even after adding it in the panel.

Tell them: "I need port [YOUR_PORT] opened for a custom voice server resource."

VPS / Dedicated Server

Open the port directly, then leave serverAddress blank — the script auto-detects your IP.

Ubuntu/Debian:

sudo ufw allow 7777

CentOS/RHEL:

sudo firewall-cmd --permanent --add-port=7777/tcp
sudo firewall-cmd --reload

Windows Server:

netsh advfirewall firewall add rule name="Radio Voice Server" dir=in action=allow protocol=TCP localport=7777
config.lua
Config = {
    serverPort = 7777,
    serverAddress = "",  -- Auto-detect
}

Home Server / Port Forwarding

Forward port 7777 (TCP) in your router settings. Use your public IP in serverAddress.

Common Mistakes

Avoid These

  • Using port 30120 or 40120 — already in use by FiveM/txAdmin
  • Mismatched portsserverPort and serverAddress must use the same port
  • Wrong serverAddress format — must be "http://IP:PORT/" with http:// and trailing /
  • Testing before resource starts — the port only opens when the radio resource is running
  • Assuming panel = opened — adding a port in your hosting panel doesn't always open it; verify with portchecker.co

Start the Resource

Add to your server.cfg:

server.cfg
start radio

When everything works, you'll see:

[Radio-Server] Started Radio Server - Running Checks...
[Radio-Server] HTTP endpoint test passed (attempt 1/4)
[Radio-Server] Socket.IO connection test passed (attempt 1/4)

 +----------------------------------------------------+
 |                                                    |
 |  Tommy's Radio - System Ready                      |
 |                                                    |
 |  Version: v5.0                                     |
 |  Status:  Started - All Systems Operational        |
 |  Panel:   http://192.0.2.100:7777/                 |
 |  NAC ID:  141                                      |
 |  Config:  3 zones, 12 channels                     |
 |                                                    |
 +----------------------------------------------------+

Upgrading from v4.x

v5.0 includes an automatic migration system. On first start, sv_migrate.js moves eligible settings from config.lua to data.json (the new admin panel storage). This is a one-time process.

What migrates automatically:

  • Audio/volume settings
  • Radio FX parameters
  • Bonking configuration
  • Default layouts
  • Callsign system settings

What stays in config.lua:

  • Network settings (serverPort, serverAddress, authToken)
  • Keybinds
  • Zones and channels
  • Callbacks (talkCheck, radioAccessCheck, getUserNacId, getPlayerName)
  • Alerts
  • Signal tower coordinates

No manual action is needed — just start the resource and the migration runs automatically.

On this page

Need help?

Ask on Discord