Configuration
All configuration lives in config.lua. Staff, ranks, zones, blips, events, the whitelist and most day-to-day settings are managed in the panel and saved to the database, so this file only holds the server-wide defaults.
Changes to config.lua need a resource restart to take effect (restart bablo-admin in the console).
config.lua is a shared file, so it is sent to every player. Never put a secret in it (API keys, bot tokens, TURN passwords). Secrets go in server.cfg as convars, see Installation.
Debug
Config.DEBUG = trueTurns on extra console logging. While it is on, staff can also ban themselves (useful to test the ban screen) and the /demovehicles command exists (see Commands).
Set Config.DEBUG = false on a live server.
Framework
Config.Framework = "auto" -- auto | qbcore | esx | qboxauto checks for es_extended, then qbx_core, then qb-core, and waits up to 5 seconds for one of them to start. Force a value only if detection picks the wrong one.
Server language
Config.Locale = "en"The language players see, loaded from locales/<locale>.json (en and sv ship with the resource). Staff can pick their own language in the panel. See Languages for how to add one.
Inventory
Config.Inventory = 'auto'The inventory resource items are given, removed and viewed through. auto uses the first started one of: ox_inventory, qb-inventory, ps-inventory, codem-inventory, core_inventory, origen_inventory, tgiann-inventory. Set one of those names to force it.
Notifications
Config.Notifications = 'inbuilt' -- inbuilt | ox_lib | framework | customUsed for the in-game notifications: report alerts, jail, zones, vehicle wipe warnings and the admin menu’s own messages.
| Value | Uses |
|---|---|
inbuilt | The admin menu’s own notifications. Each staff member picks the position, sounds and which alerts they get in Settings → Alerts & sounds. |
ox_lib | lib.notify |
framework | Your framework’s notify (QBCore, Qbox or ESX) |
custom | Config.CustomNotify below |
Positions, sounds and per-staff alert settings only apply to inbuilt.
-- Config.CustomNotify = function(data)
-- exports['okokNotify']:Alert(data.title, data.body, data.duration, data.kind)
-- endOnly used with Config.Notifications = 'custom'. It runs on the client and gets one table: { kind = 'success' | 'error' | 'info', title = string, body = string, duration = milliseconds }. If it is missing or throws an error, the built-in notification is shown instead.
Currency
Config.Currency = {
pattern = '$ %s',
thousands = ',',
account = 'bank', -- cash | bank
}How money is shown in the panel (player money, transactions, statistics). pattern uses %s as the number placeholder and thousands is the separator between groups of three digits. account is not used by any screen in the current version.
Admin command
Config.Command = 'admin'
Config.OpenKey = 'F9'
Config.NoClipCommand = 'noclip'Config.Command is the chat command that opens the admin panel. Only staff can open it. See Commands.
Config.OpenKey is the default key that opens it. Every player can change it under Settings → Key Bindings → FiveM → Open admin menu, and the key does nothing for players who aren’t staff. Set it to '' to have no default key. A player’s own choice is kept, so a new default only applies to players who never changed it.
Config.NoClipCommand is a chat command that turns noclip on or off, the same as the quick menu toggle. It only works for staff with the Quick Menu permission. Set it to '' to have no command.
The same list has a key for each quick menu toggle: noclip, freecam, god mode, invisible, player names, player blips, staff tag, coordinates, night and thermal vision, head light, super jump, infinite stamina, fast run, no ragdoll and global voice. They have no default key, so each staff member binds the ones they use. The keys do nothing for players who aren’t staff.
Staff access
Staff members and their ranks live in the database. The tables and the default ranks (Owner, Admin, Moderator, Support) are created on first start. Manage them on the Staff page or from the server console. See Staff & Ranks.
Config.Owners = {
-- 'fivem:123456',
-- 'discord:123456789012345678',
}Players listed here always have full access and are added to the top rank when they join. Any identifier works: license:, license2:, discord:, fivem:, steam:. An owner listed with a discord: identifier can also sign in to the web panel and use the Discord bot.
Config.OwnerAce = 'bablo-admin.owner'Players with this ACE are treated like Config.Owners in game. Example for server.cfg:
add_ace group.admin bablo-admin.owner allowConfig.FirstAdminSetup = trueWhile nobody is staff yet, the first server admin who runs /admin becomes the first Owner. A server admin is anyone with the command ACE (txAdmin admins have it), a QBCore god or admin, an ESX admin or superadmin, or a Qbox admin. Set it to false to only allow Config.Owners, Config.OwnerAce and the console command.
Config.ConsoleCommand = 'babloadmin'The server console command for staff management. See Commands.
Discord profile pictures
Staff with a Discord identifier show their Discord picture. It is fetched each time they join and saved. This needs a Discord bot token in server.cfg (any bot works, it does not have to be in your Discord server):
set bablo_admin_discord_token "your bot token"Without a token, staff show Discord’s default avatar. See Your Own Discord Bot for how to create one.
ACE mirroring
Ranks can give ACEs and commands (the Advanced ACE rules in the rank editor). For that the resource must be allowed to change ACEs. Add these lines to server.cfg:
add_ace resource.bablo-admin command.add_ace allow
add_ace resource.bablo-admin command.remove_ace allow
add_ace resource.bablo-admin command.add_principal allow
add_ace resource.bablo-admin command.remove_principal allowSee Staff & Ranks.
Weather and time
Config.WorldSync = 'auto'Weather and time shown and set on the dashboard.
| Value | Behavior |
|---|---|
auto | Uses qb-weathersync when it runs. If cd_easytime, vSync, Renewed-Weathersync, av_weather or qbx_weathersync runs instead, weather and time show as unavailable. Otherwise bablo-admin runs them itself. |
qb-weathersync | Always goes through qb-weathersync. |
builtin | bablo-admin syncs weather and time to every player. |
off | Weather and time are not shown or changed. |
Server tick times
-- Config.PerfUrl = 'http://127.0.0.1:30120/perf/'The dashboard reads server tick times from FXServer’s /perf/ page. It tries your server’s port and 30120 on its own. Only set this when the console prints that the tick times could not be read.
Zones
Config.Zones = {
SpeedUnit = 'kmh',
}SpeedUnit is the unit of a zone’s speed limit: kmh or mph. Zone behaviors (disable weapons, speed limit, freeze, announce entry, keep players out) are switched on per zone in the zone editor on the Map page. A zone can also name a custom handler that other resources react to, see State Bags, Exports & Events.
Event announcements
Config.EventAnnouncements = trueServer events planned in the panel are announced to every player with a banner at the top of the screen when they start. How long the banner stays is set per event (“Show on screen”). Set to false to never show it.
Reports
Config.Reports = true
Config.ReportCommand = 'report'/report opens the player’s report window, /report <message> sends a report straight away. Staff answer under Reports in the panel. Set Config.Reports = false to turn reports off (the command is then not registered). See Reports & Media.
UI preview
Config.UIPreview = truetrue makes screens that are not connected to the server yet show built-in demo data in game (staff, permissions and your own session are always real), and enables the hidden /admin probe blur diagnostic. Set it to false once every screen you use is connected.
Remote spectate
Config.Spectate = {
MaxFeeds = 4,
Fps = 30,
Resolution = 720,
IceServers = { 'stun:stun.l.google.com:19302', 'stun:stun1.l.google.com:19302' },
}Used by Monitoring, the report live preview and Remote in Players: the watched player’s game view is streamed to the staff member’s panel.
| Option | Description |
|---|---|
MaxFeeds | How many feeds one staff member can watch at once |
Fps | Capture rate on the watched player’s game |
Resolution | Height of the streamed picture: 480, 720, 1080 or 1440. Higher looks sharper but costs the watched player more and roughly doubles the data per step, which matters when feeds go through a TURN relay. |
IceServers | Public STUN servers used to connect the two players |
If feeds stay black for players behind strict routers, add a TURN relay. TURN is set only with convars in server.cfg (bablo_admin_turn_key_id + bablo_admin_turn_api_token for Cloudflare, or bablo_admin_turn_urls + bablo_admin_turn_username + bablo_admin_turn_credential for your own), never here. See TURN server.
Moderation
Config.Moderation = {
BanTokens = true,
WarningHoldSeconds = 5,
Appeals = true,
AppealCooldownHours = 24,
Flags = {
{ id = 'streamer', label = 'Streamer', colour = '#b977ff' },
{ id = 'creator', label = 'Content Creator', colour = '#00d0ff' },
{ id = 'watchlist', label = 'Watchlist', colour = '#ff3a52' },
{ id = 'newPlayer', label = 'New Player', colour = '#57ff97' },
},
Jail = {
Inside = vec4(1641.62, 2570.17, 45.56, 0.0),
Release = vec4(1846.2, 2586.0, 45.67, 270.0),
Radius = 140.0,
},
}| Option | Description |
|---|---|
BanTokens | Also bans the player’s hardware tokens, so the same PC on a fresh account is refused. It can also catch people who share one computer. |
WarningHoldSeconds | A warned player holds SPACE this long to close the warning (1–30). |
Appeals | A banned player can write an appeal on the ban screen when they try to join. Staff answer it on the Moderation page (Appeals tab). Blacklisted players never get the appeal box. |
AppealCooldownHours | How long a player waits after a denied appeal before sending a new one. |
Flags | The flags staff can put on a player (shown in the player view). id is saved in the database, label and colour are what staff see. |
Jail.Inside | vec4 where jailed players are kept. |
Jail.Release | vec4 where they are sent when their time is up. |
Jail.Radius | How far (metres) from Jail.Inside a jailed player can go. |
Bans are matched against every identifier the player had when banned (license, discord, steam, fivem…). The IP is only added when staff tick Also ban IP address in the ban window. A jail survives a reconnect or a server restart.
Whitelist
Config.Whitelist = {
Enabled = false,
Requests = true,
RequestCooldownHours = 24,
ApplyUrl = '',
}| Option | Description |
|---|---|
Enabled | Off by default: there is no Whitelist page and the list is never checked. Set it to true to add the page, then turn the whitelist itself on or off there (it stays off until you do). |
Requests | A player who is not on the list can ask for access on the connect screen. Staff answer it on the Whitelist page. |
RequestCooldownHours | How long a player waits after a denied request before asking again. |
ApplyUrl | Adds an Apply button on that screen, for example your Discord invite or a form. Empty hides it. |
Staff always get in, even when they are not on the list.
Community service
Config.CommunityService = {
Center = vec4(195.17, -933.77, 30.69, 144.0),
Radius = 55.0,
Release = nil,
TaskSeconds = 8,
EscapePenalty = 2,
Spots = {
vec3(175.0, -943.0, 30.69),
vec3(187.5, -951.0, 30.69),
vec3(200.0, -958.0, 30.69),
vec3(213.0, -946.0, 30.69),
vec3(220.0, -930.0, 30.69),
vec3(208.0, -915.0, 30.69),
vec3(191.0, -906.0, 30.69),
vec3(176.0, -915.0, 30.69),
vec3(168.0, -930.0, 30.69),
vec3(198.5, -934.5, 30.69),
},
}Staff give a player a number of tasks from the Jail button on a player (Community service tab). The player is sent to Center and walks to the marked Spots, pressing E to sweep each one.
| Option | Description |
|---|---|
Center | vec4 where the player is sent when the sentence starts (the 4th number is the heading). |
Radius | Leaving this many metres around Center sends them back. |
Release | vec4 where they go when they are done. nil = they stay where they are. |
TaskSeconds | How long one sweep takes. |
EscapePenalty | Tasks added each time they leave the area. |
Spots | vec3 places that can be marked for sweeping. |
A sentence carries over a reconnect or a server restart.
Screenshots and clips
Config.Media = {
Enabled = true,
Provider = 'server',
KeepDays = 30,
MaxClipSeconds = 30,
StopKey = 'F11',
}| Option | Description |
|---|---|
Enabled | false turns off player clips and screenshots and staff screenshots. |
Provider | server saves files in the media folder of the resource and needs no setup. fivemanage uploads them to fivemanage.com instead. |
KeepDays | Removes media older than this many days. 0 keeps everything. |
MaxClipSeconds | Longest clip a player can record (5–120). |
StopKey | Default key that stops a clip recording. Players can change it in their key bindings. '' for none (then only /report stops it). |
fivemanage needs your API key in server.cfg: set bablo_admin_fivemanage_key "your key". Without it, clips and screenshots are unavailable.
See Reports & Media.
Database backups
Config.Backups = {
Enabled = true,
EveryHours = 168,
Keep = 7,
}Saves a full copy of the server database as a .sql.gz file in the backups folder of the resource.
| Option | Description |
|---|---|
Enabled | false turns the feature off completely. |
EveryHours | How often an automatic backup runs: 0, 6, 12, 24, 48, 168 (every week, the default) or 720 (every month). 0 = no automatic backups. |
Keep | How many backup files are kept: 3, 5, 7, 14 or 30. |
EveryHours and Keep are only the starting values. Once they are changed in Settings → Database backups, the panel values are used. See Database Backups.
Polls
Config.Polls = {
Enabled = true,
Command = 'poll',
}Staff with the Polls permission start a poll from the Polls page. Every player gets a card in game and opens the poll with the command to vote. Set Enabled = false to turn polls off. See Reports & Media.
Ban screen
Config.BanScreen = {
Card = true,
ServerName = '',
AppealUrl = '',
LogoUrl = '',
HoldSeconds = 300,
}A styled card (a FiveM Adaptive Card) shown every time a banned player tries to join: reason, ban ID, who banned them, the date and when it runs out.
| Option | Description |
|---|---|
Card | false shows the plain ban text instead. |
ServerName | An extra line above the title. Empty hides it (FiveM already shows the server name). |
AppealUrl | Adds an Appeal button to the card, for example your Discord invite. |
LogoUrl | Shows your logo next to the title. |
HoldSeconds | The card closes by itself after this many seconds. |
A kicked or banned player leaves the server at once with a plain text message, because FiveM’s own “Disconnected” popup can only show plain text. The styled screen comes when they try to join again.
Kick screen
Config.KickScreen = {
Card = true,
Minutes = 10,
}Shown once when a kicked player joins again within Minutes: reason, who kicked them and when, with Join server and Leave buttons. Card = false lets them straight back in. The card closes by itself after Config.BanScreen.HoldSeconds and then lets the player in.
Players tab bridges
Config.Appearance = 'auto'The clothing resource behind Clothing (opens the player’s clothing menu) and Reload skin. auto picks the first one that runs: illenium-appearance, fivem-appearance, bl_appearance, crm-appearance, rcore_clothing, codem-appearance, tgiann-clothing, qb-clothing, esx_skin, skinchanger. Each one is a small file in src/appearances; copy one to add another resource.
Config.VehicleKeys = 'auto'Key resource used when staff give keys or spawn a vehicle for a player: qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock, qs-vehiclekeys, Renewed-Vehiclekeys or cd_garage (files in src/vehiclekeys).
Config.Banking = 'auto'Where the Transactions window reads a player’s bank history: bablo-banking, Renewed-Banking, okokBanking or qb-banking (files in src/banking).
If you force a bridge by name and that resource is not started, the feature is unavailable. A forced bridge never falls back to another one.
Sounds
Config.Sounds = {
Announcement = { name = 'Event_Message_Purple', set = 'GTAO_FM_Events_Soundset' },
Message = { name = 'Text_Arrive_Tone' },
Warning = { name = 'Boss_Message_Orange', set = 'GTAO_Boss_Goons_FM_Soundset' },
}GTA frontend sounds players hear for a staff announcement or event start (Announcement), a message from staff (Message) and a warning (Warning). Give the sound name and its set (leave set out for sounds without one). Set one to false to play nothing.
Give vehicle garage
Config.GiveVehicleGarage = { car = 'pillboxgarage', air = 'intairport', sea = 'lsymc' }The garages that Give vehicle puts a new vehicle in on QBCore and Qbox. Helicopters and planes go to air, boats and submarines to sea, everything else to car. Use garage names from your garage script; the defaults exist in qb-garages and qbx_garages. On start the console warns if one of them doesn’t exist. A single name like 'pillboxgarage' still works and is used for every vehicle type.
Send to garage and Release from the impound also use these garages when a vehicle has no garage saved or still points at a depot.
Impound
Config.ImpoundLot = 'los_santos'How Impound works depends on the framework:
| Framework | With a fee | Without a fee |
|---|---|---|
| QBCore, Qbox | The vehicle goes to the depot and the player pays the fee there to get it back. | The vehicle is seized and stays locked until staff click Release. |
| ESX (esx_garage) | The vehicle goes to the impound lot in Config.ImpoundLot. esx_garage charges its own lot fee, so the fee you enter is only kept in the note. | Same. |
Impound is not offered when jg-advancedgarages is running, or on ESX servers without esx_garage.
Vehicle pictures
Config.VehicleImageUrl = 'https://assets.babloresources.com/vehicles/%s.webp'Pictures in the Vehicles tab, the player view and owned vehicles. Your own picture in images/vehicles, named after the spawn code (for example images/vehicles/sultanrs.webp; .png, .jpg and .gif work too), is used first and shows after a resource restart. Every other vehicle loads from this address, where %s is the spawn code in lower case (the same name in capitals is tried when that is missing). Set it to false to only use your own pictures.
Hidden vehicles
Config.HiddenVehicleCategories = { 'planes', 'helicopters', 'boats', 'military', 'industrial', 'openwheel' }
Config.HiddenVehicleModels = {
'trailers5', 'tvtrailer2',
'freight', 'metrotrain', 'cablecar',
'polmav', 'predator', 'seashark2',
'cerberus', 'phantom2', 'boxville5', 'oppressor', 'ruiner2', 'deluxo', 'stromberg', 'toreador', 'jb7002',
'imperator', 'imperator2', 'imperator3', 'dominator4', 'impaler2', 'impaler3', 'impaler4',
'issi4', 'issi5', 'issi6', 'deathbike', 'deathbike2', 'deathbike3',
}Vehicles left out of the Vehicles tab. Categories are the framework vehicle categories (QBCore shared/vehicles.lua category), models are spawn codes. A vehicle a player owns is always listed, and hidden vehicles can still be spawned and given by spawn code. Use {} to list everything.
Quick menu
Config.QuickMenu = {
Command = 'quickmenu',
OpenKey = 'F10',
CursorKey = 'ALT',
FreezeKey = 'G',
DeleteKey = 'DEL',
InspectorRange = 50.0,
StaffTagRange = 30.0,
HealthBarColour = 18,
NoclipSpeed = 50.0,
NoclipFastSpeed = 240.0,
NoclipInfoKey = 'H',
DebugRange = 20.0,
DebugLimit = 8,
}The quick menu opens with the Open Quick Menu key from Settings → Keybinds (each staff member picks their own) or the command. Its toggles last for the session: leaving or a resource restart switches them all off.
| Option | Description |
|---|---|
Command | Command that opens and closes the quick menu |
OpenKey / CursorKey | Starting keys before a staff member changes them in Settings (ALT, CTRL, SHIFT, F1–F12, A–Z, 0–9, INS, DEL, HOME, …) |
FreezeKey / DeleteKey | Keys of the entity inspector (fixed for everyone) |
InspectorRange | How far the entity inspector reaches, in metres |
StaffTagRange | How close players must be to see a staff tag |
HealthBarColour | HUD colour index of the health bar on name tags (18 = green) |
NoclipSpeed | Noclip speed in metres per second |
NoclipFastSpeed | Noclip speed while SHIFT is held |
NoclipInfoKey | Shows or hides name, character and ID over players within 15 m while noclipping |
DebugRange | How far Vehicle Debug and Ped Debug look, in metres |
DebugLimit | Most debug cards shown at once, nearest first (1–8) |
ALT is also the default key of ox_target, qb-target and the pma-voice radio, so servers using those may want another CursorKey. Blackout in the quick menu darkens the whole city and needs the World Control permission.
Teleport locations
-- Config.TeleportLocations = {
-- { id = 'legion', label = 'Legion Square', coords = vec4(195.17, -933.77, 29.7, 144.5) },
-- }Places offered in the teleport window. Leave it commented out to use the built-in list (Legion Square, Pillbox, Mission Row, the airport, the Vinewood sign, Sandy Shores, Paleto Bay and Mount Chiliad). When you set it, your list replaces the built-in one.
Your own logos
The menu’s logos are two image files in the main bablo-admin folder, next to config.lua. Replace them with your server’s logo and restart the resource.
| File | Where it shows |
|---|---|
logo_header.webp | The wide logo at the top left of the admin menu. |
logo_icon.webp | The small logo when the menu is narrow, at the bottom of the quick menu, and printed on the clothing, inventory, routing bucket and message pictures in a player’s actions. |
You can use .webp, .png, .jpg, .gif or .svg; keep the name, for example logo_icon.png. Logos are fitted into their spot without being cropped. Use a white or light logo on a transparent background: it sits on dark pictures. Delete a file to get the Bablo logo back.
The web panel shows your logos too. After you replace one, the web panel can take up to an hour to show the new picture.

