Installation
Install oxide-weed, register every required item, and verify cultivation, processing, and selling.
Step-by-step setup for oxide-weed. Follow the steps in order — most issues come from skipping one.
Before You Start
oxide-weed 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 weed to your framework (players, inventory, money, notifications, targeting) and runs the in-world placement tool. Version 1.9.0 or newer |
If you already run other Oxide resources, you have all three. Update o-link to 1.9.0 or newer if placing plants, lamps, heaters, or equipment says it needs an updated o-link.
Installation Steps
1. Place the resource
Put the oxide-weed folder inside your server's resources folder.
2. Set the startup order
In your server.cfg, make sure the dependencies start before weed:
ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-weedYour framework and inventory resources should already start before o-link — if other Oxide resources work on your server, this is already correct.
3. Database
The resource creates its own database tables and adds missing columns on boot when the database user has CREATE and ALTER permissions. Normal installs and upgrades need no manual SQL. (sql/install.sql is still included if you prefer to create the tables yourself or want to see the schema.)
These are the tables it creates:
| Table | What it stores |
|---|---|
drugs_progression | Each player's weed level, XP, and lifetime totals |
drug_equipment | Weed tables, totes, water containers, drying racks, freeze dryers, and brick presses placed in the world |
drug_plants | Every growing plant — its strain, timers, water, owner, and quality |
drug_lamps | Grow lamps and which plant each one is helping |
drug_heaters | Heaters and which weed table each one is attached to |
drug_drying_slots | What's drying where, so nothing is lost on a server restart |
drug_strains | Every strain players have created or discovered, and which are signature strains, with their reputation |
weed_hoses | Which water tanks have a hose connected |
weed_tents | Grow tents placed in the world, and whether each has a carbon filter |
weed_carried_tanks | The water in picked-up water tanks, until each is placed again |
weed_grower | Each character's first-time XP bonuses and personal bests |
weed_strain_mastery | Each character's harvests, best quality and units sold of each strain |
weed_grower_goals | Each character's daily and weekly goals and their progress |
weed_grower_ranks | Each character's master rank perk picks |
oxide_settings | Saved resource settings |
Updating from an older version with those database permissions needs no manual SQL: the resource creates the weed_hoses, weed_tents, weed_carried_tanks, weed_grower, weed_strain_mastery, weed_grower_goals and weed_grower_ranks tables, adds growth_state, tent_id, tent_slot, grower_bonus and pollen_ready_at columns to drug_plants, and adds the signature strain columns to drug_strains itself on its next start. sql/phase_7_growth.sql, sql/migrate_water_hose.sql, sql/migrate_grow_tents.sql, sql/migrate_carried_tanks.sql, sql/migrate_grower.sql, sql/migrate_pollen_regrow.sql, sql/migrate_strain_mastery.sql, sql/migrate_grower_goals.sql, sql/migrate_master_ranks.sql and sql/migrate_signature_strains.sql do the same by hand if you prefer. Each is safe to run more than once. The shared drugs_progression table is never changed.
It is safe to run oxide-weed alongside oxide-meth 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-weed 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 pipeline.
"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.
Growing supplies
| Item | Label | Must be usable |
|---|---|---|
cannabis_seed | Cannabis Seed | Yes |
plant_pot | Plant Pot | No |
water | Water | No |
fertilizer | Fertilizer | No |
watering_can | Watering Can | Yes |
growing_manual | Growing Manual | Yes |
gelato_seed_pack | Gelato Seed Pack | Yes |
wedding_cake_seed_pack | Wedding Cake Seed Pack | Yes |
durban_poison_seed_pack | Durban Poison Seed Pack | Yes |
Equipment (all must be usable)
| Item | Label |
|---|---|
grow_lamp | Grow Lamp |
weed_heater | Heater |
weed_table | Weed Table |
storage_tote | Storage Tote |
water_container_small | Small Water Container |
water_container_large | Large Water Container |
water_hose | Water Hose |
drying_rack | Drying Rack |
freeze_dryer | Freeze Dryer |
brick_press | Brick Press |
grow_box | Grow Box |
grow_tent | Grow Tent |
grow_tent_large | Large Grow Tent |
Add carbon_filter (Carbon Filter Kit) too. It doesn't need to be usable: players fit it from a grow tent's options.
Harvest and processing
| Item | Label | Must be usable |
|---|---|---|
weed_bud | Weed Bud | No |
dried_weed_bud | Dried Weed Bud | No |
pruned_weed_bud | Pruned Weed Bud | No |
cannabis_leaf | Cannabis Leaf | No |
pollen | Pollen | No |
trimming_scissors | Trimming Scissors | Yes |
baggy | Baggy | No |
Finished products
| Item | Label | Must be usable |
|---|---|---|
weed_1g | Weed (1g) | No |
weed_eighth | Weed (1/8 oz) | No |
weed_quarter | Weed (1/4 oz) | No |
weed_half | Weed (1/2 oz) | No |
weed_ounce | Weed (1 oz) | No |
weed_brick | Weed Brick | No |
Smoking
| Item | Label | Must be usable |
|---|---|---|
rolling_papers | Rolling Papers | Yes |
cigarillo_wraps | Cigarillo Wraps | Yes |
lighter | Lighter | No |
joint | Joint | Yes |
blunt | Blunt | Yes |
Watch out for these common naming mistakes:
- the item is
water, notwater_bottle rolling_papersis pluralbaggymust match exactly — don't substitute another bag item
If 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. Set unique = true on watering_can, water_container_small and water_container_large: each one carries its own water, and qb-inventory merges items that aren't unique into one slot:
cannabis_seed = { name = 'cannabis_seed', label = 'Cannabis Seed', weight = 1, type = 'item', image = 'cannabis_seed.png', unique = false, useable = true, shouldClose = true, description = 'A seed ready for planting' },
gelato_seed_pack = { name = 'gelato_seed_pack', label = 'Gelato Seed Pack', weight = 50, type = 'item', image = 'gelato_seed_pack.png', unique = false, useable = true, shouldClose = true, description = 'A sealed pack of Gelato seeds. Open it to plant them' },
weed_bud = { name = 'weed_bud', label = 'Weed Bud', weight = 100, type = 'item', image = 'weed_bud.png', unique = false, useable = false, shouldClose = true, description = 'A fresh cannabis bud' },
weed_table = { name = 'weed_table', label = 'Weed Table', weight = 7000, type = 'item', image = 'weed_table.png', unique = false, useable = true, shouldClose = true, description = 'A work table for processing weed' },
water_container_small = { name = 'water_container_small', label = 'Small Water Container', weight = 3000, type = 'item', image = 'water_container_small.png', unique = true, useable = true, shouldClose = true, description = 'A small water container for storing water' },
grow_tent = { name = 'grow_tent', label = 'Grow Tent', weight = 6000, type = 'item', image = 'grow_tent.png', unique = false, useable = true, shouldClose = true, description = 'A 4x4 grow tent with a built-in light. Holds four plants' },
carbon_filter = { name = 'carbon_filter', label = 'Carbon Filter Kit', weight = 3000, type = 'item', image = 'carbon_filter.png', unique = false, useable = false, shouldClose = true, description = 'A carbon filter and inline fan for a grow tent. Cuts the smell' },
-- ...repeat for every item in the tables aboveIf you use ox_inventory (common on QBX and ESX), every item above is ready to paste in item images/ox_inventory_items.lua. Copy the entries between its braces into ox_inventory/data/items.lua, above that file's final closing brace. Every item is usable by default in ox_inventory, so there is nothing else to set. water is not in the file because ox_inventory already ships it.
If you use the default ESX inventory, items live in your database. Add a row to the items table for each item:
INSERT INTO `items` (`name`, `label`, `weight`) VALUES
('cannabis_seed', 'Cannabis Seed', 1),
('gelato_seed_pack', 'Gelato Seed Pack', 1),
('weed_bud', 'Weed Bud', 1),
('weed_table', 'Weed Table', 7),
('grow_tent', 'Grow Tent', 6);
-- ...repeat for every item in the tables aboveThe script registers which items are usable at startup, so there is no extra "usable" setup on ESX.
5. Copy the item images
Copy all the .png files from item images/ 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.
One item has no image in this folder: water. Most servers already have a water item with an image — if yours doesn't, use any water bottle image you like, named water.png.
6. Review the configuration
The defaults work out of the box. To adjust anything — prices, timers, strains, store stock, NPC locations, zones — use the in-game editor: give yourself admin permission (see Admin) and run /weed settings. Changes apply immediately, are saved to the database, and survive restarts.
The files under shared/config/ only supply the factory defaults that seed the database on first start. If you'd rather pre-set values before ever starting the resource, you can edit them there first — but once the resource has started, use /weed settings (file edits no longer take effect for existing settings).
See Configuration for every setting explained and how the database-backed settings work.
Check That It Works
- Start the server and confirm
ox_lib,oxmysql,o-link, andoxide-weedall start without errors in the console. - Give yourself admin permission for the test commands (see Admin), then run
/weed kitin game — you should receive a full set of seeds, supplies, and equipment. - Use the cannabis seed from your inventory and plant it on open ground. Water and fertilize it when prompted.
- Run
/weed growto skip the growing time, then harvest the plant. - Use the weed table item to place a table, put your fresh buds on it to dry, and run
/weed dryto skip the drying time. - Collect the dried buds, use the trimming scissors to prune them, then bag them at the table with a baggy.
- Visit the supply store (The Germinator — marked on the map by default) and confirm the shop opens and you can buy something.
- Run
/weed statsand confirm your level and XP card appears.
If any step fails, see Troubleshooting.
Updating to 1.6.0
- Add
water_hose,grow_box,grow_tent,grow_tent_large,carbon_filter,gelato_seed_pack,wedding_cake_seed_packanddurban_poison_seed_packto your inventory and copy their supplied images. Every new item exceptcarbon_filtermust be usable. The complete ox_inventory template is initem images/ox_inventory_items.lua. - On qb-inventory, keep
watering_can,water_container_smallandwater_container_largeunique so each keeps its own water. - Give the database user CREATE and ALTER permissions for the automatic table and column upgrades described above, or apply the included SQL migrations manually. Back up the database before upgrading.
- Saved settings you customized remain. Unchanged XP defaults migrate once; old drying-rack tray settings migrate to bars, and legacy tote capacity in kilograms converts to grams. Review
/weed settingsafter the update. - For package-weight selling XP, use Drug Selling 2.1.0 or newer and merge its file-only weed configuration. Signature strain price bonuses also require the optional
PriceForpricing row; see Integrations. - Merge new keys into custom locales. Restart the whole server after updating so the new streamed models load.
Good To Know
- Players learn the system in game. The
growing_manualitem opens a full illustrated guide covering planting, genetics, drying, processing, and selling. Hand it out or sell it — players don't need out-of-game instructions. - Items keep their strain and quality through the whole chain. Strain data is stored on the item itself, so buds, bags, and bricks can be traded between players without losing anything.
- The drying rack and brick press are not sold anywhere by default. They unlock at levels 3 and 8, but the store doesn't stock them out of the box — add them to the store's
customItemslist or sell them through your own shops. - Dirty money only applies to the scientist. The Germinator store always charges regular cash. What counts as "dirty money" is set under Dirty Money in
/weed settings. - After updating, restart the whole server, not just the resource. New model files only load on a full restart;
refreshandensure oxide-weedare not enough. - Water containers placed before the water hose update turn into the new water tanks on the next start and keep their spot and rotation. The tap is on the tank's front, so if one ends up with its tap against a wall, pick it up and place it again. If you had changed the store list in
/weed settings, the water hose is added to it once; if you had changed the water container models, add the hose to the store yourself. The bottle in the watering scene becomes the new watering can the same way, unless you had chosen your own prop. - Grower progression after an update: XP rewards still at their old defaults (harvest, crossbreeding, pollen, brick press, and drying and lamps, which now pay when the dried buds are collected) move to the new ones once; values you changed are kept. If you had set the freeze dryer's own use level higher than its Equipment level, the Equipment level is raised to match, once. If you had changed the strain list or the store list in
/weed settings, the three premium strains and their seed packs (with a Seeds tab) are added to them once; remove them again if you don't want them. Players who grew before the update get each first-time XP bonus the next time they do that action. - The interface ships pre-built. There is nothing to compile.
- Translations: all player-facing text lives in
locales/en.json(a Spanish translation,es.json, is included).