Config.Framework is 'auto' by default and picks the first running framework. Set it to 'qs', 'esx' or 'qb' (QBCore and Qbox share it) to pin one, or 'standalone' to switch the layer off. On 'auto', a framework that was not running yet when the resource started is detected again a few seconds later and swapped in.
Messages such as "Your tutorial progress was reset" go through Notify() in custom/client.lua: qs-interface if it is running, then ox_lib, then chat. To use another notification resource, put it first:
Config.Hud holds two functions: Disable runs as the tutorial starts and Enable as it ends — also after a resource restart, so nobody is left without a HUD. Out of the box they only toggle the radar; hook your own HUD in here:
With Config.Tutorial.autoStart on, the tutorial waits for the session, then the framework, then for the character and spawn screens to close, then autoStartDelay — and plays the live tutorial if this character has not seen it.
StartTutorial blocks until the tutorial finishes and returns whether it was completed. It returns false straight away for a character that has already seen it, so it is safe to call on every spawn. If a spawn screen must open after the tutorial, wait for it first:
41 locales ship in locales/: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi, zh. Set Config.Language and that is it.
English and Spanish are complete. The other 39 cover what people actually read — every notification, the creator's navigation, the checklist, the start screen, the element names and the media pickers — while the deeper inspector labels stay in English. A key missing from a locale falls back to English rather than printing the key, and any key you fill in is used from the next resource restart.
A new language is one more JSON file in the same folder: copy en.json, translate the values, and set Config.Language to its file name.