Update InstructionsA guided update for server owners1.45.01.45.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 sky_base1.45.0 → the refreshed 1.45.1 package. If you installed an earlier 1.45.1 download today, download the current 1.45.1 package again and apply these steps. The manifest version stays the same, so the version number alone does not identify the refreshed package. Back up resources, the database, custom configuration, translations and saved Job Configurator/Creator data. Validate on staging and stop the server for replacement. Install the refreshed Base 1.45.1, then Jobs Base 1.48.1, then the matching updates for your installed jobs and Crime. Complete earlier migrations first when upgrading from an older version.
Phase 2 of 5
Replace files
Use the complete 1.45.1 package. Delete the entire sky_base/source/ folder and insert its new version, then replace sky_base/fxmanifest.lua from the same package. Do not merge old generated interface files. Refresh the complete sky_base/config/locales/ tree and merge custom translations. Keep your existing selected language in sky_base/config/config.lua.
The dependency bootstrap ships as an editable file. Use the supplied file; do not restore an older custom bootstrap. Base also keeps its callback files editable for support. Install the source and manifest together.
Merge the provider choices in sky_base/config/config.lua and update the supplied framework bridges sky_base/config/framework/esx.lua, sky_base/config/framework/qb.lua and sky_base/config/framework/qbox.lua. Update sky_base/config/vehicle_storage.lua, preserving intentional garage schema mappings. Add the three supplied ZSX_UIV2.lua adapters under config/integration/progress/, notification/ and helpnotify/. Keep deliberate custom integrations; do not restore an older supplied bridge or storage implementation over these updates.
Phase 3 of 5
Merge config
Base settings remain file-based in sky_base/config/config.lua; /jobconfig does not manage them. No existing key or shipped default is changed. The existing defaults remain Config.progressbar = "auto", Config.notification = "default" and Config.helpnotify = "default". Keep your intentional selections.
New supported choices: Config.progressbar = "ZSX_UIV2" for progress bars; Config.notification = "ZSX_UIV2" for notifications or "ZSX_UIV2_default" for above-minimap notifications; Config.helpnotify = "ZSX_UIV2" for TextUI prompts or "ZSX_UIV2_help" for top-left help notifications. These names are case-sensitive. For all three standard ZSX views, put these assignments after your existing Config = { ... } table in this file, preserving its other values:
Start the installed ZSX_UIV2 provider before Base when selecting it. Existing progress auto selection can now detect a started ZSX provider; notification and help defaults still use Sky's built-in views. No provider installation is required if you keep another supported selection. ZSX supports player cancellation; do not assume it provides a programmatic stop export.
Keep saved job configuration, jobs, grades and locations. No configurator import or reset is required. Install the refreshed Mechanic 1.34.1 with this refreshed Base package for the Qbox first-save correction. This preserves existing vehicle ownership and stored properties; it does not repair malformed nonempty property data.
Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart the server, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-startup-hotfix.json. Disable with setr sky_profiler 0 and another full server restart. This is not a /jobconfig setting; no recording or upload starts automatically.
Phase 4 of 5
SQL & items
SQL: No new table, column or manual SQL update is introduced by this patch. Existing failed migrations still need their original database error repaired; continuing startup does not create a missing schema. Keep the existing automatic/manual migration policy. Do not replay a full import, clear tables, force success markers or reset saved job/Creator data. Items: No new definitions or inventory registrations. Assets: No new item images, models or stream assets; keep existing assets. Earlier release requirements still apply for older installations.
Phase 5 of 5
Restart & test
Perform a full server restart after replacement so the changed manifests and file lists are reloaded. Start the framework, database connector and selected providers first, then Base 1.45.1, Jobs Base 1.48.1 and the installed consumers. Unrelated clothing, vehicle and map packs can remain after Sky in server.cfg. Reconnect clients. Check normal login and the first Base and job startup messages. A long dependency wait now continues until initialization completes; it no longer aborts at 60 seconds. Database migration warnings remain actionable, and failure to read saved settings remains a visible initialization error. Collect the first error, preceding lines and actual installed versions if a feature remains unavailable. If ZSX is selected, check its progress completion and player cancellation, notifications and help prompts. On staging, check a permitted faction invitation and confirm the resulting job. On Qbox, complete and save tuning on an already-owned vehicle with naturally empty properties, then store and retrieve it through your configured garage. Keep the existing plate, fuel and damage data; do not clear a working record to trigger this path. Callback tracing is opt-in support observation; stopping a trace does not cancel the underlying request.
Version 1.45.0
Highlights
Added Sky Billing as the default invoice provider for supported Sky job workflows while keeping explicitly selected external billing providers available.
Improved large callback transfers by compressing eligible requests and responses before sending them.
Improved shared support for compatible job administration so native ranks, current memberships and duty state are retained during supported updates.
Notable Changes
Fixed an issue where the Job Configurator could miss completed version checks.
Fixed an issue where Quasar inventory items used the framework's item registration instead of Quasar's own usable-item support.
Fixed an issue where Jaksam society balance reads, deposits and withdrawals could use the wrong account name.
Fixed an issue where CodeM Billing V2 invoices without an explicit recipient did not use the issuing player.
Fixed an issue where custom phone apps could retain incorrect game input behavior with Sky Phone, CodeM Phone or YSeries.
Added inventory weight and capacity information for integrations that expose those values.
Fixed an issue where Hex society invoices selected a job from the society account instead of the issuing player's actual job.
Update InstructionsA guided update for server owners1.44.11.45.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 sky_base1.44.1 → 1.45.0. Before replacing files, confirm that your customer download platform provides the versions below and check each downloaded resource's fxmanifest.lua; published documentation or a source tag alone does not establish that its customer download has been uploaded. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom config, translations and saved Job Configurator/Creator data. Validate the update on staging before applying it to your production server. Stop the server during replacement. Install Sky Base 1.45.0, then Sky Jobs Base 1.48.0, then the matching releases for your installed jobs and Crime. Keep provider dependencies and optional integrations compatible; preserve saved overrides and existing records.
Phase 2 of 5
Replace files
Use the complete 1.45.0 release package. Delete the entire sky_base/source/ folder and insert its new version; do not merge old generated interface files. Replace sky_base/fxmanifest.lua from the same package. Refresh the complete sky_base/config/locales/ tree and merge your custom translations into the new files. Keep your selected shared language in sky_base/config/config.lua. Install the following shipped paths from that package, merging custom configuration into the updated public files rather than restoring old complete files:
All Base settings are maintained in files. /jobconfig does not manage Base settings, providers or diagnostic options.
In sky_base/config/config.lua, the shipped default Config.billing changes from "auto" to "sky":
-- Previous shipped value
billing = "auto",
-- New shipped value
billing = "sky",
Sky Billing requires the matching Jobs Base 1.48.0 release and uses its central invoice storage. If you want to keep an external billing provider, retain its explicit provider value instead of replacing it with "sky". The added provider names in the adjacent comment are documentation changes, not new runtime configuration values or an automatic invoice import.
Also add the new startup option Config.hideCallbackEventNames beside Config.defaultCallbackTimeout in the same table:
-- Previous release: this option did not exist.
hideCallbackEventNames = true,
The default keeps callback names hidden in network event names. Set it to false only when you want callback names included for network diagnostics. Changing it requires a full server restart and clients to reconnect. It does not start a profiler recording. Config.defaultCallbackTimeout remains 300000; its value has not changed in this release.
Replace the updated framework and provider adapters from the same download, then port your own adaptations into the new copies. Do not restore complete old adapter files over the new ones. The executable adapter updates are in sky_base/config/framework/custom.lua, esx.lua, qb.lua, qbox.lua, vrp.lua and the new config/framework/compatibility/hex.lua; banking _init.lua, esx.lua, jaksam.lua, qb.lua, renewed.lua, sky.lua; billing codemv2.lua, hex.lua and new sky.lua; inventory codem.lua, codemv2.lua, jaksam.lua, native/esx.lua, native/qb.lua, native/qbox.lua, native/vrp.lua, one.lua, origen.lua, ox.lua, ps.lua, qs.lua, tgiann.lua; and phone codem.lua, sky_phone.lua, yseries.lua. These files contain provider code updates, not additional user option migrations. sky_base/config/init.lua, sv_config.lua and sv_functions.lua have no net release change.
Update all sky_base/config/locales/* from the download. Keep the existing global language selection and merge your custom translations into the refreshed locale files.
The additional adapter and item-catalog changes add no further Base configuration values or Job Configurator settings. Replace the updated config/framework/esx.lua, qb.lua and qbox.lua adapters and reapply your own provider modifications to the new files; their job administration implementation now ships inside the resource. Replace config/integration/billing/hex.lua as well. For Hex billing, keep Config.billing = "hex" only if you use that provider and ensure hex_jobscreator is started before sky_base, then sky_jobs_base is initialized before invoices are issued. The issuing player must have a cached job; the account name no longer selects the Hex job. For example, an issuer with job lspd and account society_police now bills through lspd. System issuers without a player job remain unsupported. These changes introduce no new provider parameters. Restart the updated Base and Jobs Base resources together using the existing dependency order and reconnect clients after Base is replaced.
Optional diagnostics are disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, then restart the server. Run profiler record 1000, wait for profiler status to show that recording has completed, then run profiler saveJSON sky-release-profile.json. Disable diagnostics with setr sky_profiler 0 and another server restart. This is not a /jobconfig setting; no recording or upload starts automatically.
For an older explicit profiler package, replace any previously modified public config/provider/compatibility files with the supplied versions and merge your intentional customizations. In this release package, profiler preparation preserves all files outside source/ byte for byte except fxmanifest.lua; the functional config changes listed in this guide still require their own merge.
Phase 4 of 5
SQL & items
SQL: Back up the active database before the release update. Base performs its own startup migrations for shared job definitions, the durable managed-job registry and private Creator log preferences. The Jobs Base Config.AutoExecuteQuery switch does not control these Base migrations. The new sky_base/import.sql is an optional additive manual schema mirror; a successful automatic setup does not need a duplicate manual import.
For a database team applying the Base schema mirror manually, the exact new file contains the following DDL. It creates missing definition/registry/log tables and adds missing registry or log fields; it does not import vendor jobs, members, invoices or balances. Existing ESX job tables are retained, while QB/Qbox receive the minimal shared job-definition projection. Creator owns its extended schema and compatibility setup separately.
-- Optional manual mirror of the automatically migrated durable framework registry.
-- Inherit the active database character set and collation; retain existing definitions.
-- Common ESX-shaped definition projection for QBCore/Qbox. These are the existing
-- native tables on ESX; never replace rows belonging to another creator.
CREATE TABLE IF NOT EXISTS `jobs` (
`name` VARCHAR(50) NOT NULL,
`label` VARCHAR(100) NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `job_grades` (
`id` INT NOT NULL AUTO_INCREMENT,
`job_name` VARCHAR(50) NULL,
`grade` INT NOT NULL,
`name` VARCHAR(50) NOT NULL,
`label` VARCHAR(100) NOT NULL,
`salary` INT NOT NULL,
`skin_male` LONGTEXT NULL,
`skin_female` LONGTEXT NULL,
PRIMARY KEY (`id`),
INDEX `idx_sky_job_grades_level` (`job_name`,`grade`)
) ENGINE=InnoDB;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'job_grades' AND COLUMN_NAME = 'skin_male') = 0,
'ALTER TABLE `job_grades` ADD COLUMN `skin_male` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'job_grades' AND COLUMN_NAME = 'skin_female') = 0,
'ALTER TABLE `job_grades` ADD COLUMN `skin_female` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
CREATE TABLE IF NOT EXISTS `sky_managed_job_definitions` (
`job_name` VARCHAR(64) NOT NULL,
`owner` VARCHAR(64) NOT NULL,
`origin` VARCHAR(16) NOT NULL,
`definition` LONGTEXT NOT NULL,
`baseline` LONGTEXT NOT NULL,
`status` VARCHAR(16) NOT NULL DEFAULT 'pending',
`last_error` TEXT NULL,
`activation_stage` VARCHAR(32) NULL,
`error_code` VARCHAR(64) NULL,
`account_attempted` TINYINT(1) NULL,
`member_updates` LONGTEXT NULL,
`rename_state` LONGTEXT NULL,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`job_name`),
INDEX `idx_managed_owner` (`owner`)
) ENGINE=InnoDB;
SET @sky_managed_migration = IF(
(SELECT DATA_TYPE = 'varchar' AND CHARACTER_MAXIMUM_LENGTH = 50 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'job_name'),
'ALTER TABLE `sky_managed_job_definitions` MODIFY `job_name` VARCHAR(64) NOT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
-- Private server-only override for the existing Creator audit route.
CREATE TABLE IF NOT EXISTS `sky_creator_log_settings` (
`channel` VARCHAR(64) NOT NULL,
`revision` BIGINT UNSIGNED NOT NULL DEFAULT 0,
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
`webhook_mode` VARCHAR(8) NOT NULL DEFAULT 'default',
`webhook_url` VARCHAR(2048) NOT NULL DEFAULT '',
`routes` LONGTEXT NULL,
PRIMARY KEY (`channel`)
) ENGINE=InnoDB;
SET @sky_creator_log_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_creator_log_settings' AND COLUMN_NAME = 'routes') = 0,
'ALTER TABLE `sky_creator_log_settings` ADD COLUMN `routes` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_creator_log_migration FROM @sky_creator_log_migration;
EXECUTE sky_creator_log_migration;
DEALLOCATE PREPARE sky_creator_log_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'activation_stage') = 0,
'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `activation_stage` VARCHAR(32) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'error_code') = 0,
'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `error_code` VARCHAR(64) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'account_attempted') = 0,
'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `account_attempted` TINYINT(1) NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'member_updates') = 0,
'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `member_updates` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions' AND COLUMN_NAME = 'rename_state') = 0,
'ALTER TABLE `sky_managed_job_definitions` ADD COLUMN `rename_state` LONGTEXT NULL', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
SET @sky_managed_migration = IF(
(SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sky_managed_job_definitions') <> 'InnoDB',
'ALTER TABLE `sky_managed_job_definitions` ENGINE=InnoDB', 'SELECT 1');
PREPARE sky_managed_migration FROM @sky_managed_migration;
EXECUTE sky_managed_migration;
DEALLOCATE PREPARE sky_managed_migration;
Items and assets: This Base release adds no inventory item definitions or external item/image installation. Replace source/* and fxmanifest.lua together from the same download.
Providers: Keep your configured banking, inventory, phone and billing provider choices unless you deliberately change them. Inventory weight/capacity displays use the selected inventory's supported values; unavailable values are not invented. Sky Phone custom app input requires its compatible input ownership support. The optional Hex/Jaksam compatibility routes are limited integration interfaces, not a complete replacement of those vendor resources. Their original resource must be stopped for switch compatibility, external caller addresses must be adapted, and existing Hex/Jaksam banking or billing choices still require a validated replacement before stopping their provider.
Dependency order: Install matching Base 1.45.0 and Jobs Base 1.48.0 release files together, followed by affected job resources. Start the database/framework and any selected external providers first, then sky_base, sky_jobs_base and the job resources. If using the optional Jobs Creator, install a compatible Creator build as well; its UI and extended database setup are not supplied by this Base update. Restart the server and reconnect clients so both ends use the new callback transport.
No additional SQL, inventory definitions, item icons or streamed assets are introduced by these Base changes. The Base schema instructions in this guide still apply. Jobs Creator remains a separate unreleased resource.
Phase 5 of 5
Restart & test
Start your framework, database connector and configured providers first, then Base, Jobs Base and the updated job resources in dependency order. Reconnect clients. After the release server restart, check that Base and Jobs Base report the expected installed versions and finish startup without database/readiness errors. Reopen /jobconfig and confirm that completed version checks appear, including DOJ when installed. Test one supported invoice through the selected provider, one Quasar usable item if used, and custom app typing/focus with the configured phone. Verify inventory weight/capacity against the actual inventory. For optional Creator workflows, verify current ranks, memberships, duty and society balances using that compatible build. These are recommended acceptance checks; no new live FiveM/provider acceptance is claimed by this publication.
With Hex selected, issue one society invoice from a connected staff member whose job ID differs from the society-account name and verify that Hex records the staff member's actual job. Confirm a personal invoice is rejected and a missing issuer job is reported. Confirm the selected inventory still supplies ordinary item labels and usable items after the adapters are replaced. If you use managed jobs, restart in dependency order and confirm that their runtime owner completes registration without a false startup failure. Source and isolated regression checks do not establish live Hex or FiveM acceptance.
If a check fails, keep the update on staging and collect the installed resource versions, selected provider, effective saved setting and the first relevant startup or action error. A successful source test, build or copy does not establish live FiveM, provider or customer acceptance.
Version 1.44.1
Highlights
Changed resource loading back to its previous behavior after the recent startup changes.
Notable Changes
Changed framework initialization back to its previous behavior for supported framework integrations.
Other Changes
Updated the bundled Hungarian translations.
Changed Files
sky_base/config/framework/custom.lua
sky_base/config/framework/esx.lua
sky_base/config/framework/qb.lua
sky_base/config/framework/qbox.lua
sky_base/config/framework/vrp.lua
sky_base/config/locales/*
sky_base/fxmanifest.lua
sky_base/source/* — delete and reinsert
Update InstructionsA guided update for server owners1.44.01.44.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 sky_base1.44.0 → 1.44.1. Complete earlier migrations first if upgrading from an older version. Back up the database, resources, custom configuration and saved job/Creator data. Stop the server for the coordinated update. Install Base 1.44.1, then Jobs Base 1.47.1, then the matching hotfixes for your installed Sky jobs and Crime.
Phase 2 of 5
Replace files
Use the 1.44.1 download. Delete the entire sky_base/source/ folder and insert the new folder. Replace sky_base/fxmanifest.lua from that same package. Refresh the complete sky_base/config/locales/ tree and reapply custom translations. Keep the new source and manifest together; do not merge old generated interface files into them.
Replace sky_base/config/framework/custom.lua, esx.lua, qb.lua, qbox.lua and vrp.lua from the new package. Merge intentional custom adapter changes carefully into the new versions; keeping an old adapter would retain the startup changes being rolled back.
Phase 3 of 5
Merge config
No configuration values or Job Configurator setting keys are added, removed or reset by this hotfix. Keep your current settings and saved overrides. Hungarian uses the existing Config.locale = "hu" setting in sky_base/config/config.lua; leave your selected language unchanged if you do not want to switch. Update the matching Base, Jobs Base and installed resource locale folders together. Base settings remain file-based; /jobconfig does not manage them.
Optional diagnostics stay disabled by default. If support requests a recording, put setr sky_profiler 1 before the Sky ensure lines in server.cfg, restart, run profiler record 1000, wait for profiler status to show completion, then run profiler saveJSON sky-hotfix-profile.json. Disable with setr sky_profiler 0 and another restart. This is not a /jobconfig option; nothing is recorded or uploaded automatically.
Phase 4 of 5
SQL & items
No new SQL import, item definition, inventory image or stream asset is required for this hotfix. Keep saved job/Creator data; do not reset or reimport it. Required earlier migrations still apply when upgrading from an older release.
Phase 5 of 5
Restart & test
Start your framework, database connector and configured providers first, then Base 1.44.1, Jobs Base 1.47.1 and the updated jobs/Crime. Reconnect clients. Check normal login and the first startup errors from Base and the installed jobs. If startup still fails, collect the first error and its preceding log lines together with the installed versions.
Version 1.44.0
Highlights
Added Hex Jobs Creator support for employee-issued society invoices and legal society account balances, deposits and withdrawals.
Notable Changes
Fixed an issue where dependent resources could start with an incomplete framework connection or continue after a failed database update.
Improved company banking compatibility with clearer transfer results, account creation for supported banks and provider-specific account investigation support.
Fixed an issue where progress actions could finish too early with ESX or be cancelled incorrectly with older MSK Core versions.
Fixed an issue where saved interaction settings did not correctly update map icons, markers and NPC behavior.
Other Changes
Added Hungarian translations for shared notifications and command messages.
Fixed an issue where QBCore and Qbox duty updates could repeat unnecessarily or show an outdated duty state, and restored compatibility with legacy ESX duty handling.
Added Jaksam and AK47 storage integration for opening registered stashes and applying supported item restrictions.
Improved license holder listings to include the complete supported online and offline records while distinguishing unavailable providers from empty results.
Fixed an issue where typing in GKS Phone could leave its input focus incorrect.
Fixed an issue where Sky Phone custom apps could remain visible after their owning resource stopped.
Improved update notices with installed and available versions and a direct link to the matching changelog.
Update InstructionsA guided update for server owners1.43.01.44.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 sky_base1.43.0 → 1.44.0. Complete earlier migrations first when upgrading from an older version. Back up your resources, database, customized provider/framework files and saved Job Configurator/Creator data. Stop the server for the coordinated update. Install Base 1.44.0, Jobs Base 1.47.0 and the matching installed jobs together; the new database startup contract requires matching Base and consumer files.
Phase 2 of 5
Replace files
Use the 1.44.0 package. Delete sky_base/source/ completely and insert the new directory. Replace sky_base/fxmanifest.lua from that same package and refresh all of sky_base/config/locales/, merging custom translations back.
Replace every other file listed under Changed Files, merging deliberate local modifications into the new versions. This includes all five framework adapters in config/framework/, the listed banking and license adapters, the Jaksam/AK47 inventory adapters, the GKS/Sky Phone adapters and config/integration/progress/esx.lua. Add the new config/integration/billing/hex.lua and config/integration/banking/hex.lua. Merge the provider-list comments in config/config.lua. Do not keep an old selected framework adapter with the new source: the new startup checks require its completion marker.
Phase 3 of 5
Merge config
Hungarian language
Refresh the complete resource locale folder from this download, including hu.lua, and carry over your custom translations. To use Hungarian, set the existing Config.locale value to "hu" in sky_base/config/config.lua; its supplied default remains "en". Keep your current value if you are not changing language. This is the shared Sky language setting, so update the matching Base, Jobs Base and installed job locale folders together. Jobs Base supplies the Hungarian /jobconfig translations too. No new /jobconfig language setting, saved-job reset or database migration is required for this language addition. Apply the normal restart and reconnect steps at the end of this update.
All Base configuration is maintained in files. /jobconfig does not manage Base values. No existing executable default in sky_base/config/config.lua changes, and no option is removed: Config.billing = "auto" and Config.banking = "auto" remain "auto". Their comments now also list "hex". No new configuration table is required.
Optional Hex Jobs Creator integration
Install/configure hex_jobscreator and its own dependencies, then start it before sky_base. To choose it explicitly, change Config.billing from your current provider or "auto" to "hex" in sky_base/config/config.lua. Independently set Config.banking to "hex" if Hex should own your society money. Keep your current explicit values when using other providers. Automatic detection selects Hex only when it is started and no earlier supported provider wins; use explicit selections on servers running several providers.
Hex billing requires a connected employee issuer and connected recipient, enabled job billing and the employee's permitted grade. Hex chooses the sending society from the issuer's current job; the Sky account argument cannot redirect that invoice. Personal/player invoices and unattended issuer-less bills are unsupported. Hex validates the amount and permissions; the calling resource still owns distance checks. Verify that an invoice actually appears in Hex before treating it as delivered.
Society operations use Hex's "legal" account. Both police and society_police address the police job. Illegal/black accounts, automatic society account provisioning and account investigations are not provided by this adapter. Configure the job's own banking bridge in Hex; no balances are moved between banks by switching this setting. With the unchanged Config.useSkyBankingFallback = false default, a refused Hex withdrawal remains refused. Keep this value false when operations must stay exclusively in Hex. An existing true value can still route failed operations for accounts not managed by Sky into the separate internal Sky ledger; it does not synchronize those balances. Custom coordinated transfers can request { strict = true } through the existing Sky shared-account API to use only the selected provider. Use the Hex billing instructions and society money instructions for the provider's required setup.
Framework startup and custom adapters
Start the database and framework before Base. The shipped ESX, QB, Qbox, vRP and custom adapters now signal completion. For a customized sky_base/config/framework/custom.lua, preserve your implementation while adding SkyFrameworkReady = true immediately before the client-side return and after all server-side definitions at the end. These markers were previously absent; set them only after synchronous setup has completed. Other customized framework adapters must likewise be merged with their new package versions.
Progress compatibility
The existing Config.progressbar default is unchanged. MSK progress now requires msk_core4.1.0 or newer. "auto" skips an older or unrecognized version and selects another supported running provider. If your explicit value is "msk_core", update MSK or change it to a supported installed provider such as "esx" or "ox"; do not leave an incompatible explicit selection. ESX progress waits for the provider's actual finish/cancel callbacks.
Banking and licenses
Keep your existing banking selection unless deliberately changing providers. CRM, Bablo and Wasabi can create missing supported society accounts without resetting existing balances. Account listing, statements and freezing are separate capabilities: PC supports all three; TGG supports account listing and freezing but no integrated direct player debit/refund; CRM supports account listing only; Wasabi supports account listing and freezing but no statements; Bablo, FD and Hex do not expose account investigations through this release. Unsupported operations must not be presented as empty results or successful transfers.
For a custom license provider, sky_base/config/integration/license/custom.lua adds this optional member to SkyLicenseProviders.custom; preserve the comma after the preceding member:
Holders = function(license_type)
-- Return ALL current holders (online and offline), or report unsupported.
-- A successful result is { { identifier = "character-id" }, ... }.
return nil, "license_holders_unsupported"
end
Previously that hook was absent. Leaving the new default reports unsupported; implement it only when the provider can return a complete snapshot. Do not substitute {} for a failed or partial lookup.
Optional performance diagnostics
Extra profiler information is disabled by default. If support requests a recording, add setr sky_profiler 1 to server.cfg before the Sky ensure lines and restart. In the server console, run profiler record 1000, wait until profiler status reports completion, then run profiler saveJSON sky-release-profile.json. Disable the extra information with setr sky_profiler 0 and another restart. This is not a /jobconfig setting. It does not record or upload anything automatically.
Keep source/ and fxmanifest.lua from the same package. Profiler processing changes only source Lua and the manifest. If an older profiler package modified files outside source/, restore those once from the current package and reapply your customizations.
Phase 4 of 5
SQL & items
No new Base SQL schema, inventory item or stream asset is introduced. Hex retains its own provider setup, schema and account balances. This release does not import invoices, transfer existing balances or convert an economy. Do not reinstall the whole Base SQL dump over existing data. Apply the separately documented Jobs Base and job-specific SQL/item steps before reopening the server.
Phase 5 of 5
Restart & test
Start database/framework dependencies, selected inventory/billing/banking/progress providers, Base 1.44.0, Jobs Base 1.47.0, then matching installed jobs. Reconnect clients and check selected providers, manifest versions and the first startup error if initialization fails. Test duty changes, a storage interaction and completed/cancelled progress. Verify customized map icons, markers and NPCs after a saved edit. With Hex, issue a small society invoice between authorized online players, confirm it appears, then check a known society balance, a small deposit/withdrawal and insufficient-funds rejection. Check the provider's legal account rather than a different bank. With supported license listings, verify a known offline holder. A successful build does not replace these live checks.
Version 1.43.0
Highlights
Added support for CodeM Inventory V2, including inventory items, storage and vehicle inventories.
Added Lore Billing support for society invoices issued through the online staff member’s client.
Notable Changes
Fixed an issue where shared callbacks could time out when their requests or responses were not sent correctly.
Added an optional QBCore marked-bills mode that uses each bag’s stored cash value and preserves the remainder when spending part of it.
Fixed an issue where assigning a QBCore gang could fail for an offline member.
Fixed an issue where TGIANN Inventory item checks could reject an item that the player owned.
Other Changes
Improved QBCore and Qbox job and gang updates so connected Sky resources receive current membership changes.
Improved QBCore inventory updates so changing item details preserves the original slot and failed item removal is reported correctly.
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.