Installation Guide

Step-by-step setup for oxide-dealerships — prerequisites, the interface build step, database import, and per-framework admin setup.

This guide takes you from a fresh download to four working dealerships in your world. Follow it top to bottom — the steps are in the order your server needs them.

Prerequisites

Required resources

Make sure these are on your server and starting before oxide-dealerships:

ResourceMinimum VersionPurpose
ox_liblatestShared utility library — translations, map zones, and vehicle helpers
oxmysqllatestThe bridge between the resource and your database
o-linklatestFramework bridge — one resource, no framework-specific edits

Optional resource

ResourcePurpose
oxide-bankingWhen installed and enabled, finance interest rates follow each player's credit score, and a missed-payment invoice is sent when a loan defaults. Everything works without it.

Supported frameworks

FrameworkSupport
QBCoreFull (via o-link)
ESXFull (via o-link)
QBX (qbx_core)Full (via o-link)

Installation

Extract the resource

Place the oxide-dealerships folder inside your server's resources/ folder (or your [oxide] bundle folder if you group Oxide resources).

Build the interface

The catalog, management dashboard, and admin panel ship as source code and must be built once before they will display. Skipping this step is the number one cause of a blank or black box instead of the catalog.

You need Node.js installed on the machine where you build (installing Node.js also installs npm). Open a terminal in the resource's web folder (resources/oxide-dealerships/web) and run:

npm install
npm run build

When it finishes, a new web/dist folder exists inside web, containing an index.html file and an assets folder. If web/dist is there, this step worked.

Add startup order

Every dependency must start before oxide-dealerships:

server.cfg
ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-banking      # only if you use it — otherwise leave this line out
ensure oxide-dealerships

Import the database

Run sql/install.sql from the resource folder against your server's database (drag it into a HeidiSQL query tab, or use phpMyAdmin's Import tab).

This creates seven tables:

TableWhat it stores
dealershipsEvery dealership — name, owner, lot zone, greeter, blip, and settings
dealership_inventoryThe vehicles each dealership has for sale (new and used)
dealership_employeesStaff hired at player-owned dealerships, with their commission
dealership_financingActive and past finance contracts
dealership_salesA record of every sale (the sales ledger)
dealership_couponsPromo codes
dealership_coupon_redemptionsA record of who used which coupon

Importing also seeds four ready-to-use NPC dealerships: pdm (Premium Deluxe Motorsport — cars), boats (Marina Shop), air (Air Shop — helicopters and planes), and truck (Truck Motor Shop). They appear in your world automatically. Re-running the file later never duplicates or overwrites anything.

Grant admin permission

The /dealership commands and the admin dashboard are restricted to admins. What counts as an admin depends on your framework — see Framework Setup below.

Never run sql/reset.sql on a live server

The resource also includes sql/reset.sql, which deletes all dealership data — every shop, sale, and finance contract. Only run it if you truly want to wipe everything and start over.

Optional: enable the Luxury dealership

A fifth dealership, Luxury Vehicle Shop at Rockford Hills, is included but disabled by default because it needs a custom map (MLO) at that location to look right. If you have that map, open sql/install.sql in a text editor, find the section near the bottom marked Luxury Vehicle Shop — DISABLED by default, remove the -- comment marks from the start of each of its lines, and import the file again.

Future updates

sql/install.sql contains the complete, up-to-date schema — it is the only file you need to run on this release. If a future update changes the database, it will ship numbered upgrade files in a sql/migrations/ folder, and the changelog will say exactly which ones to run. Re-running install.sql never adds new columns to tables that already exist, which is why updates ship separate upgrade files.

Framework Setup

Behind the scenes, the resource asks o-link "is this player an admin?" — and the answer depends on your framework.

QBCore admins are recognized through the server's ACE permission system — the bridge checks the command permission. Add this to your server.cfg:

server.cfg
add_ace group.admin command allow

txAdmin puts its admins in group.admin, so with that line they pass the check. More generally: any admin who can already run your server's built-in restricted commands has the command permission and passes without changes.

QBX (qbx_core) uses the same ACE permission as QBCore. Add the same line to your server.cfg:

server.cfg
add_ace group.admin command allow

ESX recognizes admins by their admin group (such as admin or superadmin) set on the player's account in your users database table or through your admin menu. Any player ESX considers an admin automatically passes — no extra ACE line is needed.

If a /dealership command replies "You do not have permission," the player is not recognized as an admin yet — see Troubleshooting.

Turn off your old vehicle shop

If you were running another vehicle shop resource, stop it so the two don't overlap (duplicate blips, two greeters at the same spot). Remove or comment out its ensure line:

  • QBCore: qb-vehicleshop
  • ESX: esx_vehicleshop
  • QBX: its equivalent vehicle shop resource

You do not need to migrate vehicle ownership data by hand — o-link reads whatever ownership system your framework already uses, so cars bought here are saved the way your framework expects.

Optional: oxide-banking

If you run oxide-banking and want financing to react to a player's credit, open shared/config/finance.lua and set:

shared/config/finance.lua
Config.Finance.useOxideBanking = true

With this on (and oxide-banking running), two things change:

  • A player's credit score sets their interest rate and how many payments they're allowed — better credit means a lower rate and longer terms.
  • When a loan defaults, the dealership sends the player a missed-payment invoice through oxide-banking.

If oxide-banking is not running, this setting does nothing harmful — financing simply uses the standard rates from your config. Leave it false if you don't use oxide-banking.

Verification

Start your server and join. Here's what "working" looks like:

No startup errors. The console shows ox_lib, oxmysql, o-link, and oxide-dealerships starting without red dependency errors.
Four blips on the map — dealership icons for the cars, boats, aircraft, and truck shops.
A greeter is standing at Premium Deluxe Motorsport. Walk into the PDM lot downtown and find the NPC; showroom cars are parked on the floor.
The catalog opens. Interact with the greeter, choose Browse Catalog, and rotate a vehicle in the 3D preview. A blank or black screen here means the interface wasn't built — go back to the build step.
The contracts panel opens. Type /myloans — an empty "My Contracts" panel should appear.
Admin access works. Type /dealership list as an admin — it prints your four dealerships to chat.

Next Steps