Installation
Install oxide-meth, register its complete item chain, and verify cooking, crystallizing, and bagging.
Step-by-step setup for oxide-meth. Follow the steps in order — most issues come from skipping one.
Before You Start
oxide-meth works on QBCore, QBX, and ESX. It detects your framework automatically — there is nothing framework-specific to configure in the script itself. The only framework-side work is adding the items to your inventory (step 4).
You need these resources installed and working first:
| Resource | What it does |
|---|---|
ox_lib | Provides translations, callbacks, and UI helpers |
oxmysql | Connects the server to your MySQL database |
o-link | Connects meth to your framework (players, inventory, notifications, targeting) |
If you already run other Oxide resources, you have all three.
Installation Steps
1. Place the resource
Put the oxide-meth folder inside your server's resources folder.
2. Set the startup order
In your server.cfg, make sure the dependencies start before meth:
ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-methYour framework and inventory resources should already start before o-link — if other Oxide resources work on your server, this is already correct.
3. Database — nothing to do
The resource creates its own database tables the first time it starts, so there is no SQL script to run. (sql/install.sql is still included if you prefer to create the tables yourself or want to see the schema.)
These are the three tables it creates:
| Table | What it stores |
|---|---|
drugs_progression | Each player's meth level, XP, and totals |
drug_equipment | Meth tables and crystallizers players have placed in the world |
meth_drying_slots | What's drying in each crystallizer, so nothing is lost on restart |
It is safe to run oxide-meth alongside oxide-weed or oxide-cocaine — the first two tables are shared between Oxide drug resources on purpose, and each resource only creates them if they don't exist yet.
4. Add the items to your inventory
oxide-meth needs every item below to exist in your inventory with the exact spelling shown. A single typo in an item name will break that step of the production line.
Equipment
| Item | Label | Must be usable |
|---|---|---|
meth_table | Meth Table | Yes |
meth_crystallizer | Meth Crystallizer | Yes |
gas_mask | Gas Mask | Yes |
meth_manual | Cooking Manual | Yes |
Base ingredients
| Item | Label |
|---|---|
hydrogen_peroxide | Hydrogen Peroxide |
ammonia | Ammonia |
hydrochloric_acid | Hydrochloric Acid |
sodium_benzoate | Sodium Benzoate |
Additives
| Item | Label |
|---|---|
magnesium_oxide | Magnesium Oxide |
pain_killer | Pain Killer |
hazardous_waste | Hazardous Waste |
vanilla_unicorn_pills | Vanilla Unicorn Pills |
lax_to_the_max | Lax to the Max |
cannabis_leaf | Cannabis Leaf |
cough_syrup | Cough Syrup |
adrenaline | Adrenaline |
toluene | Toluene |
acetone | Acetone |
Production chain
| Item | Label | Must be usable |
|---|---|---|
liquid_meth_tray | Liquid Meth Tray | No |
crystallized_meth_tray | Crystallized Meth Tray | No |
baggy | Baggy | No |
crystal_meth | Crystal Meth | No |
meth_baggy | Meth Baggy | Yes |
Variant shards
| Item | Label |
|---|---|
crystal_meth_glass | Crystal Meth (Glass) |
crystal_meth_blue_sky | Crystal Meth (Blue Sky) |
crystal_meth_purple_haze | Crystal Meth (Purple Haze) |
crystal_meth_lean_crystal | Crystal Meth (Lean Crystal) |
crystal_meth_green_rush | Crystal Meth (Green Rush) |
crystal_meth_dirty_sprite | Crystal Meth (Dirty Sprite) |
crystal_meth_street_mix | Crystal Meth (Street Mix) |
crystal_meth_rocket_fuel | Crystal Meth (Rocket Fuel) |
crystal_meth_club_special | Crystal Meth (Club Special) |
crystal_meth_ice | Crystal Meth (Ice) |
Variant baggies (all must be usable)
| Item | Label |
|---|---|
meth_baggy_glass | Meth Baggy (Glass) |
meth_baggy_blue_sky | Meth Baggy (Blue Sky) |
meth_baggy_purple_haze | Meth Baggy (Purple Haze) |
meth_baggy_lean_crystal | Meth Baggy (Lean Crystal) |
meth_baggy_green_rush | Meth Baggy (Green Rush) |
meth_baggy_dirty_sprite | Meth Baggy (Dirty Sprite) |
meth_baggy_street_mix | Meth Baggy (Street Mix) |
meth_baggy_rocket_fuel | Meth Baggy (Rocket Fuel) |
meth_baggy_club_special | Meth Baggy (Club Special) |
meth_baggy_ice | Meth Baggy (Ice) |
"Must be usable" means the player can right-click/use the item from their inventory. The script handles what happens when it's used — your inventory just needs to allow it.
If you use ox_inventory (common on QBX and ESX), add the items to ox_inventory/data/items.lua. Every item is usable by default in ox_inventory, so a minimal entry is enough:
['meth_table'] = { label = 'Meth Table', weight = 7000 },
['meth_crystallizer'] = { label = 'Meth Crystallizer', weight = 5000 },
['gas_mask'] = { label = 'Gas Mask', weight = 500 },
['meth_manual'] = { label = 'Cooking Manual', weight = 100 },
['hydrogen_peroxide'] = { label = 'Hydrogen Peroxide', weight = 500 },
['liquid_meth_tray'] = { label = 'Liquid Meth Tray', weight = 1000 },
['crystal_meth'] = { label = 'Crystal Meth', weight = 100 },
['meth_baggy'] = { label = 'Meth Baggy', weight = 50 },
['meth_baggy_blue_sky'] = { label = 'Meth Baggy (Blue Sky)', weight = 50 },
-- ...repeat for every item in the tables aboveIf you use qb-inventory (default QBCore), add the items to qb-core/shared/items.lua. Set useable = true on the items marked "must be usable" above:
meth_table = { name = 'meth_table', label = 'Meth Table', weight = 7000, type = 'item', image = 'meth_table.png', unique = false, useable = true, shouldClose = true, description = 'A folding table with a burner' },
hydrogen_peroxide = { name = 'hydrogen_peroxide', label = 'Hydrogen Peroxide', weight = 500, type = 'item', image = 'hydrogen_peroxide.png', unique = false, useable = false, shouldClose = true, description = 'A strong chemical' },
crystal_meth = { name = 'crystal_meth', label = 'Crystal Meth', weight = 100, type = 'item', image = 'crystal_meth.png', unique = false, useable = false, shouldClose = true, description = 'A crystal shard' },
meth_baggy = { name = 'meth_baggy', label = 'Meth Baggy', weight = 50, type = 'item', image = 'meth_baggy.png', unique = false, useable = true, shouldClose = true, description = 'A sealed bag of product' },
-- ...repeat for every item in the tables aboveNotes:
- If you also run
oxide-weed, you already havebaggyandcannabis_leaf— do not add them twice. - Don't skip the variant shards and baggies. If a player cooks Blue Sky and
crystal_meth_blue_skydoesn't exist, breaking that tray will fail.
5. Copy the item images
Copy all the .png files from items/ into your inventory's image folder:
- qb-inventory:
qb-inventory/html/images/ - ox_inventory:
ox_inventory/web/images/
The filenames already match the item names, so no renaming is needed.
Two items don't have images in this folder: baggy and cannabis_leaf. They ship with oxide-weed — if you run it, you already have them. If not, use any small bag and leaf images you like, named baggy.png and cannabis_leaf.png.
6. Review the configuration
The defaults work out of the box, but you'll likely want to adjust the numbers to fit your server:
shared/config.lua— safe zones, ownership rules, cooking/drying/breaking/bagging settingsshared/config/items.lua— which item names each stage usesshared/config/additives.lua— additives, named variants, purity settingsshared/config/equipment.lua— placeable equipmentshared/config/progression.lua— XP rewards and level thresholdsshared/config/usage.lua— what happens when players use bagged meth
See Configuration for every setting explained.
Check That It Works
- Start the server and confirm
ox_lib,oxmysql,o-link, andoxide-methall start without errors in the console. - Give yourself admin permission for the test commands (see Admin), then run
/methkitin game — you should receive a full set of equipment and ingredients. - Use the meth table item from your inventory and place it on the ground. Do the same with the crystallizer.
- Walk up to the table and start a cook. Pour the four ingredients, run the temperature minigame, and confirm you receive a Liquid Meth Tray.
- Put the tray in the crystallizer, wait 5 minutes, and collect it.
- Break the tray at the table, collect the shards, then bag them with a baggy.
- Use the finished meth baggy from your inventory and confirm the effects play.
- Run
/methstatsand confirm your level and XP card appears.
If any step fails, see Troubleshooting.
Good To Know
- Players learn the system in game. The
meth_manualitem opens a full illustrated guide covering cooking, additives, recipes, and bagging. Hand it out or sell it — players don't need out-of-game instructions. - Items keep their quality through the whole chain. The variant and purity are stored on the item itself, so trays, shards, and bags can be traded between players without losing anything.
- The interface ships pre-built. There is nothing to compile. Rebuild the
webfolder only if you edit the source code underweb/src. - Translations: all player-facing text lives in
locales/en.json.