Per-key reference for every shipped oxide-police configuration file.
Reference for the shipped oxide-police config files.
Most operational settings (departments, stations, grades, badges, salaries, garages, armories, uniforms, radio channels, prison points, speed cameras) are configured in-game through /padmin (and the charge catalog through the MDT) and stored in the database — not in these files. The files below cover resource-wide constants, defaults, and integration settings.
Creates a department banking account through oxide-banking
Config.BankingAccountStartBalance
30000
Starting treasury balance for newly created departments
Config.SalaryInterval
15 * 60 * 1000
Payroll tick interval (ms). Default 15 minutes
Config.PlayerManagement
true
When true, salaries debit the department treasury and unpaid ticks accrue in police_unpaid_payroll for boss settlement. When false, salaries are paid directly from the framework with no treasury impact
Config.UnpaidHoursDecayDays
30
Days after which unpaid payroll rows are pruned
Config.MaxLoadoutItems
50
Max items per armory loadout
Config.FleetRecoveryFee
750
Charged to the department treasury each time a boss tows a checked-out fleet vehicle back from the field (Fleet screen). 0 = free
Config.InteractionDistance
3.0
Generic interaction reach
Config.StationZoneSize
vec3(1.4, 1.4, 1.8)
Default ox_target box size for station zones
Config.StationZoneDistance
2.0
ox_target per-option reach for station zones
Config.RequireStationClockIn
true
When true, officers can only go on/off duty at a station's clock-in zone, and the /duty command and the duty toggle inside the police radial menu are disabled. Set to false to let officers toggle duty from anywhere
Config.AllowMultiDepartment
false
When true, a character can belong to several departments at once (each with its own badge, callsign, rank, and payroll); their active department follows whichever police job is selected in the framework / multi-job menu. When false, hiring into a second department transfers them out of the first. Required for g-multijob — see the ESX setup guide
Config.ActionMenuKey
'F2'
Default keybind for the police actions menu (+policeactions)
Admin tools are not gated by a custom ACE permission. The /padmin panel and admin commands use your server's standard admin permission — the same one used elsewhere on your server. See Admin → Permissions.
NUI card placement, scaling, and anti-flicker grace. Config.Radar.Overlay.updateInterval (default 0) caps how often the floating speed readout refreshes, in ms; 0 = every frame
Controls outbound auto-emails sent to citizens via olink.phone / oxide-phone after a speed camera catch or a field citation. The From strings use a single %s substitution that is filled with the department name (e.g. traffic@lspd.gov).
Setting
Default
Description
Config.CitizenEmail.Enabled
true
Master toggle for all auto-emails
Config.CitizenEmail.Speedcam.Enabled
true
Email the registered plate owner when a speed camera issues a fine
Config.CitizenEmail.Speedcam.From
'traffic@%s.gov'
Sender address for speed-camera emails
Config.CitizenEmail.Citation.Enabled
true
Email the citizen when an officer issues a field citation
Officers actively watching another officer's feed can capture clips that upload to Fivemanage or post to a Discord webhook. Recording happens on the watcher's machine — wearers never produce frames themselves. Native game audio cannot be captured from the browser layer; only mic and page audio are recorded.
Setting
Default
Description
Config.Bodycam.recording.enabled
true
Master toggle for the recorder
Config.Bodycam.recording.provider
'fivemanage'
'fivemanage' or 'discord'
Config.Bodycam.recording.maxDurationS
45
Max clip length in seconds
Config.Bodycam.recording.framerate
24
Capture framerate
Config.Bodycam.recording.videoBitrate
600000
Video bitrate in bps (600 kbps × 45 s ≈ 3.4 MB)
Config.Bodycam.recording.audio.enabled
true
Capture audio
Config.Bodycam.recording.audio.echoCancellation
true
Apply echo cancellation to mic input
Config.Bodycam.recording.audio.noiseSuppression
true
Apply noise suppression to mic input
Config.Bodycam.recording.audio.capturePageAudio
true
Best-effort page-audio capture
Config.Bodycam.recording.hotkey
'F6'
Toggle a manual clip while watching
Config.Bodycam.recording.thumbnail.enabled
true
Capture a thumbnail frame for the recording row
Config.Bodycam.recording.thumbnail.captureSeconds
1.0
When in the clip the thumbnail is grabbed
Config.Bodycam.recording.thumbnail.quality
0.7
JPEG quality (0.0 - 1.0)
Config.Bodycam.recording.discordWebhook
''
Webhook URL when provider = 'discord' (leave blank to disable)
The breathalyzer reads BAC from your drunk system. Edit Config.Breathalyzer.sources to plug in whichever resource your server uses; the first source that returns a numeric value wins.
Setting
Default
Description
Config.Breathalyzer.sources
{ metadata: alcohol, metadata: drunk }
Ordered list of source descriptors
Config.Breathalyzer.multiplier
1.0
Multiplied with the raw value before display
Config.Breathalyzer.maxDisplay
200
Display is clamped to [0, maxDisplay]
Config.Breathalyzer.overLimit
80
Threshold (post-multiplier) for the OVER LIMIT flash
Config.Breathalyzer.cautionLimit
50
Threshold for the caution color
Source descriptor types:
{ type = 'metadata', key = '<key>' } — character metadata via o-link
Config.DefaultCharges is the seed catalog imported into the police_charges_catalog table the first time the resource starts with an empty catalog. It ships with 100 entries spanning traffic infractions (1xx), traffic misdemeanors (2xx), public order (3xx-4xx), property (5xx), violent (6xx), weapons (7xx), drugs (8xx), financial (9xx), and miscellaneous (10xx).
Each entry has:
Field
Type
Description
code
string
Penal code reference (e.g. 1-01)
title
string
Charge title
category
string
'infraction', 'misdemeanor', or 'felony'
description
string
Long-form description shown in the MDT
fine_amount
number
Default fine in dollars
jail_time
number
Default jail time in months (0 for fine-only)
After first import, charges are managed through the MDT's Catalog tab (admin only). Editing this file does not retroactively modify the database; use the MDT to update charges already in the catalog.
Mirror oxide-police hires, fires, and promotions into the in-game g-multijob menu so officers can switch into and out of their police job. Has no effect unless g-multijob is installed andConfig.AllowMultiDepartment is true (see the Global section above). Set to false to stop oxide-police from touching the g-multijob list
Per-station jail config (jail cells, stripping mode, holding cells, mugshot booth) lives in the database and is set through /padmin. This file holds resource-wide constants only.
Setting
Default
Description
Config.Custody.TickInterval
3000
Sentence-tick interval (ms)
Config.Custody.ReduceOfflineTime
false
When true, sentences continue counting down while the inmate is offline. The server decrements remaining_seconds on the same cadence as the online tick and auto-releases records that hit zero
Config.Custody.SecondsPerMonth
60
Conversion factor used by /jail <id> <months>: real seconds per RP-month
Config.Custody.Cutscene.FadeOut
500
Pre-jail fade-out (ms)
Config.Custody.Cutscene.FadeIn
500
In-cell fade-in (ms)
Config.Custody.Cutscene.BeforeShot
2000
Pause before mugshot
Config.Custody.Cutscene.AfterShot
2000
Pause after mugshot
Config.Custody.Revive.Enabled
true
Use prison revive on inmate death
Config.Custody.Revive.Cutscene.*
—
Fade and groggy timings for revive
Config.Custody.Uniform.Male / Female
—
Inmate uniform component drawables
Config.Custody.Animation
mp_character_creation@customise@male_a / loop
Idle anim for stripping
Config.Custody.Locker.StashPrefix
'police_jail_locker_'
Stash ID prefix for stripped items
Config.Custody.Locker.Slots
50
Locker slot count
Config.Custody.Locker.MaxWeight
500000
Locker weight cap (g)
Config.Custody.RemoveAfterRelease
{}
Items wiped on release regardless of stripping mode
% chance to leave a print on vehicle entry without gloves
Config.Evidence.fingerprints.expire
120
Vehicle fingerprint expiry (min)
Config.Evidence.processing
—
Per-evidence-item processing duration and result label
Config.Evidence.registrableItems
(large list)
Items submittable to the evidence registry
Config.Evidence.registrablePatterns
{ 'weapon_' }
Item-name prefixes treated as evidence
Config.Evidence.locker.slots / weight / minGrade
50 / 100000 / 0
Evidence locker size and min grade (lockers are per case; the station point is the access gate)
Config.Evidence.collectDistance
2.0
Max distance to collect a drop
Config.Evidence.collectAnim
—
Animation played during collection
Config.Evidence.renderSleep
0
Milliseconds the evidence draw loop waits between frames while a marker is on screen. 0 means every frame (smoothest). Raise it slightly to reduce client load at the cost of marker smoothness
Config.Evidence.idleSleep
1000
Milliseconds the evidence draw loop waits when no markers are nearby. Higher saves performance when there is nothing to draw
Config.Evidence.OfficersDropBullets
true
When false, on-duty officers leave no bullet casings (so range training / duty firefights don't litter collectable evidence). Off-duty officers and civilians always drop
Config.Evidence.IsDropExempt
function
Return true to suppress every world-evidence drop the local player would create (bullet casings, blood, vehicle fingerprints). See example below
Config.Evidence.CheckPlayerGloves
function
Returns true if the player has gloves equipped
Config.Evidence.Weapons
(table)
Weapon name + ammo type catalog used by ballistics reports
Config.Evidence.IsDropExempt runs client-side before any drop is sent. Return true and the local player leaves no bullet casings, blood, or vehicle fingerprints. Use it to exempt minigames or other special states with your own resource's exports:
Config.Evidence.IsDropExempt = function() if exports['pug-paintball']:IsInPaintball() then return true end return falseend
The function is wrapped in a pcall, so an error inside it won't break evidence generation — it just falls back to "not exempt".
Powers the on-duty officer's contextual ox_target options on other players plus the /cuff and /uncuff chat commands. Each action is toggled with its own enable flag and shows a FontAwesome icon. The cuff, search, and escort options are on by default; every other action is off by default. Options only appear when they make sense (for example, take-out-of-vehicle shows only for a cuffed suspect who is seated in a vehicle).
Setting
Default
Description
Config.OfficerTargetMenu.Enable
true
Register the player target options and chat commands
Config.OfficerTargetMenu.Distance
2.5
ox_target reach and command fallback radius (m) when no serverID is passed
Config.OfficerTargetMenu.RequireDuty
true
Default duty requirement for actions without their own requireDuty
Allowing non-police use. Escort, carry, headbag, and vehicle each carry a per-action requireDuty flag (default true). Set it to false to let any player use that action — civilians restrain targets with zip-ties (see Config.FieldActions.Ziptie), which satisfy the "must be restrained" requirement for escort and vehicle (carry never requires restraint; headbag accepts restrained-or-hands-up). Police handcuffs always stay on-duty-only. To fully enable a civilian action that is off by default (e.g. carry), set both Actions.carry.enable = true and Actions.carry.requireDuty = false (and keep Config.FieldActions.Carry.enabled = true). Actions without a requireDuty key fall back to RequireDuty.
License types offered in the MDT person profile's Licenses tab. IDs are passed straight to olink.license.*, so each id must also exist in the framework's licenses table (e.g. on ESX, as a row in the licenses table) for native UIs to label it.
Setting
Default
Description
Config.Licenses.Types
{ driver, weapon, business, pilot, boat }
List of license definitions; each entry has id (framework key) and label (display name)
Default shipped licenses: Driver's License, Weapons Permit, Business License, Pilot's License, Boating License. Add new entries or remove existing ones to match the licenses your server uses.
% of fine revenue routed to the department treasury (the rest is the state's share and leaves the economy)
Config.MDT.caseNumberPrefix
true
Prefix MDT case numbers with the department code
Config.MDT.dispatchEnabled
true
Enable the Dispatch tab. Requires oxide-dispatch. Set false for ps-dispatch / cd_dispatch / qs-dispatch / wasabi_mdt / etc.
Config.MDT.tabletAnimation
true
Play a tablet-holding animation and attach a tablet prop to the officer's hand while the MDT panel is open
Config.MDT.allowOffDuty
false
Allow officers to open and use the MDT while off duty. When false, the MDT requires clocking in first. The Config.MDT.permissions.accessMdt minimum grade is enforced either way
Config.MDT.useItem
false
When true, the MDT can only be opened by using the Config.MDT.itemName inventory item, and the /mdt command is not registered. When false, the MDT opens with /mdt and no item is required. The duty / allowOffDuty and accessMdt checks apply either way
Config.MDT.itemName
'police_tablet'
Inventory item that opens the MDT when useItem is true. The item must be registered in your inventory — see Installation → Register items
Config.MDT.hidden.charIds
{}
List of char_id strings hidden from MDT person search, profile, and vehicle-owner lookups
Config.MDT.hidden.bypassMinGrade
-1
Officers at this grade rank or higher still see hidden characters. Set to -1 to disable bypass entirely
Config.MDT.warrants.defaultExpiryHours
72
Default warrant expiry
Config.MDT.warrants.maxActivePerPerson
3
Max simultaneous active warrants per person
Config.MDT.bolos.defaultExpiryHours
48
Default BOLO expiry
Config.MDT.bolos.maxActive
50
Max simultaneous active BOLOs
Config.MDT.bolos.notifyOnCreate
true
Notify all officers when a BOLO is created
Config.MDT.dashboard.recentActivityCount
20
Rows shown on the dashboard
Config.MDT.search.maxResults
20
Max search results
Config.MDT.search.minQueryLength
2
Min characters before search runs
Config.MDT.permissions.accessMdt
0
Min grade to open the MDT
Config.MDT.permissions.createCase
0
Min grade to create a case
Config.MDT.permissions.closeCase
2
Min grade to close a case
Config.MDT.permissions.issueWarrant
2
Min grade to issue a warrant
Config.MDT.permissions.recallWarrant
3
Min grade to recall a warrant
Config.MDT.permissions.issueFine
0
Min grade to issue a fine
Config.MDT.permissions.processArrest
0
Min grade to process an arrest
Config.MDT.permissions.manageLicenses
1
Min grade to grant or revoke licenses via the MDT person profile
Config.MDT.limits.maxCountPerCharge
10
Max occurrences of a charge per call
Config.MDT.limits.maxFinePerCall
250000
Max fine per call
Config.MDT.limits.maxTextLength
500
Max chars in warrant / BOLO reason fields
Config.MDT.limits.maxPlateLength
16
Max plate length
The MDT's charge-catalog editor (the Catalog tab) is not grade-based — it is only available to server admins (the admin permission, the same one that gates /padmin — see Admin → Permissions).
Three features in this resource save pictures and video to the cloud so officers can view them later:
Mugshots — booking photos taken during arrests
Bodycam clips — short video recordings captured while watching an officer's feed
Bait car dashcam clips — video from the oxide-baitcar resource (these upload through this resource's pipeline)
All three use a service called FiveManage to store the files. You only need one FiveManage key, and that single key powers all three features. The key is not set in any config file — it lives in your server.cfg (the text file that tells your server which resources to start and holds your server's settings).
Follow these steps once:
Create a free account. Go to https://app.fivemanage.com and sign up. The free tier is enough to get started and does not ask for a credit card.
Create a team. After signing in, create a team — pick any name and team type you like.
Open the Tokens page. In the dashboard menu, go to Tokens (Dashboard → Tokens).
Create a token. Click Create token, choose the Media scope (this one scope covers both images and videos — so it works for mugshots, bodycam, and bait car clips), and give the token a name you'll recognize.
Copy the token. FiveManage shows you the token once. Copy it now.
Paste it into server.cfg. Open your server.cfg and add this line, replacing the example with the token you copied:
server.cfg
set FIVEMANAGE_MEDIA_API_KEY "the_token_you_copied"
Restart your server (or refresh the convar) so the new setting takes effect.
What "working" looks like: after this is set, taking a mugshot during an arrest, recording a bodycam clip, or triggering a bait car dashcam clip will upload successfully and the media will appear in the relevant record. If uploads fail, double-check that the line above is in server.cfg, that the token was copied in full, and that you restarted the server.
The shop location, meal windows, and paid catalog are admin-configured through /padmin → Detention → Prison Shop. Until a location is placed, the shop is dormant.
Setting
Default
Description
Config.PrisonShop.enabled
true
Enable prison shop
Config.PrisonShop.model
's_m_y_prismuscl_01'
Vendor ped model
Config.PrisonShop.scenario
'WORLD_HUMAN_CLIPBOARD'
Vendor scenario
Config.PrisonShop.interactDistance
2.5
Engage reach (m)
Config.PrisonShop.targetRadius
1.5
ox_target sphere radius
Config.PrisonShop.blip.*
—
Map blip styling
Config.PrisonShop.freeItem
'prison_food_tray'
Item handed out free during meal windows
Config.PrisonShop.freeMealRestore.hunger
50
Hunger restored when the free meal tray is consumed
Config.PrisonShop.freeMealRestore.thirst
15
Thirst restored when the free meal tray is consumed