Browse docs

Changelog

Full change history for sky_base.
Current

Version 1.49.0

Highlights

  • Improved society-account compatibility so supported banking providers can validate existing company accounts before issuing invoices or creating jobs.
  • Added NPWD phone-number integration and explicit options for servers without an external phone or vehicle-key system.
  • Added pma-voice announcement support so compatible microphone systems can extend a speaker's local voice range and restore normal proximity when the announcement ends.
  • Added optional VISN ARE and custom medical-reset integrations for compatible resources that clear external injury state after reviving a player.

Notable Changes

  • Fixed an issue where ESX item registration or refresh used an outdated item catalogue or bypassed the framework's item owner.
  • Fixed an issue where ESX characters without an assigned job interrupted member counts.
  • Fixed an issue where hunger or thirst reductions were not applied by ESX Legacy Addons 1.16 or newer.
  • Fixed an issue where QB or Qbox vehicle ownership checks accepted another character's vehicle from the same account.
  • Improved Wasabi job-account setup while preserving existing accounts and balances.
  • Improved supported banking payments and account investigations with consistent account names, confirmed provider results and accurate capability limits.
  • Fixed an issue where license availability, removal results or catalogue labels did not match the selected provider.
  • Fixed an issue where vehicle-key grants or removals missed the matching nearby vehicle, the QB key provider started late or MK keys could not be removed.
  • Fixed an issue where some AK47, CD and VMS garage actions used the wrong Qbox player access, or RX plate changes did not reach the stored vehicle.
  • Fixed an issue where RTX or Rx housing entrance lookups failed for valid occupants.
  • Added missing TGIANN global vehicle interactions and corrected target-provider readiness checks.
  • Fixed an issue where cancelling HEX progress could report completion or leave help prompts visible after a resource stopped.
  • Fixed an issue where a database update tried to add a column that another startup operation had already created.
  • Fixed an issue where company payments using qb-banking could remain unconfirmed after the provider had already changed the account balance.
  • Improved QB company-account transactions with balance checks before withdrawals and payment references passed to the banking provider.

Other Changes

  • Fixed an issue where SD Phone could not load its required ox_lib client modules or SD Tablet used an incompatible close action.
  • Fixed an issue where Qbox phone-number changes or native vRP inventory operations did not use the expected provider contract.
  • Improved automatic provider selection for Zyke garages, ESX inventory, licenses and installations using native fuel or marker interactions.
  • Fixed an issue where DS-ServerCreator garage selection, explicit Hex inventory selection or ESX billing detection selected the wrong integration.
  • Fixed an issue where Job Creator version checks used the resource name instead of its release repository.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/banking/ak47.lua
  • sky_base/config/integration/banking/apex.lua
  • sky_base/config/integration/banking/bablo.lua
  • sky_base/config/integration/banking/codem-supreme-banking.lua
  • sky_base/config/integration/banking/companymanager.lua
  • sky_base/config/integration/banking/crm.lua
  • sky_base/config/integration/banking/custom.lua
  • sky_base/config/integration/banking/devmosaic.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/fd.lua
  • sky_base/config/integration/banking/groot.lua
  • sky_base/config/integration/banking/hex.lua
  • sky_base/config/integration/banking/jaksam.lua
  • sky_base/config/integration/banking/kartik.lua
  • sky_base/config/integration/banking/okok.lua
  • sky_base/config/integration/banking/oxlyn.lua
  • sky_base/config/integration/banking/pc.lua
  • sky_base/config/integration/banking/qb.lua
  • sky_base/config/integration/banking/qs.lua
  • sky_base/config/integration/banking/renewed.lua
  • sky_base/config/integration/banking/retro.lua
  • sky_base/config/integration/banking/rx.lua
  • sky_base/config/integration/banking/sky.lua
  • sky_base/config/integration/banking/synz.lua
  • sky_base/config/integration/banking/tgg.lua
  • sky_base/config/integration/banking/wasabi.lua
  • sky_base/config/integration/billing/_helpers.lua
  • sky_base/config/integration/billing/apex.lua
  • sky_base/config/integration/billing/codem.lua
  • sky_base/config/integration/billing/codemv2.lua
  • sky_base/config/integration/billing/companymanager.lua
  • sky_base/config/integration/billing/corem.lua
  • sky_base/config/integration/billing/custom.lua
  • sky_base/config/integration/billing/esx.lua
  • sky_base/config/integration/billing/fd.lua
  • sky_base/config/integration/billing/groot.lua
  • sky_base/config/integration/billing/hex.lua
  • sky_base/config/integration/billing/jacksam.lua
  • sky_base/config/integration/billing/lore.lua
  • sky_base/config/integration/billing/nass_billing.lua
  • sky_base/config/integration/billing/okok.lua
  • sky_base/config/integration/billing/quasar.lua
  • sky_base/config/integration/billing/retro.lua
  • sky_base/config/integration/billing/rxbilling.lua
  • sky_base/config/integration/billing/sky.lua
  • sky_base/config/integration/billing/synz.lua
  • sky_base/config/integration/billing/tgg.lua
  • sky_base/config/integration/billing/vivum.lua
  • sky_base/config/integration/billing/vms.lua
  • sky_base/config/integration/billing/wasabi.lua
  • sky_base/config/integration/fuel/cdn.lua
  • sky_base/config/integration/fuel/hex.lua
  • sky_base/config/integration/fuel/lc.lua
  • sky_base/config/integration/fuel/legacy.lua
  • sky_base/config/integration/fuel/msk.lua
  • sky_base/config/integration/fuel/myFuel.lua
  • sky_base/config/integration/fuel/native.lua
  • sky_base/config/integration/fuel/okokGasStation.lua
  • sky_base/config/integration/fuel/ox.lua
  • sky_base/config/integration/fuel/qb.lua
  • sky_base/config/integration/fuel/qs-fuelstation.lua
  • sky_base/config/integration/fuel/rcore.lua
  • sky_base/config/integration/fuel/stg-van.lua
  • sky_base/config/integration/fuel/xfuel.lua
  • sky_base/config/integration/garage/ak47.lua
  • sky_base/config/integration/garage/bp.lua
  • sky_base/config/integration/garage/cd.lua
  • sky_base/config/integration/garage/codem.lua
  • sky_base/config/integration/garage/esx.lua
  • sky_base/config/integration/garage/hex.lua
  • sky_base/config/integration/garage/jg.lua
  • sky_base/config/integration/garage/msk.lua
  • sky_base/config/integration/garage/my.lua
  • sky_base/config/integration/garage/okok.lua
  • sky_base/config/integration/garage/op.lua
  • sky_base/config/integration/garage/op_v3.lua
  • sky_base/config/integration/garage/qb.lua
  • sky_base/config/integration/garage/qbox.lua
  • sky_base/config/integration/garage/quasar.lua
  • sky_base/config/integration/garage/rx.lua
  • sky_base/config/integration/garage/vms.lua
  • sky_base/config/integration/garage/ws.lua
  • sky_base/config/integration/garage/zyke_garages.lua
  • sky_base/config/integration/helpnotify/17mov_Hud.lua
  • sky_base/config/integration/helpnotify/ZSX_UIV2.lua
  • sky_base/config/integration/helpnotify/aty_ui.lua
  • sky_base/config/integration/helpnotify/brutal_textui.lua
  • sky_base/config/integration/helpnotify/codem-supreme-hud.lua
  • sky_base/config/integration/helpnotify/codem-textui.lua
  • sky_base/config/integration/helpnotify/custom.lua
  • sky_base/config/integration/helpnotify/default.lua
  • sky_base/config/integration/helpnotify/esx.lua
  • sky_base/config/integration/helpnotify/esx_textui.lua
  • sky_base/config/integration/helpnotify/hex.lua
  • sky_base/config/integration/helpnotify/jg-textui.lua
  • sky_base/config/integration/helpnotify/lation_ui.lua
  • sky_base/config/integration/helpnotify/msk_core.lua
  • sky_base/config/integration/helpnotify/okokTextUI.lua
  • sky_base/config/integration/helpnotify/ox_lib.lua
  • sky_base/config/integration/helpnotify/prims_hud.lua
  • sky_base/config/integration/helpnotify/qb.lua
  • sky_base/config/integration/helpnotify/qbox.lua
  • sky_base/config/integration/helpnotify/qs-textui.lua
  • sky_base/config/integration/helpnotify/risk-notify.lua
  • sky_base/config/integration/helpnotify/sky_hud.lua
  • sky_base/config/integration/helpnotify/wasabi_uikit.lua
  • sky_base/config/integration/helpnotify/zenit_hud.lua
  • sky_base/config/integration/housing/_init.lua
  • sky_base/config/integration/housing/esx_property.lua
  • sky_base/config/integration/housing/nolag.lua
  • sky_base/config/integration/housing/qbx_properties.lua
  • sky_base/config/integration/housing/qs.lua
  • sky_base/config/integration/housing/rtx.lua
  • sky_base/config/integration/housing/rx.lua
  • sky_base/config/integration/housing/sn.lua
  • sky_base/config/integration/housing/vms.lua
  • sky_base/config/integration/inventory/ak47.lua
  • sky_base/config/integration/inventory/codem.lua
  • sky_base/config/integration/inventory/codemv2.lua
  • sky_base/config/integration/inventory/core.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/inventory/jpr.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/native/vrp.lua
  • sky_base/config/integration/inventory/one.lua
  • sky_base/config/integration/inventory/origen.lua
  • sky_base/config/integration/inventory/ox.lua
  • sky_base/config/integration/inventory/ox/usable.lua
  • sky_base/config/integration/inventory/ps.lua
  • sky_base/config/integration/inventory/qb-inv.lua
  • sky_base/config/integration/inventory/qs.lua
  • sky_base/config/integration/inventory/smx.lua
  • sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/integration/license/_helpers.lua
  • sky_base/config/integration/license/ak47.lua
  • sky_base/config/integration/license/bit.lua
  • sky_base/config/integration/license/codem.lua
  • sky_base/config/integration/license/cs.lua
  • sky_base/config/integration/license/custom.lua
  • sky_base/config/integration/license/esx.lua
  • sky_base/config/integration/license/main.lua
  • sky_base/config/integration/license/papa.lua
  • sky_base/config/integration/license/qb.lua
  • sky_base/config/integration/license/qbox.lua
  • sky_base/config/integration/license/quasar.lua
  • sky_base/config/integration/license/standalone.lua
  • sky_base/config/integration/license/stg-walletv2.lua
  • sky_base/config/integration/license/vms.lua
  • sky_base/config/integration/medical/custom.lua
  • sky_base/config/integration/medical/none.lua
  • sky_base/config/integration/medical/visn_are.lua
  • sky_base/config/integration/notification/17mov_Hud.lua
  • sky_base/config/integration/notification/RxNotify.lua
  • sky_base/config/integration/notification/Venice-Notification.lua
  • sky_base/config/integration/notification/ZSX_UIV2.lua
  • sky_base/config/integration/notification/aty_ui.lua
  • sky_base/config/integration/notification/aty_uikitv2.lua
  • sky_base/config/integration/notification/brutal_notify.lua
  • sky_base/config/integration/notification/codem-supreme-notification.lua
  • sky_base/config/integration/notification/core_notify.lua
  • sky_base/config/integration/notification/cp_notify.lua
  • sky_base/config/integration/notification/cs_hud.lua
  • sky_base/config/integration/notification/esx.lua
  • sky_base/config/integration/notification/esx_notify.lua
  • sky_base/config/integration/notification/frkn-uikit.lua
  • sky_base/config/integration/notification/hex.lua
  • sky_base/config/integration/notification/lation_ui.lua
  • sky_base/config/integration/notification/msk_core.lua
  • sky_base/config/integration/notification/mythic_notify.lua
  • sky_base/config/integration/notification/okokNotify.lua
  • sky_base/config/integration/notification/ox_lib.lua
  • sky_base/config/integration/notification/prims_hud.lua
  • sky_base/config/integration/notification/prism_uipack.lua
  • sky_base/config/integration/notification/qb.lua
  • sky_base/config/integration/notification/qbox.lua
  • sky_base/config/integration/notification/qs-interface.lua
  • sky_base/config/integration/notification/risk-notify.lua
  • sky_base/config/integration/notification/rtx_notify.lua
  • sky_base/config/integration/notification/sky_hud.lua
  • sky_base/config/integration/notification/sky_notify.lua
  • sky_base/config/integration/notification/vms_notifyv2.lua
  • sky_base/config/integration/notification/wasabi_notify.lua
  • sky_base/config/integration/notification/wasabi_uikit.lua
  • sky_base/config/integration/notification/zenit_hud.lua
  • sky_base/config/integration/phone/17mov.lua
  • sky_base/config/integration/phone/client/sd.lua
  • sky_base/config/integration/phone/client/sky_phone.lua
  • sky_base/config/integration/phone/codem.lua
  • sky_base/config/integration/phone/d.lua
  • sky_base/config/integration/phone/esx.lua
  • sky_base/config/integration/phone/gks.lua
  • sky_base/config/integration/phone/lb-unique.lua
  • sky_base/config/integration/phone/lb.lua
  • sky_base/config/integration/phone/none.lua
  • sky_base/config/integration/phone/npwd.lua
  • sky_base/config/integration/phone/okok.lua
  • sky_base/config/integration/phone/qb.lua
  • sky_base/config/integration/phone/qs.lua
  • sky_base/config/integration/phone/roadphone.lua
  • sky_base/config/integration/phone/sd.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/phone/yseries.lua
  • sky_base/config/integration/progress/17mov_Hud.lua
  • sky_base/config/integration/progress/ZSX_UIV2.lua
  • sky_base/config/integration/progress/aty_uikitv2.lua
  • sky_base/config/integration/progress/codem-supreme-hud.lua
  • sky_base/config/integration/progress/custom.lua
  • sky_base/config/integration/progress/esx.lua
  • sky_base/config/integration/progress/frkn-uikit.lua
  • sky_base/config/integration/progress/helpers/normalize.lua
  • sky_base/config/integration/progress/hex.lua
  • sky_base/config/integration/progress/jaksam.lua
  • sky_base/config/integration/progress/lation_ui.lua
  • sky_base/config/integration/progress/msk_core.lua
  • sky_base/config/integration/progress/mythic.lua
  • sky_base/config/integration/progress/ox.lua
  • sky_base/config/integration/progress/prism_uipack.lua
  • sky_base/config/integration/progress/qb.lua
  • sky_base/config/integration/progress/risk-notify.lua
  • sky_base/config/integration/progress/wasabi.lua
  • sky_base/config/integration/tablet/default.lua
  • sky_base/config/integration/tablet/lb.lua
  • sky_base/config/integration/tablet/roadpad.lua
  • sky_base/config/integration/tablet/sd.lua
  • sky_base/config/integration/target/_init.lua
  • sky_base/config/integration/target/custom.lua
  • sky_base/config/integration/target/ox.lua
  • sky_base/config/integration/target/qb.lua
  • sky_base/config/integration/target/tgiann.lua
  • sky_base/config/integration/target/vivum.lua
  • sky_base/config/integration/vehiclekeys/ak47.lua
  • sky_base/config/integration/vehiclekeys/brutal.lua
  • sky_base/config/integration/vehiclekeys/ic3d.lua
  • sky_base/config/integration/vehiclekeys/jc.lua
  • sky_base/config/integration/vehiclekeys/jota.lua
  • sky_base/config/integration/vehiclekeys/kiminaze.lua
  • sky_base/config/integration/vehiclekeys/mk.lua
  • sky_base/config/integration/vehiclekeys/mrnewb.lua
  • sky_base/config/integration/vehiclekeys/msk.lua
  • sky_base/config/integration/vehiclekeys/none.lua
  • sky_base/config/integration/vehiclekeys/qb.lua
  • sky_base/config/integration/vehiclekeys/quasar.lua
  • sky_base/config/integration/vehiclekeys/server/_init.lua
  • sky_base/config/integration/vehiclekeys/server/qb.lua
  • sky_base/config/integration/vehiclekeys/server/vehicles_keys.lua
  • sky_base/config/integration/vehiclekeys/vehicles_keys.lua
  • sky_base/config/integration/vehiclekeys/wasabi.lua
  • sky_base/config/integration/vehiclekeys/zyke_garages.lua
  • sky_base/config/integration/voice/_init.lua
  • sky_base/config/integration/voice/pma.lua
  • sky_base/config/integration/voice/saltychat.lua
  • sky_base/config/integration/voice/yaca.lua
  • sky_base/config/integration/weather/cd_easytime.lua
  • sky_base/config/integration/weather/custom.lua
  • sky_base/config/integration/weather/esx_weather.lua
  • sky_base/config/integration/weather/native.lua
  • sky_base/config/integration/weather/qb-weathersync.lua
  • sky_base/config/integration/weather/renewed.lua
  • sky_base/config/integration/weather/weathersync.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.48.01.49.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

1. Back up and stop the server

Update sky_base from 1.48.0 to 1.49.0. If you are on an older version, complete its earlier update instructions first.

  1. Download 1.49.0 and extract the ZIP on your computer.
  2. Back up your installed sky_base folder, the other resources being updated and your game database. Keep the backup outside the server's resources folder.
  3. Stop the whole server in txAdmin or your hosting panel. Complete the other installed Sky updates before starting it again.

2. Copy the matching files

Open the installed sky_base folder and the extracted 1.49.0 folder side by side.

  1. Delete the installed source/ folder and copy the complete new source/ folder into its place.
  2. Replace fxmanifest.lua with the file from the same download.
  3. Replace the complete config/locales/ folder. If you edited translations, copy your own wording from the backup into the matching new entries; keep all new keys.
  4. Replace config/framework/esx.lua, qb.lua and qbox.lua with the matching new files. If you edited an adapter, start from its new file and transfer only your own changes from the backup.
  5. Copy every file under config/integration/ listed in Changed Files to the same installed path, including the new medical/custom.lua, medical/none.lua, medical/visn_are.lua, phone/none.lua, phone/npwd.lua and vehiclekeys/none.lua. For a customized adapter, start from the downloaded file and transfer your custom provider calls into it. Keep the downloaded loading guards and result handling, including the updated banking/qb.lua and voice adapters. Copying the entire old adapter back would discard the fixes.
  6. Keep your existing config/config.lua and all other unchanged configuration files. The settings step explains the optional new provider choices.

3. Keep your settings and review optional provider choices

All Base settings are file-based. /jobconfig does not manage them.

Open sky_base/config/config.lua. Keep your current framework, language and provider values. This release adds the optional medical selector; the other edits to this file update provider-list comments. Keep your configuration instead of replacing it wholesale.

New medical selector: inside the existing Config = { ... } table, find weather = .... Immediately after that line, add this entry if medical is missing:

medical = "auto",

Keep an existing medical entry instead of adding a duplicate. "auto" selects a started visn_are resource when Base starts, otherwise "none"; an older configuration without this entry also uses that automatic fallback. Set medical = "none", if you deliberately want no external injury-buffer reset. To select VISN ARE explicitly, use medical = "visn_are", and start visn_are before Base in server.cfg. Keep your existing revival resource in charge of reviving players. This adapter lets compatible consumers reset the external injury buffer after revival; it does not replace that medical resource. Unknown values fail startup, and an explicitly selected but stopped VISN ARE resource reports an error when a reset is requested. Choose "custom" only after implementing sky_base/config/integration/medical/custom.lua; the supplied template deliberately reports that it is not implemented.

Optional — NPWD: find phone = ... inside Config = { ... }. With phone = "auto",, start npwd and its framework bridge before Base; automatic detection can then select it. To select it explicitly, replace only that value with phone = "npwd",. This integration reads phone numbers; number changes, custom phone apps and call control are not supplied by NPWD's supported integration.

Optional — no external phone or key system: replace the existing phone value with phone = "none", and/or the existing vehiclekeys value with vehiclekeys = "none",. Keeping "auto" also selects these fallbacks when no matching provider is started. Do not add duplicate entries.

Only for a custom integration you wrote: update your customized files against the downloaded templates at the same paths, especially config/integration/banking/custom.lua, config/integration/license/custom.lua and config/integration/progress/custom.lua. Keep your existing selected provider. Banking must supply its read-only account probe; license methods are now bound directly by the selected adapter. Finish this integration comparison before starting the server.

Optional — announcement consumers: keep your existing voice selection. Compatible pma-voice microphone/announcement resources can use the new scoped announcement support; Base adds no new announcement setting to config/config.lua. Start pma-voice before Base. SaltyChat and YACA do not provide this announcement API, so installing Base does not require changing your voice provider. If you enable an announcement consumer, avoid combining it with another script that replaces pma's proximity-check function: this integration restores pma's standard check when cleared.

Only for developers integrating announcements or medical resets: the client call Sky.Voice.SetAnnouncementOverride(scopeId, range) accepts 1–300 metres with pma-voice. The consumer must check its result, keep ownership of its scope and call Sky.Voice.ClearProximityOverride(scopeId) when it finishes or stops. This controls recipients around the speaking player; microphone capture and speaker-position audio remain the consumer's responsibility. A medical owner can call Sky.Functions.ResetMedicalState() after completing its own revive; the VISN event dispatch is not a vendor-completion acknowledgement.

QB banking: keep your current banking provider and company-account names, with qb-banking started before Base when it is the selected backend. The corrected adapter confirms the provider's successful affected-row response and checks the balance before withdrawals. Legacy codem-bank automatic detection on QBCore also uses the QB bridge; the CodeM name alone does not identify every installed backend. No balance reset, account migration, retry or automatic release of old orders is included. For an existing order stuck in paying, have the owner or support compare the bank's ledger with that order before reconciling it. Do not blindly retry or refund a payment whose outcome is uncertain.

4. Preserve database, items and assets

No new Base SQL, item registration, inventory images or streamed models are required from 1.48.0 to 1.49.0. Keep all existing accounts, items and licenses. This update does not require deleting or resetting data.

If you are also updating Jobs Base, complete its separate database step. On older native ESX versions without runtime item-registration support, new item definitions still require the framework's normal database setup and a full server restart; this Base update does not change that requirement.

5. Start and check the server

  1. Start the framework, database connector and your selected providers first. Keep ensure sky_base before ensure sky_jobs_base and your installed Sky scripts in server.cfg.
  2. Start the server and check that Base reports 1.49.0. If updating Jobs Base too, use 1.52.0 and finish its update instructions before reopening the server.
  3. Check the first startup/database error before continuing, then reconnect.
  4. Test the inventory, license actions, company banking and vehicle keys used on your server. For QB/Qbox, check ownership with the character who actually owns the vehicle. If using NPWD, check that the loaded character's phone number is available.
  5. If you use the QB banking bridge, make one small new company payment and check that the order completes and the account is debited once. Keep historical uncertain payments for ledger reconciliation rather than using them as a repeat-payment test.
  6. If a compatible resource uses the VISN reset bridge, complete its normal revive flow and check the player's injury state and UI. If you use pma announcements, test an announcement with another player in range, then confirm normal voice proximity returns when it ends. These optional integrations need acceptance with your actual provider and connected players.

Keep the backup until these checks pass.

Version 1.48.0

Highlights

  • Added shared local weather and time integrations for supported weather providers.
  • Improved personal radio key support while using a compatible Sky tablet.
  • Added protected sharing support for portable job and Farming setups.

Notable Changes

  • Fixed an issue where RoadPhone tracking checked flight mode on the wrong side and could miss the owner's actual phone state.
  • Fixed an issue where missing ESX society accounts prevented a confirmed rejected payment from reaching its refund path.
  • Fixed an issue where Renewed society account names with a society prefix addressed the wrong account.
  • Fixed an issue where duplicate QBCore grade keys appeared as separate ranks.
  • Added read-only vehicle storage searches for supported SMX inventory installations.
  • Fixed an issue where Jaksam ESX weapon rewards or removals reported success without changing the player's weapons.
  • Fixed an issue where QB vehicle keys used an incompatible event or an untrimmed plate.
  • Fixed an issue where valid interaction conditions were ignored across resources.
  • Fixed an issue where job setup errors lost their actual explanation or a pending rename restored the previous job identity.
  • Fixed an issue where ESX Legacy Addons 1.16 or newer overwrote restored hunger and thirst after revival.
  • Fixed an issue where rejected QB or Qbox item removals were reported as successful, or Qbox checks missed matching item stacks.

