Skip to content

Installation

Install Tommy's Radio and get a player keying up — requirements, version compatibility, optional browser access, what ships preconfigured, and the update procedure.

Four steps to a player on a working channel. tRadio ships a starter configuration, so there is nothing to set up first — no SQL import, no database, no port for the radio, no account.

Requirements

RequirementDetail
FiveM artifact4752 or newer. Check with version
tLibv1.0+. The release zip — the source zip has no built files
OneSyncRequired. onesync on in server.cfg
Public web porttLib's port, default 7777. Only for browser panels or federation hosting
FrameworkOptional. ESX, QBCore, QBX, ND_Core, ox_core and nat2k15 auto-detect
JobA character with police, sheriff, ambulance or fire to test with

Version compatibility

Always pair a tRadio release with the newest tLib. Starting with a tLib below the minimum fails loudly.

tRadioMinimum tLib
7.0v1.0
6.0 – 6.3v0.6
5.8v0.5
5.7v0.4
5.6v0.3
5.5v0.2
5.4v0.1
5.3 and earliernot required

Every version needs artifact 4752 or newer. A framework not on the list runs through the hooks in config/sv_functions.lua — see Framework integration.


Install

Extract the files

Transfer the release zip and unzip it on the server. Place the extracted folder in resources/.

Name the folder anything — exports['tRadio']:… still finds it. Use your real folder name in server.cfg.

Add both to server.cfg

txt
ensure tLib
ensure tRadio

tLib must load before tRadio. Use your real folder name, for example ensure [tScripts]/tRadio.

Restart the server

With the defaults, the tRadio banner reports the panel URL on tLib's port. With exposeWeb = false you get this line instead:

text
[Radio-Server] Radio ready over FiveM net events; web exposure disabled (no HTTP listener or tLib registration)

Either line means the radio is up.

Key up

  1. Join as a police, sheriff, ambulance or fire player
  2. Press F6. If the screen is dark, click the power knob — the radio remembers being on
  3. The shipped leo codeplug covers all four jobs, so a zone and channel are already selected. To pick another, press Zone or Chan, move with the arrows, press Sel
  4. Hold B and speak

It works if the display shows TX: with your name while you hold B. Hover any button or softkey to see what it does.

If the radio does not open at all, the server has not granted radio access. See Who gets a radio.


What ships preconfigured

On first start tRadio writes a data.json holding a working starter configuration:

ItemShipped content
ZonesStatewide, Los Santos, Blaine County
ChannelsDISP, C2C (trunked), 10-1, OPS-1 (encrypted) in each zone
Codeplugsleo (NAC 141) and Scanner, granted to nobody
Job mappingpolice, sheriff, ambulance, fire → leo
AlertsSIGNAL 100, SIGNAL 3, Ping, Bonk
Announcement groups* DISP and * C2C, each spanning all three zones

All of it is editable live in the admin panel — /tradio → Quick opens both panels in game. Only config/config.lua and the two function-hook files need a restart tRadio.

The admin panel opens on Overview, which tracks what a new server still needs. Two items you tick by hand: job mappings and the dispatch login.

data.json is written only when none exists, so an update never overwrites it.

Optional browser access

The panels already work without this. /tradio → Quick opens both in game.

The shipped defaults in config/config.lua:

lua
exposeWeb = true,
useLegacySocketTransport = false,

With exposeWeb = true the dispatch panel is mounted at /dispatch on tLib's port (tlib_http_port, default 7777), so it answers at http://<your server>:7777/dispatch and the admin panel at /dispatch/admin. Open and forward that port — tLib's guide has the step, at opening tLib's port. Set tlib_http_public_url if tLib's auto-detected address is wrong. Both exposeWeb and useLegacySocketTransport need a resource restart, and useLegacySocketTransport stays false.

Never open tRadio's own loopback port.

showDispatchInHub and showAdminInHub control listing on tLib's hub, not access: hiding an entry does not make it private, and the mount still answers. To stop serving the panels at all, set exposeWeb = false.

A federation host must expose an endpoint its satellites can reach. Satellites connect outbound and need no inbound port of their own.

Secrets

Set strong authToken, adminPassword and dispatchNacId values before exposing web access or using federation. A blank admin password disables password login; configure Discord admin authentication instead if you want that.

Updating tRadio

Six items hold your configuration. Five still ship in the release zip, so delete them from the new copy before anything is copied anywhere.

ItemIn the zip?Holds your configuration
config/config.luaYesYes
config/cl_functions.luaYesYes
config/sv_functions.luaYesYes
config/locales.jsonYesNo — see below
layouts/YesYes
data.jsonNoYes
  1. stop tRadio
  2. Extract the new release zip somewhere temporary
  3. In the extracted folder, delete config/config.lua, config/cl_functions.lua, config/sv_functions.lua and layouts/
  4. In your tRadio folder, delete everything except those four and data.json. This clears out files an older version left behind
  5. Copy everything remaining in the extracted folder into your tRadio folder
  6. start tRadio

Step 3 is the one that matters: after it, nothing in the extracted folder can replace your configuration.

config/locales.json is the one config file an update replaces

It is not in step 3, so the new copy lands and replaces yours. If you have translated or reworded it, keep a copy before updating and re-apply your changes.

Factory reset: stop the resource, delete data.json, start it again. You lose everything you changed. The Load Defaults buttons on the Zones, Alerts and Codeplugs pages restore the same starter content one page at a time.

Next steps

Still stuck? Support can answer it directly.

Was this page helpful?