Installation
Prerequisites, load order, admin ACE, your first lit vehicle, and the shipped file layout.
Prerequisites
| Requirement | Detail |
|---|---|
| FiveM | OneSync enabled (Infinity or Legacy). State syncs through entity state bags |
| tLib | 1.0 or newer, free — download |
| Lua | 5.4, already declared in the manifest |
| Node | 22, already declared in the manifest |
| pma-voice | Optional. Only the PA mic needs it |
Install
Extract the resource
Drop the folder into resources/, named exactly tELS — no spaces, no -main suffix.
Start tLib before tELS
server.cfg
ensure tLib
ensure tELSGrant the admin ACE
add_ace group.admin tlib.admin allowGrants /telsedit, Set as Server Defaults in /tels, and the editor button.
Start the server
tELS creates data.json at the resource root on first run.
Confirmed when /tels opens in game and the console shows no tLib version warning.
Your first lit vehicle
Five minutes, on a stock vehicle. You need the tlib.admin ACE and a vehicle with
siren1…sirenN bones — police4 has them.
Spawn police4 and get in
Any seat.
Run /telsedit
The editor opens on the Lights tab with an empty LED list.
Click Create from siren bones
tELS drops a starter LED on each siren bone, grouped and sided. They appear in the sidebar
and on the lightbar.
Add a pattern
Patterns tab → Add Pattern. Set 10 FPS, add Red and Blue to the palette, paint alternating columns.
Press Enter to save
The config writes to data.json and the editor closes.
Drive it
| Key | Does |
|---|---|
| Q | Lights on and off |
| R | Siren burst while held |
| 9 / 0 | Step through patterns |
It works if Q lights the vehicle for you and for a player standing next to it. Lit for you only means state is not replicating — check OneSync in Troubleshooting. Q doing nothing means the vehicle has no LEDs saved; every keybind needs at least one.
From here, the Editor covers placing LEDs by hand, building rules and configuring sirens.
Version compatibility
| tELS | Requires tLib | Notes |
|---|---|---|
| 1.0.x | 1.0 or newer | Enforced at load by tlib_min_version in the manifest |
On a version warning, update tLib — not tELS.
File layout
tELS
shared
config
server
client
| Path | Purpose |
|---|---|
shared/ | UUIDs, model fingerprints, audio banks, siren profiles, LED geometry, and the two scripts that validate config/ |
config/render_config.lua | LED cap and bloom bounds. Outside escrow — editable |
config/pa_config.lua | PA presets. Inside escrow |
server/dist/ | Bundled server logic |
server/sv_configs.lua | Discovery, ref-edit relays, server defaults |
server/sv_relay.lua | State bag ownership and remote state sync |
client/cl_lights.lua | Pattern playback and stage state |
client/cl_triggers.lua | Trigger condition evaluation |
client/cl_siren.lua | Siren tone playback |
client/cl_model_leds.lua | Model-defined LED marker discovery |
client/cl_arges.lua | Arges spotlight props |
client/cl_pa.lua | PA mic (pma-voice) |
client/cl_env.lua | Startup environment line and tels_diag |
client/cl_hud.lua | HUD overlay and the /tels dialog |
client/cl_marketplace.lua | Marketplace tab |
client/cl_input.lua | Keybinds, commands, park-kill thread |
client/cl_deck.lua | Stream Deck key feed and button dispatch |
client/cl_editor.lua | NUI editor bridge |
client/ui/ | Built NUI assets |
layouts/ | HUD layouts, auto-discovered |
audio/ | Custom siren sounds (awc + dat54) |
stream/ | Arges props, Legacy (gen8). Carries the .ytyp the manifest names |
stream_enhanced/ | The same props, Enhanced (gen9). The engine picks per asset, per client |
data.json is written on first boot, not shipped. A copy missing anything else is an
incomplete download.
tELS
Still stuck? Support can answer it directly.
Was this page helpful?
TIMMYG Studios