> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shdevelopment.org/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Configure SH Development Scripts with config.lua

> Every SH Development script uses config.lua for customisation. Learn the common keys, safe editing practices, and how to apply changes to a running server.

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:

<Accordion title="Config.Framework">
  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)
</Accordion>

<Accordion title="Config.Notify">
  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.
</Accordion>

<Accordion title="Config.Target">
  Selects the third-eye interaction system. When set to `false`, the script uses a proximity key press instead.

  **Accepted values:** `false`, `'ox'`, `'qb'`
</Accordion>

## A Typical Config Block

The following example shows how these three keys look in a real script's config file:

```lua shared/config.lua theme={null}
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.

<Note>
  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).
</Note>

<Warning>
  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.
</Warning>

## 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:

```lua notify.lua theme={null}
-- 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.
