Skip to main content
Every SH Development script stores all of its user-facing settings in a single config.lua file — or, in scripts with a shared client/server split, in shared/config.lua. This file is always left unencrypted, even on fully escrow-protected resources. You can open it, read every option, and change any value without ever touching protected code.

Why config.lua Is Always Editable

SH Development’s escrow protection encrypts the core logic files but deliberately excludes configuration and locale files. This means you have full control over how a script behaves — from framework selection and notification style down to individual prices, cooldowns, zone coordinates, and job names — without needing to contact support or request a custom build.

Common Configuration Keys

Almost every script in the catalogue shares a set of top-level keys. Learning these three will get you through the initial setup of any resource:
Selects the money and character system the script bridges to. Set this to match your server’s framework.Accepted values: 'qb', 'esx', 'nat', 'nd', 'standalone' (FiveM) · 'vorp', 'rsg', 'auto' (RedM)
Selects the notification library used for in-game alerts. All SH Development scripts default to 'sh' (sh-notify).Accepted values: 'sh', 'okok', 'custom', 'standalone'When set to 'custom', the script reads from a separate notify.lua file (see below) that you can edit freely. Some scripts use a slightly different key name such as Config.NotifySystem — check the inline comments in that script’s config.lua for the exact key and accepted values.
Selects the third-eye interaction system. When set to false, the script uses a proximity key press instead.Accepted values: false, 'ox', 'qb'

A Typical Config Block

The following example shows how these three keys look in a real script’s config file:
shared/config.lua
Config.Framework = 'qb'       -- 'qb', 'esx', 'nat', 'nd', 'standalone'
Config.Notify    = 'sh'       -- 'sh' uses sh-notify, 'custom' uses notify.lua
Config.Target    = 'ox'       -- false = proximity key, 'ox' = ox_target, 'qb' = qb-target
Below those three keys you will find all of the script-specific settings — prices, coordinates, job names, timers, Discord webhooks, and so on. Every option is annotated with an inline comment explaining its purpose and accepted values.
Changes to config.lua do not apply while the resource is running. You must restart the resource after saving your changes. Run ensure sh-scriptname in the server console, or do a full server restart for changes that affect startup-time registration (such as commands or zone names).
Never delete a key from config.lua. If you want to disable a feature, set the key to its documented default value (usually false, 0, or ''). Removing a key entirely causes a Lua nil-reference error that can prevent the script from starting.

The notify.lua File

Some scripts expose a second unlocked file called notify.lua. This file contains the function that dispatches notifications, and it is completely separate from the protected core:
notify.lua
-- Wire any notification system here.
-- This file is escrow-ignored — edit freely.
function Notify(icon, title, text, type, length)
    -- Replace the line below with your preferred notification export
    exports['sh-notify']:shnotif(icon, title, text, type, length)
end
If your server uses a custom or proprietary notification resource, edit notify.lua to call it here. No other files need to change, and your edits are safe across script updates as long as you keep a backup.