Radio Station Framework
Configuration
Section titled โConfigurationโPrimary config files:
config.luashared/config_defaults.lua
config.lua is the server-owner file. It contains the values most servers are expected to edit: framework, permissions, stations, MLO placement, item names, visible feature toggles, and common emitter settings.
shared/config_defaults.lua contains deeper compatibility defaults for timing, audio behavior, scheduler cadence, diagnostics, call routing, and runtime internals. Most servers should leave it alone unless they are tuning after focused QA.
Framework
Section titled โFrameworkโUse:
Config.Framework = "auto"Supported values:
autoqboxqbcoreesxstandalone
Leave this on auto unless the server needs to force a specific bridge.
DJ Access
Section titled โDJ AccessโDJ access is controlled by:
Config.DJJobNameConfig.DJJobsConfig.DJGradesConfig.DJBossGradesConfig.DJAcePermissionConfig.AllowMultipleDJsConfig.DebugAllowAllDJs
The default job is dj, with boss grade 3.
Config.DebugAllowAllDJs should stay false in production.
Admin Tools
Section titled โAdmin ToolsโAdmin/station tools are group-based by default:
Config.AdminToolsEnabled = trueConfig.EmitterAdminUseGroups = trueConfig.EmitterAdminGroups = { "admin", "god", "superadmin" }This supports common QBCore/Qbox group names without hardcoding FiveM identifiers.
Optional ACE support:
Config.EmitterAdminUseAce = falseConfig.EmitterAdminAcePermission = "rsradio.emitteradmin"Legacy identifier fallback:
Config.EmitterFxAdminIdentifiers = {}Prefer groups or ACE for production. Hardcoded identifiers are only kept as a compatibility fallback.
Admin commands:
/radiostationadminopens the Station Creator/Admin UI./radioemitterfxopens the Emitter FX panel.
Both commands still require the configured admin/group/ACE permissions.
Stations
Section titled โStationsโFresh installs ship without predefined stations. Build stations with the in-game
Station Creator (recommended) or define them in Config.RadioStations. Published
Station Creator stations are loaded from SQL at runtime.
A config-defined station looks like:
Config.RadioStations = { coastline = { label = "Coastline FM", shortLabel = "Coastline", format = "Alternative", audienceKey = "rs-radio:coastline", micChannel = 6901, djLocation = vec3(-1278.32, -1618.21, 3.37), blip = { enabled = true, label = "Coastline FM", coords = vec3(-1271.81, -1615.12, 3.37) }, media = { musicFolder = "songs/stations/coastline/music", stationAdsFolder = "songs/stations/coastline/ads", sfxFolder = "songs/stations/coastline/sfx" } }}Studio seating and booth prop wiring are included for the bundled rs_rebelradio MLO and do not normally need customer configuration.
If Config.EnableDJTabletCommand = true, authorized DJs can also use /radiotablet as a shortcut. The recommended production flow is still the configured booth/location interaction.
Media Sources
Section titled โMedia SourcesโThe standard package plays local .ogg and .mp3 files under songs/. Remote audio links are not available in the standard package. Only use local content you own or are licensed to use.
Listener And Emitter Settings
Section titled โListener And Emitter SettingsโCommon listener/emitter values:
Config.VehicleRadioKeybindConfig.ListenerUiPassthroughControlsConfig.EmitterDefaultRadiusConfig.VehicleEmitterRadiusConfig.BoomboxEmitterRadiusConfig.EmitterSfxOverlayGain
Config.ListenerUiPassthroughControls should include the controls that must continue while the listener UI is open. By default this includes PTT support for pma-voice.
Config.EmitterSfxOverlayGain keeps SFX overlays under program music loudness.
Boombox
Section titled โBoomboxโCommon boombox settings:
Config.BoomboxEnabledConfig.BoomboxItemNameConfig.BoomboxPropModelConfig.BoomboxEmitterRadius
The inventory item name must match Config.BoomboxItemName.
Walkboy
Section titled โWalkboyโCommon Walkboy settings:
Config.WalkboyEnabledConfig.WalkboyItemNameConfig.WalkboyPropModelConfig.WalkboyHeadphoneModelConfig.WalkboyEmitterRadius
The Walkboy uses the listener radio interface. It can be worn, opened, and stored, but cannot be placed in the world. The inventory item name must match Config.WalkboyItemName.
Static Radio Prop Targets
Section titled โStatic Radio Prop TargetsโStatic prop radios are optional and are not inventory items. When enabled, players can use target on configured world props to open the listener UI. The UI closes when the player walks beyond the configured auto-close distance, and the server also rejects prop-radio controls from outside that range.
Common static prop settings:
Config.RadioPropTargetsEnabledConfig.RadioPropTargetsConfig.RadioPropTargetDistanceConfig.RadioPropAutoCloseDistanceConfig.RadioPropEmitterRadiusConfig.RadioPropDefaultStation
Config.RadioPropTargets accepts model names or table entries. Use table entries when a server wants per-model labels, stations, radius, volume, or distance overrides.
Example:
Config.RadioPropTargetsEnabled = trueConfig.RadioPropTargets = { "ex_prop_ex_tv_flat_01", "xm_prop_x17_tv_flat_01", "vw_prop_vw_cinema_tv_01", "prop_tv_flat_01", { model = "prop_tv_flat_02", label = "Lobby Radio", station = "south", radius = 22.0, autoCloseDistance = 4.0 }}The feature auto-detects ox_target or qb-target.
For local testing, enable the admin-only test command:
Config.RadioPropTestCommandEnabled = trueConfig.RadioPropTestCommand = "rsradiotestprop"Config.RadioPropTestModel = "prop_picnictable_01"Use /rsradiotestprop to spawn a targetable picnic-table radio, /rsradiotestprop on to spawn it with the emitter already enabled, and /rsradiotestprop clear to remove the last test prop you spawned.
Language
Section titled โLanguageโSet Config.Locale to choose the runtime language:
enfrpt-BRzh-CNโ Simplified Chinese (Mandarin).zhandzh-SGalso select this.zh-HKโ Traditional Chinese (Cantonese, Hong Kong conventions).zh-TW,zh-MO, andyuealso select this.
All non-English locales cover the listener UI, DJ UI, station admin UI, emitter/effects UI, ox_lib menus, notifications, alerts, and on-screen prompts.
shared/locales.lua is escrow-exempt. Server owners can add another locale there by following the existing keyed, exact-text, formatted-message, and NUI dictionaries, then selecting it with Config.Locale.
Weather
Section titled โWeatherโWeather settings:
Config.EnableWeatherModuleConfig.WeatherAuthorityProviderConfig.WeatherAuthorityResourceConfig.WeatherAuthorityFallbackConfig.WeatherExternalShowAllRegions
If another resource applies world weather, let rs_radio consume that state rather than compete with it.
Production Guidance
Section titled โProduction GuidanceโRecommended production posture:
- keep
Config.Framework = "auto"unless needed - use properly licensed local
.ogg/.mp3files undersongs/ - keep trace logging off
- keep
Config.DebugAllowAllDJs = false - use admin groups or ACE instead of hardcoded identifiers
- verify stations, doors, target zones, and blips after moving MLO coordinates