Most FiveM radio scripts add channel routing and an audio filter on top of pma-voice. Tommy's Radio runs its own voice server and encodes speech with P25 IMBE — the same vocoder real public-safety handhelds use. The radio sound is the codec, not an effect painted over your voice.
Channels, trunking, codeplugs, a dispatch panel, 911 calls, 3D audio, station alerting, and GPS all ship in one resource. One port, one config file, nothing external to sign up for.
- P25 IMBE
- the vocoder real public-safety radios use
- 3.7×
- less bandwidth than Opus
- 6
- frameworks auto-detected, or run standalone
- 10
- radio models included
- 0
- restarts to change a setting
Requirements
| Requirement | Detail |
|---|---|
| FiveM | Artifact 4752 or newer. Run version in your server console |
| tLib | v0.6+, free — download. No other deps |
| A port | One free TCP port, default 7777, reachable from the internet. Not FiveM's 30120 |
| Framework | Optional. ESX, QBCore, QBX, ND_Core, ox_core, and nat2k15 auto-detect; standalone works |
| Voice | Runs alongside pma-voice or Mumble. It does not replace your proximity voice |
Opening the port is the step that goes wrong most often, so it has its own section in the installation guide.
Try it first
All three are live right now, on the same server, and none of them need a purchase.
The dispatch panel
The real panel, running against that server. Talk to the players on it from your browser.
Access code
The admin panel
Every setting a server owner touches — zones, channels, codeplugs, audio, alerts, speakers, towers. Change one and it reaches every connected client instantly.
Password
Or just get in the game
Press F8 in FiveM, paste the line below, and press enter. Once you spawn in, press F6 to open a radio and key up on a channel with the dispatchers above.
Install in five steps
- Extract the resource into your server's
resourcesfolder - Configure
config/config.lua—serverAddress,serverPort,authToken,adminPassword,dispatchNacId - Open the port in your firewall or hosting panel
- Add
ensure tRadiotoserver.cfg, belowensure tLib - Restart — the startup banner's Status row should read
Server started successfully
A new install is not empty. Three zones, twelve channels, a working codeplug, four alerts, and job mappings for police, sheriff, ambulance, and fire ship preconfigured, so a patrol officer can key up the moment the port is open.
Features
Radio that sounds like radio
A WebAssembly build of op25's IMBE encoder — the same codec real public-safety handhelds run. The sender encodes once; every listener decodes locally, whether they are in game, on the dispatch panel, or a bystander standing nearby. Bitrate is roughly 3.7× smaller than Opus.
The voice server runs on a port you pick, completely separate from FiveM and your existing voice stack. Not layered on pma-voice, not piggybacking on a third-party service.
P25 is set per channel, so a digital dispatch channel and an analog tac channel live on the same radio — and an analog FX chain (highpass, lowpass, compression, drive, mid-boost) sits on top of either.
Conventional and trunked channels
Conventional is one shared frequency: everyone connected hears everyone else. Trunked auto-assigns units to sub-frequencies by location, so four units spread across the map stop stepping on each other — and dispatch still reaches all of them on the control frequency.
Patching bridges two or more channels on the fly, and patches survive a restart. A floating channel list shows who is on with you, callsigns, who is transmitting, dispatcher badges, and patch or trunked state. Channels flagged secure show a lock.
Codeplugs — one radio per department
The same idea real agencies program into their fleets. A codeplug is a radio personality: which channels a unit can transmit on, which it can only scan, which radio models it may carry, what its emergency button does, and whose GPS blips it can see.
Map jobs to codeplugs in one table, optionally per rank, so a sergeant's radio carries channels a patrol officer's does not:
['police'] = { [0] = 'leo', [3] = 'leo-supervisor', [8] = 'leo-command' }Each codeplug carries named scan lists with priorities, per-context default radio models (on foot, vehicle, boat, aircraft, and per-spawncode overrides), supervisor rights, and cross-agency GPS visibility — so fire can see EMS but not undercover units. Unmapped jobs get no radio at all, by default.
A dispatch panel that dispatches
A browser panel plus a native Windows app with global push-to-talk and auto-updates. Dispatchers transmit to any channel, patch frequencies, arm announcement groups that broadcast to many channels at once, trigger alerts with tone picks, answer 911 calls, replay buffered transmissions from the log, and assign callsigns. Same vocoder as the in-game radios, so audio is consistent either direction.
Speakers you can place, tones you can drop
Stand where you want a speaker, run /_tradio_coords, and paste the position into Admin Panel → Speakers with a radius, an optional prop model, and a group name. A dispatcher then picks a tone, presses a speaker or a whole group, and it plays at those coordinates in 3D — station alerting, tone-outs, PA stingers.
Everyone inside the radius hears it from the speaker, positioned. Nobody outside hears anything.
A working 911 line
Experimental
The 911 system works end to end, but it is still settling. It can be switched off entirely in Admin Panel → Settings → General, and nothing else in tRadio depends on it.
Players dial /911 — or 911 on their LB Phone — and land in a queue on the dispatch panel with their phone number, unit ID, location, and message. Dispatchers accept, talk, and hang up like a real call.
Callers speak hands-free over voice activation with a phone-to-ear animation, and press ESC to hang up. No radio, codeplug, or channel access is needed to call. If no dispatcher is online, a configurable fallback broadcasts the call to on-duty units instead. Full detail in Usage.
Radio in 3D space
Players near a talker hear their radio at their position — voice, tones, the siren loop behind them, helicopter rotor, and gunshots fired during a transmission. The earbuds toggle gates your outgoing broadcast, and wearing a configured earpiece item enables it automatically. See 3D audio.
A radio that's really in the dash
Not a screenshot taped to the dashboard. It is a streamed prop with a live display — zone, channel, signal bars, status LEDs — rendering the same thing the player's own radio shows. Walk away from the car and it takes over as the audio source at extended range.
Placement is per vehicle model and done in game: sit in the car, open /tradio → Style → 3D Prop Editor, and drag it into place with a Three.js gizmo. Save, and it applies to every client immediately. Codeplugs can override the model for a specific vehicle spawncode, or a spawncode and livery combination.
Coverage you can plan — and lose
Signal towers go in at coordinates you pick, and strength falls off with distance from the nearest one. Turn on degradation and a weak signal audibly chews up the audio, so the edge of the county sounds like the edge of the county. Tune the falloff curve and severity, or flip Always Full Signal to keep your tower layout without the consequences.
Geo zones go the other way. Give a centre coordinate and a radius — the mall, the airport, a prison — with optional floor and ceiling heights for stacked interiors. A unit walking in switches to that area's channel automatically and reverts on the way out. Players opt in per zone, so nobody gets yanked off dispatch unexpectedly.
Tune every knob, live
The admin panel covers the analog FX chain, signal coverage, half-duplex "bonking" behaviour, 3D audio ranges, GPS blip rate, man-down timers, 911 cooldowns, keybind defaults, and default radio layouts per vehicle type. Changes broadcast to every connected client instantly — no restart, no file editing.
Details that sell the illusion
Battery drains on foot and charges in any vehicle, chirping a warning under 50% and cutting out at zero. Man-down monitoring escalates from a warning tone to a full emergency broadcast if a unit stays down. Keying up over another transmission earns a bonk tone, with a double-tap override when it is urgent. Spoken announcements read the zone and channel aloud as you switch.
Every one of these is a toggle, and every player-facing string is translatable.
Built to be customised
Radio models are HTML and CSS folders in layouts/ — ten ship, and marketplace installs appear in the Style picker on next open. Twenty-five tone slots remap globally or per radio model, with variants for conventional, trunked, and patched channels.
A complete Lua export surface, a REST API, and a Socket.IO event stream cover anything the UI does not.
Make the dispatch panel yours
Five themes ship built in. Beyond that the panel has a real theming SDK, in four tiers. Recolour it with design tokens. Restyle it with CSS. Replace individual components — a channel card, a unit row, a 911 card — while the panel keeps every feature gate and accessibility guard around them. Or rebuild the console from scratch with a declarative template.
None of those tiers require JavaScript, so they publish to the marketplace without a review queue. A worked dispatch-console rebuild ships as a reference. See dispatch panel theming.
One click, no code, no restart
Radio UIs, dispatch themes, and tones publish to the tMarketplace. Find one, press install in Admin Panel → Marketplace, and it shows up in every player's style picker the next time they open the radio. No file transfer, no restart tRadio, no editing anything.
Live today: extra handhelds, a car radio, a tone pack, and a full dispatch-console theme. Because layouts and themes are just HTML and CSS, anyone can build one — and publishing needs no review queue.
Drive it from a Stream Deck
An official plugin turns an Elgato Stream Deck into a live radio panel — channel and zone on the key, signal bars, who is talking, panic in red, and the 911 queue count. Push to talk, step channels, scan, adjust volume, or hold one key to transmit on a specific channel without leaving your own.
It drives both the in-game radio and the dispatch panel, and needs no companion app — the plugin talks to them directly over localhost. Free with the resource, and it works with Stream Deck Mobile and OpenDeck. See Stream Deck.
Plays well with your stack
Auto-detects ESX, QBCore, Qbox, ND_Core, ox_core, and nat2k15 — job-to-codeplug mapping is one table in an open config file, and access refreshes the moment a job changes. Discord OAuth gates the dispatch and admin panels by role.
Optional integrations mirror 911 calls into ImperialCAD, hook 911 dialling into LB Phone, and surface radio status in LB Radio. Running more than one FiveM server? Satellite mode federates every server onto one shared radio network and dispatch panel.
Specifications
Compatibility
7777, internet-reachableWhat stays open
config.lua, cl_functions.lua, sv_functions.lua, locales.json, layouts/, data.jsonsv_functions.lua and cl_functions.luaWhat is included
Questions people actually ask
Do I really have to open a port?
Yes. tRadio runs its own voice server inside the FiveM process, and that server needs one TCP port reachable from the internet. Most hosting panels expose extra ports on request. The installation guide covers Windows, Linux, and the common hosts, and troubleshooting covers what to do when the port looks open but the radio still will not connect.
Will it fight with pma-voice?
No. Radio PTT uses tRadio's own microphone capture on its own server, so your proximity voice keeps working exactly as it does now. The only place tRadio touches in-game voice is 911 calls, which use voice activation.
It says Escrow. Can I still configure it?
Yes. The resource is escrow-encrypted, but config/config.lua, both function-hook files,
config/locales.json, layouts/, and data.json ship unencrypted and stay yours. Framework
integration is a Lua function you write. Nearly everything else is a setting in the admin panel,
applied live.
What survives an update?
Six items: config/config.lua, config/cl_functions.lua, config/sv_functions.lua,
config/locales.json, data.json, and layouts/. Everything else is replaced. Release notes
call out any new config.lua key, since new keys are not merged into your file automatically —
see updating.
What is still rough?
The 911 system works end to end but is still settling, and can be switched off from the admin panel without affecting anything else. Transmission playback and the LB Phone / LB Radio integrations are also marked experimental. Trunked channels cannot be patched.
