What QBCore actually is
QBCore is a roleplay framework that runs on top of FiveM's server (FXServer). FiveM by itself only gives you a multiplayer GTA V server with no gameplay logic. QBCore adds the things a roleplay server needs: player accounts, characters, jobs, money, inventory hooks, and a shared API that other resources call. When a script says it is "QBCore compatible," it means it talks to the qb-core resource through exports and events like QBCore.Functions.GetPlayer.
The framework lives in a GitHub organization called qbcore-framework. The heart of it is the qb-core resource. Around it sit dozens of official resources such as qb-spawn, qb-multicharacter, qb-inventory, and qb-target. You do not install these one by one when you start out. Instead you deploy a prebuilt bundle called a txAdmin recipe, which pulls a known-good set of resources and a matching database in one pass.
Understanding the layering matters because most setup failures come from confusing the layers. FXServer is the engine. txAdmin is the control panel that manages FXServer. oxmysql is the database bridge. QBCore is the gameplay framework. server.cfg is the file that wires them together. Get the order right and the rest is mechanical.
Hardware and prerequisites
Before touching any files, get the foundation right. You need a 64-bit Windows or Linux machine you can keep online. A development box on your home PC is fine for testing. For anything players will join, use a dedicated server or VPS with a static public IP.
A QBCore server is single-threaded for the main game logic, so per-core clock speed matters more than core count. Aim for a modern CPU with a high single-thread score, at least 4 GB of RAM for an empty framework, and an SSD. A loaded roleplay server with 32 players and 200 resources can use 8 to 16 GB of RAM and benefits from NVMe storage.
You also need three accounts and downloads. First, a FiveM keymaster license key from keymaster.fivem.net, which is free and tied to your forum account. Second, MySQL or MariaDB installed and reachable, because QBCore stores everything in a database. Many people install XAMPP because it bundles MariaDB and phpMyAdmin in one installer. Third, the FXServer artifacts, which are the actual server binaries.
Getting the artifacts
Artifacts are versioned builds of FXServer. Download them from the official runtime index at runtime.fivem.net/artifacts/fivem. On Windows you want the server.zip from a build folder. On Linux you pull the fx.tar.xz.
Do not grab the newest "latest" build blindly. FiveM marks certain builds as recommended. QBCore tracks recommended builds, and the newest artifact can introduce native changes that break older resources. As of writing, a safe approach is to use a recent recommended artifact, for example a build in the 7000 to 12000 range that FiveM has flagged as recommended, rather than a bleeding-edge nightly. Unzip the artifacts into a clean folder such as C:\FXServer\server.
Step 1: Run txAdmin and deploy QBCore
txAdmin ships inside the artifacts. You do not download it separately. On Windows, run FXServer.exe from your artifacts folder. The console prints a local URL like http://localhost:40120 and a one-time PIN. Open that URL in a browser and log in with the PIN to create your txAdmin admin account.
txAdmin then asks you to set up a server. Choose to create a new server using a recipe. In the recipe list, pick the official QBCore recipe (it points at the qbcore-framework/txAdminRecipe repository). This is the single most important shortcut in the whole process. The recipe does four things automatically:
- Clones the QBCore resources from the
qbcore-frameworkGitHub organization into aresourcesfolder. - Imports the QBCore SQL schema into a database you name.
- Downloads and configures
oxmysql. - Writes a working
server.cfgwith the correctensurelines.
When txAdmin asks for the database, give it your MySQL host, user, password, and a database name like qbcore. txAdmin builds the connection string for you. If you are running XAMPP locally with default settings, the user is root with an empty password and host localhost.
Step 2: Understand the files the recipe wrote
Even though the recipe automates the work, you must understand what it produced, because every future fix happens in these files.
The server.cfg is the boot script. It loads convars, sets your server name, and lists resources to start. The critical lines look like this:
set mysql_connection_string "mysql://root:@localhost/qbcore?charset=utf8mb4"
ensure oxmysql
ensure qb-core
ensure [qb]
sv_licenseKey changeme
The order is deliberate. oxmysql must start before qb-core, because the framework runs database queries the moment it boots. qb-core must start before any QBCore resource, because those resources call qb-core exports during their own startup. The ensure [qb] line starts every resource inside the [qb] resource category folder.
The mysql_connection_string convar is read by oxmysql, not by QBCore directly. oxmysql is a resource maintained by the overextended team and is the standard MySQL bridge for modern FiveM frameworks. It exposes a MySQL global and oxmysql exports that qb-core and every other resource use. If this string is wrong, qb-core will throw connection errors and no player will be able to load a character.
Step 3: Add your license key and network settings
Open keymaster.fivem.net, log in, and create a new server key. Choose a key tied to your server's IP or a wildcard if you are testing. Copy the key into server.cfg:
sv_licenseKey abc123yourkeyhere
Without a valid license key, FXServer will refuse to start or will not list your server. Also confirm two network basics. The default game port is 30120 over both TCP and UDP. Forward that port on your router or open it in your VPS firewall. The endpoint_add_tcp and endpoint_add_udp lines in server.cfg should match the port you open.
Set sv_maxClients to your slot count, for example 48. Set sv_hostname to whatever players will see in the server browser. Do not uncomment sv_master1; modern FXServer lists your server automatically once it has a valid license key and an open port, and leaving sv_master1 set actually forces the server private and disables the connect button. To control visibility on a current build use sv_endpointPrivacy instead of touching the old master line.
Step 4: Boot the server and verify
Start the server through txAdmin's start button, or by running FXServer.exe +exec server.cfg on Windows. Watch the live console in txAdmin. A healthy boot prints lines confirming oxmysql connected to the database, then qb-core initialized, then each [qb] resource starting without red errors.
The two messages you are looking for are an oxmysql line that confirms it connected to your database, and the absence of any MySQL connection refused errors. If oxmysql cannot connect, every downstream QBCore resource fails and players spawn into a black screen.
Now connect. In the FiveM client, open the console with F8 and type connect localhost for a local test, or connect your.server.ip from another machine. You should hit the QBCore multicharacter screen served by qb-multicharacter, create a character, and spawn in. That confirms the database write path works end to end.
Step 5: Make yourself an admin and a god
A fresh QBCore server gives you no special powers. Grant yourself admin in two places. In txAdmin, your account already has web admin rights. For in-game permissions, QBCore reads from the database table that stores player permissions, or you add an ace permission in server.cfg keyed to your license identifier:
add_ace group.admin command allow
add_principal identifier.fivem:YOURID group.admin
You can find your identifier by joining and reading the console, or from txAdmin's player list. Once you are admin, in-game commands like /setjob, /giveitem, and /car become available for testing.
Keeping it stable
Update the framework deliberately, not constantly. QBCore is community-maintained and changes often. Pin your artifact to a recommended build, and only pull resource updates from qbcore-framework after reading the changelog. When you add third-party scripts, confirm they target the current QBCore export style. The framework moved many functions over time, so a script written for an old QBCore can call exports that no longer exist.
Back up your database before any major change. A QBCore server's value lives in its players, characters, and inventory tables, not in its code. Use phpMyAdmin or mysqldump to snapshot the database on a schedule.