JG Docs
Advanced Garages

Custom Key System

If we don't support your key system out of the box, you can add your own.

For jg-vehiclekeys, use the native JG Vehicle Keys installation instead of the custom client integration below.

  1. Go to the framework folder, and open cl-functions.lua
  2. Find the VehicleGiveKeys and VehicleRemoveKeys functions, which should look something like this:
function Framework.Client.VehicleGiveKeys(plate, vehicleEntity)
  if not DoesEntityExist(vehicleEntity) then return false end

  if Config.VehicleKeys == "qb-vehiclekeys" then
    TriggerEvent("vehiclekeys:client:SetOwner", plate)
  elseif Config.VehicleKeys == "jaksam-vehicles-keys" then
    TriggerServerEvent("vehicles_keys:selfGiveVehicleKeys", plate)
  elseif Config.VehicleKeys == "mk_vehiclekeys" then
    exports["mk_vehiclekeys"]:AddKey(vehicleEntity)
  elseif Config.VehicleKeys == "qs-vehiclekeys" then
    local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
    exports['qs-vehiclekeys']:GiveKeys(plate, model)
  elseif Config.VehicleKeys == "wasabi_carlock" then
    exports.wasabi_carlock:GiveKey(plate)
  elseif Config.VehicleKeys == "cd_garage" then
    TriggerEvent('cd_garage:AddKeys', plate)
  elseif Config.VehicleKeys == "okokGarage" then
    TriggerServerEvent("okokGarage:GiveKeys", plate)
  elseif Config.VehicleKeys == "t1ger_keys" then
    TriggerServerEvent('t1ger_keys:updateOwnedKeys', plate, true)
  else
    -- Setup custom key system here...
  end
end

function Framework.Client.VehicleRemoveKeys(plate, vehicleEntity)
  if not DoesEntityExist(vehicleEntity) then return false end
  
  if Config.VehicleKeys == "qs-vehiclekeys" then
    local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
    exports['qs-vehiclekeys']:RemoveKeys(plate, model)
  elseif Config.VehicleKeys == "wasabi_carlock" then
    exports.wasabi_carlock:RemoveKey(plate)
  elseif Config.VehicleKeys == "t1ger_keys" then
    TriggerServerEvent('t1ger_keys:updateOwnedKeys', plate, false)
  else
    -- Setup custom key system here...
  end
end
  1. Inside the VehicleGiveKeys function, within the else block where it says

    return 65 -- Setup custom key system here...

    replace it with your custom give keys export. Also make sure you're providing the correct variables to the export based on the ones available:

    plate - Vehicle plate
    vehicleEntity - Physical vehicle entity

    If you need to get the vehicle model/spawn code, you can use:

    local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicleEntity))
  2. If your key script can remove keys, do the same inside the VehicleRemoveKeys function, replacing the line that says

    -- Setup custom key system here...

    with the remove keys export of your key script. Again, make sure you're using the available variables, plate and vehicleEntity.
  3. In config/config.lua, set Config.VehicleKeys = "none".

Last updated 14 October 2026