Other Changes

  • Changed the shipped default language to English while preserving deliberately configured languages.
  • Improved recovery of transient API read failures with a limited number of retries.
  • Improved compatibility with the renamed Job Creator resource while preserving its saved data identities.
  • Fixed an issue where Quasar item cleanup tried to register a missing callback.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/renewed.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/qs.lua
  • sky_base/config/integration/inventory/smx.lua
  • sky_base/config/integration/phone/roadphone.lua
  • sky_base/config/integration/vehiclekeys/qb.lua
  • sky_base/config/integration/voice/_init.lua
  • sky_base/config/integration/voice/pma.lua
  • sky_base/config/integration/voice/saltychat.lua
  • sky_base/config/integration/voice/yaca.lua
  • sky_base/config/integration/weather/cd_easytime.lua
  • sky_base/config/integration/weather/custom.lua
  • sky_base/config/integration/weather/esx_weather.lua
  • sky_base/config/integration/weather/native.lua
  • sky_base/config/integration/weather/qb-weathersync.lua
  • sky_base/config/integration/weather/renewed.lua
  • sky_base/config/integration/weather/weathersync.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.47.01.48.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

1. Back up and stop the server

These steps update sky_base from 1.47.0 to 1.48.0. If you are on an older version, complete its earlier update steps first.

  1. Download 1.48.0 and extract the ZIP on your computer.
  2. Make a full backup of your server files and game database. Also keep a separate copy of the installed sky_base folder.
  3. Stop the server before replacing files. Put away equipped custom weapons first. Keep the backup until the update has been checked.

If you also install one of the job updates, complete its Jobs Base and job-specific instructions before restarting.

2. Copy the new files

Use the files from the 1.48.0 download throughout these steps. All paths below are inside your installed sky_base folder.

  1. Delete the old source/ folder. Copy the complete new source/ folder into its place, including its interface files.
  2. Replace fxmanifest.lua with the file from the same download.
  3. Replace the complete config/locales/ folder with the new one. If you changed any wording, open the backed-up language file beside the new file and copy your edited text into the matching entries. Keep the new translation keys and folders.
  4. Keep your existing config/config.lua; make only the settings changes described in step 3 below. Do not overwrite your configured jobs or locations with the download's defaults.

Copy the changed files under config/framework/ and config/integration/ shown in Changed Files to the same paths in your installed resource. Include the new config/integration/weather/ folder. If you have customized any of these adapters, use the adapter instructions in step 3 before replacing them.

3. Check your settings

