FiveM Docs
Addons

ESX Legacy Addons

Overview of all 39 official ESX Legacy addons with categories, dependencies, installation order and the 2026 security hardening SQL migration.

ESX Legacy Addons is the official collection of optional resources that sit on top of es_extended: jobs, shops, vehicles, housing, HUD, chat and admin tools. Install the whole folder for a ready-to-play roleplay server, or pick single addons and respect their dependencies.

Overview

FactValue
Repositoryesx-framework/ESX-Legacy-Addons
Folder[esx_addons] (39 resources)
Required by allesx_lib, es_extended (most also need oxmysql)
Installed byThe txAdmin ESX recipe, or manually

Every addon lists its hard dependencies in fxmanifest.lua. FiveM refuses to start a resource whose dependencies are missing, and prints Couldn't start resource ... dependency ... not found in the console.

All addons

AddonWhat it doesCategory
esx_accessoriesShops for masks, helmets, glasses and ear accessories, saved per playerplayer
esx_accessorymanagerRadial menu to take off and restore clothing and propsplayer
esx_addonaccountExtra money accounts, such as society funds and property black moneyeconomy
esx_addoninventoryShared and personal item storage for societies and propertieseconomy
esx_adminmenuAdmin menu with player actions, bans and action logsadmin
esx_ambulancejobEMS job: revive, heal, pharmacy, job vehiclesjobs
esx_animationsEmote menu with animations, scenarios and walk stylesplayer
esx_bankingBanks and ATMs with PIN codes, transfers and historyeconomy
esx_barbershopPaid hair, beard and makeup changesplayer
esx_basicneedsHunger and thirst, food and drink itemsplayer
esx_billingInvoices and fines between players and jobseconomy
esx_boatBoat shop, boat license and boat garagesvehicles
esx_clotheshopClothing stores and saved outfitsplayer
esx_cruisecontrolCruise control and seatbeltvehicles
esx_datastoreJSON data storage per player or per societyeconomy
esx_deathDeath state, death screen, respawn and reviveplayer
esx_dmvschoolTheory and practical driving testsvehicles
esx_drugsHarvest, process and sell cannabis for black moneyeconomy
esx_garageGarages and impound lots with a React UIvehicles
esx_hudDefault HUD: status bars, money, speedometer, mileageplayer
esx_joblistingJob center where players pick a non-whitelisted jobjobs
esx_jobsSimple civilian jobs: miner, lumberjack, fisherman and morejobs
esx_licenseStores licenses like driving and weapon licensesplayer
esx_lscustomLos Santos Customs vehicle tuningvehicles
esx_mechanicjobMechanic job: repairs, towing, craftingjobs
esx_optionalneedsDrunk status and a beer itemplayer
esx_pausemenuCustom pause menu with character and job infoplayer
esx_policejobPolice job: armory, handcuffs, fines, vehiclesjobs
esx_propertyBuy, furnish and share houses, real estate jobworld
esx_rpchat/me, /do, OOC, /twt and private messagesplayer
esx_scoreboardPlayer list with job counts and live activitiesplayer
esx_serviceOn/off duty system with per-job limitsjobs
esx_shops24/7, liquor and LTD stores with a cart UIeconomy
esx_societyJob bank accounts, boss menu, salaries, money washingeconomy
esx_statusStatus engine behind hunger, thirst and drunkplayer
esx_taxijobTaxi job with NPC faresjobs
esx_vehicleshopCar dealership, car dealer job, rentalsvehicles
esx_weaponshopAmmu-Nation and black market weapon shopseconomy
esx_weatherPer-zone weather and time sync with admin panelworld

Installing addons

Get the resources

The txAdmin ESX recipe clones the repository and copies [esx_addons] into resources/ for you. For a manual setup, download the repository from GitHub and copy either the whole [esx_addons] folder or single addon folders into your resources directory.

Import the SQL

Most addons ship a <name>.sql file that creates their tables and inserts jobs, items or society accounts. Import it into your ESX database once. If you installed with the txAdmin recipe, skip this step: legacy.sql already contains these rows, and re-importing causes duplicate key errors.

Some addons (esx_addonaccount, esx_billing, esx_banking, esx_license, esx_garage, esx_vehicleshop, esx_property, esx_death, esx_adminmenu, esx_society) also create or migrate their own tables on startup.

Ensure them in server.cfg

Start addons after the framework. Folder names in brackets start every resource inside them:

server.cfg
ensure oxmysql
ensure esx_lib
ensure es_extended
ensure [core]

ensure [esx_addons]

To run only a few addons, ensure them by name and list storage addons before the jobs that use them:

server.cfg
ensure esx_addonaccount
ensure esx_addoninventory
ensure esx_datastore
ensure esx_society
ensure esx_billing
ensure esx_policejob

Configure

