Browse docs

Changelog

Full change history for sky_base.
Latest

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 and codem), 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 exportsexports["sky_base"]:RegisterCustomPhoneApp(app), exports["sky_base"]:SendCustomPhoneAppMessage(identifier, data), and exports["sky_base"]:SendPhoneAppNotification(data) are available for supported phone adapters.
  • 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 managementSky.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 listsSky.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 vRPSky.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 ESXcodem-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 updatesQBCore: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 valuesSky.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 systemSky.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.