Requirements
A framework is not required. On a standalone server, jobs and gangs resolve empty and access control falls back to ACE permissions and identifier lists.
ox_target and ox_inventory are deliberately not listed as hard dependencies, so a server that uses neither still boots cleanly.Steps
-
Drop the resource into your server, e.g.
resources/[nex]/nexdev_djsystem/. -
Add it to your
server.cfgafter its dependencies: -
Add the ACE permissions:
See Permissions for what each one grants and how to hand the builder role to someone who isn’t a full admin.
- Start your server. The database tables are created automatically on first start — no SQL to run.
-
Replace the soundboard URLs.
config/soundboard.luaships with placeholderhttps://cdn.yourserver.com/...addresses that resolve to nothing. See Soundboard.
The database
You do not need to import any SQL. The script runsCREATE TABLE IF NOT EXISTS for all three tables on start.
install.sql sits in the resource root for reference, for DBAs who prefer to provision schema out of band, and for backup and restore. It is not required.
If the database is unreachable the script still runs — config booths load and playback works. Only the persistence features (saved booths, playlists, audit rows) report “the database is unavailable” and refuse.
The audit table is never pruned automatically. If you want that, schedule it yourself:
Configure
Work through these in order:config/config.lua— keybind, command, framework, audio defaults, permissions, security limits, UI defaults.config/locations.lua— delete the shipped booths you don’t want, add your own.config/soundboard.lua— replace every placeholder URL.config/effects.lua— lighting presets and defaults. Usually fine as shipped.
The Discord webhook
The webhook URL is not a config key, becauseconfig/config.lua is readable by every connected client. Set it as a server-only convar in server.cfg instead:
Use
set, never setr. setr replicates the value to every client, which leaks your webhook URL to anyone connected.Checking it worked
On a healthy start the server console prints:/dj). The panel should open with the booth’s name in the header.
From F8:
started. If it prints missing or stopped, fix server.cfg and restart.
Updating
Your booths, playlists and logs all live in MySQL and are preserved automatically. Booths you added toconfig/locations.lua, and every other file under config/, are yours — keep your edited copies when you replace the resource files.
- Replace the resource files with the new version, keeping your edited
config/files. - Restart the server.

