Before You Begin#
Before installing Gym Creator, make sure your server meets the requirements. Four things are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. |
| Required |
Documentation
Install Gym Creator on your FiveM server: requirements, server.cfg load order, importing the database, who can open the gym creator and the main configuration.
Before installing Gym Creator, make sure your server meets the requirements. Four things are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. |
| Required |
Callbacks, model loading and shared helpers.
OneSync | Required | The resource declares |
Framework | Required |
|
Target | Optional |
|
| Optional | Hides its HUD while the creator is open. |
| Optional | Only for the inventory quests ( |
Everything framework- or third-party-specific sits behind a small open file, and the resource picks the right one by looking at what is already running:
Layer | Detected |
|---|---|
Framework |
|
Target | In order: |
Inventory |
|
Integrations has the details for each layer and how to adapt one by hand.
After purchasing Gym Creator, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Gym Creator.
After extracting the download, you should have the following folder:
qs-gym/
├── config/ -- main.lua and exercises.lua: what you may edit
├── custom/ -- framework bridges (ESX / QBCore), notifications, HUD
├── client/custom/ -- the target bridge (editable)
├── server/custom/ -- inventory bridges (editable)
├── server/webhooks.lua -- Discord logs
├── database/ -- database.sql
├── locales/ -- 28 languages
└── web/ -- the interface, ready to use (do not edit)The folder name is not hard-coded —
qs-gymis only a suggestion. Use the same name inserver.cfg.
Move the qs-gym folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-gym/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Gym Creator:
set onesync on
ensure oxmysql
ensure ox_lib
# Framework (one of them)
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Optional: target, interface, inventory
ensure ox_target
ensure qs-interface
ensure qs-inventory
ensure qs-gymThe loading order matters. Detection only sees resources that are already started: a framework that starts after Gym Creator stops it from loading at all, and a target that starts after it is not found, so the built-in [E] prompt is used instead.
Import database/database.sql into your server's database with HeidiSQL, phpMyAdmin or your panel's database tool. It creates two tables:
Table | Holds |
|---|---|
| Every gym built in the creator: its label, logo, blip, reception NPC, stations, props, membership price and length, stat multiplier and decay settings. |
| Each character's strength and stamina, their membership (gym and expiry date) and the date of their last decay. |
The file uses
CREATE TABLE IF NOT EXISTS, so importing it twice is harmless. Gym Creator does not create its tables by itself — if you skip this step, no gym and no stats will load. A fresh install starts with no gyms: you build the first one in game.
/gymcreator is where gyms are built, so it is behind a permission check done on the server. A player gets in through either route:
Automatic, nothing to configure.
Framework | Counted as admin |
|---|---|
ESX | Group |
QBCore / Qbox | The |
To recognise another group — mod, for instance — edit playerIsAdmin in custom/esx/server.lua or custom/qb/server.lua.
Config.CreatorJobs in config/main.lua lets a job build gyms without being an admin — a gym owner's job, a city planner. grade = false allows every grade; otherwise list the grades that may enter.
Config.CreatorJobs = {
{ job = 'gymowner', grade = false }, -- every grade
{ job = 'realestate', grade = { 3, 4 } }, -- only grades 3 and 4
}Admins always bypass this list.
Gyms themselves — prices, durations, multipliers, decay, positions — are configured in game, per gym. The files are for server-wide behaviour:
File | Contents |
|---|---|
| Language, price formatting, creator command and jobs, interaction distance, membership defaults, the decay schedule, native stats, the HUD key, debug. |
| The exercise catalogue: animations, props and the default strength and stamina reward of each exercise. |
| Discord webhook URLs for the creator and membership logs. |
The values worth reviewing first:
Config.Locale = 'en' -- language, see locales/
Config.CreatorCommand = 'gymcreator' -- opens the creator
Config.TargetDistance = 2.0 -- reach of the receptionist and stations
Config.DefaultMembershipPrice = 2500 -- pre-filled for each new gym
Config.DefaultMembershipDurationDays = 30
Config.StatDecay = { enabled = true, hour = 22, minute = 0 } -- nightly decay, server time
Config.AffectPedStats = true -- push stats to GTA's MP0_STRENGTH / MP0_STAMINA
Config.StatsHUDKey = 'F10' -- toggles the strength / stamina HUD
Config.Debug = falseEvery option is described in Usage → Configuration Reference.
Restart your server and read the console. A healthy start prints:
[INFO] Successfully loaded the framework. esx
GYM INFO: Loaded 0 gym(s) from database.The first line names the framework that was picked (esx or qb). The second counts the gyms in qs_gyms — zero on a fresh install. If you see a red error instead, go to Common Errors.
Then join your server and work through the first loop:
Type /gymcreator. If you get "You do not have permission to use this.", check Who Can Open the Creator above.
Press +, give it a name, place the blip, the receptionist and one station, then press Create gym. Usage covers each panel.
Walk to the receptionist and choose Purchase Membership. Pick cash or bank and confirm.
Use the station, press SPACE until the bar reaches 100%, then press F10: your strength and stamina have gone up.
Nothing needs a restart from here on. Every gym is created, edited and deleted in game, and players see the change immediately.