Every addon has a config.lua (some also a config/ folder). Change locations, prices and job settings there and restart the resource. See the addon page for every key and its default.

Dependencies between addons

The table combines the hard dependencies from fxmanifest.lua with soft dependencies found in the code (exports, events and callbacks into another addon). Soft dependencies do not block startup, but the related feature breaks without them.

AddonHard dependencies (fxmanifest)Also uses at runtime
esx_societyesx_addonaccount, cronesx_datastore (society garage)
esx_policejobesx_billing, esx_vehicleshopesx_society, esx_addoninventory, esx_datastore, esx_license, esx_service, esx_status, esx_skin
esx_ambulancejobesx_death, esx_skin, esx_vehicleshopesx_society
esx_mechanicjobesx_society, esx_billingesx_addonaccount, esx_addoninventory, esx_service, esx_skin
esx_taxijob—esx_society, esx_billing, esx_addonaccount, esx_addoninventory, esx_datastore, esx_service, esx_skin
esx_vehicleshop—esx_addonaccount, esx_addoninventory, esx_billing, esx_license, esx_society
esx_propertyoxmysqlesx_addonaccount, esx_datastore, esx_society, esx_skin, esx_context
esx_weaponshopesx_license, OneSync—
esx_dmvschoolesx_license—
esx_boatesx_vehicleshopesx_license
esx_basicneedsesx_status—
esx_optionalneeds—esx_status
esx_hudesx_status, oxmysql—
esx_billing—esx_addonaccount (society bills)
esx_accessoriesesx_skin, esx_datastore—
esx_clotheshop, esx_barbershopesx_skinesx_datastore (clotheshop outfits)
esx_jobsOneSyncesx_addonaccount (vehicle deposit)

The chain most servers hit is job → esx_society → esx_addonaccount / esx_datastore / esx_addoninventory. Every society needs a row in addon_account (money), and jobs with a stash also need rows in addon_inventory and datastore. If a job's boss menu shows no money or the armory is empty, those rows are usually missing.

esx_phone references

Several job addons still trigger esx_phone events for dispatch messages. esx_phone is not part of the repository; without it those calls do nothing and no error is shown.

Security hardening SQL

The repository root contains two SQL files related to the October 2026 security audit.

security_indexes.sql

This file is superseded. It only contains comments and a SELECT that prints a note pointing to sql/security_hardening_2026_10_02.sql. Running it changes nothing. The comments also warn against blindly adding indexes such as (identifier, id) on billing or (owner, plate) on owned_vehicles, because InnoDB secondary indexes already include the primary key.

sql/security_hardening_2026_10_02.sql

This migration enforces data integrity for the economy tables that esx_billing, esx_license, esx_addonaccount and esx_banking rely on. It runs as a temporary stored procedure and is safe to run more than once. Each step is skipped when it is already applied.

It first refuses to run (raises an error) when it finds:

  • duplicate user_licenses rows for the same owner and type
  • duplicate addon_account_data rows for the same account and owner
  • addon_account_data rows with a NULL account name or an empty-string owner
  • billing, users or addon_account_data tables that are not InnoDB

Then it:

ChangePurpose
Creates billing_paymentsPayment journal with a unique operation_id, so a bill cannot be paid twice
Unique key on user_licenses (owner, type)A player can hold each license type only once
Index on billing (identifier)Fast lookup of a player's bills
Generated column addon_account_data.owner_key plus unique key (account_name, owner_key)One row per account and owner, including shared accounts where owner is NULL
Index on banking (time)Fast transaction history queries

Finally, it lists billing_payments rows still in state claimed (payments that started but were never applied). Review them manually; the script never refunds or replays them.

Before you run it

Back up the database and run it in a maintenance window. DDL statements commit immediately, so there is no rollback. It needs MySQL 8 or MariaDB 10.6+ and a client that understands DELIMITER (HeidiSQL, the mysql CLI). Resolve duplicate rows yourself: the script never merges or deletes financial data. Recent versions of billing, license, addonaccount and banking apply the same schema changes on startup, so the manual script is optional.

Common issues

  • Couldn't start resource esx_xxx: a hard dependency is missing or starts later. Check the dependency table above.
  • Duplicate entry errors on SQL import: the rows already exist, usually from the txAdmin legacy.sql. Skip that import.
  • Boss menu shows $0 or no society found: the society_<job> row is missing in addon_account / addon_account_data, or esx_society started before esx_addonaccount.
  • Hardening script stops with "Duplicate ...": find the duplicates with a GROUP BY ... HAVING COUNT(*) > 1 query, merge balances by hand, then run it again.

Frequently asked questions

Independent documentation

esx-fivem.com is a community project and is not affiliated with the ESX Framework team. Facts on this page were checked against the upstream source. Official resources: docs.esx-framework.org and github.com/esx-framework.
Edit on GitHub

Last updated on

On this page