> ## 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 Install SH Development Scripts on Your Server

> Step-by-step guide to downloading, placing, configuring, and starting any SH Development script on your FiveM or RedM server for the first time.

Installing an SH Development script follows the same process for every resource in the catalogue. Once you have done it once, subsequent installs take only a few minutes. The steps below apply to both FiveM and RedM servers — where there are differences, they are called out explicitly.

## Prerequisites

Before you begin, confirm that your server meets the following requirements:

* A running **FiveM** or **RedM** server with `server.cfg` access.
* **oxmysql** installed and started — required by any script that persists data (XP, vehicle keys, MDT records, housing, etc.).
* All **script-specific dependencies** listed in the resource's `fxmanifest.lua` are already installed and running. Check the individual script page if you are unsure what those are.

<Tip>
  Install and `ensure` **sh-notify** early in your `server.cfg`. Many other SH Development scripts use it as their default notification system, and having it running before anything else prevents startup warnings.
</Tip>

## Installation Steps

<Steps>
  <Step title="Download the resource">
    Purchase and download the script from Tebex or the provided GitHub release page. You will receive a `.zip` archive containing the resource folder.
  </Step>

  <Step title="Extract into your resources directory">
    Unzip the archive and place the resource folder inside your server's `resources/` directory (or any subdirectory within it, such as `resources/[sh-scripts]/`).

    ```
    server/
    └── resources/
        └── sh-scriptname/
            ├── fxmanifest.lua
            ├── config.lua
            └── ...
    ```

    <Warning>
      **Never rename the resource folder.** SH Development scripts call `GetCurrentResourceName()` at startup and compare it against the expected name. If the names do not match, the script will refuse to start and print an error to your server console.
    </Warning>
  </Step>

  <Step title="Add ensure to server.cfg">
    Open your `server.cfg` and add an `ensure` line for the script. Place it **after** any dependencies it requires.

    ```cfg server.cfg theme={null}
    ensure oxmysql
    ensure sh-notify
    ensure sh-scriptname
    ```
  </Step>

  <Step title="Import the SQL file">
    If the resource includes a `.sql` file (usually found in the `INSTALL/` folder or the root of the resource), import it into your database before starting the script for the first time.

    You can do this with any MySQL client (HeidiSQL, DBeaver, phpMyAdmin) or via the command line:

    ```bash theme={null}
    mysql -u root -p your_database < sh-scriptname.sql
    ```

    Scripts that do not use a database will not include a `.sql` file — this step is optional in that case.
  </Step>

  <Step title="Configure config.lua">
    Open `config.lua` in the resource folder and adjust the settings for your server. At minimum, set the correct framework and notification system:

    ```lua config.lua theme={null}
    Config.Framework = 'qb'   -- 'qb', 'esx', 'nat', 'nd', 'standalone'
    Config.Notify    = 'sh'   -- 'sh', 'okok', 'custom'
    ```

    Every available option is documented with inline comments. See the [Configuration guide](/concepts/configuration) for a full walkthrough.
  </Step>

  <Step title="Start the resource">
    Restart your server, **or** run the following two commands in your server console to apply changes without a full restart:

    ```
    refresh
    ensure sh-scriptname
    ```

    Watch the console for any errors. A successful start produces no red output from the resource.
  </Step>
</Steps>

## Verifying the Installation

After starting the resource, confirm it is running correctly:

* Run `status` or `resmon` in the server console and look for `sh-scriptname` in the resource list.
* Trigger the script's main feature in-game (open a menu, run a command, or enter a configured zone) to verify it responds as expected.
* If you see errors, check the console for missing dependency messages and confirm all `ensure` lines are in the correct order.
