> For the complete documentation index, see [llms.txt](https://docs.tworst.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tworst.com/getting-started-installation/scripts/transport-job/installation.md).

# Installation

Install the Multiplayer Transport Job, or update an older version to 3.0.

{% hint style="warning" %}
**Updating from 1.x?** Skip to [Updating from 1.x](#updating-from-1-x). Do **not** delete your old folder.
{% endhint %}

***

## Prerequisites

| Requirement      | Description                                                    |
| ---------------- | -------------------------------------------------------------- |
| **tw-lib**       | Free Tworst library, version 1.0.0 or newer                    |
| **oxmysql**      | Database                                                       |
| **FiveM Server** | A recent server build (OneSync on, as txAdmin sets by default) |

***

## Step 1: Download

### From Cfx.re Portal

1. Go to [portal.cfx.re](https://portal.cfx.re) → **Granted Assets**
2. Download **tw-transportv2** and **tw-lib**

{% hint style="info" %}
**tw-lib** is free and comes with every Tworst job. You can also download it from [GitHub Releases](https://github.com/Tworst-Shop/tw-lib/releases/latest). Download the `tw-lib-x.x.x.zip` file there, not "Code → Download ZIP" (that folder is named `tw-lib-main` and the jobs will not find it).
{% endhint %}

***

## Step 2: Extract Files

Put these three folders into your `resources` directory:

```
resources/
├── tw-lib/                     ← Tworst library (REQUIRED)
├── tw-transportv2/             ← The job
│   ├── defaults/
│   │   ├── config.lua          # Settings, regions, rewards, police alert, tutorial
│   │   ├── coordinate.lua      # Pallets, destinations and furniture spots of every region
│   │   └── locales/            # Texts (6 languages)
│   ├── hooks/                  # Your own functions (survive updates)
│   ├── client/  server/  shared/  html/
│   └── fxmanifest.lua
└── tw_transport_stream/        ← Map, props, truck (REQUIRED)
```

{% hint style="danger" %}
The folder names must stay exactly `tw-lib`, `tw-transportv2` and `tw_transport_stream`. Without the stream folder the truck and the pallets are missing.
{% endhint %}

***

## Step 3: Database

{% hint style="success" %}
**Nothing to import.** On first start the job creates `tw_transportv2` (player levels, daily missions, history) and tw-lib creates its own tables (`tw_lib_settings`, `tw_lib_players`, `tw_lib_ledger`, `tw_lib_ledger_daily`, `tw_lib_job_history`).
{% endhint %}

***

## Step 4: server.cfg

```cfg
ensure oxmysql
ensure qb-core              # your framework, if any
# ... your inventory, keys, fuel, clothing, target, dispatch scripts

ensure tw-lib               # before every Tworst job
ensure tw_transport_stream
ensure tw-transportv2
```

{% hint style="warning" %}
**Start order matters:** `tw-lib` must start **before** `tw-transportv2`. If the job starts first, tw-lib restarts it once by itself and prints a warning. Fix the order anyway.
{% endhint %}

***

## Step 5: Start & Check

Start the server and look at the console:

```
[tw-lib] server loaded
[tw-lib] 1.0.0 | framework=qb | inventory=qb-inventory | keys=qs-vehiclekeys | fuel=LegacyFuel | clothing=qb-clothing
[tw-lib] up to date: tw-lib 1.0.0, tw-transportv2 3.0.0
```

* The second line shows what tw-lib detected. If something is wrong there, see [Troubleshooting](#troubleshooting).
* The last line appears a few seconds later. If a new version exists it says `update available` instead.

Then in game: go to the transport NPC at the docks, open a lobby and start.

***

## Admin Menu Permission

`/twlib` opens the Tworst admin menu for players with the `tw-lib.admin` ace. QBCore / QBox admins (`god`, `admin`) and ESX admins (`admin`, `superadmin`) are allowed automatically. For anyone else, add to `server.cfg`:

```cfg
add_ace group.admin tw-lib.admin allow
```

You can also list players by identifier in `tw-lib/config.lua`, and set the menu language there. See [tw-lib → Admin Menu](/getting-started-installation/tw-lib/tw-lib/admin-menu.md) for what each page of the menu does.

***

## Updating from 1.x

1. Stop the server (or the resource).
2. Download the new `tw-transportv2` **and** `tw-lib`.
3. **Copy the new `tw-transportv2` over your old folder.** Do not delete the old folder first: tw-lib reads your old `config/config.lua`, `config/coordinate.lua` and `locales/` once and keeps every value you had changed (money, XP, language, texts, coordinates).
4. Keep your `tw_transport_stream` folder as it is.
5. Add `ensure tw-lib` before `ensure tw-transportv2` in `server.cfg`.
6. Start the server. The console lists what was imported. Your players' levels and history in `tw_transportv2` are kept.

{% hint style="info" %}
From 3.0 on, updates are simple: copy the new folder over the old one. Your settings are stored in the database (`tw_lib_settings`), so nothing you changed is lost.
{% endhint %}

{% hint style="warning" %}
Options that are functions (`Config.startJobFunction`, `Config.endJobFunction`, `Config.sendNotification`, `Config.CustomDrawText`, the dispatch functions) are not imported. Move your code into `hooks/my-hooks.lua` (see [Configuration → Hooks](/getting-started-installation/scripts/transport-job/configuration.md#hooks)).
{% endhint %}

***

## Troubleshooting

### `Could not find dependency tw-lib for resource tw-transportv2`

tw-lib is not installed or not started. Install it (Step 1) and `ensure tw-lib` before the job.

### `tw-transportv2 needs tw-lib X or newer`

Your tw-lib is older than the job needs. Download the latest from [GitHub](https://github.com/Tworst-Shop/tw-lib/releases/latest) or the Cfx.re portal and replace the `tw-lib` folder.

### Wrong framework / inventory / keys / fuel / clothing detected

Look at the `[tw-lib] 1.0.0 | framework=...` line. If a script you use is not there, check that it is started, and that its folder name is the original one. To force a choice: `twlib set tw-lib bridge.inventory ox_inventory` in the server console (same for `framework`, `keys`, `fuel`, `clothing`), then restart tw-lib.

### The truck or pallets are missing

`tw_transport_stream` is missing or not started.

### Police get no alert on the illegal run

Set `Config.PoliceAlert.dispatchSystem` to the dispatch script you use, and check that it is started. See [Configuration → Police Alert](/getting-started-installation/scripts/transport-job/configuration.md#police-alert).

***

## Need Help?

{% hint style="info" %}
Open a ticket on our [Discord](https://discord.gg/tworst) with the `[tw-lib] ...` status line from your console and any red error lines.
{% endhint %}
