JG Docs
Advanced Garages

Custom Key System

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

  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 21 July 2026