Reference
tDetector commands, keybinds, KVP keys, permissions, file layout, and what it does and does not expose to other resources.
Look-up facts. For the config file see Configuration; for wiring a radar see Integrating any radar.
Commands
| Command | Arguments | Description |
|---|---|---|
/tdetector | none | Open the settings dialog. Subject to Config.access. |
/tdetectoredit | none | Open the 3D prop editor. Needs tlib.admin and a vehicle. |
/tDetLockouts | none | Print every stored GPS lockout to the F8 console, with band, coordinates and match radius. |
/tDetLockouts | clear | Forget every stored lockout. |
/tDetSources | none | Print what each Config.radarResources entry is returning — see Diagnosing it. |
/tDetSources | test | 12-second synthetic sweep on your own display. Detector must be on. |
tdetector_diag | none | Server console. Version, tLib version and floor, every Config value in effect, every dependency and radar resource, and the startup config-check messages. Pre-redacted. |
A permission change takes effect without a reconnect. tdetector_diag is ACE-gated;
grant it with add_ace group.admin command.tdetector_diag allow.
/tdet, /tDet, /tdetmute, /tdetdim and /tdetmark no longer exist, with no
aliases. tDetMute, tDetDim and tDetMark remain registered only so FiveM has a name
to store a keybind against.
Keybinds
Bindable under Settings → Key Bindings → FiveM. None ships with a default key.
| Bound command | Binding label |
|---|---|
tDetMute | tDetector: Mute alerts (unbound — assign a key in GTA keybinds menu) |
tDetDim | tDetector: Dim display (unbound — assign a key in GTA keybinds menu) |
tDetMark | tDetector: Mark location (unbound — assign a key in GTA keybinds menu) |
The trailing note disappears once a key is assigned.
Permissions
| Permission | Checked when | Gates |
|---|---|---|
Config.access (default { mode = "everyone" }) | every /tdetector and every radar-list push | Whether tDetector works at all |
tlib.admin / tlib.superadmin | always | The Marketplace and Sounds tabs, and every sound-mapping write |
add_ace group.mechanic tdetector.use allow
add_principal identifier.license:xxxxxxxx group.mechanicKVP keys
Per-player, stored on the client against the player's identifier.
| Key | Type | Default | Stores |
|---|---|---|---|
tdet_hud_layout | string | RDX-8000 | Selected skin folder name |
tdet_hud_visible | boolean | true | Whether the HUD is drawn |
tdet_speed_unit | string | Config.speedUnit | mph or kmh. A stored kph is read as kmh and rewritten next time the player changes it |
tdet_sensitivity | string | auto | auto, highway or city |
tdet_lockouts | string | empty | GPS lockouts, as x,y,band;x,y,band;…. Malformed records dropped on load. |
MUTE and DIM are not persisted. Both clear when you next power the detector on.
What tDetector exposes to other resources
No exports. The data flows the other way: a radar tells tDetector it is transmitting.
It writes one state bag: tdetDevice, on the vehicle entity, for the cabin
relay. It is absent unless
the detector is on, the vehicle has a prop, and somebody else is aboard.
Sound slots
| Slot | Plays for | Ships |
|---|---|---|
BLIP | The generic alert, and any band with no tone of its own | blip.wav |
KA_BAND | Ka — urgent double brap, 1.58 kHz | ka_band.wav |
K_BAND | K — raspier beep, 1.08 kHz | k_band.wav |
X_BAND | X — plain low beep, 720 Hz | x_band.wav |
LASER_BAND | Lidar — hard gated buzz, 2.15 kHz | laser_band.wav |
BOGEY | A second threat joining — rising chirp | bogey.wav |
GPS_CONNECTED | Nothing — see below | gps_connected.wav |
Every slot ships filled, and an unassigned slot falls back to BLIP — except BOGEY,
which has no fallback and stays silent until you assign one.
Sounds are shared across every layout, not bundled per skin. Drop a .wav into
layouts/sounds/: a file named after its slot is picked up on the next start, anything
else is mapped in /tdetector → Sounds.
Version check
On start, tDetector asks timmygstudios.com whether a newer version exists and prints a
banner in the server console. It sends the version string and the per-install id —
a random 25-character value tLib keeps in its own data.json, sent as x-install-id.
No server name, no player data, no account identifier, and the id goes with every
update check whether or not tlib_telemetry is enabled.
File layout
| Path | Purpose |
|---|---|
config.lua | Everything in Configuration |
data.json | Auto-created. Sound mappings and prop placements. |
shared/sh_config_check.lua | Validates config.lua, after every other shared script |
server/ | Version banner, layout discovery and the access gate, data.json and prop persistence, radar validation and per-player push, the QBCore item, tdetector_diag, and the world-audio bus |
client/ | HUD and NUI, radar adapters, false alerts and lockouts, the scan loop, the /tdetector dialog, the diagnostics commands, the 3D prop and its screen, and the cabin relay |
client/screen.html | The DUI page on the prop's glass. Not a layout — its own browser. |
client/ui/ | Built NUI assets. Do not edit. |
client/web/ | NUI source (SolidJS). Build with bun run build. |
bridge/tdetector_bridge/ | Not loaded. A template you copy out — see the bridge resource. |
layouts/ | HUD skins. A folder is a skin only with a module.json declaring "kind": "layout" — see Layouts. |
Next steps
- Configuration — every
config.luaoption. - Troubleshooting — when something named here misbehaves.
Radar Detector
Still stuck? Support can answer it directly.
Was this page helpful?
TIMMYG Studios