Update InstructionsA guided update for server owners1.42.01.43.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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_base1.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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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.
Update InstructionsA guided update for server owners1.41.01.42.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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.
Update InstructionsA guided update for server owners1.40.11.41.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
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.lua
Previous value
New shipped value
Action
Config.notification
No selection setting; built-in notifications
"default"
Add this field inside the existing Config table.
Config.helpnotify
No 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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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 InstructionsA guided update for server owners1.40.01.40.1
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
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.
Phase 4 of 5
SQL & items
No SQL, item or locale migration is required. Keep saved vehicle records; do not reset or reimport the database.
Phase 5 of 5
Restart & test
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.
sky_base/config/banking_init.lua — initialization is now included in sky_base/config/integration/banking/_init.lua.
Update InstructionsA guided update for server owners1.39.01.40.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
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:
Framework
Table
Owner column
Properties column
Model column
ESX
owned_vehicles
owner
vehicle
vehicle
QBCore
player_vehicles
citizenid
mods
hash
Qbox
player_vehicles
citizenid
mods
vehicle
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.cfgbefore 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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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.
Update InstructionsA guided update for server owners1.38.01.39.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace 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.
Phase 3 of 5
Merge config
All Sky Base settings are maintained in files. /jobconfig does not manage them.
In sky_base/config/config.lua, merge these two changed defaults:
Setting
Previous default
New default
Config.defaultCallbackTimeout
10000 milliseconds
300000 milliseconds (five minutes)
Config.callbackPerformance.warningsEnabled
true
false
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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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 InstructionsA guided update for server owners1.37.01.38.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
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.
Phase 2 of 5
Replace files
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.
Phase 3 of 5
Merge config
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.
Phase 4 of 5
SQL & items
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.
Phase 5 of 5
Restart & test
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.
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 InstructionsA guided update for server owners1.36.01.37.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server and back up the complete sky_base folder. Preserve deliberate edits below config/framework, config/banking, config/billing, config/fuel, config/housing, config/inventory, config/phone, config/progress, config/target, config/vehiclekeys, and config/voice for a controlled reapplication.
Install 1.37.0 as one clean package. Its manifest, adapters, shared runtime, and source files must remain on the same version.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum replace fxmanifest.lua, the complete source and config/locales directories, and every adapter listed under Changed Files. Add the new config/fuel/qb.lua, config/housing/esx_property.lua, config/housing/qbx_properties.lua, and config/phone/sky_phone.lua files.
Phase 3 of 5
Merge config
/jobconfig is not applicable to sky_base. Start from the new config/config.lua; no executable selector default changes between 1.36.0 and 1.37.0.
Config path
1.36.0
1.37.0 shipped value / action
Config.phone
"auto"
Still "auto"; the selector adds the explicit "sky" option
Config.fuel
"auto"
Still "auto"; the selector adds the explicit "qb" option
Use Config.phone = "sky" only with Sky Phone and Config.fuel = "qb" only with the intended QBCore fuel provider. Review deliberate adapter edits line by line because target removal, voice proximity, provider returns, owned-property counts, and payment results now use expanded contracts.
Phase 4 of 5
SQL & items
No Base SQL migration, inventory item, image, or stream asset is required. Replace config/locales as part of the package even though no new customer action is needed for locale data.
Phase 5 of 5
Restart & test
Start sky_base before all dependent resources. Confirm the active provider selections in the server log, then test Sky Phone registration and notifications, fuel read/write, owned vehicle/property counts, adding and removing scoped targets, voice proximity changes, Wasabi invoice/payment outcomes, ox_lib progress cancellation, ESX inventory item refresh, and QBCore vehicle-key assignment. Verify that a dependent resource waits while a Base database migration is active.
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 InstructionsA guided update for server owners1.35.11.36.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Before updating, stop the server and back up the complete sky_base resource plus intentional edits below config/framework, config/billing, config/fuel, config/garage, config/inventory, config/license, and config/vehiclekeys.
Install 1.36.0 as one clean package. Its adapters, manifest, shared runtime, and source files must stay on the same version.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum replace fxmanifest.lua, the complete source and config/locales directories, every listed changed adapter, and add config/fuel/msk.lua, config/garage/msk.lua, and config/license/quasar.lua.
Phase 3 of 5
Merge config
/jobconfig is not applicable to sky_base; all Base settings remain plaintext file values. Start from the new config/config.lua.
Config path
1.35.1
1.36.0 shipped value / action
Config.garage
"auto"
Still "auto"; the selector comment adds the explicit option "msk"
Config.license
"auto"
Still "auto"; the selector comment adds the explicit option "quasar"
Config.fuel
"auto"
Still "auto"; the selector comment adds the explicit option "msk"
Use Config.garage = "msk" only with msk_garage on ESX. The shipped adapter maps land, boat, and aircraft storage to A, boat_A, and heli_A; preserve or deliberately adapt those identifiers in config/garage/msk.lua. Use Config.fuel = "msk" only with msk_fuel. Use Config.license = "quasar" only with qs-licenses; the license catalogue continues to come from Config.Licenses.catalog, and granting a Quasar license requires the target player to be online.
Phase 4 of 5
SQL & items
No SQL migration or Base-owned inventory item, image, or stream asset is required. New integrations are delivered as provider adapters. Sky.DB.Select and Sky.DB.Update are available to dependent resources, while Sky.DB.Transaction now rejects mysql-async instead of reporting unreliable transaction success.
Phase 5 of 5
Restart & test
The console reports sky_base1.36.0 before dependent resources start.
ESX, QBCore, or Qbox duty changes and on-duty counts match the active framework state.
Jobs Creator duty changes settle on the framework-confirmed result.
The selected MSK Garage, MSK Fuel, or Quasar license provider starts before Base and completes its core operation.
MSK Garage can store, retrieve, re-plate, and re-key a vehicle even after the original entity is gone.
RxBilling and Groot create the intended invoice type and ox_inventory accepts or rejects items through its own result.
Player logout and relogin clears and rebuilds framework state without stale migration state.
oxmysql database select, update, and transaction calls complete successfully; mysql-async is not used for transactions.
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 InstructionsA guided update for server owners1.35.01.35.1
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server and back up the complete Base resource plus intentional edits under config/framework.
Install 1.35.1 as one clean package; its framework adapters, manifest, and source runtime must match.
Phase 2 of 5
Replace files
Delete and reinsert the resource. Replace config/framework/esx.lua, qb.lua, qbox.lua, fxmanifest.lua, config/locales, and source completely. Remove any old source/server/framework/duty_index.lua left by 1.35.0.
Phase 3 of 5
Merge config
/jobconfig is not applicable to Base. No executable public config value changed in 1.35.1.
Phase 4 of 5
SQL & items
No SQL, Base-owned inventory item, image, stream asset, or provider secret changed.
Phase 5 of 5
Restart & test
The console reports Base 1.35.1 before dependent resources start.
QBCore and Qbox duty changes/counts reflect their framework or active Jobs Creator state.
ESX-dependent code does not assume Base provides a native duty mutation/count in this patch.
The removed duty-index file is not loaded by the manifest.
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 InstructionsA guided update for server owners1.34.01.35.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server. Back up the complete sky_base resource and any intentional edits below config/framework, config/fuel, config/garage, config/phone, and config/tablet.
Install 1.35.0 as one clean package. Its adapters, manifest, shared runtime, and source files must stay on the same version.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum replace fxmanifest.lua, the complete source and config/locales directories, all changed phone/framework adapters, and add config/fuel/cdn.lua, config/garage/op_v3.lua, config/phone/sd.lua, and config/tablet/sd.lua. Keep the updated config/garage/op.lua together with op_v3.lua.
Phase 3 of 5
Merge config
/jobconfig is not applicable to sky_base; all Base settings remain plaintext file values. Start from the new config/config.lua.
Config path
1.34.0
1.35.0 shipped value / action
Config.defaultCallbackTimeout
5000
10000 milliseconds
Config.phone
"auto"
Still "auto"; new explicit option "sd"
Config.tablet
"default"
Still "default"; new options "auto" and "sd"
Config.fuel
"auto"
Still "auto"; new explicit option "cdn"
Config.garage
Existing selector
No value change; "op" now selects a V2/V3-compatible adapter
Apply the changed runtime default when manually merging:
config/config.lua
Config.defaultCallbackTimeout = 10000
With Config.tablet = "auto", SD is recognized from a started sd-tablet; SD tablet operations use sd-phone exports, so start both resources. Use Config.fuel = "cdn" only with cdn-fuel. OP Garages V3 requires its V3 metadata; missing or invalid metadata intentionally keeps the legacy adapter.
Phase 4 of 5
SQL & items
No SQL migration or Base-owned inventory item, image, or stream asset is required. Database schemas created by Base now inherit the database administrator's charset and collation.
Phase 5 of 5
Restart & test
The console reports sky_base1.35.0 before dependent resources start.
Slow but valid callbacks can complete inside the new 10000 ms limit.
The selected phone and tablet provider can register an app and deliver a notification.
SD tablet mode has both sd-tablet and sd-phone started.
CDN Fuel reads and writes fuel when Config.fuel = "cdn".
Config.garage = "op" stores and retrieves a vehicle on the installed OP V2 or V3 release.
QB/Qbox Jobs Creator duty changes settle on the framework-confirmed state.
A missing JSON resource file writes a useful English diagnostic and returns cleanly.
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 InstructionsA guided update for server owners1.33.01.34.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server and back up the complete sky_base folder. Save intentional changes under config/banking, config/billing, config/framework, config/fuel, config/inventory, config/license, and other provider directories separately before replacing the package. If SaltyChat is installed, also back up its external config.json.
Install 1.34.0 as one clean package. The voice adapters, duty index, inventory event bridge, manifest entries, locales, and shared runtime must come from the same build.
Phase 2 of 5
Replace files
Delete and reinsert the complete resource. At minimum, replace fxmanifest.lua, the complete source directory, every changed adapter listed under Changed Files, and the complete config/locales directory. Keep the new config/voice directory, config/inventory/ox_events.lua, config/banking/devmosaic.lua, config/banking/retro.lua, config/billing/retro.lua, and config/license/stg-walletv2.lua.
Phase 3 of 5
Merge config
/jobconfig does not manage sky_base. Start from the new config/config.lua and transfer only deliberate server-specific values.
Config path
1.33.0
1.34.0 shipped value / action
Config.voice
Missing
"auto"; accepts "none", "pma", "saltychat", and "yaca"
Config.voiceRadioSounds.enabled
Missing
false; enable only when provider-native clicks are wanted
Config.voiceRadioSounds.transmitStartVolume
Missing
18
Config.voiceRadioSounds.transmitEndVolume
Missing
8
Config.tablet
"auto"
"default"; keeps the bundled Jobs Base tablet active, while "lb" and "roadpad" are deliberate opt-ins
Config.license
"auto"
Still "auto"; new explicit value "stg-walletv2"
Config.billing
"auto"
Still "auto"; new explicit value "retro", whose invoice creation is unsupported
Config.fuel
"auto"
Still "auto"; new explicit value "stg-van"; auto now detects stg-vanaheimfuel correctly
Config.banking
"auto"
Still "auto"; new explicit values "devmosaic" and "retro"
Config.target
"auto"
"none"; markers and help notifications are now the default
Config.maxPing
1000
5000 milliseconds
Config.locale
Existing locale selector
Still unchanged; "it" is now available
Add the complete new voice configuration. The following is executable after the main Config table and avoids rebuilding that table:
Config.tablet changed from "auto" to "default". Leave it at "default" so the bundled Jobs Base tablet remains the initial system. Set "lb" or "roadpad" only when intentionally opting into an installed external provider.
Auto-detection checks for a started supported voice resource, so start the chosen provider before sky_base. For SaltyChat incoming-traffic state, merge this property into the provider's existing file; do not replace the rest of its configuration:
saltychat/config.json
{
"RequestRadioTrafficStates": true
}
Provider-native clicks should remain disabled when another radio interface already plays its own sounds. Numeric channel IDs are preserved; text channel IDs are mapped by the active provider where necessary. SaltyChat's external property is a prerequisite for incoming activity and is not managed by Base.
Replace config/locales completely. The release adds Italian. Every bundled locale now contains notifications.streamerModeTitle, enabled, disabled, rewardTitle, and commandTitle, plus commandErrors.missingParameter, tooManyParameters, mustBeNumber, cannotUseMeFromConsole, invalidPlayerId, playerNotFound, invalidPercentage, invalidSelection, and invalidBoolean. Select Italian only with Config.locale = "it".
Phase 4 of 5
SQL & items
No SQL migration or Base-owned inventory item is required. Install and start any newly selected external provider before sky_base according to that provider's own documentation. Fuel auto-detection maps stg-vanaheimfuel to "stg-van". Retro Billing cannot create invoices. The ox_inventory bridge is loaded by the new manifest and needs no additional configuration.
Phase 5 of 5
Restart & test
The console reports sky_base1.34.0 before dependent resources start.
The selected voice provider joins/leaves channels and reports local plus remote transmission state correctly; SaltyChat has RequestRadioTrafficStates = true when incoming activity is required.
Radio clicks play only when voiceRadioSounds.enabled = true.
Config.tablet = "default" opens the bundled Jobs Base tablet; an external provider is used only after deliberately selecting "lb" or "roadpad".
The selected banking, billing, fuel, and license integrations complete a supported read/write action.
JackSam invoices target the player recipient type, and RxBilling receives sender and target in the correct order, including source-less requests.
Markers remain usable with Config.target = "none"; a deliberate target selection still works when configured.
Framework duty lists update after join, leave, job change, duty change, and resource restart.
Usable items and ox_inventory item-count updates reach dependent resources.
Shared command feedback follows the configured locale.
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.
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 InstructionsA guided update for server owners1.32.11.33.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server and back up the complete sky_base folder. Preserve any intentional edits under config/framework, banking, billing, garage, phone, inventory, license, target, tablet, or vehiclekeys separately.
Install 1.33.0 as a clean package. Do not overlay it on 1.32.1, because new adapters and deterministic manifest entries are required together.
Phase 2 of 5
Replace files
Replace fxmanifest.lua, source, and the complete changed provider folders. Keep the new config/tablet, config/license/qbox.lua, config/license/standalone.lua, config/target/vivum.lua, config/banking/synz.lua, config/billing/synz.lua, and config/vehiclekeys/jc.lua files.
Phase 3 of 5
Merge config
/jobconfig does not manage sky_base. Start from the new config/config.lua and transfer only intentional server values.
Config path
1.33.0 shipped value / action
Config.tablet
New: "auto"; supported values are "default", "lb", and "roadpad"
Config.license
Keep "auto" or select one provider; new explicit values include "standalone" and "qbox"
Config.billing
"auto"; "synz" is now available
Config.banking
"auto"; "synz" is now available
Config.target
Changed from "none" to "auto"; use "none" to retain marker-only interaction, or select "vivum" explicitly
Config.debug
Still false; remains the legacy master switch for all log levels
Config.debugLevels.all/debug/info/warn/error
New: false, false, true, true, true
Config.debugQueue.maxEntries/batchSize/batchDelay
New: 1000, 10, 0
Config.defaultCallbackTimeout
Still 5000; this only limits the local wait and does not cancel or deduplicate server work
Config.Licenses.catalog remains the additional license catalogue for the selected provider and ships with firstaidcourse. Providers are not merged.
Phase 4 of 5
SQL & items
No Base SQL migration, item registration, or image copy is required. External tablet, phone, banking, billing, target, vehicle-key, and license resources must still be installed and started according to their own documentation.
Phase 5 of 5
Restart & test
The console reports sky_base1.33.0.
The intended license provider can read and write an online license; supported providers also handle an offline identifier.
The selected tablet can open an app and receive a notification.
The configured target provider shows vehicle-model interactions at the intended vehicle.
Billing, banking, phone, inventory registration, vehicle keys, and currency display work with the selected providers.
Callback statistics and configured log levels behave as expected.
sky_jobs_base and job resources start after Base.
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 InstructionsA guided update for server owners1.32.01.32.1
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server and create this backup before replacing files:
Back up
Safe location
Complete sky_base folder
Outside the live resources folder
Any provider adapter you intentionally customized
Separate custom-adapters folder
Install this patch as a clean resource replacement. Do not copy it over 1.32.0.
Phase 2 of 5
Replace files
Use the new package as the base:
Action
Current server path
New package / destination
Delete
resources/[sky]/sky_base
Remove only after the backup exists
Copy
—
Copy the complete new sky_base folder
Keep from new release
fxmanifest.lua, source, and config/framework
Required for restrained actions, gang data, and duty synchronization
Keep from new release
config/fuel/ox.lua and config/inventory/tgiann.lua
Required for the fuel and inventory fixes
Merge only if customized
Your provider adapters
Reapply intentional edits to the matching new adapter
Phase 3 of 5
Merge config
/jobconfig does not manage sky_base.
No executable value in config/config.lua changed between 1.32.0 and 1.32.1. Keep the new file and transfer only your existing framework/provider selections or other intentional server-specific values.
Phase 4 of 5
SQL & items
No SQL migration, inventory definition, or image installation is required.
Handcuffed players cannot use Sky interaction points, target actions, or Sky keybind actions.
Removing the restraint restores those actions.
ox_fuel vehicles report a valid fuel level immediately after spawn.
Tgiann Inventory actions still resolve the correct slot.
ESX duty state remains correct after job and duty changes.
QBCore/Qbox gang-aware dependent features receive the current gang.
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 InstructionsA guided update for server owners1.31.01.32.0
Guided update
Update sky_base safely
Complete the five phases in order. Your progress is kept while this page remains open.
0 / 5phases complete
Phase 1 of 5
Prepare
Stop the server before changing any resource files. Download sky_base1.32.0 from the CFX Portal, then make this backup:
Back up
Safe location
Your complete current sky_base folder
Outside the live resources folder
Any provider files you customized yourself
A separate folder named custom-adapters
Do not copy the new release over the old folder. A clean replacement prevents deleted or renamed scripts from remaining active.
Phase 2 of 5
Replace files
Use the new download as the clean base:
Action
Current server path
New package / destination
Delete
resources/[sky]/sky_base
Remove only after the backup exists
Copy
—
Copy the new sky_base folder to resources/[sky]/sky_base
Keep from new release
sky_base/fxmanifest.lua and sky_base/source
Do not restore these from the backup
Merge only if customized
Your backed-up provider adapter
Apply your intentional edits to the matching new adapter
Before continuing, confirm that the new folder contains:
config/vehicle_functions.lua
the current config/billing, fuel, garage, inventory, phone, progress, and target folders
config/framework/qb.lua and config/framework/qbox.lua
Phase 3 of 5
Merge config
/jobconfig does not manage sky_base. Open the newconfig/config.lua and transfer only the selections you intentionally changed in the old file. The shipped executable defaults did not change.
Keep "auto" when you want automatic detection. Pin a provider only when your server deliberately uses it:
Integration
New manual value
Important requirement
CodeM Garage
garage = "codem"
ESX or QBCore; this adapter does not support Qbox
TeamsGG Billing
billing = "tgg"
Matching billing resource must start first
Vivum Billing
billing = "vivum"
Requires lb-phone
Quasar Fuel Stations
fuel = "qs-fuelstation"
Matching fuel resource must start first
x-fuel
fuel = "xfuel"
Matching fuel resource must start first
tgiann-target
target = "tgiann"
Or use "auto" to detect it
Example: change only the line for the provider you want to pin.
If you customized vehicle serialization, keys, deletion, or post-spawn behavior, move those edits into the newconfig/vehicle_functions.lua; never restore the old source implementation.
Phase 4 of 5
SQL & items
No SQL migration and no new inventory item are required for sky_base1.32.0.
Provider resources still need to be installed and started according to their own documentation. sky_base only supplies the integration adapters.
Phase 5 of 5
Restart & test
Keep the dependency order in server.cfg:
server.cfg
# Start your framework, SQL, inventory, and selected providers first.
ensure sky_base
ensure sky_jobs_base
# Start Sky job resources after both bases.
Complete these checks before reopening the server:
The console reports sky_base version 1.32.0.
The selected framework and inventory load without adapter errors.
One vehicle stores and restores its fuel and modifications correctly.
The configured garage, billing, phone, progress, and target integrations work.
sky_jobs_base and the installed Sky jobs start after sky_base.
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.
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.
Download sky_base from the CFX Portal and create a resource backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.31.0 is loaded.
Replace /config/framework to install the cross-framework player-state changes, then restore any custom framework implementation from your backup.
Replace /config/garage/ak47.lua and /config/garage/bp.lua if either adapter is used.
Replace /config/inventory/jaksam.lua and /config/inventory/ox.lua if either inventory adapter is used.
/jobconfig does not manage sky_base. No /config/config.lua options changed in this release.
No SQL migration is required.
Restart sky_base before restarting dependent Sky resources.
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.
Download sky_base from the CFX Portal and create a backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.30.0 is loaded.
Replace /config/functions.lua and /config/locales, then restore any customer-specific functions or translations from your backup.
/jobconfig does not manage sky_base. If you keep your existing /config/config.lua, merge these release changes manually:
Add "custom" as a supported selection for garage, progressbar, phone, license, billing, vehiclekeys, fuel, inventory, banking, and target when you use one of the new custom adapter templates.
Set debug = false to use the new shipped production default, or deliberately retain your existing debug choice.
Keep target = "none" unless you deliberately configured custom, ox, qb, or auto with the matching target resource.
Restart sky_base before every dependent Sky resource.
No SQL migration is required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.29.0 is loaded.
If you want the new shipped license example, merge the updated Config.Licenses entry from /config/config.lua; otherwise keep your server-specific license list.
No SQL migration is required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua (version 1.28.0).
Replace the /config/framework folder.
Replace the /config/banking folder (new pc.lua).
Replace the /config/billing folder (new nass_billing.lua).
Replace the /config/fuel folder (new stg-van.lua).
Replace the /config/vehiclekeys folder (new ic3d.lua).
Replace the /config/license folder (new vms.lua).
If you keep your existing config/config.lua, no required changes are needed. Optionally review the updated supported provider values and the newer default maxPing value.
No SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder.
Replace the /config/billing folder.
Replace the /config/inventory folder.
Replace the /config/locales folder (new ar.lua).
No config/config.lua changes required.
No SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua (version 1.26.0).
Replace the /config/framework folder (license handling and ESX logging behavior updated).
Replace the /config/phone folder (new 17mov.lua; okokPhone custom app handling updated).
Add the new /config/license folder.
In config/config.lua, add the new license selector and the new streamed-NPC option:
+license = "auto", -- auto, esx (esx_license), qb (metadata), cs (cs_license), ak47 (ak47_idcardv2), codem (codem-wallet), papa (papa_licensecreator), bit (bit-licenses) - can be customized in config/license
+streamNpcMaxSpawnsPerPass = 4, -- max number of streamed interaction NPCs to spawn in one streaming pass; higher values reduce visible spawn delay for groups
In config/config.lua, add the new fallback license configuration:
Adjust the catalog entries to match the license ids used by your active license system if needed. Set papaGiveItem = true only if you want papa_licensecreator grants to also hand out the physical item.
10. If you keep your existing config/config.lua, review debug as well — the new default is false.
11. No SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder (includes the new built-in notification UI files).
Replace /fxmanifest.lua (version 1.25.0; loads the notification UI page and the rebuilt inventory layer).
Replace the /config/framework folder (inventory logic removed from each framework file; ESX legacy shared-object fix).
Replace the /config/functions.lua file (new default notification & help-prompt UI).
Replace the /config/phone folder (new roadphone.lua; okok.lua, qs.lua updated for okokPhone and qs-smartphone V3).
Replace the /config/vehiclekeys folder (new ak47.lua, jota.lua).
Replace the /config/banking folder and delete the old config/banking/codem.lua if you keep customized files (codem now uses framework-native banking).
Replace the /config/locales folder (new cz.lua).
Replace the /config/inventory folder — it now holds the per-inventory adapters plus a new native/ subfolder. Delete the old config/inventory/esx.lua, qb.lua, qbox.lua, and vrp.lua if you keep customized files (their logic moved to config/inventory/native/).
In config/config.lua, update the value-list comments:
-phone = "auto", -- auto, esx, qb, d, gks, lb, lb-unique, yseries, codem, roadphone
+phone = "auto", -- auto, esx, qb, qs, d, gks, lb, lb-unique, yseries, codem, okok, roadphone
-garage = "auto", -- auto, esx, qb, qbox, quasar, okok, jg, cd, bp, my, vms, op - can be customized in config/garage
+garage = "auto", -- auto, esx, qb, qbox, quasar, okok, jg, cd, bp, my, vms, op, ds-servercreator - can be customized in config/garage
-vehiclekeys = "auto", -- auto, qb, vehicles_keys, mrnewb, mk, quasar, wasabi, msk, brutal, kiminaze - can be customized in config/vehiclekeys
+vehiclekeys = "auto", -- auto, qb, vehicles_keys, mrnewb, mk, quasar, wasabi, msk, brutal, kiminaze, ak47, jota - can be customized in config/vehiclekeys
-inventory = "auto", -- auto, esx, qb, qbox, vrp, ox, qs, ps, codem, tgiann, jaksam, ak47, one, hex - can be customized in config/inventory
+inventory = "auto", -- auto, esx, qb, qbox, vrp, ox, qs, ps, codem, tgiann, jaksam, ak47, one, core, origen, jpr, hex - can be customized in config/inventory
Config.phone, Config.garage, Config.vehiclekeys, and Config.inventory all default to "auto" and pick up the new adapters automatically — set a specific value only to pin one manually. To tune marker draw range, add interactionDrawBuffer (optional):
+interactionDrawBuffer = 20.0, -- extra range beyond interactionDistance where markers are drawn and tracked
If you call Sky.FW.AddItem / Sky.FW.RemoveItem from your own resources: update the 4th argument — it is now slot (not force). Replace a force boolean with nil, and for RemoveItem move metadata to the 5th position (RemoveItem(src, item, amount, nil, metadata)). Sky's bundled job resources are already updated.
No SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua (version 1.24.0).
Replace the /config/phone folder (all phone adapters updated for custom phone app support).
Replace the /config/framework folder (esx.lua, qb.lua updated).
Replace the /config/inventory folder — adds the new one.lua and deletes the removed hex.lua (delete the old config/inventory/hex.lua if you keep customized files).
Replace the /config/banking folder (new codem.lua).
In config/config.lua, update the phone/inventory/banking value-list comments and add the new NPC-streaming options:
-phone = "auto", -- auto, esx, qb, d, gks, lb, lb-unique, yserie, codem
+phone = "auto", -- auto, esx, qb, d, gks, lb, lb-unique, yseries, codem, roadphone
-inventory = "auto", -- auto, esx, qb, qbox, vrp, ox, qs, ps, codem, tgiann, jaksam, ak47, hex - can be customized in config/inventory
+inventory = "auto", -- auto, esx, qb, qbox, vrp, ox, qs, ps, codem, tgiann, jaksam, ak47, one, hex - can be customized in config/inventory
-banking = "auto", -- auto, sky, crm, qs, okok, bablo, fd, rx, tgg, kartik, esx, qb, renewed, wasabi, groot, ak47, jaksam - can be customized in config/banking
+banking = "auto", -- auto, sky, crm, codem, qs, okok, bablo, fd, rx, tgg, kartik, esx, qb, renewed, wasabi, groot, ak47, jaksam - can be customized in config/banking
+streamNpcEnabled = true, -- only spawn interaction-point NPC peds while the player is within streamNpcDistance (set false for legacy: peds exist everywhere at once)
+streamNpcDistance = 100.0, -- range a player must be within for an interaction NPC ped to exist; despawns past streamNpcDistance + 20%
+streamNpcRefreshMs = 1000, -- how often (ms) the streaming pass re-evaluates ped distances when no point is in interaction range
Config.phone = "auto", Config.inventory = "auto", and Config.banking = "auto" pick up the new adapters automatically — set "roadphone", "one", or "codem" only to pin them manually.
10. No SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace /fxmanifest.lua so version 1.23.0 is loaded.
Replace /config/framework/vrp.lua to include the usable-item callback fix.
Replace /config/housing/rtx.lua to include the new property type guard.
No config changes or SQL migration required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /fxmanifest.lua (version 1.22.0).
Replace the /config/framework folder (esx.lua, qb.lua, and qbox.lua updated). Merge any custom framework edits into the new files.
If your ESX server uses codem-wallet, make sure the resource is installed and started so the new license integration can be detected and used.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /fxmanifest.lua (version 1.21.0).
⚠️ REQUIRED — replace the /config/framework folder (esx.lua, qb.lua, qbox.lua). This is not optional for this release, even if you normally keep your customized framework files. The job & duty security hardening, data caching, gender detection, and boss-menu member names all live here — merge any custom edits into the new files rather than keeping the old ones.
Replace the /config/banking folder (new companymanager.lua).
Replace the /config/billing folder (new companymanager.lua).
Replace the /config/inventory folder (tgiann.lua updated).
Replace the /config/housing folder (rtx.lua updated).
Required — update sky_jobs_base and every Sky job resource (sky_ambulancejob, sky_policejob, sky_mechanicjob) to their matching releases. The job & duty cache hardening changes how job and duty updates reach the server; running older job resources against this release can leave job or duty state out of sync.
No SQL migration. Config.banking = "auto" and Config.billing = "auto" detect bcs_companymanager automatically; set either to "companymanager" only to pin it manually. The shipped config/config.lua is unchanged — optionally update its value-list comments so the new option is listed (informational only, no behaviour change):
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /fxmanifest.lua (now loads the new config/init.lua).
Add the new /config/init.lua file.
Replace /config/config.lua (global table init moved to init.lua; fuel value-list comment updated).
Replace the /config/fuel folder (new okokGasStation.lua).
Replace the /config/inventory folder (qs.lua updated).
Replace the /config/framework folder (esx.lua, qb.lua, qbox.lua updated).
Replace the /config/billing folder (codemv2.lua updated).
No SQL migration. Config.fuel = "auto" picks up okokGasStation automatically; set "okokGasStation" only to pin it manually:
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.
Replace the /config/framework folder (esx.lua, qb.lua, qbox.lua updated).
No SQL migration. No config.lua changes required.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /fxmanifest.lua (loads the new config/currency.lua and the config/housing files).
Add the new /config/currency.lua file.
Add the new /config/housing folder (nolag.lua, qs.lua, rtx.lua, rx.lua, sn.lua, vms.lua, _init.lua).
Replace the /config/banking folder (new sky.lua, jaksam.lua; kartik.lua, qb.lua updated).
Replace the /config/progress folder (new jaksam.lua, wasabi.lua).
Replace the /config/fuel folder (new myFuel.lua).
Replace the /config/inventory folder (tgiann.lua, qs.lua, codem.lua updated).
Replace the /config/framework folder (qb.lua updated).
In config/config.lua, update the value-list comments and add the new options:
Config.banking = "auto", Config.fuel = "auto", and Config.progressbar = "auto" pick up the new adapters automatically — set a specific value only to pin one manually.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder (qb.lua updated — jacksam jobscreator integration).
Add the new /config/progress folder (adapters: esx.lua, qb.lua, ox.lua, mythic.lua, hex.lua).
Replace the /fxmanifest.lua (progress adapter files are loaded on the client).
Add the new progressbar option to config/config.lua:
"auto" picks up the running progressbar resource automatically. Set it to a specific value (e.g. "hex") to pin a particular adapter.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder (esx.lua, qb.lua, qbox.lua updated).
Replace the /config/inventory folder (new hex.lua added).
No config.lua changes required — Config.inventory = "auto" picks up hex_4_inventory automatically. Set it to "hex" only if you want to pin it manually.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder.
Replace the /config/inventory folder (new qb-inv.lua, multiple inventory adapters updated).
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder.
Replace the /config/banking folder (new groot.lua, ak47.lua).
Replace the /config/billing folder (new groot.lua).
Replace the /config/inventory folder (new ak47.lua).
Replace the /config/phone folder (new codem.lua).
Replace the /config/target folder (qb.lua updated).
Required — add the three permission bootstrap ACEs to your server.cfg, beforeensure sky_base:
Without these, sky_base cannot wire the per-command ACE entries on boot and every admin command will deny everyone except the server console.
11. Breaking — remove the Config.AdminGroups block from config/config.lua. It is no longer read:
(Optional) The new Config.showMarkersWithTarget toggle is added next to target in config/config.lua. Default false preserves the existing behaviour (markers hidden while a target backend is active); set to true to keep markers visible alongside the target backend:
target = "none", -- none (default: marker + help notification), ox, qb, auto - ...
+showMarkersWithTarget = false, -- keep drawing configured interaction markers when target is enabled
Required — update every Sky job resource to its matching release (sky_jobs_base, sky_ambulancejob, sky_policejob, sky_mechanicjob). Older versions still call the removed Sky.FW.IsAdmin and will deny every admin command after the sky_base update.
For each job, review the new Config.CommandPermissions table in that job's config/config.lua and adjust the allowed groups per command if needed. The default { "god", "superadmin", "admin" } keeps the previous behaviour for QBox / QBCore / ESX servers using the standard admin groups.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/banking folder (renewed.lua updated).
Replace the /config/billing folder (new fd.lua added).
Replace the /config/fuel folder (new hex.lua added).
No config.lua changes required — Config.billing = "auto" and Config.fuel = "auto" pick up the new adapters automatically. Set them to "fd" / "hex" only if you want to pin them manually.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder.
Replace the /config/banking folder (qbox.lua was renamed to renewed.lua, new wasabi.lua and _init.lua were added).
Breaking — In config/config.lua, if you set the banking system manually:
Or stay on banking = "auto" and the Renewed-Banking adapter is picked automatically.
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.
Download sky_base from the CFX Portal.
Create a backup.
Replace the /source folder.
Replace the /config/framework folder.
Add the new /config/target folder.
In config/config.lua, replace the removed enableOXTarget flag:
-enableOXTarget = false,
+target = "none", -- none (default: marker + help notification), ox, qb, auto - can be customized in config/target. "auto" picks a started target resource and replaces the normal marker interaction, only opt-in.
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.