Base settings are changed in files, not in /jobconfig.

  1. Open your installed sky_base/config/config.lua. Keep your framework, inventory, banking and other existing selections. Keep your chosen locale; the new English default does not require changing a German server to English.
  2. Find the existing Config = { table. Add the following line inside that table, for example directly below the fuel = ... line. Keep the comma at the end. If weather already exists, edit that entry instead of adding a second one.
weather = "auto",
  1. Save the file. Start your weather resource before Base. Automatic selection checks CD EasyTime, Renewed, ESX Weather, QB WeatherSync, WeatherSync, then native weather.

Only if using QB WeatherSync or CD EasyTime with local weather: complete the provider changes in Weather integrations. Adding sky_weather_pause '1' alone does not install those changes.

Only if you customized a provider adapter: open your backed-up adapter beside the new file at the same path. Use the new file as the starting point and transfer only your own integration changes. Do not restore the entire old adapter, because that would remove this update's fixes. Leave the existing inventory selection in place for SMX; there is no new "smx" selector.

Only if a custom integration used the old Activities weather settings: follow the same weather guide to move the provider choice to Base. A custom provider also needs its implementation in config/integration/weather/custom.lua. Ordinary servers do not need to create this integration.

4. Update database, items and models

Nothing to import for Base. This version needs no new SQL, inventory items or models. Keep your database and provider account configuration. Follow the separate Jobs Base database step if you are also updating Jobs Base.

5. Start the server and check

  1. Finish the file copies, required Lua edits and database steps, then start the server. Start the framework, database connector and your selected inventory/weather/phone/banking/voice/key providers first. Start sky_base 1.48.0, then sky_jobs_base 1.51.0, then the installed jobs. Wait for database updates to complete. If used together, start DOJ 0.6.0 before Police 1.40.0, and Ambulance 2.47.0 before Crime 0.11.0.
  2. Check the server console for startup or database errors. If an error appears, resolve the first error before testing further. Check that this resource reports version 1.48.0.
  3. Reconnect so the new interface and models load. If step 3 listed in-game settings, open the named configurator, make those changes and save. Then check your saved jobs and the features you use before reopening the server to everyone.

What to check for this resource: Open a job tablet and check your radio key. Test the inventory, bank and vehicle keys used on your server. If using local weather, check that it returns to normal when the activity ends.

Version 1.47.0

Highlights

  • Added support for stackable dirty-money items on QBCore, including payments that use several inventory slots.
  • Fixed an issue where CodeStudio license actions could fail to issue a license or handle an offline character.
  • Fixed an issue where Sky Phone number changes were unavailable, and added validation before charging for a number change.

Notable Changes

  • Added server-authorized vehicle key grants and removals for supported QB and Jaksam key providers.
  • Added character height to shared identity information when the active framework stores it.
  • Fixed an issue where existing okok society accounts could be rejected or banking operations could appear successful without a confirmed result.
  • Fixed an issue where supported external billing providers could reject an invoice without showing the submission failure.
  • Fixed an issue where rejected item or weapon rewards were reported as successful.
  • Fixed an issue where newly registered inventory items and their labels could remain missing from the current item catalogue.
  • Fixed an issue where ground-placed interaction objects could float after streaming, and corrected their full placement rotation.

Other Changes

  • Improved database inspection for resources with large schemas so startup checks can include all columns without oversized-result warnings.
  • Improved shared job definition updates so unchanged rank data is preserved without unnecessary rewrites.
  • Updated the bundled default language to German while keeping existing server language choices configurable.
  • Updated help key labels to use straight text.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/okok.lua
  • sky_base/config/integration/billing/codemv2.lua
  • sky_base/config/integration/billing/companymanager.lua
  • sky_base/config/integration/billing/fd.lua
  • sky_base/config/integration/billing/groot.lua
  • sky_base/config/integration/billing/quasar.lua
  • sky_base/config/integration/billing/synz.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/license/cs.lua
  • sky_base/config/integration/phone/_init.lua
  • sky_base/config/integration/phone/client/sky_phone.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/vehiclekeys/server/_init.lua
  • sky_base/config/integration/vehiclekeys/server/qb.lua
  • sky_base/config/integration/vehiclekeys/server/vehicles_keys.lua
  • sky_base/config/locales/*
  • sky_base/config/qb_money.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.46.01.47.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare

These instructions cover sky_base 1.46.0 → 1.47.0. Complete earlier applicable migrations when coming from an older version. Back up the database, resource folders, custom settings/translations and saved job data. Test on staging and stop the server for file replacement. Start the framework, database connector and selected inventory, keys, license, phone, banking and UI providers first, then Base 1.47.0, then Jobs Base 1.50.0 and wait for successful initialization. Start DOJ 0.5.0 before Police 1.39.0 for shared catalogue and court features, and Ambulance 2.46.0 before Crime 0.10.0 when using their medical integration. Mechanic 1.36.0 and Fire 1.18.0 follow both libraries. Treasure Hunt 1.1.0 and Pets 1.1.0 follow Base and their own listed dependencies. Install and start only resources you use.

  1. Replace files

Use the complete 1.47.0 customer package. Delete the entire sky_base/source/ folder and insert the new one, then replace sky_base/fxmanifest.lua from that same download. Refresh the complete sky_base/config/locales/ tree and merge your translations while keeping your chosen language.

Merge config/config.lua, add config/qb_money.lua, and update every supplied framework, banking, billing, inventory, license, phone and server vehicle-key adapter listed in Changed Files. Install the new config/integration/phone/_init.lua, client Sky Phone adapter and all three server vehicle-key files. Preserve deliberate custom integration branches and schema mappings, while retaining the supplied fixes.

Use the source folder and manifest together even when diagnostics are disabled. If an older profiler package changed files outside source/, restore those files from the current package once and reapply your own settings; future profiler-only updates change only source Lua and the manifest.

  1. Merge settings

All Base settings remain file-based. /jobconfig manages none of the Base language, provider, currency or dirty-money values.

Language: In sky_base/config/config.lua, Config.locale changes from the old shipped "en" to "de". Keep "en" or another supported language if that is your server's choice; Sky job resources that inherit Base's locale use this shared selection. Treasure Hunt keeps its own Config.Locale choice.

QBCore dirty money: Add the complete new sky_base/config/qb_money.lua file; it did not exist previously:

Config.QBBlackMoney = {
    mode = "account",
    item = "black_money",
    worthKey = "worth",
}

The previous QB adapter's editable choices were black_money_mode = "account", black_money_item = "markedbills" and black_money_worth_key = "worth"; move any custom choices to the new Config.QBBlackMoney.mode, .item and .worthKey fields. The new default mode = "account" retains QB's existing black-money account and does not require an inventory item. Optional mode = "item" counts one configured item as one dollar; register that exact item in your selected inventory first. Optional mode = "markedbills" requires item = "markedbills", worthKey = "worth" and the provider's unique bags with worth metadata. These modes are alternatives: balances are not combined, and switching modes does not convert old money. Qbox's separate handling is unchanged.

Society banking: Config.banking = "auto" is unchanged; this release adds explanatory comments, not a new default. If your society balances belong to okok's own society tables, select Config.banking = "okok" and start okokBanking before Base. If okok uses ESX addon accounts (UseAddonAccount = true or SocietyResource = "esx_addonaccount"), select Config.banking = "esx" and start the loaded shared-account provider before Base. Configured job accounts must already exist. Automatic detection follows started resources and cannot inspect private okok account ownership. Keep existing balances and provider SQL. Config.billing = "okok" can remain independent of the society banking selection.

Licenses and optional providers: Config.license = "auto" and the existing Config.Licenses.catalog default { { type = "firstaidcourse", label = "First Aid Course" } } remain unchanged; CodeStudio guidance is comment-only. When using CodeStudio, start cs_license first, prepare its vendor card templates and inventory items, and use their exact item names in the catalogue and any first-aid license setting. Job badges use the job name. No mandatory new Sky item is introduced. Keep your current inventory, key and other provider selections; start the selected providers before Base. Custom frameworks can supply character height through the updated custom bridge; a framework without stored height leaves it unavailable.

Sky Phone: Number changes need a matching Phone package that exposes both number-change and number-validation support. The current matching Phone implementation is 1.1.7; do not assume an older package supports these actions from its version number alone. Phone is maintained separately from this release set. Update all three supplied Sky Phone/common phone adapters together.

Reward compatibility: Treasure Hunt 1.1.0 event claims require Base 1.47.0 so a rejected item/weapon grant is returned to the claim workflow. This change adds no new reward setting.

Optional profiling remains disabled by default. To enable it for a support investigation, put setr sky_profiler 1 in server.cfg before the Sky ensure lines and perform a full server restart. Start a recording manually with profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-20261014.json; choose a new filename for every capture. Disable it with setr sky_profiler 0 followed by another full server restart. This is not a /jobconfig value, and neither recording nor upload starts automatically.

  1. Database, items and assets

SQL: This Base update adds no table, column or manual SQL migration. Keep the existing schema and migration policy; the improved inspection remains part of normal startup.

Items and images: No new mandatory inventory item or image is added. Only the optional QBCore item/marked-bill mode and optional CodeStudio provider setup require the matching existing/custom inventory definitions described in the settings step. This update does not convert dirty-money balances or create society accounts.

Assets and permissions: No new Base streamed model, map or permission migration is required. Existing configured interaction objects continue to use their own GTA/custom models. Preserve job records, balances and stored grants.

  1. Restart and check

Perform a full server restart to load the new manifest/file lists, then reconnect clients. Start the framework, database connector and selected inventory, keys, license, phone, banking and UI providers first, then Base 1.47.0, then Jobs Base 1.50.0 and wait for successful initialization. Start DOJ 0.5.0 before Police 1.39.0 for shared catalogue and court features, and Ambulance 2.46.0 before Crime 0.10.0 when using their medical integration. Mechanic 1.36.0 and Fire 1.18.0 follow both libraries. Treasure Hunt 1.1.0 and Pets 1.1.0 follow Base and their own listed dependencies. Install and start only resources you use. Check actual installed versions, successful Jobs Base initialization and the first startup/database error before gameplay checks.

On staging, test login and identity height if stored, the selected inventory and any live item registration. On QBCore, test the selected dirty-money mode, including multiple slots where relevant, and confirm that a rejected item or weapon reward does not appear successful, without altering real balances to force a test. With CodeStudio, verify license issuance, removal and an offline character; verify the actual vendor item/template names. With supported QB/Jaksam keys, verify grant/removal and provider restart behavior.

If using Sky Phone, test an allowed number change and reject a taken/reserved number before charging. Check the resulting SIM/device number and payment; a changed display alone is insufficient. With okok/ESX society banking, check the actual existing account, debit/credit and player balance. With external billing, verify the rejection display and the provider's actual paid state; invoice submission alone does not establish settlement. For configured props, check ground placement, full rotation and removal when the location or owner stops. Investigate unknown banking or billing outcomes before retrying; do not reset balances or jobs.

Version 1.46.0

Highlights

  • Added Lation UI progress bars and CodeM Supreme Banking integration.
  • Improved phone dispatch integration so supported call providers report acceptance and call completion to the dispatch centre.
  • Added optional static props for configured interaction locations.

Notable Changes

  • Added ZSX UI V2 progress bars, notifications and interaction prompts.
  • Fixed an issue where accepting a faction invitation could fail after the player's job had already changed.
  • Fixed initial tuning saves for owned Qbox vehicles with empty saved properties, while preserving existing vehicle data.
  • Fixed native ESX weapon restoration to retain ammunition, components and tint.
  • Improved job and gang updates to retain unaffected memberships and sparse framework grades.
  • Fixed item and command registrations remaining attached to resources after they stopped or restarted.
  • Fixed CodeM V2 inventory queries failing when the provider returned no matching slots.
  • Fixed Sky Ambulance death checks to use the replicated player state without requiring its death export.

Other Changes

  • Improved startup warnings so migration registration is reported only when overdue.
  • Improved notification queuing and repeated interaction prompts.
  • Added opt-in callback diagnostics for investigating delayed or failed requests.
  • Added a death-state diagnostic command to distinguish incomplete job initialization from missing Ambulance exports.
  • Changed unsupported CodeM Inventory V2 item-update guidance from errors to warnings.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/functions.lua
  • sky_base/config/integration/banking/codem-supreme-banking.lua
  • sky_base/config/integration/helpnotify/ZSX_UIV2.lua
  • sky_base/config/integration/helpnotify/default.lua
  • sky_base/config/integration/inventory/codemv2.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/vrp.lua
  • sky_base/config/integration/notification/ZSX_UIV2.lua
  • sky_base/config/integration/phone/client/sd.lua
  • sky_base/config/integration/phone/codem.lua
  • sky_base/config/integration/phone/gks.lua
  • sky_base/config/integration/phone/lb.lua
  • sky_base/config/integration/phone/sd.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/progress/ZSX_UIV2.lua
  • sky_base/config/integration/progress/lation_ui.lua
  • sky_base/config/locales/*
  • sky_base/config/vehicle_storage.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.45.11.46.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare

These instructions cover sky_base 1.45.1 → 1.46.0. Complete applicable earlier migrations when upgrading from an older version. Back up the database, resources, framework files, custom configuration/translations and saved /jobconfig/Creator data. Test on staging and stop the server for replacement. Install the coordinated versions for your installed resources. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then Base 1.46.0 and Jobs Base 1.49.0. Start DOJ 0.4.0 before Police 1.38.0 for their shared catalogue and court workflows. Start Ambulance 2.45.0 before Crime 0.9.0 when using their medical integration. Mechanic 1.35.0 and Fire 1.17.0 follow both libraries. Include only installed resources.

  1. Replace files

Use the complete 1.46.0 customer package. Delete the entire sky_base/source/ folder and insert the new one, then replace sky_base/fxmanifest.lua from the same package. Refresh the complete sky_base/config/locales/ tree and merge custom translations. Preserve your selected language. Do not restore an older bootstrap or merge generated interface files.

Merge config/config.lua, update the supplied ESX/QB/Qbox framework bridges, config/vehicle_storage.lua, and the supplied inventory, phone and built-in help adapters listed above. Add the new banking, progress, notification, help and client-phone adapters from this package. Preserve deliberate schema mappings and custom providers, but keep updated supplied adapter logic.

Merge the updated supplied config/functions.lua, including the Sky Ambulance branch of Functions.IsPlayerDead, while preserving intentional custom integration branches.

  1. Merge settings

Base remains file-based; /jobconfig does not manage Base provider selection. No existing default is changed: Config.progressbar = "auto", Config.notification = "default", Config.helpnotify = "default" and Config.banking = "auto" remain. New choices include Config.progressbar = "lation_ui", Config.progressbar = "ZSX_UIV2" and Config.banking = "codem-supreme-banking". ZSX notification choices are "ZSX_UIV2" and "ZSX_UIV2_default"; help choices are "ZSX_UIV2" and "ZSX_UIV2_help". Keep intentional provider selections; automatic detection can select a newly started supported provider. For example, add these assignments after the existing Config table if selecting ZSX:

Config.progressbar = "ZSX_UIV2"
Config.notification = "ZSX_UIV2"
Config.helpnotify = "ZSX_UIV2"

Start the selected provider before Base. Installing an optional provider is unnecessary when retaining another supported selection. ZSX supports player cancellation; do not assume a programmatic stop export. Phone call observation depends on the selected provider's actual call API; configured dispatch access alone does not establish call acceptance. Retain existing phone configuration. Install Mechanic 1.35.0 together with Base 1.46.0 for the Qbox initial-property save correction. Valid saved vehicle properties remain intact; malformed nonempty data needs its original error corrected.

When merging a custom config/functions.lua, update only the existing elseif GetResourceState("sky_ambulancejob") == "started" then branch in Functions.IsPlayerDead. Replace:

return exports["sky_ambulancejob"]:isDead()

with:

return Sky.FW.GetPlayerState("skyAmbulanceDead") == true

Keep the surrounding framework checks and intentional custom/provider branches. Leaving the old return retains the export dependency. No new setting or default is introduced.

Optional profiling remains off by default. If support requests it, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, perform a full server restart, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-release-20261008.json with a new filename for each capture. Disable it with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting; no recording or upload starts automatically.

  1. Database, items and assets

SQL: No new Base table or column and no manual SQL change. Keep your existing schema and automatic/manual migration policy. Items: No new item definitions or registrations. Assets: No new inventory images or streamed models; optional location props use configured existing GTA/custom models, whose own resource must be installed. Do not clear working vehicle records or saved jobs to activate a fix.

  1. Restart and check

Perform a full server restart to reload changed manifests and file lists, then reconnect clients. Start the framework, database connector and selected inventory, phone, banking and UI providers first, then Base 1.46.0 and Jobs Base 1.49.0. Start DOJ 0.4.0 before Police 1.38.0 for their shared catalogue and court workflows. Start Ambulance 2.45.0 before Crime 0.9.0 when using their medical integration. Mechanic 1.35.0 and Fire 1.17.0 follow both libraries. Include only installed resources. Check actual installed versions and the first startup/database error before testing.

Check login, native job/gang updates and the selected inventory/provider. If using ZSX or Lation, test progress completion and cancellation; check notifications and help for ZSX. With an integrated phone, place and accept a test service call and confirm that its dispatch entry follows the real call. On Qbox, test tuning and garage retrieval on an already-owned vehicle with naturally empty properties, retaining plate, fuel and damage. Do not empty a valid record to force this path. Optional props must disappear when their location is removed or the owner stops. Callback diagnostics observe requests; stopping the recording does not cancel the request.

With Sky Ambulance installed, check interaction blocking while the staging character is alive and dead, and inspect the first error if its death state is unavailable. If support needs startup evidence, run sky_deathdiagnose in both F8 and the server console. It reports resource versions/states and Jobs Base readiness; the client also distinguishes unavailable Ambulance exports from valid false/nil results. It does not restart resources or revive a player.

Version 1.45.1

Highlights

  • Added support for ZSX UI V2 progress bars, notifications and interaction prompts.
  • Improved startup migration checks so slow initialization can finish without a fixed registration deadline.

Notable Changes

  • Changed startup migration failures to remain visible while allowing unrelated script functions to initialize.
  • Fixed an issue where accepting a faction invitation could fail after the player's job had already changed.
  • Fixed an issue where tuning could fail on owned Qbox vehicles that had no saved vehicle properties yet.
  • Fixed an issue where normal startup could show a migration-registration warning before registration was overdue.

Other Changes

  • Updated the release package to keep the shared bootstrap and callback files editable for support.
  • Added optional callback diagnostics to help support investigate delayed or failed script responses.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/integration/helpnotify/ZSX_UIV2.lua
  • sky_base/config/integration/notification/ZSX_UIV2.lua
  • sky_base/config/integration/progress/ZSX_UIV2.lua
  • sky_base/config/locales/*
  • sky_base/config/vehicle_storage.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.45.01.45.1

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare

These instructions cover sky_base 1.45.0 → the refreshed 1.45.1 package. If you installed an earlier 1.45.1 download today, download the current 1.45.1 package again and apply these steps. The manifest version stays the same, so the version number alone does not identify the refreshed package. Back up resources, the database, custom configuration, translations and saved Job Configurator/Creator data. Validate on staging and stop the server for replacement. Install the refreshed Base 1.45.1, then Jobs Base 1.48.1, then the matching updates for your installed jobs and Crime. Complete earlier migrations first when upgrading from an older version.

  1. Replace files

Use the complete 1.45.1 package. Delete the entire sky_base/source/ folder and insert its new version, then replace sky_base/fxmanifest.lua from the same package. Do not merge old generated interface files. Refresh the complete sky_base/config/locales/ tree and merge custom translations. Keep your existing selected language in sky_base/config/config.lua.

The dependency bootstrap ships as an editable file. Use the supplied file; do not restore an older custom bootstrap. Base also keeps its callback files editable for support. Install the source and manifest together.

Merge the provider choices in sky_base/config/config.lua and update the supplied framework bridges sky_base/config/framework/esx.lua, sky_base/config/framework/qb.lua and sky_base/config/framework/qbox.lua. Update sky_base/config/vehicle_storage.lua, preserving intentional garage schema mappings. Add the three supplied ZSX_UIV2.lua adapters under config/integration/progress/, notification/ and helpnotify/. Keep deliberate custom integrations; do not restore an older supplied bridge or storage implementation over these updates.

  1. Merge settings

Base settings remain file-based in sky_base/config/config.lua; /jobconfig does not manage them. No existing key or shipped default is changed. The existing defaults remain Config.progressbar = "auto", Config.notification = "default" and Config.helpnotify = "default". Keep your intentional selections.

New supported choices: Config.progressbar = "ZSX_UIV2" for progress bars; Config.notification = "ZSX_UIV2" for notifications or "ZSX_UIV2_default" for above-minimap notifications; Config.helpnotify = "ZSX_UIV2" for TextUI prompts or "ZSX_UIV2_help" for top-left help notifications. These names are case-sensitive. For all three standard ZSX views, put these assignments after your existing Config = { ... } table in this file, preserving its other values:

Config.progressbar = "ZSX_UIV2"
Config.notification = "ZSX_UIV2"
Config.helpnotify = "ZSX_UIV2"

Start the installed ZSX_UIV2 provider before Base when selecting it. Existing progress auto selection can now detect a started ZSX provider; notification and help defaults still use Sky's built-in views. No provider installation is required if you keep another supported selection. ZSX supports player cancellation; do not assume it provides a programmatic stop export.

Keep saved job configuration, jobs, grades and locations. No configurator import or reset is required. Install the refreshed Mechanic 1.34.1 with this refreshed Base package for the Qbox first-save correction. This preserves existing vehicle ownership and stored properties; it does not repair malformed nonempty property data.

Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart the server, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-startup-hotfix.json. Disable with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting; no recording or upload starts automatically.

  1. Database, items and assets

SQL: No new table, column or manual SQL update is introduced by this patch. Existing failed migrations still need their original database error repaired; continuing startup does not create a missing schema. Keep the existing automatic/manual migration policy. Do not replay a full import, clear tables, force success markers or reset saved job/Creator data. Items: No new definitions or inventory registrations. Assets: No new item images, models or stream assets; keep existing assets. Earlier release requirements still apply for older installations.

  1. Restart and check

Perform a full server restart after replacement so the changed manifests and file lists are reloaded. Start the framework, database connector and selected providers first, then Base 1.45.1, Jobs Base 1.48.1 and the installed consumers. Unrelated clothing, vehicle and map packs can remain after Sky in server.cfg. Reconnect clients. Check normal login and the first Base and job startup messages. A long dependency wait now continues until initialization completes; it no longer aborts at 60 seconds. Database migration warnings remain actionable, and failure to read saved settings remains a visible initialization error. Collect the first error, preceding lines and actual installed versions if a feature remains unavailable. If ZSX is selected, check its progress completion and player cancellation, notifications and help prompts. On staging, check a permitted faction invitation and confirm the resulting job. On Qbox, complete and save tuning on an already-owned vehicle with naturally empty properties, then store and retrieve it through your configured garage. Keep the existing plate, fuel and damage data; do not clear a working record to trigger this path. Callback tracing is opt-in support observation; stopping a trace does not cancel the underlying request.

Version 1.45.0

Highlights

  • Added Sky Billing as the default invoice provider for supported Sky job workflows while keeping explicitly selected external billing providers available.
  • Improved large callback transfers by compressing eligible requests and responses before sending them.
  • Improved shared support for compatible job administration so native ranks, current memberships and duty state are retained during supported updates.

Notable Changes

  • Fixed an issue where the Job Configurator could miss completed version checks.
  • Fixed an issue where Quasar inventory items used the framework's item registration instead of Quasar's own usable-item support.
  • Fixed an issue where Jaksam society balance reads, deposits and withdrawals could use the wrong account name.
  • Fixed an issue where CodeM Billing V2 invoices without an explicit recipient did not use the issuing player.
  • Fixed an issue where custom phone apps could retain incorrect game input behavior with Sky Phone, CodeM Phone or YSeries.
  • Added inventory weight and capacity information for integrations that expose those values.
  • Fixed an issue where Hex society invoices selected a job from the society account instead of the issuing player's actual job.

Other Changes

  • Improved ESX job change synchronization so management updates follow confirmed framework changes.
  • Fixed an issue where selecting an existing Qbox secondary job as the primary job could be treated as hiring a new member.
  • Optimized database startup checks by inspecting migration indexes together.
  • Added an optional diagnostic setting that includes callback names in network event names.
  • Improved item catalog requests so integrations can request only the item definitions they need.
  • Improved managed job startup so the expected handoff to its runtime owner is retained without recording it as a failed registration.
  • Updated the version requirement guidance for the optional msk_core progress integration.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/compatibility/hex.lua
  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/jaksam.lua
  • sky_base/config/integration/banking/qb.lua
  • sky_base/config/integration/banking/renewed.lua
  • sky_base/config/integration/banking/sky.lua
  • sky_base/config/integration/billing/codemv2.lua
  • sky_base/config/integration/billing/hex.lua
  • sky_base/config/integration/billing/sky.lua
  • sky_base/config/integration/inventory/codem.lua
  • sky_base/config/integration/inventory/codemv2.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/native/vrp.lua
  • sky_base/config/integration/inventory/one.lua
  • sky_base/config/integration/inventory/origen.lua
  • sky_base/config/integration/inventory/ox.lua
  • sky_base/config/integration/inventory/ps.lua
  • sky_base/config/integration/inventory/qs.lua
  • sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/integration/phone/codem.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/phone/yseries.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/import.sql
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.44.11.45.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare

These instructions cover sky_base 1.44.1 → 1.45.0. Before replacing files, confirm that your customer download platform provides the versions below and check each downloaded resource's fxmanifest.lua; published documentation or a source tag alone does not establish that its customer download has been uploaded. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom config, translations and saved Job Configurator/Creator data. Validate the update on staging before applying it to your production server. Stop the server during replacement. Install Sky Base 1.45.0, then Sky Jobs Base 1.48.0, then the matching releases for your installed jobs and Crime. Keep provider dependencies and optional integrations compatible; preserve saved overrides and existing records.

  1. Replace files

Use the complete 1.45.0 release package. Delete the entire sky_base/source/ folder and insert its new version; do not merge old generated interface files. Replace sky_base/fxmanifest.lua from the same package. Refresh the complete sky_base/config/locales/ tree and merge your custom translations into the new files. Keep your selected shared language in sky_base/config/config.lua. Install the following shipped paths from that package, merging custom configuration into the updated public files rather than restoring old complete files:

  • sky_base/config/config.lua
  • sky_base/config/framework/compatibility/hex.lua
  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/jaksam.lua
  • sky_base/config/integration/banking/qb.lua
  • sky_base/config/integration/banking/renewed.lua
  • sky_base/config/integration/banking/sky.lua
  • sky_base/config/integration/billing/codemv2.lua
  • sky_base/config/integration/billing/hex.lua
  • sky_base/config/integration/billing/sky.lua
  • sky_base/config/integration/inventory/codem.lua
  • sky_base/config/integration/inventory/codemv2.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/native/vrp.lua
  • sky_base/config/integration/inventory/one.lua
  • sky_base/config/integration/inventory/origen.lua
  • sky_base/config/integration/inventory/ox.lua
  • sky_base/config/integration/inventory/ps.lua
  • sky_base/config/integration/inventory/qs.lua
  • sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/integration/phone/codem.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/phone/yseries.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/import.sql
  • sky_base/source/* — delete and reinsert
  1. Merge configuration

All Base settings are maintained in files. /jobconfig does not manage Base settings, providers or diagnostic options.

In sky_base/config/config.lua, the shipped default Config.billing changes from "auto" to "sky":

-- Previous shipped value
billing = "auto",
-- New shipped value
billing = "sky",

Sky Billing requires the matching Jobs Base 1.48.0 release and uses its central invoice storage. If you want to keep an external billing provider, retain its explicit provider value instead of replacing it with "sky". The added provider names in the adjacent comment are documentation changes, not new runtime configuration values or an automatic invoice import.

Also add the new startup option Config.hideCallbackEventNames beside Config.defaultCallbackTimeout in the same table:

-- Previous release: this option did not exist.
hideCallbackEventNames = true,

The default keeps callback names hidden in network event names. Set it to false only when you want callback names included for network diagnostics. Changing it requires a full server restart and clients to reconnect. It does not start a profiler recording. Config.defaultCallbackTimeout remains 300000; its value has not changed in this release.

Replace the updated framework and provider adapters from the same download, then port your own adaptations into the new copies. Do not restore complete old adapter files over the new ones. The executable adapter updates are in sky_base/config/framework/custom.lua, esx.lua, qb.lua, qbox.lua, vrp.lua and the new config/framework/compatibility/hex.lua; banking _init.lua, esx.lua, jaksam.lua, qb.lua, renewed.lua, sky.lua; billing codemv2.lua, hex.lua and new sky.lua; inventory codem.lua, codemv2.lua, jaksam.lua, native/esx.lua, native/qb.lua, native/qbox.lua, native/vrp.lua, one.lua, origen.lua, ox.lua, ps.lua, qs.lua, tgiann.lua; and phone codem.lua, sky_phone.lua, yseries.lua. These files contain provider code updates, not additional user option migrations. sky_base/config/init.lua, sv_config.lua and sv_functions.lua have no net release change.

Update all sky_base/config/locales/* from the download. Keep the existing global language selection and merge your custom translations into the refreshed locale files.

The additional adapter and item-catalog changes add no further Base configuration values or Job Configurator settings. Replace the updated config/framework/esx.lua, qb.lua and qbox.lua adapters and reapply your own provider modifications to the new files; their job administration implementation now ships inside the resource. Replace config/integration/billing/hex.lua as well. For Hex billing, keep Config.billing = "hex" only if you use that provider and ensure hex_jobscreator is started before sky_base, then sky_jobs_base is initialized before invoices are issued. The issuing player must have a cached job; the account name no longer selects the Hex job. For example, an issuer with job lspd and account society_police now bills through lspd. System issuers without a player job remain unsupported. These changes introduce no new provider parameters. Restart the updated Base and Jobs Base resources together using the existing dependency order and reconnect clients after Base is replaced.

Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, then restart the server. Run profiler record 1000, wait for profiler status to show that recording has completed, then run profiler saveJSON sky-release-profile.json. Disable diagnostics with setr sky_profiler 0 and another server restart. This is not a /jobconfig setting; no recording or upload starts automatically.

For an older explicit profiler package, replace any previously modified public config/provider/compatibility files with the supplied versions and merge your intentional customizations. In this release package, profiler preparation preserves all files outside source/ byte for byte except fxmanifest.lua; the functional config changes listed in this guide still require their own merge.

  1. Data, items and dependencies

SQL: Back up the active database before the release update. Base performs its own startup migrations for shared job definitions, the durable managed-job registry and private Creator log preferences. The Jobs Base Config.AutoExecuteQuery switch does not control these Base migrations. The new sky_base/import.sql is an optional additive manual schema mirror; a successful automatic setup does not need a duplicate manual import.

For a database team applying the Base schema mirror manually, the exact new file contains the following DDL. It creates missing definition/registry/log tables and adds missing registry or log fields; it does not import vendor jobs, members, invoices or balances. Existing ESX job tables are retained, while QB/Qbox receive the minimal shared job-definition projection. Creator owns its extended schema and compatibility setup separately.

-- Optional manual mirror of the automatically migrated durable framework registry.
-- Inherit the active database character set and collation; retain existing definitions.
-- Common ESX-shaped definition projection for QBCore/Qbox. These are the existing
-- native tables on ESX; never replace rows belonging to another creator.
CREATE TABLE IF NOT EXISTS `jobs` (
    `name` VARCHAR(50) NOT NULL,
    `label` VARCHAR(100) NULL,
    PRIMARY KEY (`name`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `job_grades` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `job_name` VARCHAR(50) NULL,
    `grade` INT NOT NULL,
    `name` VARCHAR(50) NOT NULL,
    `label` VARCHAR(100) NOT NULL,
    `salary` INT NOT NULL,
    `skin_male` LONGTEXT NULL,
    `skin_female` LONGTEXT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_sky_job_grades_level` (`job_name`,`grade`)
) ENGINE=InnoDB;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'job_grades' AND COLUMN_NAME = 'skin_male') = 0,
    'ALTER TABLE `job_grades` ADD COLUMN `skin_male` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'job_grades' AND COLUMN_NAME = 'skin_female') = 0,
    'ALTER TABLE `job_grades` ADD COLUMN `skin_female` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

CREATE TABLE IF NOT EXISTS `sky_managed_job_definitions` (
    `job_name` VARCHAR(64) NOT NULL,
    `owner` VARCHAR(64) NOT NULL,
    `origin` VARCHAR(16) NOT NULL,
    `definition` LONGTEXT NOT NULL,
    `baseline` LONGTEXT NOT NULL,
    `status` VARCHAR(16) NOT NULL DEFAULT 'pending',
    `last_error` TEXT NULL,
    `activation_stage` VARCHAR(32) NULL,
    `error_code` VARCHAR(64) NULL,
    `account_attempted` TINYINT(1) NULL,
    `member_updates` LONGTEXT NULL,
    `rename_state` LONGTEXT NULL,
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`job_name`),
    INDEX `idx_managed_owner` (`owner`)
) ENGINE=InnoDB;

SET @sky_managed_migration = IF(
    (SELECT DATA_TYPE = 'varchar' AND CHARACTER_MAXIMUM_LENGTH = 50 FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'job_name'),
    'ALTER TABLE `sky_managed_job_definitions` MODIFY `job_name` VARCHAR(64) NOT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

-- Private server-only override for the existing Creator audit route.
CREATE TABLE IF NOT EXISTS `sky_creator_log_settings` (
    `channel` VARCHAR(64) NOT NULL,
    `revision` BIGINT UNSIGNED NOT NULL DEFAULT 0,
    `enabled` TINYINT(1) NOT NULL DEFAULT 1,
    `webhook_mode` VARCHAR(8) NOT NULL DEFAULT 'default',
    `webhook_url` VARCHAR(2048) NOT NULL DEFAULT '',
    `routes` LONGTEXT NULL,
    PRIMARY KEY (`channel`)
) ENGINE=InnoDB;

SET @sky_creator_log_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_creator_log_settings' AND COLUMN_NAME = 'routes') = 0,
    'ALTER TABLE `sky_creator_log_settings` ADD COLUMN `routes` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_creator_log_migration FROM @sky_creator_log_migration;
EXECUTE sky_creator_log_migration;
DEALLOCATE PREPARE sky_creator_log_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'activation_stage') = 0,
    'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `activation_stage` VARCHAR(32) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'error_code') = 0,
    'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `error_code` VARCHAR(64) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'account_attempted') = 0,
    'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `account_attempted` TINYINT(1) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'member_updates') = 0,
    'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `member_updates` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'rename_state') = 0,
    'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `rename_state` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

SET @sky_managed_migration = IF(
    (SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'sky_managed_job_definitions') <> 'InnoDB',
    'ALTER TABLE `sky_managed_job_definitions` ENGINE=InnoDB', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;

Items and assets: This Base release adds no inventory item definitions or external item/image installation. Replace source/* and fxmanifest.lua together from the same download.

Providers: Keep your configured banking, inventory, phone and billing provider choices unless you deliberately change them. Inventory weight/capacity displays use the selected inventory's supported values; unavailable values are not invented. Sky Phone custom app input requires its compatible input ownership support. The optional Hex/Jaksam compatibility routes are limited integration interfaces, not a complete replacement of those vendor resources. Their original resource must be stopped for switch compatibility, external caller addresses must be adapted, and existing Hex/Jaksam banking or billing choices still require a validated replacement before stopping their provider.

Dependency order: Install matching Base 1.45.0 and Jobs Base 1.48.0 release files together, followed by affected job resources. Start the database/framework and any selected external providers first, then sky_base, sky_jobs_base and the job resources. If using the optional Jobs Creator, install a compatible Creator build as well; its UI and extended database setup are not supplied by this Base update. Restart the server and reconnect clients so both ends use the new callback transport.

No additional SQL, inventory definitions, item icons or streamed assets are introduced by these Base changes. The Base schema instructions in this guide still apply. Jobs Creator remains a separate unreleased resource.

  1. Restart and check

Start your framework, database connector and configured providers first, then Base, Jobs Base and the updated job resources in dependency order. Reconnect clients. After the release server restart, check that Base and Jobs Base report the expected installed versions and finish startup without database/readiness errors. Reopen /jobconfig and confirm that completed version checks appear, including DOJ when installed. Test one supported invoice through the selected provider, one Quasar usable item if used, and custom app typing/focus with the configured phone. Verify inventory weight/capacity against the actual inventory. For optional Creator workflows, verify current ranks, memberships, duty and society balances using that compatible build. These are recommended acceptance checks; no new live FiveM/provider acceptance is claimed by this publication.

With Hex selected, issue one society invoice from a connected staff member whose job ID differs from the society-account name and verify that Hex records the staff member's actual job. Confirm a personal invoice is rejected and a missing issuer job is reported. Confirm the selected inventory still supplies ordinary item labels and usable items after the adapters are replaced. If you use managed jobs, restart in dependency order and confirm that their runtime owner completes registration without a false startup failure. Source and isolated regression checks do not establish live Hex or FiveM acceptance.

If a check fails, keep the update on staging and collect the installed resource versions, selected provider, effective saved setting and the first relevant startup or action error. A successful source test, build or copy does not establish live FiveM, provider or customer acceptance.

Version 1.44.1

Highlights

  • Changed resource loading back to its previous behavior after the recent startup changes.

Notable Changes

  • Changed framework initialization back to its previous behavior for supported framework integrations.

Other Changes

  • Updated the bundled Hungarian translations.

Changed Files

  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.44.01.44.1

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare

These instructions cover sky_base 1.44.0 → 1.44.1. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom configuration and saved job/Creator data. Stop the server for the coordinated update. Install Base 1.44.1, then Jobs Base 1.47.1, then the matching hotfixes for your installed Sky jobs and Crime.

  1. Replace files

Use the 1.44.1 download. Delete the entire sky_base/source/ folder and insert the new folder. Replace sky_base/fxmanifest.lua from that same package. Refresh the complete sky_base/config/locales/ tree and reapply custom translations. Keep the new source and manifest together; do not merge old generated interface files into them.

Replace sky_base/config/framework/custom.lua, esx.lua, qb.lua, qbox.lua and vrp.lua from the new package. Merge intentional custom adapter changes carefully into the new versions; keeping an old adapter would retain the startup changes being rolled back.

  1. Keep settings

No configuration values or Job Configurator setting keys are added, removed or reset by this hotfix. Keep your current settings and saved overrides. Hungarian uses the existing Config.locale = "hu" setting in sky_base/config/config.lua; leave your selected language unchanged if you do not want to switch. Update the matching Base, Jobs Base and installed resource locale folders together. Base settings remain file-based; /jobconfig does not manage them.

Optional diagnostics stay disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-hotfix-profile.json. Disable with setr sky_profiler 0 and another restart. This is not a /jobconfig option; nothing is recorded or uploaded automatically.

  1. Data and assets

No new SQL import, item definition, inventory image or stream asset is required for this hotfix. Keep saved job/Creator data; do not reset or reimport it. Required earlier migrations still apply when upgrading from an older release.

  1. Restart and check

Start your framework, database connector and configured providers first, then Base 1.44.1, Jobs Base 1.47.1 and the updated jobs/Crime. Reconnect clients. Check normal login and the first startup errors from Base and the installed jobs. If startup still fails, collect the first error and its preceding log lines together with the installed versions.

Version 1.44.0

Highlights

  • Added Hex Jobs Creator support for employee-issued society invoices and legal society account balances, deposits and withdrawals.

Notable Changes

  • Fixed an issue where dependent resources could start with an incomplete framework connection or continue after a failed database update.
  • Improved company banking compatibility with clearer transfer results, account creation for supported banks and provider-specific account investigation support.
  • Fixed an issue where progress actions could finish too early with ESX or be cancelled incorrectly with older MSK Core versions.
  • Fixed an issue where saved interaction settings did not correctly update map icons, markers and NPC behavior.

Other Changes

  • Added Hungarian translations for shared notifications and command messages.
  • Fixed an issue where QBCore and Qbox duty updates could repeat unnecessarily or show an outdated duty state, and restored compatibility with legacy ESX duty handling.
  • Added Jaksam and AK47 storage integration for opening registered stashes and applying supported item restrictions.
  • Improved license holder listings to include the complete supported online and offline records while distinguishing unavailable providers from empty results.
  • Fixed an issue where typing in GKS Phone could leave its input focus incorrect.
  • Fixed an issue where Sky Phone custom apps could remain visible after their owning resource stopped.
  • Improved update notices with installed and available versions and a direct link to the matching changelog.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/banking/bablo.lua
  • sky_base/config/integration/banking/crm.lua
  • sky_base/config/integration/banking/fd.lua
  • sky_base/config/integration/banking/hex.lua
  • sky_base/config/integration/banking/pc.lua
  • sky_base/config/integration/banking/tgg.lua
  • sky_base/config/integration/banking/wasabi.lua
  • sky_base/config/integration/billing/hex.lua
  • sky_base/config/integration/inventory/ak47.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/license/_helpers.lua
  • sky_base/config/integration/license/codem.lua
  • sky_base/config/integration/license/custom.lua
  • sky_base/config/integration/license/esx.lua
  • sky_base/config/integration/license/main.lua
  • sky_base/config/integration/license/qb.lua
  • sky_base/config/integration/license/qbox.lua
  • sky_base/config/integration/license/standalone.lua
  • sky_base/config/integration/license/stg-walletv2.lua
  • sky_base/config/integration/phone/gks.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/progress/esx.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.43.01.44.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

These instructions cover sky_base 1.43.0 → 1.44.0. Complete earlier migrations first when upgrading from an older version. Back up your resources, database, customized provider/framework files and saved Job Configurator/Creator data. Stop the server for the coordinated update. Install Base 1.44.0, Jobs Base 1.47.0 and the matching installed jobs together; the new database startup contract requires matching Base and consumer files.

  1. Replace the package files

Use the 1.44.0 package. Delete sky_base/source/ completely and insert the new directory. Replace sky_base/fxmanifest.lua from that same package and refresh all of sky_base/config/locales/, merging custom translations back.

Replace every other file listed under Changed Files, merging deliberate local modifications into the new versions. This includes all five framework adapters in config/framework/, the listed banking and license adapters, the Jaksam/AK47 inventory adapters, the GKS/Sky Phone adapters and config/integration/progress/esx.lua. Add the new config/integration/billing/hex.lua and config/integration/banking/hex.lua. Merge the provider-list comments in config/config.lua. Do not keep an old selected framework adapter with the new source: the new startup checks require its completion marker.

  1. Merge configuration and saved overrides

Hungarian language

Refresh the complete resource locale folder from this download, including hu.lua, and carry over your custom translations. To use Hungarian, set the existing Config.locale value to "hu" in sky_base/config/config.lua; its supplied default remains "en". Keep your current value if you are not changing language. This is the shared Sky language setting, so update the matching Base, Jobs Base and installed job locale folders together. Jobs Base supplies the Hungarian /jobconfig translations too. No new /jobconfig language setting, saved-job reset or database migration is required for this language addition. Apply the normal restart and reconnect steps at the end of this update.

All Base configuration is maintained in files. /jobconfig does not manage Base values. No existing executable default in sky_base/config/config.lua changes, and no option is removed: Config.billing = "auto" and Config.banking = "auto" remain "auto". Their comments now also list "hex". No new configuration table is required.

Optional Hex Jobs Creator integration

Install/configure hex_jobscreator and its own dependencies, then start it before sky_base. To choose it explicitly, change Config.billing from your current provider or "auto" to "hex" in sky_base/config/config.lua. Independently set Config.banking to "hex" if Hex should own your society money. Keep your current explicit values when using other providers. Automatic detection selects Hex only when it is started and no earlier supported provider wins; use explicit selections on servers running several providers.

Hex billing requires a connected employee issuer and connected recipient, enabled job billing and the employee's permitted grade. Hex chooses the sending society from the issuer's current job; the Sky account argument cannot redirect that invoice. Personal/player invoices and unattended issuer-less bills are unsupported. Hex validates the amount and permissions; the calling resource still owns distance checks. Verify that an invoice actually appears in Hex before treating it as delivered.

Society operations use Hex's "legal" account. Both police and society_police address the police job. Illegal/black accounts, automatic society account provisioning and account investigations are not provided by this adapter. Configure the job's own banking bridge in Hex; no balances are moved between banks by switching this setting. With the unchanged Config.useSkyBankingFallback = false default, a refused Hex withdrawal remains refused. Keep this value false when operations must stay exclusively in Hex. An existing true value can still route failed operations for accounts not managed by Sky into the separate internal Sky ledger; it does not synchronize those balances. Custom coordinated transfers can request { strict = true } through the existing Sky shared-account API to use only the selected provider. Use the Hex billing instructions and society money instructions for the provider's required setup.

Framework startup and custom adapters

Start the database and framework before Base. The shipped ESX, QB, Qbox, vRP and custom adapters now signal completion. For a customized sky_base/config/framework/custom.lua, preserve your implementation while adding SkyFrameworkReady = true immediately before the client-side return and after all server-side definitions at the end. These markers were previously absent; set them only after synchronous setup has completed. Other customized framework adapters must likewise be merged with their new package versions.

Progress compatibility

The existing Config.progressbar default is unchanged. MSK progress now requires msk_core 4.1.0 or newer. "auto" skips an older or unrecognized version and selects another supported running provider. If your explicit value is "msk_core", update MSK or change it to a supported installed provider such as "esx" or "ox"; do not leave an incompatible explicit selection. ESX progress waits for the provider's actual finish/cancel callbacks.

Banking and licenses

Keep your existing banking selection unless deliberately changing providers. CRM, Bablo and Wasabi can create missing supported society accounts without resetting existing balances. Account listing, statements and freezing are separate capabilities: PC supports all three; TGG supports account listing and freezing but no integrated direct player debit/refund; CRM supports account listing only; Wasabi supports account listing and freezing but no statements; Bablo, FD and Hex do not expose account investigations through this release. Unsupported operations must not be presented as empty results or successful transfers.

For a custom license provider, sky_base/config/integration/license/custom.lua adds this optional member to SkyLicenseProviders.custom; preserve the comma after the preceding member:

Holders = function(license_type)
    -- Return ALL current holders (online and offline), or report unsupported.
    -- A successful result is { { identifier = "character-id" }, ... }.
    return nil, "license_holders_unsupported"
end

Previously that hook was absent. Leaving the new default reports unsupported; implement it only when the provider can return a complete snapshot. Do not substitute {} for a failed or partial lookup.

Optional performance diagnostics

Extra profiler information is disabled by default. If support requests a recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. Disable the extra information with setr sky_profiler 0 and another restart. This is not a /jobconfig setting. It does not record or upload anything automatically.

Keep source/ and fxmanifest.lua from the same package. Profiler processing changes only source Lua and the manifest. If an older profiler package modified files outside source/, restore those once from the current package and reapply your customizations.

  1. Apply SQL, inventory and asset updates

No new Base SQL schema, inventory item or stream asset is introduced. Hex retains its own provider setup, schema and account balances. This release does not import invoices, transfer existing balances or convert an economy. Do not reinstall the whole Base SQL dump over existing data. Apply the separately documented Jobs Base and job-specific SQL/item steps before reopening the server.

  1. Restart and verify

Start database/framework dependencies, selected inventory/billing/banking/progress providers, Base 1.44.0, Jobs Base 1.47.0, then matching installed jobs. Reconnect clients and check selected providers, manifest versions and the first startup error if initialization fails. Test duty changes, a storage interaction and completed/cancelled progress. Verify customized map icons, markers and NPCs after a saved edit. With Hex, issue a small society invoice between authorized online players, confirm it appears, then check a known society balance, a small deposit/withdrawal and insufficient-funds rejection. Check the provider's legal account rather than a different bank. With supported license listings, verify a known offline holder. A successful build does not replace these live checks.

Version 1.43.0

Highlights

  • Added support for CodeM Inventory V2, including inventory items, storage and vehicle inventories.
  • Added Lore Billing support for society invoices issued through the online staff member’s client.

Notable Changes

  • Fixed an issue where shared callbacks could time out when their requests or responses were not sent correctly.
  • Added an optional QBCore marked-bills mode that uses each bag’s stored cash value and preserves the remainder when spending part of it.
  • Fixed an issue where assigning a QBCore gang could fail for an offline member.
  • Fixed an issue where TGIANN Inventory item checks could reject an item that the player owned.

Other Changes

  • Improved QBCore and Qbox job and gang updates so connected Sky resources receive current membership changes.
  • Improved QBCore inventory updates so changing item details preserves the original slot and failed item removal is reported correctly.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/integration/billing/lore.lua
  • sky_base/config/integration/inventory/codemv2.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/qb-inv.lua
  • sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.42.01.43.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

If Fire Job is installed, take all breathing bottles out of vehicle bottle storage before stopping the old server. The Fire update cannot migrate its old live vehicle-state contents. Complete this pre-shutdown step before updating Base or Jobs Base.

These instructions cover sky_base 1.42.0 → 1.43.0. Complete earlier required migrations first if upgrading from an older release. Stop the server for the coordinated update and back up the resource, database, customized configuration and saved job/creator settings. Install Base 1.43.0 before Jobs Base 1.46.0 and the matching installed job releases.

  1. Replace the package files

Use the matching 1.43.0 package. Delete the old sky_base/source/ directory completely and insert the new directory. Replace sky_base/fxmanifest.lua from the same package. Refresh the entire sky_base/config/locales/ tree and merge your custom translations back. Replace the changed framework files config/framework/qb.lua and config/framework/qbox.lua, and the changed inventory adapters config/integration/inventory/native/qb.lua, qb-inv.lua and tgiann.lua. Add config/integration/inventory/codemv2.lua and config/integration/billing/lore.lua. Merge deliberate provider customizations into the new files. In config/config.lua, the provider comments gain CodeM V2 and Lore; the existing default values inventory = "auto" and billing = "auto" are unchanged.

Do not merge old generated interface files into the new source/ directory.

  1. Merge configuration and saved overrides

All Base values are file-based. /jobconfig does not manage Base configuration.

Optional CodeM Inventory V2

In sky_base/config/config.lua, choose inventory = "codemv2" to select V2 explicitly, or keep inventory = "auto". Automatic detection recognizes the actual codem-inventoryv2 resource before the legacy CodeM and Ox compatibility choices. Keep inventory = "codem" for the older CodeM inventory; these are separate providers. Start the framework/database, then codem-lib, codem-inventory-images, codem-inventoryv2, Base and Jobs Base. Do not run ox_inventory alongside V2, which provides that compatibility name itself. Existing installations of another inventory need no provider switch.

For V2, select CodeM Inventory V2 on the matching Sky Inventory Items page and merge its definitions into codem-inventoryv2/data/items.lua. Keep names, weights and stacking; use consume = 0 and omit the item client block for Sky-owned actions. Copy images to codem-inventory-images/images/<item>.png, then restart the inventory and Sky resources. For Fire's hydrualic_spreader item, copy the supplied hydraulic_spreader.png as hydrualic_spreader.png. Also merge WEAPON_SKY_HOSE into CodeM's existing Config.ignoreWeapons in codem-inventoryv2/shared/config.lua, preserving other entries. Follow the CodeM Inventory V2 setup guide for custom image hosting and provider limits.

Optional Lore Billing

Install and configure the existing lore-billing provider and its own database setup, then start it before Base. The verified Lore version requires Qbox (qbx_core), ox_lib, oxmysql and Renewed-Banking; install/start those dependencies first. This adapter does not add other framework support to Lore itself. In sky_base/config/config.lua, select billing = "lore", or retain "auto" when Lore is the intended detected provider. When several billing resources are running, explicit "lore" selects the intended one. Keep existing billing unchanged on servers using another provider.

Lore supports society invoices through an online issuer and recipient. Use a configured department society account and a positive whole amount. The adapter supports amounts from 1 to 2147483647 and nonempty UTF-8 reason/account text up to 255 characters; the calling job may impose a lower limit. Sending the request is not confirmation that Lore stored or paid the invoice: check its actual invoice list. Lore’s own permissions, payment processing and database remain the provider’s responsibility.

For Fire, the existing default Config.Billing.mode = "consent" does not use an external billing provider. Choose "framework" in sky_firejob/config/config.lua while preserving its existing range, maximum and reasons. With /jobconfig, use Fire’s Billing mode key fireBillingMode = "framework" and enable fireBillingEnabled; a saved override takes precedence over the Fire file. These are existing Fire settings, not new Base /jobconfig fields.

Optional QBCore marked bills

The new editable locals at the top of sky_base/config/framework/qb.lua are:

local black_money_mode = "account"
local black_money_item = "markedbills"
local black_money_worth_key = "worth"

Previously QBCore black money always used its black money account. The new shipped "account" mode preserves that behavior. Only if your server deliberately uses separate marked-bills bags, change black_money_mode to "markedbills"; set the item and metadata key to the actual inventory definition. Each unique single-item bag must store a positive whole cash value in info.worth or metadata.worth; stacked bags and invalid values are rejected. Merely switching this mode does not convert existing account balances or old item contents. Keep "account" unless your economy and inventory already use that bag model. No setting is removed.

Optional performance diagnostics

Extra profiler information is disabled by default. If support requests a recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. To disable the extra information, use setr sky_profiler 0 and restart. This is not a /jobconfig setting. Enabling it does not start recording or upload anything automatically.

Keep source/ and fxmanifest.lua from the same download even when diagnostics are disabled. Profiler processing changes only source Lua and the manifest; public configuration and provider files remain unchanged by that processing. If an older profiler package altered files outside source/, restore those once from the current download and reapply your own customizations.

  1. Apply SQL, inventory and asset updates

No Base SQL migration, new stream asset or automatic economy conversion is required. CodeM V2 users must install the definitions/images from its setup guide in their actual inventory; the adapter does not add missing items to that provider’s catalog at runtime. Lore’s own schema belongs to its existing installation instructions. Other inventories and billing systems require no new item or SQL step for this Base release.

  1. Restart and verify

Start the database, framework and selected inventory/billing providers, then Base 1.43.0, Jobs Base 1.46.0 and the installed matching jobs. Check the startup log and selected providers. Test a tablet callback and an item ownership check. On QBCore, verify gang assignment leaves the main job unchanged; if marked bills are enabled, test a partial spend and the remaining bag value. For CodeM V2, check item use, metadata and storage. For Lore, have authorized online staff issue a small society invoice to another online player and confirm it appears in Lore before treating delivery as successful.

Version 1.42.0

Highlights

  • Added eight placement choices for built-in Sky notifications while keeping the existing default position.

Notable Changes

  • Fixed an issue where ESX progress actions could run without their expected animation.
  • Fixed an issue where custom vehicle colours could use an incompatible saved format on older ESX versions.

Other Changes

  • Fixed an issue that caused database-migration waits to fail during startup, and improved related errors to identify the affected resource.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/integration/notification/default.lua
  • sky_base/config/integration/progress/esx.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.41.01.42.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

These instructions cover Base 1.41.0 → 1.42.0. Complete earlier update steps first when upgrading from an older version. Stop the server and back up the resource, database and customized files. Install Base 1.42.0 before Jobs Base 1.45.0 and the matching job releases.

  1. Replace the package files

Use the matching 1.42.0 download. Delete the old sky_base/source/ directory and copy the complete new directory. Replace sky_base/fxmanifest.lua and all of sky_base/config/locales/. Replace sky_base/config/integration/notification/default.lua and sky_base/config/integration/progress/esx.lua, merging any deliberate provider customizations. Merge the config.lua change described in this view instead of overwriting your server settings.

Keep source/ and fxmanifest.lua from the same download even with diagnostics disabled. Profiler processing changes only source Lua and the manifest; public configuration and provider files remain unchanged by that processing. If an older profiler download altered public files, restore those once from this download and reapply your own customizations.

  1. Merge configuration

All Base settings are file-based. /jobconfig does not manage Base configuration.

In sky_base/config/config.lua, add the following field inside the existing Config = { ... } table:

notificationPosition = "middle-left",

Config.notificationPosition was previously absent; the notification position was fixed. The new shipped value is "middle-left", preserving the previous default placement. Accepted values are "top-left", "top-center", "top-right", "middle-left", "middle-right", "bottom-left", "bottom-center" and "bottom-right". This affects only Config.notification = "default"; other notification providers control their own placement. Config.notification, Config.helpnotify and Config.progressbar keep their existing values. No setting or config block is removed, and no new provider selection is required for the ESX animation fix.

The ESX vehicle-colour correction uses the installed es_extended manifest version. Keep its version metadata accurate; do not change the version to disguise a customized framework. Standard ESX before 1.13 uses separate custom-colour fields, while 1.13 and later use RGB values in the main colour fields. No framework-source patch or reset of saved vehicles is required. Validate compatibility separately if your ESX fork changes that contract.

Optional performance diagnostics

Extra profiler information is disabled by default. For a support recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. To disable the extra information, set setr sky_profiler 0 and restart again. This is not a /jobconfig setting. Enabling it does not start recording or upload data automatically.

  1. Apply SQL, inventory and asset updates

No SQL migration, inventory-item registration or additional stream asset is required for this Base update. Keep existing vehicle data. The public provider files and built interface are installed with the package-file step.

  1. Restart and verify

Start the database, framework and selected external providers, then Base 1.42.0, Jobs Base 1.45.0 and the installed matching jobs. Check the startup log before admitting players. Test the configured built-in notification position, an ESX progress action including its animation and cancellation, and garage retrieval with both standard and custom vehicle colours. If startup reports a migration wait error, inspect the named waiting resource and the earlier database/startup errors; do not reset tables to hide the error.

Version 1.41.0

Install Base 1.41.0 before Jobs Base 1.44.0 and the matching job updates.

Highlights

  • Added separate choices for notifications and interaction prompts, allowing server owners to use the built-in Sky interface or a supported external provider.
  • Added support for more notification and text interfaces, including CP Notify, CodeM, HEX, Lation, Quasar and other supported providers.
  • Added seven progress-bar integrations, including CodeM Supreme, ATY UI v2, 17mov, Risk, Prism, FRKN and MSK.

Notable Changes

  • Fixed an issue where reusable Ox Inventory items could fail to run their action after the inventory accepted their use.
  • Improved individual item names so supported inventories can display the name of a specific item copy instead of its generic catalog name.
  • Fixed an issue where vehicles created through the HEX garage integration could have incomplete saved properties or retain an old plate inside their saved data.
  • Added support for updating registered Dispatch phone-app information while the server is running on LB Phone, LB Phone Unique and Sky Phone.

Other Changes

  • Added an optional compatibility patch for individual item names in the qb-inventory 2.0 interface.
  • Improved inventory compatibility checks so features requiring information on individual item copies can identify unsupported inventories before issuing an item.
  • Improved custom notification and interaction-prompt setup with separate editable integration files.

Changed Files

  • sky_base/config/README.md
  • sky_base/config/config.lua
  • sky_base/config/functions.lua
  • sky_base/config/integration/garage/hex.lua
  • sky_base/config/integration/helpnotify/17mov_Hud.lua
  • sky_base/config/integration/helpnotify/aty_ui.lua
  • sky_base/config/integration/helpnotify/brutal_textui.lua
  • sky_base/config/integration/helpnotify/codem-supreme-hud.lua
  • sky_base/config/integration/helpnotify/codem-textui.lua
  • sky_base/config/integration/helpnotify/custom.lua
  • sky_base/config/integration/helpnotify/default.lua
  • sky_base/config/integration/helpnotify/esx.lua
  • sky_base/config/integration/helpnotify/esx_textui.lua
  • sky_base/config/integration/helpnotify/hex.lua
  • sky_base/config/integration/helpnotify/jg-textui.lua
  • sky_base/config/integration/helpnotify/lation_ui.lua
  • sky_base/config/integration/helpnotify/msk_core.lua
  • sky_base/config/integration/helpnotify/okokTextUI.lua
  • sky_base/config/integration/helpnotify/ox_lib.lua
  • sky_base/config/integration/helpnotify/prims_hud.lua
  • sky_base/config/integration/helpnotify/qb.lua
  • sky_base/config/integration/helpnotify/qbox.lua
  • sky_base/config/integration/helpnotify/qs-textui.lua
  • sky_base/config/integration/helpnotify/risk-notify.lua
  • sky_base/config/integration/helpnotify/sky_hud.lua
  • sky_base/config/integration/helpnotify/wasabi_uikit.lua
  • sky_base/config/integration/helpnotify/zenit_hud.lua
  • sky_base/config/integration/inventory/ak47.lua
  • sky_base/config/integration/inventory/codem.lua
  • sky_base/config/integration/inventory/core.lua
  • sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/integration/inventory/jpr.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/one.lua
  • sky_base/config/integration/inventory/origen.lua
  • sky_base/config/integration/inventory/ox.lua
  • sky_base/config/integration/inventory/ox/usable.lua
  • sky_base/config/integration/inventory/ps.lua
  • sky_base/config/integration/inventory/qb-inv.lua
  • sky_base/config/integration/inventory/qs.lua
  • sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/integration/notification/17mov_Hud.lua
  • sky_base/config/integration/notification/RxNotify.lua
  • sky_base/config/integration/notification/Venice-Notification.lua
  • sky_base/config/integration/notification/aty_ui.lua
  • sky_base/config/integration/notification/aty_uikitv2.lua
  • sky_base/config/integration/notification/brutal_notify.lua
  • sky_base/config/integration/notification/codem-notification.lua
  • sky_base/config/integration/notification/codem-supreme-notification.lua
  • sky_base/config/integration/notification/core_notify.lua
  • sky_base/config/integration/notification/cp_notify.lua
  • sky_base/config/integration/notification/cs_hud.lua
  • sky_base/config/integration/notification/custom.lua
  • sky_base/config/integration/notification/default.lua
  • sky_base/config/integration/notification/esx.lua
  • sky_base/config/integration/notification/esx_notify.lua
  • sky_base/config/integration/notification/frkn-uikit.lua
  • sky_base/config/integration/notification/hex.lua
  • sky_base/config/integration/notification/lation_ui.lua
  • sky_base/config/integration/notification/msk_core.lua
  • sky_base/config/integration/notification/mythic_notify.lua
  • sky_base/config/integration/notification/okokNotify.lua
  • sky_base/config/integration/notification/ox_lib.lua
  • sky_base/config/integration/notification/prims_hud.lua
  • sky_base/config/integration/notification/prism_uipack.lua
  • sky_base/config/integration/notification/qb.lua
  • sky_base/config/integration/notification/qbox.lua
  • sky_base/config/integration/notification/qs-interface.lua
  • sky_base/config/integration/notification/risk-notify.lua
  • sky_base/config/integration/notification/rtx_notify.lua
  • sky_base/config/integration/notification/sky_hud.lua
  • sky_base/config/integration/notification/sky_notify.lua
  • sky_base/config/integration/notification/vms_notifyv2.lua
  • sky_base/config/integration/notification/wasabi_notify.lua
  • sky_base/config/integration/notification/wasabi_uikit.lua
  • sky_base/config/integration/notification/zenit_hud.lua
  • sky_base/config/integration/phone/lb-unique.lua
  • sky_base/config/integration/phone/lb.lua
  • sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/integration/progress/17mov_Hud.lua
  • sky_base/config/integration/progress/aty_uikitv2.lua
  • sky_base/config/integration/progress/codem-supreme-hud.lua
  • sky_base/config/integration/progress/frkn-uikit.lua
  • sky_base/config/integration/progress/helpers/normalize.lua
  • sky_base/config/integration/progress/msk_core.lua
  • sky_base/config/integration/progress/prism_uipack.lua
  • sky_base/config/integration/progress/risk-notify.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/install/qb-inventory/README.md
  • sky_base/install/qb-inventory/item-labels.patch
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.40.11.41.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

Install Base 1.41.0 before Jobs Base 1.44.0 and the matching job updates. These instructions cover 1.40.1 → 1.41.0; complete earlier migrations first when upgrading from an older version. Stop the server and back up the resource, database, customized files and saved configurator/creator data.

  1. Replace the package files

Install the matching 1.41.0 download. Update every path in Changed Files, delete and reinsert sky_base/source/*, and replace sky_base/config/locales/* completely. Remove the exact paths under Removed Files and apply any listed renames. Preserve unrelated files, writable data and custom assets; merge the configuration changes in this tab into your customized public files.

Replace source/* and fxmanifest.lua from the same download even when optional diagnostics remain off. Profiler instrumentation is confined to Lua in source/ and the generated manifest. Public configuration, integration and compatibility files match the uninstrumented source; their functional changes are listed separately for this release. If an older profiler package modified public files, restore those once from the clean new package and reapply your own edits.

  1. Merge configuration

All Base settings are maintained in sky_base/config/config.lua and the public integration files. /jobconfig does not manage them.

Setting in config/config.luaPrevious valueNew shipped valueAction
Config.notificationNo selection setting; built-in notifications"default"Add this field inside the existing Config table.
Config.helpnotifyNo selection setting; Ox TextUI when Ox was running, otherwise Sky"default"Add this field; use "ox_lib" to retain the previous Ox TextUI appearance.
Config.progressbar"auto""auto"Keep an explicit provider if you want to prevent a newly supported installed HUD from taking priority.

Add these fields inside the existing Config = { ... } table; do not replace the rest of your configuration:

notification = "default",
helpnotify = "default",

"default" uses the Sky interface. "auto" selects a supported provider at startup; start that provider before Base. Select a provider that depends on Base explicitly. Provider names are case-sensitive; the complete supported choices are listed beside each field in the new config/config.lua. Notification and help choices differ: for example, cp_notify is a notification provider, not a help provider. The new progress selections are codem-supreme-hud, aty_uikitv2, 17mov_Hud, risk-notify, prism_uipack, frkn-uikit and msk_core. Their cancellation and display options depend on the provider. Restart after changing a selection.

Notification and single-action help customizations previously placed in sky_base/config/functions.lua must move to the matching sky_base/config/integration/notification/custom.lua or sky_base/config/integration/helpnotify/custom.lua; implement the supplied template before selecting "custom". Multi-action help remains in config/functions.lua. Replace the new stock adapter files, or merge their behavior into your customized adapters. Keep the new manifest together with the integrations because it loads their shared progress helper and Ox usable-item support in the required order.

If you use qb-inventory 2.0 and want individual item names in its UI, the optional patch and instructions are shipped in sky_base/install/qb-inventory/. Back up that inventory, run the documented patch check from its directory, and apply only if the check succeeds. This is optional and is not a database migration. Other inventory interfaces must support their own per-item names. No Base setting is removed.

Optional performance diagnostics

Extra profiler information remains disabled by default. For a support recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart the server. In the server console, run profiler record 1000, wait for profiler status to report completion, then run profiler saveJSON sky-release-profile.json. Share that file when requested by support. Set setr sky_profiler 0 and restart again to disable the extra information. This is not a /jobconfig setting; enabling it does not start a recording or upload data automatically.

  1. Apply data and inventory updates

No database migration or new inventory item is required for this Base update. Keep existing vehicle records and their properties; the HEX correction affects subsequent vehicle creation and plate changes. Existing records are not recreated or reset.

  1. Restart and verify

Restart the database, framework and any edited inventory first, then Base, Jobs Base and the installed job resources. Confirm 1.41.0 and resolve startup errors before admitting players. Check your selected notification, interaction-prompt and progress providers, including completion and cancellation. Use a reusable Ox item and check individually named items if your inventory supports them. On HEX garages, create, park and retrieve a vehicle and verify its plate and saved properties. When using Dispatch phone-app updates, verify the selected supported phone provider.

Hotfix

Version 1.40.1

The combined hotfix contains Base 1.40.1, Jobs Base 1.43.1, Mechanic 1.29.1 and Ambulance 2.39.1. Install Base and Jobs Base before the job resources you use.

Highlights

  • Fixed an issue where duty updates for unemployed ESX players could repeat continuously and contribute to network overload, timeouts or disconnections.
  • Fixed an issue where saved vehicle extras were switched off during retrieval, including missing equipment on the Police Maverick helicopter.
  • Fixed an issue where actions using Ox or other supported progress bars could stop after the bar completed because their completion callback was lost.

Notable Changes

  • Fixed an issue where progress calls without an options table could fail, including Wasabi bar and circle actions.
  • Changed banking initialization to use the existing banking integration, removing the separate startup file requirement.

Other Changes

No additional changes.

Changed Files

  • sky_base/config/framework/esx.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/progress/esx.lua
  • sky_base/config/integration/progress/hex.lua
  • sky_base/config/integration/progress/jaksam.lua
  • sky_base/config/integration/progress/mythic.lua
  • sky_base/config/integration/progress/ox.lua
  • sky_base/config/integration/progress/qb.lua
  • sky_base/config/integration/progress/wasabi.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert

Removed Files

  • sky_base/config/banking_init.lua
Update InstructionsWhat to copy, what to keep and what to check1.40.01.40.1

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

These instructions cover 1.40.0 to 1.40.1. Complete earlier update instructions first when upgrading from an older version. Stop the server and back up the resource, database and customized files. Install Base 1.40.1 before Jobs Base 1.43.1, Mechanic 1.29.1 and Ambulance 2.39.1 when using those resources.

  1. Replace source and integration files

Delete the old sky_base/source folder and insert the complete replacement from the 1.40.1 package. Replace sky_base/fxmanifest.lua, sky_base/config/framework/esx.lua and sky_base/config/integration/banking/_init.lua. In sky_base/config/integration/progress/, replace esx.lua, hex.lua, jaksam.lua, mythic.lua, ox.lua, qb.lua and wasabi.lua. Merge any custom adapter or integration changes into the new files. Delete the obsolete sky_base/config/banking_init.lua; its initialization now lives in sky_base/config/integration/banking/_init.lua. Keep all other configuration and persistent data.

  1. Keep existing settings and vehicles

No configuration values, SQL, items or locales need migration. Base settings remain file-based and are not managed by /jobconfig. Keep saved vehicle records. If an affected vehicle was saved again with incorrect extras, restore its desired equipment once; the update preserves intentional disabled extras and cannot reconstruct an earlier selection.

  1. Restart and verify

Restart the server and confirm Base 1.40.1. Reconnect an affected player and check that job/duty updates settle. Complete and cancel an action with your configured progress provider. Park and retrieve a helicopter with mixed enabled and disabled extras after installing Jobs Base 1.43.1. If FXServer stays running during file replacement, stop the affected resources, run refresh after copying, then start them again so the new manifest is loaded. Check that the removed banking file produces no startup warning.

Version 1.40.0

Install Base 1.40.0 first. The new shared vehicle services use Jobs Base 1.43.0, Mechanic 1.29.0 and Police 1.32.0 together.

Highlights

  • Added a persistent vehicle identity shared by inspections and registrations, allowing records to stay with an owned vehicle when its plate changes.
  • Added registration of missing item definitions for supported ESX and QBCore inventories while preserving existing definitions by default.
  • Added persistent framework job definitions for compatible configurators so managed jobs can be restored after a restart.
  • Added creation of missing society accounts for managed jobs with supported banking providers while preserving existing balances.

Notable Changes

  • Fixed an issue where ESX society payments could update a detached account copy instead of the active society balance.
  • Fixed an issue where progress actions with an empty or incomplete animation setup could fail.
  • Improved Qbox player-state updates so death and restraint checks use the latest loaded character data.
  • Improved managed job grade changes by updating the affected online and offline memberships together.

Other Changes

  • Improved custom garage setup by sharing the vehicle-table mapping between saved tuning and the vehicle register.
  • Optimized expiring interaction hints to avoid starting repeated background workers.
  • Fixed an issue where looking up an unknown ESX item label produced unnecessary warnings instead of displaying its item name.

Changed Files

  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/integration/banking/_init.lua
  • sky_base/config/integration/banking/esx.lua
  • sky_base/config/integration/banking/qb.lua
  • sky_base/config/integration/banking/renewed.lua
  • sky_base/config/integration/banking/sky.lua
  • sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/integration/inventory/ox.lua
  • sky_base/config/integration/progress/ox.lua
  • sky_base/config/locales/*
  • sky_base/config/vehicle_storage.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert

Removed Files

  • sky_base/config/banking_init.lua — initialization is now included in sky_base/config/integration/banking/_init.lua.
Update InstructionsWhat to copy, what to keep and what to check1.39.01.40.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update

Install Base 1.40.0 first. The new shared vehicle services use Jobs Base 1.43.0, Mechanic 1.29.0 and Police 1.32.0 together. These instructions cover 1.39.0 → 1.40.0; complete earlier migrations first when upgrading from an older version. Stop the server and back up the resource, database, customized files and saved configurator/creator data.

  1. Replace the package files

Install the matching 1.40.0 package. Update every path in Changed Files, delete and reinsert sky_base/source/*, and replace sky_base/config/locales/* completely. Remove every exact path listed under Removed Files and apply any listed renames. Preserve unrelated files, writable data and your own custom assets; merge the configuration changes in this tab into customized public files.

Replace source/* and fxmanifest.lua from the same download even when optional diagnostics remain off. The profiler only instruments Lua inside source/ and adds its manifest entries; public configuration, integration and compatibility files must match the uninstrumented package. Apply the separate functional public-file changes listed for this release. If an older profiler package modified public files, restore those once from the clean new package and reapply your edits.

  1. Merge configuration

No values in sky_base/config/config.lua change. All Base configuration is maintained in files; /jobconfig manages none of it.

Merge the new schema function from sky_base/config/vehicle_storage.lua into any custom adapter. Previously the table mapping was embedded in tuning storage; it is now shared with the vehicle register. Standard mappings remain:

FrameworkTableOwner columnProperties columnModel column
ESXowned_vehiclesownervehiclevehicle
QBCoreplayer_vehiclescitizenidmodshash
Qboxplayer_vehiclescitizenidmodsvehicle

The shipped Sky.VehicleStorage.GetSchema() function is new. Copy its complete implementation from the new public adapter and reapply your actual table/column names there. Preserve custom read/write logic and Qbox's vehicle-provider integration.

The changed ESX, QBCore and Qbox framework adapters, banking adapters, inventory adapters and Ox progress adapter are functional updates, not new Config.* values. Update sky_base/config/integration/banking/_init.lua and the matching manifest. Remove the obsolete sky_base/config/banking_init.lua if present. Replace stock adapter versions or merge their changed functions into customized versions. ESX banking now updates the live society account. Inventory registration preserves existing definitions when requested; Ox Inventory and native Qbox inventories cannot create missing definitions through this registration path. Add those missing items to the inventory's item file. No existing Base setting is removed, renamed or reset.

Managed job definitions support compatible configurators on ESX, QBCore and Qbox. This Base update provides the shared support; it does not create departments or expose a new creator screen by itself. Existing departments are not adopted automatically. Missing society-account creation is supported by ESX addonaccount, qb-banking, Renewed-Banking and Sky internal banking. Keep the selected banking provider and existing balances. Unsupported account creation or an unavailable account must be resolved in that provider; do not enable a fallback to create a second account for the same managed job.

For Qbox servers using managed jobs, add set qbx:cleanPlayerGroups "false" to server.cfg before ensure qbx_core and restart the server. Qbox's documented default is "true"; disabling that startup cleanup preserves memberships while Base restores runtime job definitions afterward. This is a Qbox server convar, outside /jobconfig, and does not change a shipped Base default. See the official Qbox convar reference.

Optional performance diagnostics

Extra profiler information remains disabled by default. Normal use needs no diagnostic setting. For a support recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart the server. In the server console, run profiler record 1000, wait for profiler status to report completion, then run profiler saveJSON sky-release-profile.json. Share that file only when requested by support. Set setr sky_profiler 0 and restart again to disable the extra information. This is not a /jobconfig option; enabling it does not start a recording or upload data automatically.

  1. Apply data and inventory updates

The vehicle register uses the existing owned-vehicle table. With Jobs Base Config.AutoExecuteQuery = true, registry initialization can add its identifier column and unique index automatically. Before enabling inspections or registrations, back up that table and check the actual framework/garage mapping in sky_base/config/vehicle_storage.lua.

With automatic SQL disabled, select the active game database and run this upgrade. Keep owned_vehicles for standard ESX; change the first value to player_vehicles for standard QBCore/Qbox, or to the custom table returned by your adapter. This adds a nullable sky_registry_id CHAR(36) and uniq_sky_registry_id without replacing vehicle records:

SET @sky_vehicle_table = 'owned_vehicles';
SET @sky_registry_sql = IF(
    EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @sky_vehicle_table AND COLUMN_NAME = 'sky_registry_id'),
    'SELECT 1', CONCAT('ALTER TABLE `', REPLACE(@sky_vehicle_table, '`', '``'), '` ADD COLUMN `sky_registry_id` CHAR(36) NULL')
);
PREPARE sky_registry_migration FROM @sky_registry_sql;
EXECUTE sky_registry_migration;
DEALLOCATE PREPARE sky_registry_migration;
SET @sky_registry_sql = IF(
    EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @sky_vehicle_table AND INDEX_NAME = 'uniq_sky_registry_id'),
    'SELECT 1', CONCAT('CREATE UNIQUE INDEX `uniq_sky_registry_id` ON `', REPLACE(@sky_vehicle_table, '`', '``'), '` (`sky_registry_id`)')
);
PREPARE sky_registry_migration FROM @sky_registry_sql;
EXECUTE sky_registry_migration;
DEALLOCATE PREPARE sky_registry_migration;

Do not delete or regenerate existing registry IDs. A custom garage that replaces a vehicle row must preserve its ID, including during plate changes. No certificates are invented for old vehicles. The register currently supports the ESX, QBCore and Qbox vehicle-storage adapters and requires oxmysql; use OneSync for the physical vehicle workflow. There are no separate Base framework SQL files to import for this release.

Managed job storage

Base startup automatically creates sky_managed_job_definitions and restores the definitions stored there. This migration runs independently of Jobs Base Config.AutoExecuteQuery. Preserve this table, framework memberships and banking data when upgrading or restoring a backup. A failed framework activation remains pending for recovery; do not clear the saved definition to hide the error.

For administrators who provision schemas manually, create this new table in the active game database before starting Base. There is no additional Base SQL file to import. The table inherits the database character set and collation:

CREATE TABLE IF NOT EXISTS `sky_managed_job_definitions` (
    `job_name` VARCHAR(50) NOT NULL,
    `owner` VARCHAR(64) NOT NULL,
    `origin` VARCHAR(16) NOT NULL,
    `definition` LONGTEXT NOT NULL,
    `baseline` LONGTEXT NOT NULL,
    `status` VARCHAR(16) NOT NULL DEFAULT 'pending',
    `last_error` TEXT NULL,
    `member_updates` LONGTEXT NULL,
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`job_name`),
    INDEX `idx_managed_owner` (`owner`)
) ENGINE=InnoDB;

No Base item catalog needs a blanket replacement. Install the item definitions required by each updated resource for your actual inventory provider.

  1. Restart and verify

Start the framework, database and configured inventory before Base; start Jobs Base and job resources afterward. Confirm version 1.40.0 and no adapter/schema errors. Test an ESX society credit against the actual balance, a progress action with no animation, and character reload on Qbox where applicable. For the registry, test an owned vehicle with the actual garage, issue a signed document through Mechanic, then verify that a supported plate change retains its history. If a compatible configurator manages framework jobs, test a dedicated job across a server restart, a grade change for online and offline members, and recovery after a failed activation. Verify that a new supported society account starts empty and an existing account retains its balance. On Qbox, confirm the cleanup convar is set before core startup and memberships survive that restart.

Version 1.39.0

Install Base 1.39.0, Jobs Base 1.42.0, and Mechanic 1.28.0 together when using the new vehicle-tuning storage.

Highlights

  • Added support for Apex Banking and Apex Billing, including automatic detection when those resources are running.
  • Added support for Oxlyn Banking business accounts connected to your framework's society accounts.
  • Improved compatibility between vehicle tuning and garages so confirmed changes can be saved in the vehicle's existing record.

Notable Changes

  • Changed the default wait for a server or player response from 10 seconds to five minutes, giving longer operations more time to finish.
  • Fixed an issue where Qbox black-money payments did not use the player's black_money inventory items.
  • Added support for transferring items from vehicle trunks and gloveboxes during authorized raids with Ox, QBCore, and Origen Inventory.
  • Changed the folder layout so banking, inventory, phone, and other integration files are grouped together and easier to find.

Other Changes

  • Fixed an issue where Kartik Banking account failures could be mistaken for an empty balance or a completed transaction.
  • Improved Apex invoice handling so the issuing player must have permission to bill and creating an invoice does not automatically pay it.
  • Improved handling of background requests and completed responses to avoid unnecessary repeated processing.
  • Changed slow-response console warnings to be disabled by default while keeping actual errors and diagnostic statistics available.
  • Added optional performance diagnostics to help support investigate lag and delays, with diagnostics disabled by default.

Changed Files

  • sky_base/config/README.md
  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/integration/banking/apex.lua
  • sky_base/config/integration/banking/oxlyn.lua
  • sky_base/config/integration/billing/apex.lua
  • sky_base/config/locales/*
  • sky_base/config/vehicle_functions.lua
  • sky_base/config/vehicle_storage.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert

Renamed Files

  • sky_base/config/banking/_init.lua → sky_base/config/integration/banking/_init.lua
  • sky_base/config/banking/ak47.lua → sky_base/config/integration/banking/ak47.lua
  • sky_base/config/banking/bablo.lua → sky_base/config/integration/banking/bablo.lua
  • sky_base/config/banking/companymanager.lua → sky_base/config/integration/banking/companymanager.lua
  • sky_base/config/banking/crm.lua → sky_base/config/integration/banking/crm.lua
  • sky_base/config/banking/custom.lua → sky_base/config/integration/banking/custom.lua
  • sky_base/config/banking/devmosaic.lua → sky_base/config/integration/banking/devmosaic.lua
  • sky_base/config/banking/esx.lua → sky_base/config/integration/banking/esx.lua
  • sky_base/config/banking/fd.lua → sky_base/config/integration/banking/fd.lua
  • sky_base/config/banking/groot.lua → sky_base/config/integration/banking/groot.lua
  • sky_base/config/banking/jaksam.lua → sky_base/config/integration/banking/jaksam.lua
  • sky_base/config/banking/kartik.lua → sky_base/config/integration/banking/kartik.lua
  • sky_base/config/banking/okok.lua → sky_base/config/integration/banking/okok.lua
  • sky_base/config/banking/pc.lua → sky_base/config/integration/banking/pc.lua
  • sky_base/config/banking/qb.lua → sky_base/config/integration/banking/qb.lua
  • sky_base/config/banking/qs.lua → sky_base/config/integration/banking/qs.lua
  • sky_base/config/banking/renewed.lua → sky_base/config/integration/banking/renewed.lua
  • sky_base/config/banking/retro.lua → sky_base/config/integration/banking/retro.lua
  • sky_base/config/banking/rx.lua → sky_base/config/integration/banking/rx.lua
  • sky_base/config/banking/sky.lua → sky_base/config/integration/banking/sky.lua
  • sky_base/config/banking/synz.lua → sky_base/config/integration/banking/synz.lua
  • sky_base/config/banking/tgg.lua → sky_base/config/integration/banking/tgg.lua
  • sky_base/config/banking/wasabi.lua → sky_base/config/integration/banking/wasabi.lua
  • sky_base/config/billing/_helpers.lua → sky_base/config/integration/billing/_helpers.lua
  • sky_base/config/billing/codem.lua → sky_base/config/integration/billing/codem.lua
  • sky_base/config/billing/codemv2.lua → sky_base/config/integration/billing/codemv2.lua
  • sky_base/config/billing/companymanager.lua → sky_base/config/integration/billing/companymanager.lua
  • sky_base/config/billing/corem.lua → sky_base/config/integration/billing/corem.lua
  • sky_base/config/billing/custom.lua → sky_base/config/integration/billing/custom.lua
  • sky_base/config/billing/esx.lua → sky_base/config/integration/billing/esx.lua
  • sky_base/config/billing/fd.lua → sky_base/config/integration/billing/fd.lua
  • sky_base/config/billing/groot.lua → sky_base/config/integration/billing/groot.lua
  • sky_base/config/billing/jacksam.lua → sky_base/config/integration/billing/jacksam.lua
  • sky_base/config/billing/nass_billing.lua → sky_base/config/integration/billing/nass_billing.lua
  • sky_base/config/billing/okok.lua → sky_base/config/integration/billing/okok.lua
  • sky_base/config/billing/quasar.lua → sky_base/config/integration/billing/quasar.lua
  • sky_base/config/billing/retro.lua → sky_base/config/integration/billing/retro.lua
  • sky_base/config/billing/rxbilling.lua → sky_base/config/integration/billing/rxbilling.lua
  • sky_base/config/billing/synz.lua → sky_base/config/integration/billing/synz.lua
  • sky_base/config/billing/tgg.lua → sky_base/config/integration/billing/tgg.lua
  • sky_base/config/billing/vivum.lua → sky_base/config/integration/billing/vivum.lua
  • sky_base/config/billing/vms.lua → sky_base/config/integration/billing/vms.lua
  • sky_base/config/billing/wasabi.lua → sky_base/config/integration/billing/wasabi.lua
  • sky_base/config/fuel/cdn.lua → sky_base/config/integration/fuel/cdn.lua
  • sky_base/config/fuel/custom.lua → sky_base/config/integration/fuel/custom.lua
  • sky_base/config/fuel/hex.lua → sky_base/config/integration/fuel/hex.lua
  • sky_base/config/fuel/lc.lua → sky_base/config/integration/fuel/lc.lua
  • sky_base/config/fuel/legacy.lua → sky_base/config/integration/fuel/legacy.lua
  • sky_base/config/fuel/msk.lua → sky_base/config/integration/fuel/msk.lua
  • sky_base/config/fuel/myFuel.lua → sky_base/config/integration/fuel/myFuel.lua
  • sky_base/config/fuel/native.lua → sky_base/config/integration/fuel/native.lua
  • sky_base/config/fuel/okokGasStation.lua → sky_base/config/integration/fuel/okokGasStation.lua
  • sky_base/config/fuel/ox.lua → sky_base/config/integration/fuel/ox.lua
  • sky_base/config/fuel/qb.lua → sky_base/config/integration/fuel/qb.lua
  • sky_base/config/fuel/qs-fuelstation.lua → sky_base/config/integration/fuel/qs-fuelstation.lua
  • sky_base/config/fuel/rcore.lua → sky_base/config/integration/fuel/rcore.lua
  • sky_base/config/fuel/stg-van.lua → sky_base/config/integration/fuel/stg-van.lua
  • sky_base/config/fuel/xfuel.lua → sky_base/config/integration/fuel/xfuel.lua
  • sky_base/config/garage/ak47.lua → sky_base/config/integration/garage/ak47.lua
  • sky_base/config/garage/bp.lua → sky_base/config/integration/garage/bp.lua
  • sky_base/config/garage/cd.lua → sky_base/config/integration/garage/cd.lua
  • sky_base/config/garage/codem.lua → sky_base/config/integration/garage/codem.lua
  • sky_base/config/garage/custom.lua → sky_base/config/integration/garage/custom.lua
  • sky_base/config/garage/esx.lua → sky_base/config/integration/garage/esx.lua
  • sky_base/config/garage/hex.lua → sky_base/config/integration/garage/hex.lua
  • sky_base/config/garage/jg.lua → sky_base/config/integration/garage/jg.lua
  • sky_base/config/garage/msk.lua → sky_base/config/integration/garage/msk.lua
  • sky_base/config/garage/my.lua → sky_base/config/integration/garage/my.lua
  • sky_base/config/garage/okok.lua → sky_base/config/integration/garage/okok.lua
  • sky_base/config/garage/op.lua → sky_base/config/integration/garage/op.lua
  • sky_base/config/garage/op_v3.lua → sky_base/config/integration/garage/op_v3.lua
  • sky_base/config/garage/qb.lua → sky_base/config/integration/garage/qb.lua
  • sky_base/config/garage/qbox.lua → sky_base/config/integration/garage/qbox.lua
  • sky_base/config/garage/quasar.lua → sky_base/config/integration/garage/quasar.lua
  • sky_base/config/garage/rx.lua → sky_base/config/integration/garage/rx.lua
  • sky_base/config/garage/vms.lua → sky_base/config/integration/garage/vms.lua
  • sky_base/config/garage/ws.lua → sky_base/config/integration/garage/ws.lua
  • sky_base/config/garage/zyke_garages.lua → sky_base/config/integration/garage/zyke_garages.lua
  • sky_base/config/housing/_init.lua → sky_base/config/integration/housing/_init.lua
  • sky_base/config/housing/custom.lua → sky_base/config/integration/housing/custom.lua
  • sky_base/config/housing/esx_property.lua → sky_base/config/integration/housing/esx_property.lua
  • sky_base/config/housing/nolag.lua → sky_base/config/integration/housing/nolag.lua
  • sky_base/config/housing/qbx_properties.lua → sky_base/config/integration/housing/qbx_properties.lua
  • sky_base/config/housing/qs.lua → sky_base/config/integration/housing/qs.lua
  • sky_base/config/housing/rtx.lua → sky_base/config/integration/housing/rtx.lua
  • sky_base/config/housing/rx.lua → sky_base/config/integration/housing/rx.lua
  • sky_base/config/housing/sn.lua → sky_base/config/integration/housing/sn.lua
  • sky_base/config/housing/vms.lua → sky_base/config/integration/housing/vms.lua
  • sky_base/config/inventory/ak47.lua → sky_base/config/integration/inventory/ak47.lua
  • sky_base/config/inventory/codem.lua → sky_base/config/integration/inventory/codem.lua
  • sky_base/config/inventory/core.lua → sky_base/config/integration/inventory/core.lua
  • sky_base/config/inventory/custom.lua → sky_base/config/integration/inventory/custom.lua
  • sky_base/config/inventory/jaksam.lua → sky_base/config/integration/inventory/jaksam.lua
  • sky_base/config/inventory/jpr.lua → sky_base/config/integration/inventory/jpr.lua
  • sky_base/config/inventory/native/esx.lua → sky_base/config/integration/inventory/native/esx.lua
  • sky_base/config/inventory/native/qb.lua → sky_base/config/integration/inventory/native/qb.lua
  • sky_base/config/inventory/native/qbox.lua → sky_base/config/integration/inventory/native/qbox.lua
  • sky_base/config/inventory/native/vrp.lua → sky_base/config/integration/inventory/native/vrp.lua
  • sky_base/config/inventory/one.lua → sky_base/config/integration/inventory/one.lua
  • sky_base/config/inventory/origen.lua → sky_base/config/integration/inventory/origen.lua
  • sky_base/config/inventory/ox.lua → sky_base/config/integration/inventory/ox.lua
  • sky_base/config/inventory/ox_events.lua → sky_base/config/integration/inventory/ox_events.lua
  • sky_base/config/inventory/ps.lua → sky_base/config/integration/inventory/ps.lua
  • sky_base/config/inventory/qb-inv.lua → sky_base/config/integration/inventory/qb-inv.lua
  • sky_base/config/inventory/qs.lua → sky_base/config/integration/inventory/qs.lua
  • sky_base/config/inventory/tgiann.lua → sky_base/config/integration/inventory/tgiann.lua
  • sky_base/config/license/_helpers.lua → sky_base/config/integration/license/_helpers.lua
  • sky_base/config/license/ak47.lua → sky_base/config/integration/license/ak47.lua
  • sky_base/config/license/bit.lua → sky_base/config/integration/license/bit.lua
  • sky_base/config/license/codem.lua → sky_base/config/integration/license/codem.lua
  • sky_base/config/license/cs.lua → sky_base/config/integration/license/cs.lua
  • sky_base/config/license/custom.lua → sky_base/config/integration/license/custom.lua
  • sky_base/config/license/esx.lua → sky_base/config/integration/license/esx.lua
  • sky_base/config/license/main.lua → sky_base/config/integration/license/main.lua
  • sky_base/config/license/papa.lua → sky_base/config/integration/license/papa.lua
  • sky_base/config/license/qb.lua → sky_base/config/integration/license/qb.lua
  • sky_base/config/license/qbox.lua → sky_base/config/integration/license/qbox.lua
  • sky_base/config/license/quasar.lua → sky_base/config/integration/license/quasar.lua
  • sky_base/config/license/standalone.lua → sky_base/config/integration/license/standalone.lua
  • sky_base/config/license/stg-walletv2.lua → sky_base/config/integration/license/stg-walletv2.lua
  • sky_base/config/license/vms.lua → sky_base/config/integration/license/vms.lua
  • sky_base/config/phone/17mov.lua → sky_base/config/integration/phone/17mov.lua
  • sky_base/config/phone/codem.lua → sky_base/config/integration/phone/codem.lua
  • sky_base/config/phone/custom.lua → sky_base/config/integration/phone/custom.lua
  • sky_base/config/phone/d.lua → sky_base/config/integration/phone/d.lua
  • sky_base/config/phone/esx.lua → sky_base/config/integration/phone/esx.lua
  • sky_base/config/phone/gks.lua → sky_base/config/integration/phone/gks.lua
  • sky_base/config/phone/lb-unique.lua → sky_base/config/integration/phone/lb-unique.lua
  • sky_base/config/phone/lb.lua → sky_base/config/integration/phone/lb.lua
  • sky_base/config/phone/okok.lua → sky_base/config/integration/phone/okok.lua
  • sky_base/config/phone/qb.lua → sky_base/config/integration/phone/qb.lua
  • sky_base/config/phone/qs.lua → sky_base/config/integration/phone/qs.lua
  • sky_base/config/phone/roadphone.lua → sky_base/config/integration/phone/roadphone.lua
  • sky_base/config/phone/sd.lua → sky_base/config/integration/phone/sd.lua
  • sky_base/config/phone/sky_phone.lua → sky_base/config/integration/phone/sky_phone.lua
  • sky_base/config/phone/yseries.lua → sky_base/config/integration/phone/yseries.lua
  • sky_base/config/progress/custom.lua → sky_base/config/integration/progress/custom.lua
  • sky_base/config/progress/esx.lua → sky_base/config/integration/progress/esx.lua
  • sky_base/config/progress/hex.lua → sky_base/config/integration/progress/hex.lua
  • sky_base/config/progress/jaksam.lua → sky_base/config/integration/progress/jaksam.lua
  • sky_base/config/progress/mythic.lua → sky_base/config/integration/progress/mythic.lua
  • sky_base/config/progress/ox.lua → sky_base/config/integration/progress/ox.lua
  • sky_base/config/progress/qb.lua → sky_base/config/integration/progress/qb.lua
  • sky_base/config/progress/wasabi.lua → sky_base/config/integration/progress/wasabi.lua
  • sky_base/config/tablet/default.lua → sky_base/config/integration/tablet/default.lua
  • sky_base/config/tablet/lb.lua → sky_base/config/integration/tablet/lb.lua
  • sky_base/config/tablet/roadpad.lua → sky_base/config/integration/tablet/roadpad.lua
  • sky_base/config/tablet/sd.lua → sky_base/config/integration/tablet/sd.lua
  • sky_base/config/target/_init.lua → sky_base/config/integration/target/_init.lua
  • sky_base/config/target/custom.lua → sky_base/config/integration/target/custom.lua
  • sky_base/config/target/ox.lua → sky_base/config/integration/target/ox.lua
  • sky_base/config/target/qb.lua → sky_base/config/integration/target/qb.lua
  • sky_base/config/target/tgiann.lua → sky_base/config/integration/target/tgiann.lua
  • sky_base/config/target/vivum.lua → sky_base/config/integration/target/vivum.lua
  • sky_base/config/vehiclekeys/ak47.lua → sky_base/config/integration/vehiclekeys/ak47.lua
  • sky_base/config/vehiclekeys/brutal.lua → sky_base/config/integration/vehiclekeys/brutal.lua
  • sky_base/config/vehiclekeys/custom.lua → sky_base/config/integration/vehiclekeys/custom.lua
  • sky_base/config/vehiclekeys/ic3d.lua → sky_base/config/integration/vehiclekeys/ic3d.lua
  • sky_base/config/vehiclekeys/jc.lua → sky_base/config/integration/vehiclekeys/jc.lua
  • sky_base/config/vehiclekeys/jota.lua → sky_base/config/integration/vehiclekeys/jota.lua
  • sky_base/config/vehiclekeys/kiminaze.lua → sky_base/config/integration/vehiclekeys/kiminaze.lua
  • sky_base/config/vehiclekeys/mk.lua → sky_base/config/integration/vehiclekeys/mk.lua
  • sky_base/config/vehiclekeys/mrnewb.lua → sky_base/config/integration/vehiclekeys/mrnewb.lua
  • sky_base/config/vehiclekeys/msk.lua → sky_base/config/integration/vehiclekeys/msk.lua
  • sky_base/config/vehiclekeys/qb.lua → sky_base/config/integration/vehiclekeys/qb.lua
  • sky_base/config/vehiclekeys/quasar.lua → sky_base/config/integration/vehiclekeys/quasar.lua
  • sky_base/config/vehiclekeys/vehicles_keys.lua → sky_base/config/integration/vehiclekeys/vehicles_keys.lua
  • sky_base/config/vehiclekeys/wasabi.lua → sky_base/config/integration/vehiclekeys/wasabi.lua
  • sky_base/config/vehiclekeys/zyke_garages.lua → sky_base/config/integration/vehiclekeys/zyke_garages.lua
  • sky_base/config/voice/_init.lua → sky_base/config/integration/voice/_init.lua
  • sky_base/config/voice/pma.lua → sky_base/config/integration/voice/pma.lua
  • sky_base/config/voice/saltychat.lua → sky_base/config/integration/voice/saltychat.lua
  • sky_base/config/voice/yaca.lua → sky_base/config/integration/voice/yaca.lua
Update InstructionsWhat to copy, what to keep and what to check1.38.01.39.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Prepare the update.

Install Base 1.39.0, Jobs Base 1.42.0, and Mechanic 1.28.0 together when using the new vehicle-tuning storage. These steps cover 1.38.0 → 1.39.0. Follow earlier update instructions first when upgrading from an older version. Stop the server and back up the resource, database, custom settings, and saved configurator data.

  1. Replace the package files.

Install the matching 1.39.0 package. Update every path listed in Changed Files, delete and reinsert sky_base/source/*, and replace sky_base/config/locales/* completely. Merge the configuration changes in this tab into your customized files. Preserve writable data and generated user content. Move custom integration edits to the new locations and remove the obsolete paths listed under Renamed Files.

Required profiler files

For the profiler update, replace the complete sky_base/source/* tree and sky_base/fxmanifest.lua from the same download, even if diagnostics stay disabled. Delete the old source/ folder before copying the new one.

The profiler builder leaves configuration, integration and compatibility files unchanged. Apply any separate configuration or integration changes listed for this release as usual.

If you previously installed an older profiler package that also modified files outside source/, restore those affected files once from the unmodified versions in the new download and reapply your custom edits. Later profiler-only updates do not require this step.

  1. Merge and review configuration.

All Sky Base settings are maintained in files. /jobconfig does not manage them.

In sky_base/config/config.lua, merge these two changed defaults:

SettingPrevious defaultNew default
Config.defaultCallbackTimeout10000 milliseconds300000 milliseconds (five minutes)
Config.callbackPerformance.warningsEnabledtruefalse

The timeout now applies to requests in both directions. A timeout does not cancel an operation that is already running. Keep an intentional custom timeout if your server needs one. callbackPerformance.enabled = true, warningThreshold = 500, and warningCooldown = 300000 remain unchanged. Set warningsEnabled = true only if you want automatic slow-operation warnings; actual errors remain visible either way.

The provider lists gain apex for billing and apex / oxlyn for banking. Their default selections remain "auto"; the updated path comments do not change runtime settings. Keep your chosen provider, or select Config.billing = "apex", Config.banking = "apex", or Config.banking = "oxlyn" when installing that integration. Start the selected provider before Sky Base.

If using Oxlyn, set Config.Business.accountSource = "society" in your Oxlyn configuration. Use esx_addonaccount on ESX or qb-banking on QBCore/Qbox and create the required society accounts there. This connects existing society balances; it does not transfer balances from Oxlyn's standalone ledger. Apex society invoices use the issuing player's job and billing permissions; payment is handled separately in Apex.

Integration folders move from sky_base/config/<feature>/ to sky_base/config/integration/<feature>/ for banking, billing, fuel, garage, housing, inventory, license, phone, progress, tablet, target, vehiclekeys, and voice. Copy your custom edits into the matching new files, then remove the old copies listed under Renamed Files. Keep sky_base/config/framework/ in its existing location. Update any custom resource that explicitly imports an old integration path.

Install the new sky_base/config/vehicle_storage.lua in full; it was absent in the previous package. Merge custom edits in sky_base/config/vehicle_functions.lua with the new file: its old vehicle-property reader and writer have been removed because the framework now supplies them. Use the Garage Integration guide and its ESX, QBCore, or Ox instructions to check the required vehicle-property fields for your exact framework version. Custom framework adapters need the same vehicle-property connection before use. Do not copy an old complete vehicle helper back over the new file.

Optional performance diagnostics

Sky's extra profiler information is disabled by default. This update does not start recordings or send data automatically. No configuration change is required for normal use. If support needs a performance recording, add the following line to server.cfg before the Sky ensure lines, then restart the server:

server.cfg
setr sky_profiler 1

This global setting is configured in server.cfg; it is not managed by /jobconfig. The previous state with no setting remains disabled. Set the value to 1 only when you want the additional diagnostics.

Run profiler record 1000 in the server console for a server delay, or in the player's F8 console for a client problem. Reproduce the issue during the recording. Wait until profiler status reports that recording has stopped, then run profiler saveJSON sky-profile.json in the same console to save the capture. These are the standard FiveM profiler commands.

After diagnostics, change the line to setr sky_profiler 0 and restart again. Keep the new package files installed; disabling diagnostics does not require editing Lua or removing manifest entries.

  1. Apply database and item changes.

No SQL schema migration is added by this Base update. On Qbox servers using black money, register a stackable inventory item named black_money before using those payments. Existing framework cash and bank balances keep their normal storage. Replace all Base locales. Preserve integration credentials and custom callbacks in the files you merge.

  1. Start and verify the update.

Start your framework and providers, then Base, Jobs Base, and the job resources. Verify the selected bank balance and an invoice without forcing payment. On Qbox, test a black-money payment against the inventory item. Complete the garage round-trip checks from the linked integration guide before enabling the new Mechanic save path for players.

Version 1.38.0

Highlights

  • Added a shared dirty-money currency for compatible faction accounts and purchases.
  • Improved character name changes so supported ESX, QBCore, and Qbox characters can be renamed while offline as well as online.

Notable Changes

  • Fixed an issue where older ESX versions could not register or refresh inventory items correctly.
  • Fixed an issue where Jaksam inventory slot names prevented the selected air cylinder or other item from being updated or removed correctly.
  • Fixed an issue where missing ESX society accounts or rejected withdrawals could appear to succeed.
  • Added support for checking trunk and glovebox contents with ox_inventory, qb-inventory, and Origen while distinguishing unavailable storage from an empty compartment.

Other Changes

  • Improved delivery of large requests and responses used by connected resources.
  • Added RoadPhone text-focus support so compatible custom app forms can capture typing correctly.
  • Changed the unconfigured vRP name-change integration to report that the operation is unsupported.

Changed Files

  • sky_base/config/banking/esx.lua
  • sky_base/config/currency.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/inventory/jaksam.lua
  • sky_base/config/inventory/native/esx.lua
  • sky_base/config/inventory/origen.lua
  • sky_base/config/inventory/ox.lua
  • sky_base/config/inventory/qb-inv.lua
  • sky_base/config/locales/*
  • sky_base/config/phone/roadphone.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.37.01.38.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server and back up the complete sky_base resource, its database and inventory data, saved Job Configurator settings where applicable, and intentional public configuration edits. Preserve writable reports and other generated data outside the replaceable source files.
  2. Install 1.38.0 as a consistent package. Replace every file listed in Changed Files, delete and reinsert sky_base/source/*, and replace sky_base/config/locales/* completely. Merge the public configuration changes listed in this tab into your customized files; do not copy old configuration files over the new package wholesale. Keep the manifest, built UI, runtime and dependencies from the matching release set.
  3. Apply the following configuration changes before starting the resource.

All Base settings are maintained in files. /jobconfig does not manage any of them. config/config.lua has no executable value or selector change in this release.

In sky_base/config/currency.lua, add these two entries. Both paths were absent in 1.37.0. Keep all existing formatters and currencies:

config/currency.lua
Config.Currency.formatters.black_money = {
    type = "money",
    symbol = "$",
    symbolPosition = "before",
    spaceBetween = false,
    thousandsSeparator = ",",
    decimalSeparator = ".",
    precision = 0
}

Config.Currency.currencies.black_money = {
    formatter = "black_money",
    get = function(source)
        if not IsDuplicityVersion() then return 0 end
        return Sky.FW.GetAccountMoney(source, "black_money") or 0
    end,
    add = function(source, amount)
        if not IsDuplicityVersion() then return false end
        return Sky.FW.AddAccountMoney(source, "black_money", amount) ~= false
    end,
    remove = function(source, amount)
        if not IsDuplicityVersion() then return false end
        return Sky.FW.RemoveAccountMoney(source, "black_money", amount)
    end
}

Replace the changed public banking, framework, inventory, and RoadPhone adapters listed in Changed Files, preserving intentional local provider customizations. For ESX banking, every used society must have its existing society_<job> account registered in addon_account with shared = 1 and loaded by esx_addonaccount. Missing accounts now fail explicitly; keep existing balances in addon_account_data. If you use vRP name changes, keep your distribution-specific identity implementation and return success only after persistence. These adapter changes are executable integration changes, not new provider selector defaults.

  1. Complete the following database, inventory, and asset steps.

No Base schema migration, new inventory item, image, stream file, or provider secret is introduced. The black_money currency uses the configured framework account; confirm that account is supported before enabling dependent faction features. The ESX society-account requirement concerns existing account data, not a reset or replacement SQL import.

  1. Start providers and Base before Jobs Base and the jobs. Check the manifest version, an online and offline character rename on the active supported framework, legacy ESX item refresh if applicable, an accepted and rejected society withdrawal, Jaksam updates on the selected item slot, and empty versus unavailable vehicle storage. In RoadPhone, type in the emergency form and confirm gameplay shortcuts remain inactive until focus is released.

Version 1.37.0

Highlights

  • Added a native Sky Phone integration with automatic detection, application registration, notifications, contacts, messages, calls, mail, gallery access, and wallet support.
  • Added framework-independent owned-vehicle and property counts plus new ESX Property and Qbox Properties integrations.
  • Improved target integrations so registered interactions can be removed by resource scope across Custom, ox_target, qb-target, Tgiann, and Vivum providers.
  • Added Wasabi billing and banking support with reliable provider-result handling and bank-only overdraft payments.

Notable Changes

  • Added QB Fuel support and improved Ox Fuel and LegacyFuel behavior so unsupported fuel-type operations are not forwarded.
  • Added scoped voice-proximity controls for PMA Voice, SaltyChat, and YACA without overwriting unrelated voice state.
  • Improved startup ordering so dependent resources wait for active database migrations before continuing.
  • Improved ESX native inventory support so the item catalogue refreshes while the server is running.
  • Added gang-management bridges and stable randomized callback identifiers for shared framework operations.
  • Fixed QBCore vehicle-key assignment so the intended server event is used.

Other Changes

  • Fixed ox_lib progress cancellation handling and corrected CodeM Phone argument forwarding.
  • Removed a high-frequency ESX online-player lookup debug message.
  • Updated provider selector documentation with the explicit sky phone and qb fuel choices while retaining the shipped automatic defaults.
  • Improved housing adapters so property counts use a common Base contract across supported providers.

Changed Files

  • sky_base/config/banking/wasabi.lua
  • sky_base/config/billing/wasabi.lua
  • sky_base/config/config.lua
  • sky_base/config/framework/custom.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/framework/vrp.lua
  • sky_base/config/fuel/legacy.lua
  • sky_base/config/fuel/ox.lua
  • sky_base/config/fuel/qb.lua
  • sky_base/config/housing/_init.lua
  • sky_base/config/housing/custom.lua
  • sky_base/config/housing/esx_property.lua
  • sky_base/config/housing/nolag.lua
  • sky_base/config/housing/qbx_properties.lua
  • sky_base/config/housing/qs.lua
  • sky_base/config/housing/rtx.lua
  • sky_base/config/housing/rx.lua
  • sky_base/config/housing/sn.lua
  • sky_base/config/housing/vms.lua
  • sky_base/config/inventory/native/esx.lua
  • sky_base/config/locales/*
  • sky_base/config/phone/codem.lua
  • sky_base/config/phone/sky_phone.lua
  • sky_base/config/progress/ox.lua
  • sky_base/config/target/_init.lua
  • sky_base/config/target/custom.lua
  • sky_base/config/target/ox.lua
  • sky_base/config/target/qb.lua
  • sky_base/config/target/tgiann.lua
  • sky_base/config/target/vivum.lua
  • sky_base/config/vehiclekeys/qb.lua
  • sky_base/config/voice/_init.lua
  • sky_base/config/voice/pma.lua
  • sky_base/config/voice/saltychat.lua
  • sky_base/config/voice/yaca.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.36.01.37.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server and back up the complete sky_base resource plus every intentional provider-adapter edit.
  2. Delete the old resource and install the complete 1.37.0 package. Do not mix 1.36.0 adapters, manifest, or source files with this release.
  3. Start from the new config/config.lua and transfer only deliberate local settings. /jobconfig does not manage Base configuration. The executable defaults remain automatic; only the documented selector choices add Config.phone = "sky" and Config.fuel = "qb".
  4. Reapply intentional custom integrations only after retaining the new provider contracts. Add no SQL, inventory item, image, or stream asset for this release.
  5. Restart sky_base before every dependent resource and verify the selected phone, fuel, housing, target, voice, billing, banking, progress, inventory, and vehicle-key providers.

Version 1.36.0

Highlights

  • Added native duty management across ESX, QBCore, and Qbox so duty changes and on-duty counts use the active framework consistently.
  • Added automatic MSK Garage and MSK Fuel integrations plus Quasar license support through qs-licenses.
  • Added shared database select and update operations while making transactions explicitly reliable through oxmysql.

Notable Changes

  • Improved Jobs Creator duty synchronization so QB-based servers accept confirmed framework results and ESX servers can change duty without a separate workaround.
  • Fixed an issue where Jobs Creator job-list injection could be rejected before shared jobs became available.
  • Improved MSK vehicle handling so garage storage, plate changes, vehicle keys, and model lookup continue to work when the original network entity is unavailable.
  • Fixed an issue where RxBilling could reject valid invoices without a player source and corrected Groot billing so personal-to-society invoices use the intended invoice type.
  • Fixed an issue where ox_inventory capacity prechecks could disagree with the inventory's own item insertion result.
  • Fixed an issue where player-directory queries could fail when ESX identifier columns used different database collations.

Other Changes

  • Improved framework logout handling so client and server player state unloads consistently across supported ESX flows.
  • Improved housing-provider startup ordering so its shared callback registers only after the Base callback runtime is ready.
  • Improved migration recovery so restarting a resource cannot reuse a stale completed migration state.
  • Updated the Base selector documentation with explicit msk garage and fuel choices plus the quasar license choice without changing the shipped "auto" defaults.

Changed Files

  • sky_base/config/billing/groot.lua
  • sky_base/config/billing/rxbilling.lua
  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/fuel/msk.lua
  • sky_base/config/garage/msk.lua
  • sky_base/config/housing/_init.lua
  • sky_base/config/inventory/ox.lua
  • sky_base/config/license/main.lua
  • sky_base/config/license/quasar.lua
  • sky_base/config/locales/*
  • sky_base/config/vehiclekeys/msk.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.35.11.36.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server and back up the complete sky_base folder plus every intentional provider-adapter edit.
  2. Delete the old resource and install the complete 1.36.0 package. Do not mix 1.35.1 framework, provider, manifest, or source files with this release.
  3. /jobconfig does not manage any Base value. Start from the new config/config.lua and transfer only deliberate local choices. No executable default changed between 1.35.1 and 1.36.0; these selector values remain unchanged:
    config/config.lua
    Config.garage = "auto"
    Config.license = "auto"
    Config.fuel = "auto"
    

    Only the documented choices changed: Config.garage adds "msk", Config.license adds "quasar", and Config.fuel adds "msk".
  4. Use Config.garage = "msk" with msk_garage, Config.fuel = "msk" with msk_fuel, and Config.license = "quasar" with qs-licenses. MSK Garage is an ESX integration. Its shipped fallback garage identifiers are A for land vehicles, boat_A for boats, and heli_A for aircraft; edit config/garage/msk.lua only when your MSK installation uses different identifiers.
  5. Replace config/locales completely even though this release adds no new customer-facing locale key. No Base SQL migration, inventory item, image, or stream asset is required.
  6. Restart sky_base before every dependent resource. Verify framework duty changes, the selected providers, player logout/relogin, invoice creation, vehicle plate/key operations, and database calls. Sky.DB.Transaction requires oxmysql in this release; mysql-async users must not rely on transaction support.

Version 1.35.1

Highlights

  • Changed framework duty handling back to the established provider-specific behavior after the temporary shared duty-index implementation.

Notable Changes

  • Changed QBCore duty updates to use QBCore directly while Jobs Creator counts continue to use its active provider state.
  • Changed Qbox duty updates and counts to use the native qbx_core paths.
  • Changed ESX Base duty handling back to its established contract where duty setters are no-ops and Base duty counts return no native on-duty players.

Other Changes

  • Removed the temporary shared duty-index runtime and its startup state from the Base package.

Changed Files

  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/locales/*
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.35.01.35.1

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server and back up the complete sky_base resource plus intentional framework-adapter edits.
  2. Delete the old resource and install the complete 1.35.1 package. Replace all three framework adapters, fxmanifest.lua, config/locales, and the complete source directory together; do not retain the removed duty-index file.
  3. /jobconfig does not manage Base. No public config value changed, and no SQL, item, image, or stream migration is required.
  4. Restart Base before Jobs Base and every job resource. Verify QB/Qbox duty changes and counts. On ESX, do not rely on Sky.FW.SetDuty, ToggleDuty, or GetOnDutyCount for a native duty system in this patch.

Version 1.35.0

Highlights

  • SD phone and tablet support - SD Phone can now provide phone numbers, apps, messages, notifications, number lookup, and tablet apps through the shared Base interface.
  • More provider choices - CDN Fuel is supported, and OP Garages automatically selects its compatible V2 or V3 adapter from the installed version.
  • More reliable shared callbacks - the shipped callback wait limit doubles to ten seconds, reducing false timeouts on slower servers without changing callback results.

Notable Changes

  • Phone notification adapters now return a consistent success result, and LB Phone notifications can still be delivered when the phone resource starts after Base.
  • Jobs Creator duty changes on QB/Qbox use the confirmed framework result and reject client-forged reconciliation events.
  • Ped interactions can play configured animations before their action runs.
  • mysql-async recognizes whitespace-prefixed and multi-line read queries, including SHOW, DESCRIBE, and EXPLAIN.
  • Missing JSON resource files now return a clear diagnostic instead of failing without context.

Other Changes

  • Database migrations inherit the active database character set and collation.
  • The Base update link now points to the current documentation location.
  • OP Garages safely keeps the legacy adapter when its version metadata is missing or invalid.

Changed Files

  • sky_base/config/config.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/fuel/cdn.lua
  • sky_base/config/garage/op.lua
  • sky_base/config/garage/op_v3.lua
  • sky_base/config/locales/*
  • sky_base/config/phone/d.lua
  • sky_base/config/phone/esx.lua
  • sky_base/config/phone/lb-unique.lua
  • sky_base/config/phone/lb.lua
  • sky_base/config/phone/qb.lua
  • sky_base/config/phone/sd.lua
  • sky_base/config/tablet/sd.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.34.01.35.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server and back up the complete sky_base folder plus every intentional provider-adapter edit.
  2. Delete the old resource and install the complete 1.35.0 package. Do not mix 1.34.0 adapters, manifest, or source files with this release.
  3. /jobconfig does not manage any Base value. Start from the new config/config.lua and transfer only deliberate local choices. The only changed executable default is:
    config/config.lua
    Config.defaultCallbackTimeout = 10000
    

    This value was 5000 in 1.34.0. The selectors Config.phone = "auto", Config.tablet = "default", Config.fuel = "auto", and Config.garage = "auto" keep their previous shipped values.
  4. The selector comments add these choices: Config.phone = "sd", Config.tablet = "sd" or "auto", and Config.fuel = "cdn". Config.garage = "op" is unchanged but now supports OP Garages V2 and V3 automatically. For SD tablet auto-detection, start sd-tablet; the adapter also calls sd-phone, so both SD resources must be available. CDN Fuel requires cdn-fuel; OP requires op-garages.
  5. Replace config/locales completely even though this release adds no new locale key. No SQL migration, Base-owned item, image, or stream asset is required.
  6. Restart sky_base before every dependent resource. Verify callback-heavy actions, the selected phone/tablet/fuel provider, OP vehicle storage on the installed OP major version, Jobs Creator duty changes, and the missing-JSON diagnostic.

Version 1.34.0

Highlights

  • Unified voice-radio bridge - PMA Voice, SaltyChat, and YACA now expose one shared radio interface with automatic provider selection.
  • Expanded economy integrations - DevMosaic and Retro banking plus STG Wallet v2 licenses are added, while STG Vanaheim Fuel auto-detection now targets the correct resource and supports explicit "stg-van" selection.
  • Event-driven duty indexing - ESX, QBCore, and Qbox duty lookups now use synchronized server state instead of repeatedly scanning every connected player, including functional ESX duty changes.

Notable Changes

  • Numeric PMA radio channels remain numeric; provider-native start/end clicks are configurable, and local plus remote transmit activity is synchronized without echoing a player's own peer event.
  • SaltyChat traffic state and YACA behavior now match the shared radio contract.
  • JackSam Billing uses the correct player recipient type and falls back to the target identifier when no sender is supplied; RxBilling sends sender and target in the correct order and derives a stable sender for source-less requests.
  • Retro Billing is detected explicitly and reports that invoice creation is unsupported instead of selecting an invalid billing path.
  • Usable items fall back to framework registration when the selected inventory adapter does not implement registration itself.
  • ox_inventory item-count updates now reach the shared inventory-updated event on Qbox and standalone ox_inventory setups.
  • The tablet selector now ships as "default" instead of "auto", keeping the bundled Jobs Base tablet as the initial system; "lb" and "roadpad" remain deliberate opt-in values.
  • The default interaction mode changed from automatic target detection to markers and help notifications; servers can still opt into "auto" or a named target provider.
  • The event ping ceiling increased from 1000 to 5000 milliseconds for high-latency players.
  • Currency formatting can override the displayed symbol without changing the selected currency or account.

Other Changes

  • Streamer-mode enable/disable, reward receipt, inventory-full, and invalid-command responses now follow the selected locale instead of hard-coded English text.
  • Italian was added as a complete Base locale. All 15 bundled locales now include localized Streamer Mode, reward, command, inventory-full, and command-validation feedback; existing Arabic, Chinese, Czech, Dutch, Finnish, French, German, Portuguese, Russian, Spanish, and Swedish wording was also corrected or clarified.
  • Public Base documentation was updated for voice, banking, billing, licenses, duty state, currency formatting, and inventory update behavior.
  • Regression tests now cover event-driven duty indexing and the shared inventory-update bridge.

Changed Files

  • sky_base/config/banking/devmosaic.lua
  • sky_base/config/banking/retro.lua
  • sky_base/config/billing/jacksam.lua
  • sky_base/config/billing/retro.lua
  • sky_base/config/billing/rxbilling.lua
  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/framework/qb.lua
  • sky_base/config/framework/qbox.lua
  • sky_base/config/fuel/stg-van.lua
  • sky_base/config/inventory/ox_events.lua
  • sky_base/config/license/main.lua
  • sky_base/config/license/stg-walletv2.lua
  • sky_base/config/locales/*
  • sky_base/config/voice/_init.lua
  • sky_base/config/voice/pma.lua
  • sky_base/config/voice/saltychat.lua
  • sky_base/config/voice/yaca.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.33.01.34.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Stop the server. Back up the complete sky_base resource, intentional adapter edits, and SaltyChat's external config.json when that provider is installed.
  2. Delete the old folder and install the complete 1.34.0 package. Do not mix the new manifest, provider adapters, locales, or source directory with 1.33.0 files.
  3. /jobconfig does not manage any Base value. Start from the new config/config.lua, transfer only deliberate server-specific values, and apply these complete executable changes after the main Config table if you merge manually:
    config/config.lua
    Config.voice = "auto"
    Config.voiceRadioSounds = {
        enabled = false,
        transmitStartVolume = 18,
        transmitEndVolume = 8,
    }
    Config.tablet = "default"
    Config.target = "none"
    Config.maxPing = 5000
    

    Config.voice and Config.voiceRadioSounds did not exist in 1.33.0. Config.tablet changed from "auto" to "default", Config.target changed from "auto" to "none", and Config.maxPing changed from 1000 to 5000. Keep Config.tablet = "default" for the bundled Jobs Base tablet; set "lb" or "roadpad" only as a deliberate external-tablet opt-in. Keep Config.target = "auto" only when automatic target-provider selection remains intentional.
  4. The existing selector values remain Config.license = "auto", Config.billing = "auto", Config.fuel = "auto", and Config.banking = "auto". New explicit choices are "stg-walletv2" for licenses, "retro" for billing, "stg-van" for fuel, and "devmosaic" or "retro" for banking. Fuel auto-detection now recognizes the started stg-vanaheimfuel resource as "stg-van". Retro Billing is detectable but cannot create invoices.
  5. Start the selected external providers before sky_base. For SaltyChat incoming-traffic activity, merge this property into its existing external file; keep every other property already present:
    saltychat/config.json
    {
      "RequestRadioTrafficStates": true
    }
    

    Keep Config.voiceRadioSounds.enabled = false when another interface already plays radio clicks. SaltyChat needs the external property above; Base cannot set it.
  6. Replace the complete config/locales directory. Italian is now available through Config.locale = "it"; every bundled locale now contains notifications.streamerModeTitle, notifications.enabled, notifications.disabled, notifications.rewardTitle, notifications.commandTitle, plus commandErrors.missingParameter, tooManyParameters, mustBeNumber, cannotUseMeFromConsole, invalidPlayerId, playerNotFound, invalidPercentage, invalidSelection, and invalidBoolean.
  7. No Base SQL migration or Base-owned inventory item is required. Restart sky_base before sky_jobs_base and every dependent resource. Verify voice joining/leaving and activity, the selected banking/license/fuel action, JackSam and RxBilling invoice direction, target interactions, high-ping events, duty changes, inventory updates, and localized command feedback.

Version 1.33.0

Highlights

  • Unified tablet integrations - LB Tablet and RoadPad are now supported alongside the bundled Jobs Base tablet, with automatic provider selection and shared app, message, notification, and close actions.
  • Complete offline license handling - licenses use one selected provider consistently and can be managed by persistent identifier on the built-in standalone, ESX, QBCore, and Qbox backends.
  • Expanded provider compatibility - added Synz banking/billing, Vivum Target, GKSPHONE v2, JC Vehicle Keys, vehicle-model targets, and missing key-removal behavior for existing providers.
  • Observable callbacks and logging - callback timing statistics, rate-limited slow-callback warnings, per-level debug controls, and bounded asynchronous log output make runtime issues easier to diagnose.

Notable Changes

  • Runtime inventory item definitions can be added or updated through the shared framework API.
  • Currency formatting accepts an optional display-symbol override.
  • External billing adapters normalize recipients more consistently; Vivum Billing now uses framework identifiers and Quasar billing validates requests before submission.
  • The default target selection changed from marker-only mode to automatic target detection.
  • Duplicate license and housing adapter registration is prevented by deterministic manifest loading.
  • Blip values are normalized before reaching FiveM natives.

Other Changes

  • Updated the public API documentation for tablets, licenses, inventory registration, targets, callbacks, debug controls, billing, phones, and currency formatting.
  • Added a focused license-provider regression check and a workspace file for the frontend package manager.

Changed Files

  • sky_base/config/banking/synz.lua
  • sky_base/config/banking/tgg.lua
  • sky_base/config/billing/codem.lua
  • sky_base/config/billing/corem.lua
  • sky_base/config/billing/quasar.lua
  • sky_base/config/billing/synz.lua
  • sky_base/config/billing/vivum.lua
  • sky_base/config/config.lua
  • sky_base/config/framework/esx.lua
  • sky_base/config/license/_helpers.lua
  • sky_base/config/license/ak47.lua
  • sky_base/config/license/bit.lua
  • sky_base/config/license/codem.lua
  • sky_base/config/license/cs.lua
  • sky_base/config/license/custom.lua
  • sky_base/config/license/esx.lua
  • sky_base/config/license/main.lua
  • sky_base/config/license/papa.lua
  • sky_base/config/license/qb.lua
  • sky_base/config/license/qbox.lua
  • sky_base/config/license/standalone.lua
  • sky_base/config/license/vms.lua
  • sky_base/config/locales/*
  • sky_base/config/phone/gks.lua
  • sky_base/config/tablet/default.lua
  • sky_base/config/tablet/lb.lua
  • sky_base/config/tablet/roadpad.lua
  • sky_base/config/target/_init.lua
  • sky_base/config/target/custom.lua
  • sky_base/config/target/ox.lua
  • sky_base/config/target/qb.lua
  • sky_base/config/target/tgiann.lua
  • sky_base/config/target/vivum.lua
  • sky_base/config/vehiclekeys/jc.lua
  • sky_base/config/vehiclekeys/msk.lua
  • sky_base/config/vehiclekeys/qb.lua
  • sky_base/fxmanifest.lua
  • sky_base/source/* — delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.32.11.33.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Download sky_base 1.33.0 and back up the complete current resource plus intentional provider customizations.
  2. Delete the old resource folder and install the complete new package, including every new adapter and the updated manifest.
  3. /jobconfig does not manage Base. In the new config/config.lua, add Config.tablet = "auto" and change Config.target from "none" to "auto" unless marker-only interaction is intentional.
  4. Keep Config.license, Config.billing, and Config.banking at "auto" unless one provider is selected explicitly. license now also accepts "standalone" and "qbox"; billing and banking now also accept "synz".
  5. Add these complete new runtime-control tables next to the existing debug and defaultCallbackTimeout values:
    config/config.lua
    debugLevels = {
        all = false,
        debug = false,
        info = true,
        warn = true,
        error = true,
    },
    debugQueue = {
        maxEntries = 1000,
        batchSize = 10,
        batchDelay = 0,
    },
    callbackPerformance = {
        enabled = true,
        warningsEnabled = true,
        warningThreshold = 500,
        warningCooldown = 300000,
    },
    
  6. Keep Config.debug = false and Config.defaultCallbackTimeout = 5000 unless deliberately customized. Config.Licenses.catalog remains the additional catalogue for the one selected license provider and still contains firstaidcourse by default.
  7. No SQL migration or inventory item is required by Base itself. Restart sky_base before sky_jobs_base and every dependent resource.

Version 1.32.1

Highlights

  • Safer behavior while restrained - handcuffed players can no longer use world markers, target interactions, or registered keybind actions until the restraint is removed.
  • Framework gang support - QBCore and Qbox gang identity and grade data are now available to compatible Sky resources, while other frameworks continue without gang data.
  • More reliable cross-framework duty state - ESX jobs without a native duty value now retain the framework-neutral duty fallback used by Jobs Base.

Notable Changes

  • ox_fuel vehicles fall back to the vehicle's native fuel level when their synchronized fuel state has not initialized yet.
  • Tgiann Inventory slot lookups now use the inventory's direct slot lookup for better performance.
  • Handcuffed state is included when shared systems decide whether player actions should be unavailable.
  • Gang changes from QBCore and Qbox are synchronized for dependent resources.

Other Changes

  • Updated the public API documentation for gang access and restrained interaction behavior.
Update InstructionsWhat to copy, what to keep and what to check1.32.01.32.1

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Download sky_base 1.32.1 and back up your current resource.
  2. Delete the old resource folder and install the complete new folder.
  3. Keep the new framework, fuel, inventory, interaction, and documentation files.
  4. Reapply only intentional custom provider changes to the matching new files.
  5. No config value, SQL migration, or inventory item is required.
  6. Restart sky_base before sky_jobs_base and every dependent resource.

Version 1.32.0

Highlights

  • Broader plug-and-play provider support - added integrations for CodeM Garage, TeamsGG Billing, Vivum Billing, Quasar Fuel Stations, x-fuel, and tgiann-target, including automatic detection.
  • Customizable vehicle-property handling - vehicle serialization, restoration, key handling, removal, and post-spawn behavior now live in a public configuration file so servers can adapt garage behavior without editing protected runtime files.
  • More complete vehicle persistence - ESX- and QB-compatible property names now preserve additional wheel, tyre, window, door, livery, color, health, and modification data when vehicles are stored and restored.
  • More reliable framework and provider flows - QB/Qbox character lifecycle handling, ESX progress completion, phone fallbacks, controlled vehicle deletion, and disabled interaction markers now behave consistently.

Notable Changes

  • Billing can pass optional human-readable source context, such as a job or speed-camera name, to supported invoice providers.
  • okokBilling now supports personal invoices as well as society invoices.
  • Vivum Billing resolves recipients through lb-phone; CodeM Garage integration supports ESX and QBCore.
  • Inventory results now expose normalized durability, and ps-inventory weapon transfers preserve ammunition and metadata.
  • Added a non-blocking database write path for resource-stop persistence.
  • Server callbacks can now be consumed by integrations through the documented export interface.
  • YSeries phone integration starts only when its matching provider is selected.

Other Changes

  • Updated the public API and provider documentation.
  • Updated the resource version to 1.32.0.
Update InstructionsWhat to copy, what to keep and what to check1.31.01.32.0

Simplified update

Update sky_base safely

Read the complete update instructions in one continuous guide.

  1. Download sky_base 1.32.0 and create a resource backup.
  2. Delete the old resource folder and install the complete new folder.
  3. Keep the new fxmanifest.lua, /source, provider folders, framework adapters, and config/vehicle_functions.lua.
  4. Transfer only your intentional provider selections and custom adapter changes into the new config files.
  5. No SQL migration or new inventory item is required.
  6. Restart sky_base before restarting sky_jobs_base and all dependent resources.

Version 1.31.0

Highlights

  • Cross-framework player-state synchronization - shared death, last-stand, handcuff, and custom player states can now be read and updated consistently across ESX, QBCore, Qbox, vRP, and custom framework integrations.
  • Improved Jaksam Inventory compatibility - weapon transfers now use the required uppercase weapon names, slot-aware item operations are supported, metadata updates use the inventory's native flow, and usable items register correctly.
  • Correct ESX garage storage tables - the AK47 and BP garage adapters now use owned_vehicles on ESX while retaining player_vehicles for QB-based frameworks.
  • Clearer version checks - update checks are cached, can return their result through callbacks, and display more useful installed/latest version states and notices.

Notable Changes

  • Active text interaction prompts now update every frame while a player remains in interaction range.
  • QB and Qbox status handling now uses the current framework metadata APIs.
  • Ox Inventory item lookups handle empty count responses safely.
  • Custom framework templates now include the shared player-state bridge contract.

Other Changes

  • Updated the public API documentation for player states and version information.
  • Updated the resource version to 1.31.0.

Version 1.30.0

Highlights

  • Custom integration templates for every major provider type - ready-to-edit adapters are now included for frameworks, banking, billing, fuel, garages, housing, inventories, licenses, phones, progress bars, targets, and vehicle keys.
  • Expanded third-party compatibility - added direct support for Zyke Garages, Zyke vehicle keys, and YSeries phones, while RoadPhone custom applications are validated more reliably.
  • Vehicle-aware target interactions - supported target providers can register vehicle-wide and bone-specific actions, enabling precise rescue and equipment interactions.
  • Faster and safer database maintenance - transactions now behave atomically across supported database drivers, migration schema discovery is batched, and configured column encodings are enforced consistently.

Notable Changes

  • Added persistent instructional help panels for multi-action controls and status guidance.
  • Added framework-independent relative status removal for supported ESX, QB, and QBox setups.
  • Corrected RxBilling invoice arguments so invoice details reach the provider properly.
  • ESX job-member data now refreshes after job changes instead of retaining stale entries.
  • Added version caching for dependent resources and reduced repeated version lookups.
  • Added the missing Chinese, Spanish, French, Dutch, Polish, Serbian, and Swedish locale files.
  • The shipped target setting remains none, so target integrations are opt-in and servers without a target resource start safely.

Other Changes

  • Disabled debug mode in the shipped default configuration.
  • Removed obsolete internal update notes and unused banking code.
  • Updated the resource version to 1.30.0.

Version 1.29.0

Highlights

  • More reliable database startup - dependent resources now wait until migrations have actually completed before continuing, preventing startup races during schema updates.
  • Improved interactive ped appearance - peds using interaction profiles now start with their intended default component variation.

Notable Changes

  • Migration sequencing corrected - migration consumers no longer continue merely because a migration left the pending queue; completion is now the deciding state.
  • Updated default license example - the shipped license configuration now uses the first-aid course entry.

Other Changes

  • Updated the resource version to 1.29.0.

Version 1.28.0

Highlights

  • Expanded third-party adapter support — sky_base now adds support for pc-banking, nass_billing, stg-van, and ic3d, extending compatibility across banking, billing, fuel, and vehicle key setups.
  • VMS Documents v2 license support — vms_documentsv2 is now available as a license provider, giving more servers a direct license integration option.
  • Improved ped appearance handling — spawned peds now preserve their built-in visual variations more reliably instead of being reset to a generic look.

Notable Changes

  • Shared account support for pc-banking — society and shared-account flows now work with pc-banking, including auto-detection and manual selection support.
  • Broader auto-detection coverage — nass_billing, stg-van, and ic3d are now picked up automatically when using the standard "auto" configuration flow.
  • More reliable QB / QBox player lookups — invalid player identifiers are handled more cleanly, reducing bad framework-side lookup behavior in edge cases.
  • More tolerant query handling — database queries now behave more safely when no parameter list is passed.

Other Changes

  • Bone labels now use clearer skeletal naming.
  • Phone-related unsupported-feature logging is now more consistent.

Version 1.27.0

Highlights

  • Billing is now routed more consistently through the configured provider — sky_base no longer depends on a single framework-specific billing path and better respects the active billing setup across supported servers.
  • Inventory slot metadata support was expanded — more supported inventory backends can now work with direct slot-based metadata updates, improving compatibility for metadata-driven item workflows.
  • Arabic locale added — sky_base now ships with Arabic translations in addition to the existing language set.

Notable Changes

  • More consistent billing requests across providers — billing data is normalized more cleanly before being handed to the active backend, reducing provider-specific inconsistencies.
  • Batch-friendly framework job lookups — framework-side job-member data retrieval is now better suited for grouped lookups, improving efficiency in larger job-related flows.
  • Clearer ESX inventory behavior — setups using native ESX inventory now report unsupported slot/metadata behavior more clearly instead of failing ambiguously.

Other Changes

  • Internal shared utility code was consolidated to keep the base layer leaner and more consistent.

Version 1.26.0

Highlights

  • New license-provider layer with papa_licensecreator and bit-licenses support — sky_base now supports both systems for license handling and adds a dedicated Config.license selector, so license management can be auto-detected or pinned explicitly like the other adapter-based features.
  • 17mov Phone custom app support — 17mov_Phone is now supported as a phone backend for custom Sky phone apps, app messaging, and phone notifications.
  • Faster streamed interaction NPC handling — interaction peds now spawn more efficiently in larger setups, reducing visible delays when multiple nearby NPCs need to appear.

Notable Changes

  • More reliable license granting on QB / QBox — license assignment now works correctly even for players who do not already have existing license entries.
  • Clearer ESX license behavior — ESX setups without a running license backend now report the problem cleanly, making license-related setup issues easier to identify.
  • Fallback license catalog — sky_base now supports a configurable fallback license list so license UIs remain usable on providers that do not expose their own catalog.
  • Optional papa_licensecreator item handout — license grants can now also hand out the matching physical license item when using papa_licensecreator.
  • More reliable okokPhone custom apps — custom phone apps registered through okokPhone now consistently use the correct owning resource.
  • Quieter ESX diagnostics by default — ESX-specific job debug logs now respect debug mode properly, reducing unnecessary console noise on production servers.
  • New NPC streaming throttle setting — Config.streamNpcMaxSpawnsPerPass lets you control how many streamed interaction NPCs may spawn in a single pass.

Other Changes

  • Existing license handling is now more consistent across supported frameworks and providers.

Version 1.25.0

Highlights

  • Built-in default notification & help-prompt UI — sky_base now ships its own on-screen notification and "Press E" help-prompt UI, replacing the bare native GTA notifications. Notifications support a type/colour (info, success, error, warn) and a custom duration, for a consistent look across every Sky resource out of the box.
  • New phone integrations: RoadPhone, okokPhone, and qs-smartphone V3 — all three are now supported phone backends, auto-detected and selectable via Config.phone. okokPhone and RoadPhone also support custom phone apps and app notifications through the existing phone bridge.
  • Inventory layer rebuilt, clean adapter style — one focused file per inventory under config/inventory/, a shared normalization layer, and a single set of fallbacks. Adapters are smaller and consistent, and the framework files shrank substantially.
  • New inventory support: core_inventory, origen_inventory, jpr-inventory — auto-detected and selectable via Config.inventory = "core", "origen", or "jpr".
  • Framework-native inventory is the default — when no standalone inventory is detected, the framework's own inventory (ESX/QBCore/Qbox/VRP) is used and fully driven by the framework. Pin it explicitly with Config.inventory = "esx" | "qb" | "qbox" | "vrp".
  • Richer inventory API — stashes, shops, trunk and vehicle-plate helpers are now exposed through the bridge for inventories that support them, and report cleanly as unsupported otherwise.

Notable Changes

  • okokPhone adapter — phone-number lookups, custom app registration, and notifications now route through okokPhone. Auto-detected when Config.phone = "auto", or pin it with "okok".
  • qs-smartphone V3 adapter — Quasar's smartphone V3 is now a supported phone backend, auto-detected or selectable with Config.phone = "qs".
  • roadphone adapter — RoadPhone is detected and prioritised when Config.phone = "auto"; custom RoadPhone apps are supported (RoadPhone registers custom apps statically, so a custom app returns a config.json entry).
  • codem banking now uses framework-native banking — the dedicated codem banking adapter has been removed. Config.banking = "codem" now resolves to your framework's own banking backend (qb on QBCore, renewed on Qbox, esx otherwise) and logs an informational note. No action needed for Config.banking = "auto".
  • New vehicle-key providers — added AK47 vehicle keys (Config.vehiclekeys = "ak47") and jc_vehiclekeys (alias Config.vehiclekeys = "jota"), both auto-detected.
  • DS-ServerCreator garage detection — DS-ServerCreator is now auto-detected as a garage backend and added to the garage value list (ds-servercreator).
  • ESX legacy shared-object loading — sky_base now resolves the ESX shared object through both the modern export and the legacy esx:getSharedObject path, so it no longer aborts when the export is briefly unavailable during a server restart. This prevents dependent resources (e.g. sky_mechanicjob) from losing usable-item handling after a full restart.
  • Configurable interaction marker draw buffer — new Config.interactionDrawBuffer controls the extra range beyond interactionDistance where markers are rendered and tracked, for finer control over marker visibility.
  • Czech locale — added Czech (cz) translations.
  • All inventory logic now lives under config/inventory/. Framework-native inventory moved into config/inventory/native/<framework>.lua; the config/framework/<framework>.lua files now contain framework logic only and are much smaller. The active inventory is selected once and routed to a single adapter — no more per-function resource branching.
  • New Sky.FW inventory functions: RegisterStash, OpenStash, ClearStash, AddStashItems, OpenPlayerInventory, RegisterShop, OpenShop, AddTrunkItems, UpdatePlate, plus helpers GetResourceName, GetPlayerInventory, GetItemBySlot, GetItemInfo, StripPNG, StripWebp. When the active inventory does not support a feature, the call logs an English debug line and returns false.
  • ⚠️ AddItem / RemoveItem signature changed — both are now (source, item, amount, slot, metadata). The legacy force argument is removed and an optional slot is added at position 4 (RemoveItem can target a specific slot, then metadata-match, then any). All Sky resources (police / ambulance / mechanic / jobs_base) are already migrated. External resources that called Sky.FW.AddItem(src, item, amount, force, metadata) with a force boolean, or Sky.FW.RemoveItem(src, item, amount, metadata) with metadata at position 4, must update to the new argument positions. All other inventory/weapon functions keep their names, signatures, and return shapes (RemoveItem still returns the number removed).
  • EmmyLua annotations — every Sky.FW inventory function now carries ---@param/---@return documentation.
  • Inventory read caching for every inventory — HasItem (short TTL), the item catalog, and item labels are now cached uniformly across all inventories (previously framework-native only), cutting repeated export calls. Sky.FW.InvalidateItemCountCache(source, itemName?) clears the HasItem cache.
  • Consistent metadata matching & slot normalization across every adapter, resolving subtle differences between inventories in metadata-filtered lookups.

Other Changes

  • Removed the automatic +1.0 Z offset on type-1 interaction markers — markers now draw at their configured coordinates, while explicit per-marker offsets still apply.
  • Removed config/banking/codem.lua — codem banking now maps to the framework-native banking backend.
  • Removed config/inventory/{esx,qb,qbox,vrp}.lua — framework-native inventory now lives under config/inventory/native/.
  • Auto-detection registers core_inventory, origen_inventory, and jpr-inventory; origen is preferred over ox when both are present.

Version 1.24.0

Highlights

  • New one_inventory support — auto-detected and selectable via Config.inventory = "one". Item, metadata, slot, and weapon handling all route through one_inventory.
  • New codem banking backend — auto-detected and selectable via Config.banking = "codem". Job/society balances are read and updated through codem banking, with an automatic fallback to your framework's banking when needed.
  • Custom phone apps — sky_base can now register custom phone apps and push app notifications through the active phone adapter (currently lb, codem, and roadphone), so dependent resources can surface their own phone UI and alerts.
  • Streamed interaction NPCs — interaction-point peds now spawn and despawn based on player proximity, lowering the client entity count and improving performance on maps with many NPCs. Controlled by Config.streamNpcEnabled (set false for the previous "always spawned" behaviour).

Notable Changes

  • one_inventory adapter — adds config/inventory/one.lua and registers one_inventory in auto-detection. Config.inventory = "auto" picks it up automatically; set "one" to pin it.
  • codem banking adapter — adds config/banking/codem.lua. Auto-detection recognises codem banking and prefers it when present, resolving the correct backend and ensuring job accounts exist on first use.
  • Custom phone app exports — exports["sky_base"]:RegisterCustomPhoneApp(app), exports["sky_base"]:SendCustomPhoneAppMessage(identifier, data), and exports["sky_base"]:SendPhoneAppNotification(data) are available for supported phone adapters. RoadPhone custom apps return a config.json entry because RoadPhone registers custom apps statically.
  • Interaction NPC streaming options — new Config.streamNpcDistance (range a player must be within for an NPC to exist) and Config.streamNpcRefreshMs (how often the streaming pass re-evaluates distances) tune the new behaviour.
  • Database index management — Sky.DB.Migrate now ensures declared indexes are present on already-existing tables, creating plain indexes asynchronously in the background so startup is not blocked. A new Sky.DB.EnsureIndex utility adds an index or unique key to an existing table; it is idempotent and safe to call on tables sky_base does not own. Unique keys are applied only when a table is first created, to avoid failures on pre-existing data.
  • Standardized job-member lists — Sky.FW.GetJobUsers now includes each member's name on ESX, QBCore, and QBox, removing a separate name lookup per member (faster boss menus).
  • ESX weapon name normalization — weapon names passed to ESX are now consistently upper-cased, preventing case-sensitivity failures on weapon add, remove, and possession checks.
  • Ordered resource auto-detection — when several running resources could map to the same config option, detection now follows a defined priority order instead of an arbitrary one.

Other Changes

  • Removed the dedicated hex inventory bridge — with Config.inventory = "hex", sky_base now uses the configured framework's own inventory functions instead of a separate adapter file.
  • Interaction NPCs are now cleaned up on resource restart, preventing orphaned peds.
  • Optimized marker interaction handling for interaction points.

Version 1.23.0

Highlights

  • Fixed usable items on vRP — Sky.FW.RegisterUsableItem now registers and executes the supplied callback through the vRP inventory API. Required items such as the job tablet work correctly even when their alternative radial-menu entry point is disabled.
  • Safer RTX Housing integration — the rtx_housing adapter now handles missing or invalid property data without causing runtime errors.

Notable Changes

  • vRP usable-item callbacks — registered items now receive a Use action that forwards the player source and item data through the shared callback contract.
  • vRP tablet access — players carrying the configured tablet item can open it from their inventory when Config.Tablet.enabled and Config.Tablet.requireItem are enabled, without depending on Config.JobRadial.enabled.
  • RTX Housing property guard — the adapter verifies that property is a table before accessing property.doors. Nil and non-table values return early, preventing runtime errors in config/housing/rtx.lua.

Other Changes

  • vRP no longer creates registered usable items without an executable action.

Version 1.22.0

Highlights

  • codem-wallet license integration for ESX — codem-wallet is now supported as a primary license-management system. The shared Sky.FW license functions can correctly read and manage player licenses on ESX servers that use codem-wallet, extending framework compatibility.
  • Unified job-cache synchronization across frameworks — ESX, QBCore, and QBox client job-change events now explicitly notify the server through the centralized sky_base:updateJob flow. This keeps the server-side player job cache current while reducing duplicated framework-specific synchronization logic.

Notable Changes

  • QBCore / QBox job updates — QBCore:Client:OnJobUpdate now triggers sky_base:updateJob on the server, ensuring job changes immediately refresh the shared server-side player cache.
  • Streamlined ESX job updates — the client-side esx:setJob handler now triggers the centralized server update directly, removing the need for separate server-side esx:setJob and sky_base:updateJob listeners to perform the same cache refresh.
  • External job-cache invalidation — added a dedicated event listener that invokes the centralized player job-cache update logic. External resources can therefore request a cache refresh even when the normal esx:setJob event is not fired.
  • Predictable ESX duty values — Sky.FW.GetJobData now consistently returns false for duty status when the underlying ESX framework does not define an onDuty field. Duty checks therefore always receive a boolean instead of sometimes receiving nil.
  • VMT lightbar vehicle-property restore — saved modLightbar values are now reapplied to vehicle modification slot 49. Lightbar selections captured in vehicle properties persist correctly through garage spawning, mechanic tuning saves, and other Sky.Vehicle:SetVehicleProperties restore flows.

Other Changes

  • Older vehicle-property payloads without modLightbar remain compatible.
  • Job synchronization behavior is now more consistent between ESX, QBCore, and QBox.

Version 1.21.0

⚠️ You MUST replace the /config/framework folder

Many servers keep their customized framework files and skip this folder on updates — do not skip it this time. The job & duty security hardening and the new caching live in esx.lua / qb.lua / qbox.lua. If you keep the old framework files, the cache stays vulnerable and job/duty state will be out of sync. Merge any custom edits into the new files instead of keeping the old ones.
Security update — this release hardens the player job & duty cache. After updating sky_base, also update sky_jobs_base and every Sky job resource (sky_ambulancejob, sky_policejob, sky_mechanicjob) to their matching releases so job and duty state stays in sync. See Update Instructions.

Highlights

  • Security — hardened player job & duty cache. Job and duty changes are now resolved server-side directly from your framework instead of trusting data sent by the client. This protects the cache that every Sky job script relies on to authorize on-duty actions. Requires the matching sky_jobs_base update.
  • Performance — comprehensive data caching. Inventory data (item lists, labels, and item-possession checks) and job-member lists are now cached across ESX, QBCore, and Qbox, sharply reducing repeated database queries and inventory/export calls for noticeably better responsiveness on busy servers.
  • bcs_companymanager banking & billing support — auto-detected when Config.banking = "auto" / Config.billing = "auto", or pin it with "companymanager". Shared company balances and bill sending now route through bcs_companymanager. Updated value lists.

Notable Changes

  • ESX duty no longer reset on a cache refresh — on standard ESX (which has no native duty field) an on-duty player was being flipped off whenever the cache refreshed; duty state is now preserved.
  • Multi-character logout clears the cache server-side (QBCore / Qbox) — switching characters no longer leaves the previous character's job cached until the next login.
  • More reliable Qbox player loading — the correct player is now identified on load and license checks are guarded, so a missing player record or license no longer throws an error.
  • Faster boss menus on QBCore & Qbox — member lists now include character names directly, removing a separate database lookup for each offline member.
  • ESX job-grade sync — when a job definition is updated, its ESX job grades are now refreshed so grade changes apply without a restart.
  • Consistent gender detection — gender is now compared as strings across all frameworks, preventing mismatches between stored string and numeric values.
  • More robust admin-command permissions — admin commands are now wired to both FiveM's native restricted-command system and Sky's own permission checks for more reliable gating.
  • RTX Housing dispatch fix — corrected the coordinates sent for dispatch, fixing wrong locations for the ambulance job.
  • tgiann inventory — fixed an item label display issue.

Other Changes

  • ESX item-possession checks now aggregate stacked items correctly when no metadata is specified.
  • ESX job-grade salaries are no longer overwritten when a job definition is updated — a salary is only applied when the grade is first created.

Version 1.20.0

Highlights

  • Added okokGasStation fuel support — auto-detected and selectable via Config.fuel = "okokGasStation" (alias "okokfuel"). Updated value list: auto, lc, ox, legacy, rcore, hex, okokGasStation, okokfuel, native.

Notable Changes

  • ESX + Quasar inventory — wholesale/shop purchases no longer fail with a false "Not enough inventory space" message; free space is now checked through qs-inventory instead of the generic ESX carry check.
  • QBCore / Qbox — player-load handling now hooks the correct OnPlayerLoaded event, so dependent scripts reliably receive sky_base:playerLoaded.
  • ESX — duty status now always resolves to a real boolean (true / false) instead of occasionally returning nil, for consistent duty checks.
  • codemv2 billing — expanded the codemv2 billing integration.
  • Fixed vehicles incorrectly getting default tire smoke after spawn, garage restore, or mechanic tuning loads — the saved on/off state is now respected.
  • Interaction points are processed more efficiently, improving performance and input responsiveness on servers with many interaction points.

Other Changes

  • Added an option to force individual Sky.Debug messages to print even when global debug is disabled (developer aid).
  • Hardened global config-table initialization so core tables are set up consistently before other config files load.

Version 1.19.0

Highlights

  • vms_cityhall billing support — auto-detected when Config.billing = "auto". Bills are now sent in the correct invoice line-item format and preserve the full society account name.

Notable Changes

  • ESX + jobs_creator — the player job & duty cache now stays in sync when players are hired, fired, or toggle duty through jobs_creator. These actions bypass the standard ESX job events, which previously left the cache stale for ESX players.
  • Qbox — boss-menu job data no longer errors on stale or missing player records; offline-player lookups are now guarded and a failed lookup logs the affected identifier instead of crashing the menu.
  • Fixed a Lua error ("attempt to perform unsupported operation on a vector value") when an interaction marker is configured with an offset.
  • Fixed a false type-validation error when registering callbacks.

Other Changes

  • Added Portuguese (pt) locale.

Version 1.18.0

Highlights

  • Added a new unified currency & formatting system — the new Sky.Currency API plus a public config/currency.lua let you define custom currencies and display formatters (symbol, symbol position, thousands/decimal separators, rounding, digit grouping, and time/clock formatting). Ships with ready-to-use money and time-based examples and is fully extensible.
  • Added an internal, database-backed banking option — set Config.banking = "sky" to let sky_base manage job/society accounts in its own database, with no external banking resource required. Additionally Config.useSkyBankingFallback (default false) makes sky_base fall back to its own accounts whenever the selected banking resource is unavailable.
  • Added a unified housing entrance resolution system — a new /config/housing folder with adapters for multiple housing scripts (nolag, qs, rtx, rx, sn, vms) and a server-side fallback so entrance locations resolve reliably.

Notable Changes

  • Added Jaksam banking support — auto-detected and selectable via Config.banking = "jaksam". Updated value list: auto, sky, crm, qs, okok, bablo, fd, rx, tgg, kartik, esx, qb, renewed, wasabi, groot, ak47, jaksam.
  • Added Jaksam and Wasabi progressbar support — selectable via Config.progressbar. Updated value list: auto, esx, ox, qb, mythic, hex, jaksam, wasabi. Servers running multiple Jaksam Creator resources are now handled correctly.
  • Added myFuel support — auto-detected and selectable via Config.fuel = "myFuel". Updated value list: auto, lc, ox, legacy, rcore, hex, myFuel, native.
  • Improved tgiann, qs, and codem inventory integrations for more consistent item, metadata, and weapon handling.
  • Shared/society banking accounts are now auto-created on first access (kartik & qb banking) — jobs added after the banking resource has started work without a server restart.

Other Changes

  • Raised the default interactionDistance to 2.0 and added a new Config.defaultMarkerSize (default 1.2) used when a marker has no explicit scale.
  • Config.showMarkersWithTarget now defaults to true, so configured interaction markers stay visible alongside an active target backend.

Version 1.17.0

Highlights

  • Added progressbar adapter system — new unified Sky.Functions.Progress / Sky.Functions.Bar API with auto-detection across esx, qb, ox, mythic, and hex progressbar resources. Configure via Config.progressbar = "auto" (or pin a specific adapter). Updated value list: auto, esx, qb, ox, mythic, hex.

Notable Changes

  • Added jacksam jobscreator support on the QBCore framework — jobs created through jacksam's jobscreator are now recognized by the QBCore framework integration.

Other Changes

  • No additional changes.

Version 1.16.0

Highlights

  • Added hex_4_inventory support — auto-detected and selectable via Config.inventory = "hex". Updated value list: auto, esx, qb, qbox, vrp, ox, qs, ps, codem, tgiann, jaksam, ak47, hex.

Notable Changes

  • Fixed Sky.FW.AddJobGrade on ESX and QBCore silently misbehaving on the duplicate-grade guard — the existence check was being called with the full gradeData table instead of the grade number, so it never reported "grade already exists" correctly. Adding grades through Sky.FW.AddJobGrade now reliably skips ones that are already registered.
  • Removed a leftover debug print that fired for every item on every Qbox inventory normalization call (console spam, no behaviour change).

Other Changes

  • No additional changes.

Version 1.15.0

Highlights

  • Added qb-inventory support - auto-detected and selectable via Config.inventory = "qb-inv".
  • Added normalized inventory slot and metadata helpers for supported inventory adapters.
  • Added Russian locale support via Config.locale = "ru".

Notable Changes

  • Added Dynamic Interaction point distance
  • Inventory item metadata handling was improved for several adapters, including metadata-aware item and weapon removal where the inventory backend supports it.

Other Changes

  • No additional changes.

Version 1.14.0

Breaking — the admin permission system has been replaced. After updating sky_base, every Sky job resource (sky_jobs_base, sky_ambulancejob, sky_policejob, sky_mechanicjob) must also be updated to the matching release, and three one-time ACEs must be added to your server.cfg. See Update Instructions.

Highlights

  • New admin permission system — Sky.Config.AdminGroups and the related Sky.FW.IsAdmin / Sky.FW.HasGroup / Sky.FW.GetGroup are gone. Each job's Config.CommandPermissions table is now the single source of truth for who can use which admin command. At server start sky_base auto-emits add_ace group.<g> sky_<resource>.<command> allow for every entry, and admin commands resolve via a single IsPlayerAceAllowed check at runtime. Fixes the QBox bug where every admin command silently denied admins because qbx_core:HasPermission was deprecated in qbx_core v1.8.0 and removed. QBCore wires both group.* and qbcore.* prefixes for resilience; on ESX the same group.* ACE principals are picked up via es_extended's setGroup.
  • Added g-banking and g-billing support (groot) — auto-detected and selectable via Config.banking = "groot" / Config.billing = "groot".
  • Added AK47 banking and AK47 inventory support — auto-detected and selectable via Config.banking = "ak47" / Config.inventory = "ak47".

Notable Changes

  • Added codem-phone integration — auto-detected and selectable via Config.phone = "codem". Updated value list: auto, esx, qb, d, gks, lb, lb-unique, yserie, codem.
  • Fixed qb-target compatibility on QBCore servers — radial menus and workshop-creator zones now register correctly. The shim was using the wrong export names (AddSphereZone / AddGlobalOption), causing zones to silently no-op on QBCore.
  • Interaction points now support a per-point forceMarkerInteraction flag — when set, that single interaction always uses marker + help notification, even if a target backend (ox_target / qb-target) is active. Useful for specific markers that should stay as markers regardless of the global target setting.
  • Added a global Config.showMarkersWithTarget toggle (default false) — when set to true, configured interaction markers stay drawn alongside the target backend instead of being hidden. Pairs with the per-point forceMarkerInteraction flag for finer control: server-wide on/off via this setting, per-interaction override via the flag.

Other Changes

  • No additional changes.

Version 1.13.0

Highlights

  • Added fd_banking billing integration — auto-detected and selectable via Config.billing = "fd". Updated value list: auto, esx, codem, codemv2, okok, jacksam, quasar, vms, rxbilling, wasabi, corem, fd.
  • Added hex_3_fuel fuel adapter — auto-detected and selectable via Config.fuel = "hex". Updated value list: auto, lc, ox, legacy, rcore, hex, native.

Notable Changes

  • Renewed-Banking: jobs that are added after Renewed-Banking has already started now work without a server restart — their accounts are created on first use.
  • Renewed-Banking: Sky.Job.AddMoney / Sky.Job.RemoveMoney now correctly return false when the underlying transaction is rejected, so callers can react to a failed payment.
  • Interaction NPCs configured without a pedHash are now skipped with a warning instead of breaking the spawn flow.

Other Changes

  • No additional changes.

Version 1.12.0

Highlights

  • Added Wasabi Banking (wasabi_banking) support — auto-detected and selectable via Config.banking = "wasabi".
  • Renamed the banking key "qbox" to "renewed" for the Renewed-Banking integration. Updated value list: auto, crm, qs, okok, bablo, fd, rx, tgg, kartik, esx, qb, renewed, wasabi.

Notable Changes

  • Breaking: if you previously set Config.banking = "qbox" for Renewed-Banking, change it to Config.banking = "renewed". Config.banking = "auto" still detects Renewed-Banking automatically without changes.
  • Fixed interaction NPC onSpawn callbacks not firing when an existing entity is reused (e.g. when a station creator rebuilds while preserving the existing ped). scenario and onSpawn hooks now also apply to preserved peds.
  • Improved Qbox job grade normalization for consistency with other framework integrations.
  • Added a debug warning when vehicle keys are added or removed without a configured key adapter handler — helps diagnose Config.vehiclekeys misconfigurations.

Other Changes

  • No additional changes.

Version 1.11.0

Highlights

  • Added qb-target support alongside ox_target via a new Config.target selector ("ox", "qb", "auto", or "none"). The backend is loaded from the new /config/target folder and replaces the marker + help-notification interaction when a target backend is active.
  • Default Config.target = "none" keeps the existing marker + Press E behaviour for every existing server — target backends are strictly opt-in.

Notable Changes

  • Breaking: Config.enableOXTarget has been removed. Replace it with Config.target = "ox" (or "qb" / "auto" / "none").
  • Reverted the Qbox permission detection change from 1.10.1 — Qbox admin / group checks use qbx_core:HasPermission again.

Other Changes

  • No additional changes.

Version 1.10.1

Highlights

  • Improved weapon handling across ox_inventory, qs-inventory, ps-inventory, jaksam, codem, and tgiann — weapon add, remove, and carry checks now go through each inventory's native logic for cleaner behaviour.
  • Qbox admin and permission detection updated for Qbox v1.8.0 compatibility — now uses the native FiveM ACE permission system.
  • Interaction NPCs can now play a GTA scenario on spawn and run a custom setup callback (e.g. give armor, equip weapons, add extra tasks) through new optional scenario and onSpawn options.

Notable Changes

  • Removed a leftover debug message that printed on every Qbox permission check.

Other Changes

  • No additional changes.

Version 1.10.0

Highlights

  • Banking system refactored into dedicated per-banking adapter files (crm, qs, okok, bablo, fd, rx, tgg, kartik, esx, qb, qbox), replacing inline framework code.
  • Added Config.banking selector with auto detection (matches the existing inventory, fuel, and vehiclekeys pattern).
  • Added Config.defaultCallbackTimeout to control the timeout for client-triggered callbacks.
  • Added metadata propagation for jaksam_inventory AddItem / RemoveItem calls.

Notable Changes

  • Fixed weapon transfer handling across QBCore and Qbox frameworks.

Other Changes

  • No additional changes.

Version 1.9.0

Highlights

  • Inventory system refactored into dedicated per-inventory adapter files (ox, qs, jaksam, codem, ps, tgiann, esx, qb, qbox, vrp), replacing inline framework code.
  • Added Corem support (crm-billing and crm-banking) for billing and society money management across ESX, QB, and QBox.

Notable Changes

  • Default language changed from German to English.

Other Changes

  • No additional changes.

Version 1.8.0

Highlights

  • Added fuel bridge system with auto-detection for lc_fuel, ox_fuel, LegacyFuel, rcore_fuel, and native GTA fallback.
  • Added dedicated vehicle key adapter section with support for brutal, mk, mrnewb, msk, qb, quasar, vehicles_keys, wasabi, and kiminaze.
  • Added centralized Sky.DB.Migrate() for declarative database migrations across all Sky-Systems scripts.
  • Added support for wasabi-billing, RxBilling, and 17mov_Phone.

Notable Changes

  • Added migration tracking system to synchronize resource initialization with pending database schema updates.
  • Added retry logic for sky_base export loading (up to 5s) to prevent failures from resource load order issues.
  • Added cd_garage persistent vehicle plate update trigger when license plates are modified.
  • Added Qbox support to the Quasar garage adapter.
  • Added inventory-full notification when calling Sky.Reward.

Other Changes

  • Fixed Quasar garage compatibility issues with Qbox.
  • Fixed case-insensitive weapon detection across ESX, QB, and Qbox frameworks.

Version 1.7.0

Highlights

  • Added Sky.FW.GetPlayerDirectoryQueryConfig for QB, QBox, and VRP frameworks.
  • Added tgg-banking support for society money management across ESX, QB, and QBox.
  • Added kartik-banking support for society money management across ESX, QB, and QBox.

Notable Changes

  • Added hex_4_inventory support for ESX with pcall fallbacks for missing ESX item methods.
  • Fixed GetPlayerDirectoryQueryConfig for QB and QBox.

Other Changes

  • Fixed SanitizeForSQL stripping Unicode characters; now preserves Unicode letters and removes only SQL-dangerous characters.

Version 1.6.0

Highlights

  • Fixed missing locales variable in Security.lua causing nil index error in cooldown function.
  • Interaction points now support reusing existing NPC entities and preserving peds on rebuild (keepNpc).

Notable Changes

  • Added GetPlayerDirectoryQueryConfig function for ESX framework.
  • Fixed import.lua initialization order so Sky table is initialized before export assignment.
  • Optimized polling intervals for callbacks and database queries to reduce CPU overhead.
  • Interaction loop now runs at 0ms when in range for frame-accurate marker rendering.

Other Changes

  • OxMySQL errors now log failing queries through Sky.Debug before propagating.
  • Added Finnish translation.

Version 1.5.0

Highlights

  • Refactored ESX player retrieval to direct ESX.GetPlayerFromId() calls for better compatibility.
  • Inventory items now include metadata across ESX, QB, and QBox.

Notable Changes

  • ChangePlayerName now synchronizes live player metadata in addition to DB updates.
  • Added normalizeInventoryMetadata() helper to unify metadata/info handling.
  • Improved qs-banking compatibility with resource/export fallbacks and automatic society_ prefix fallback.
  • Added VMS/CMS billing integration (config/billing/vms.lua).

Other Changes

  • Fixed Locales variable capitalization in shared initialization.

Version 1.4.0

Highlights

  • Added ox_inventory metadata support for item handling across ESX, QB, and QBox.
  • Added support for ESX 1.13+ static methods.

Notable Changes

  • Player data retrieval now properly distinguishes source IDs and string identifiers.
  • ESX version detection now uses resource metadata instead of dynamic checks.
  • Standardized player data access via runPlayerMethod helper.

Other Changes

  • Fixed getFirstname and getLastname calls for ESX.
  • Updated qs-banking integration to correct export/property for balances.
  • Refactored database module debug string formatting.