Installation
Step-by-step guide to install and configure Tommy's Radio on your FiveM server.
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
- Download the radio resource
- Transfer the
.zipto your server and unzip it there — do not move files one-by-one - Place it in your
resourcesfolder
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 = {
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:
| Service | Default |
|---|---|
| FiveM | 30120 |
| txAdmin | 40120 |
| Radio | 7777 (configurable) |
You cannot reuse an existing port.
Web Panel Hosting (Pterodactyl / Most Providers)
- In your hosting panel, find Network, Ports, or Allocations
- Add a new port allocation (e.g.,
50978) - Update
config.lua:
Config = {
serverPort = 50978,
serverAddress = "http://YOUR_SERVER_IP:50978/",
}- Restart your entire server from the panel (not just the resource)
- 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 7777CentOS/RHEL:
sudo firewall-cmd --permanent --add-port=7777/tcp
sudo firewall-cmd --reloadWindows Server:
netsh advfirewall firewall add rule name="Radio Voice Server" dir=in action=allow protocol=TCP localport=7777Config = {
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 ports —
serverPortandserverAddressmust use the same port - Wrong
serverAddressformat — must be"http://IP:PORT/"withhttp://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:
start radioWhen 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.
