Configuration
Garages V2 offers granular control over every aspect of your garages, street parking, transfer agreements, impounds, job fleet, sub-owners, and walk-in interiors. All configuration files are located inside the shared/ directory.
⚙️ Main Configuration (shared/config.lua)
1. General & Money Settings
Config.debug = false
Config.MoneyAccount = "bank" -- Account charged for fees ("bank" | "cash")
Config.AllowMoneyFallback = false -- Charge secondary account if primary account is short
Config.Currency = {
code = "USD",
locale = "en-US",
symbol = "$"
}2. Interaction & Keybinds
Config.Interaction = {
mode = "radial", -- Interaction method ("radial" | "keys" | "target")
keys = {
garage = 38, -- Key for garage (E)
jobVehicles = 47, -- Key for job vehicles (G)
},
radial = {
garage = { icon = "warehouse", label = "garage" },
impound = { icon = "car-burst", label = "impound_lot" },
park = { icon = "square-parking", label = "park" },
},
}
Config.Target = "auto" -- Target system ("auto" | "ox_target" | "qb-target")
Config.Keybind = {
enabled = false, -- Global garage open command keybind
command = "opengarage",
defaultKey = "F5",
}Text UI & Notifications
Config.TextUI = "nui" -- Text UI provider ("nui" | "ox_lib" | "jg-textui" | "okokTextUI" | "custom")
Config.TextUIPosition = "right" -- Built-in prompt position ("bottom" | "top" | "left" | "right" | "center")
Config.Notifications = {
provider = "nui", -- Notification provider ("nui" | "ox_lib" | "custom")
title = "Garages",
duration = 5000, -- Notification duration in ms
position = "top-right",
}Config.Notifications.position sets where notifications appear on screen. It works with both the built-in nui notifications and ox_lib. Accepted values: top-right (default), top-left, top, bottom-right, bottom-left, bottom, center-right and center-left. Restart the script after changing it.
3. Spawning & Vehicle Behavior
Config.WrapInsideVehicleOnSpawn = false -- Warp player into driver seat on spawn
Config.WalkToVehicleOnSpawn = false -- Walk player towards spawned vehicle
Config.DisableParkAnimation = true -- Skip park fade animation
Config.EnableVehiclePreview = true -- Show 3D vehicle preview in UI
Config.ReturnVehiclesOnDisconnect = false -- Automatically return player vehicle on disconnect
Config.DefaultGarage = "publicgarage" -- Default fallback garage for new vehiclesWrapInsideVehicleOnSpawn and WalkToVehicleOnSpawn only move the player who took the vehicle out (or the officer taking a vehicle out of a raid). Players standing nearby are never moved. Neither option applies when you change a plate or collect a street-parked vehicle.
4. Vehicle Transfer & DMV Settings
Config.EnableVehicleTransfer = true -- Garage-to-garage transfer
Config.EnablePlayerTransfer = true -- Player-to-player vehicle transfer
Config.TransferRatePerMile = 100 -- Transfer cost per vehicle mile
Config.TransferBaseFee = 0 -- Base transfer fee
Config.TransferMaxFee = 0 -- Max transfer fee cap (0 = uncapped)
Config.HouseTransferFee = 1000 -- Flat fee for house garage transfer
Config.RequireTransferConfirmation = true -- Require target player confirmation
Config.TransferConfirmationTimeout = 60 -- Seconds before transfer request expires
Config.TransferAgreement = "paper" -- Agreement UI ("paper" | "dialog")
Config.TransferSalePrice = true -- Allow seller to set transfer price
Config.TransferSaleMaxPrice = 0 -- Max sale price (0 = uncapped)5. Fees & Towing Options
Config.Fees = {
freeForGarageOwner = true, -- Free retrieval for garage owners
retrieval = {
enabled = true,
default = 0,
byGarageType = {
public = 250, -- Fee per retrieval in public garage
private = 0,
job = 0,
gang = 0,
},
},
parking = {
enabled = false,
default = 0,
byGarageType = {
public = 100,
private = 0,
job = 0,
gang = 0,
},
},
towing = {
enabled = false,
price = 500, -- Fee for /vreturn command
},
}6. Impound & Restart Settings
Config.PoliceJobs = { ["police"] = true, ["sheriff"] = true }
Config.ImpoundManageJobs = { ["police"] = true, ["mechanic"] = true }
Config.ImpoundPrice = 1000 -- Default fee for server-restart impounded cars
Config.MaxImpoundFine = 25000 -- Maximum fine cap (0 = uncapped)
Config.ImpoundDurations = { 1, 6, 12, 24, 72, 168, 0 } -- Impound duration options in hours (0 = indefinite)
Config.NonImpoundVehicle = {
["futo"] = true -- Vehicles exempt from impound
}
Config.RestartImpoundMode = "impound" -- Restart impound mode ("impound" | "return" | "none")7. Sub-Owners & Access Groups
Config.SubOwners = {
enabled = true, -- Enable sub-owners feature
price = 0, -- Fee to add sub-owner (0 = free)
maxPerVehicle = 3, -- Max sub-owners per vehicle
}
Config.AccessGroups = {
enabled = true, -- Enable reusable Access Groups system
restrictJobVehicles = true, -- A job vehicle in an access group is limited to that group's members
}8. Odometer & Mileage Tracking
Config.Mileage = {
enabled = true, -- Enable vehicle mileage tracking
provider = "internal", -- Provider ("internal" | "external" | "custom")
unit = "miles", -- Display unit ("miles" | "kilometers")
column = "mileage", -- Database column for internal provider
sampleInterval = 1000, -- Sampling interval in ms while driving
saveInterval = 30, -- DB save interval in seconds
}9. Admin Permissions & Command Aliases
Config.Admin = {
permission = "group.admin", -- ACE permission required for admin command
citizenIds = {}, -- Specific Whitelisted Citizen IDs with admin rights
commands = {
adminMenu = "garageadmin", -- Command for Admin Dashboard
impoundPanel = "impoundpanel", -- Command for Impound Panel
myGarages = "mygarages", -- Command for player garage list
addCar = "addcar", -- Command to assign vehicle to player
returnCar = "vreturn", -- Command to tow vehicle home
},
}🅿️ Street Parking Configuration (shared/parking_config.lua)
Config.StreetParking = {
enabled = true,
mode = "anywhere", -- "anywhere" | "locations" | "garage_spots" | "garage_zones"
interaction = {
park = "radial", -- "radial" | "command" | "both"
list = "radial",
},
command = "park",
keybind = { enabled = true, defaultKey = "L" },
unparkKey = 38, -- Control key to unpark vehicle (E)
unparkDistance = 3.0,
requireEngineOff = true, -- Require engine off to park
ownedOnly = true, -- Only vehicle owners/drivers can park
lockWhenParked = true, -- Lock doors while parked
-- Vehicle Distance Streaming
stream = {
spawnDistance = 180.0,
despawnDistance = 240.0,
interval = 2000,
maxSpawned = 60,
driftDistance = 12.0,
},
-- Countdown & Auto Return
countdown = {
enabled = false,
duration = 48, -- Hours before auto-return
action = "garage", -- "garage" or "impound"
warnAt = 2, -- Hours left when owner is warned
showRemaining = true, -- Show remaining time in UI
},
list = {
enabled = true,
command = "parked",
viewAllJobs = {}, -- Jobs that see all parked vehicles (e.g. police)
allowBlipAll = false,
},
}💼 Job Fleet Configuration (shared/job_vehicles.lua)
Spawnable job vehicles, grade limits, category tabs, liveries, extras and the registered keeper are managed in-game from /garageadmin → Job Fleet, not in config. See Job Fleet & Category Management.
Config.JobOwnedVehicles = {
enabled = true, -- Enable persistent job-owned vehicles
column = "job", -- Database column for owning job name
ownerPrefix = "job:", -- Owner column prefix for job ownership
restrictToJobGarages = true, -- Restrict job vehicles to job garages only
minGrade = {
police = 2, -- Minimum grade required per job
},
requireOnDuty = false, -- Require player to be on duty to pull vehicles out
chargeFees = false, -- Charge parking and retrieval fees for job cars
bossOnlyManage = true, -- Require boss rank to add/remove job vehicles
}🏢 Garage Interiors Configuration (shared/garage_interiors.lua)
Config.Interiors = {
enabled = true, -- Enable walk-in 3D garage interiors
mode = "button", -- Entry mode ("button" | "auto")
default = "gtag_grand", -- Default fallback shell/interior
useCutscene = true, -- Play camera cutscene upon entering
cutsceneDuration = 2500,
}
-- Built-in Interior Layouts Available:
-- gtag_airport : Underground Garage - Airport (10 vehicle spots)
-- gtag_docks : Underground Garage - Docks (15 vehicle spots)
-- gtag_vinewood_a : Underground Garage - Vinewood A (11 vehicle spots)
-- gtag_vinewood_b : Underground Garage - Vinewood B (10 vehicle spots)
-- gtag_grand : Grand Garage Interior (Default)🧩 Feature Configuration Files
Each of these features has its own file in shared/. The full options are on each feature's page:
| File | Feature |
|---|---|
shared/raid_config.lua | Police Garage Raids |
shared/capacity_config.lua | Garage Parking Capacity |
shared/trailer_config.lua | Trailer Storage |
shared/garage_sales_config.lua | Garage Sales |
shared/interior_sessions_config.lua | Shared Visits & Invites |
shared/customization_config.lua | Livery & Extras Menu |
shared/layout_config.lua, shared/cinematic_config.lua | Garage Layouts & Favourites |
shared/migration_config.lua | Migrating from JG Garages |
Discord Logs (shared/server_config.lua)
Paste a webhook URL next to each log you want. Leave it empty to turn that log off.
ServerConfig.Logs = {
["server_impound"] = "", -- automatic impound on server restart
["impound_by_panel"] = "",
["impound_retrieved"] = "",
["park_vehicle"] = "",
["spawn_vehicle"] = "",
["vehicle_transfer"] = "",
["garage_sale"] = "", -- garages bought and sold back
["garage_raid"] = "" -- police raids, take-outs and seizures
}🖼️ Vehicle Image Overrides (shared/vehicle_images.lua)
Config.VehicleImages = {
overrides = {
["custom_gtr"] = "https://your-domain.com/images/gtr.png",
["addon_lambor"] = "web/images/lambor.png",
}
}