FearlessStudios

Install & configure

Set up Vehicle Hub, commands, permissions, and compatibility with other resources.

Requirements

  • A FiveM server with OneSync enabled.
  • FS-Lib 1.7.0 or newer, installed under the exact name FS-Lib.
  • The built FS-VehicleHub resource and writable storage for catalog files and server KVP.
  • Any addon vehicle resources you want players to spawn.

Installation

  1. Install or update FS-Lib.
  2. Copy the built FS-VehicleHub folder into your server's resources directory. Keep its name unchanged.
  3. Edit the resource's config.lua as needed.
  4. Start your resources in order and grant catalog access to your admin group:
server.cfg
set onesync on

ensure FS-Lib
# Start your addon vehicle resources here.
ensure FS-VehicleHub

add_ace group.admin fs_vehiclehub.admin allow

Your server must already assign the appropriate players to group.admin. Granting this ACE to a group does not put players in that group automatically.

Open F9 or /vehiclehub. Authorized admins open /vehiclehubadmin to manage the shared catalog. The admin organizer opens separately and is not listed in the normal player menu.

On first startup, Vehicle Hub creates menu.json from its built-in GTA catalog. Later restarts keep your saved changes. No SQL import or manual catalog file is needed.

Configuration

Start with these common choices. Keep unrelated settings unchanged.

SettingCurrent defaultMeaning and when to change it
Config.Menu.MenuKey"F9"Default menu shortcut; choose another if it conflicts. Existing player bindings may differ.
Config.Commands.Delete.EnabledtrueRegisters vehicle deletion commands and aliases. Set false if another resource owns those commands.
Config.AdminAce.EnabledtrueRestricts shared catalog editing. Keep enabled unless everyone should administer the catalog.
Config.AdminAce.Ace"fs_vehiclehub.admin"Catalog permission. Grant to the intended admin group.

For example, keep Vehicle Hub but let FS-EntityCleaner own deletion commands:

Config.Commands.Delete.Enabled = false

Full configuration reference

The shipped config.lua contains:

config.lua
Config = {}

Config.Debug = false

Config.Menu = {
    Title = "Vehicle Hub",
    Subtitle = "by FearlessStudios", -- Description shown below the title.
    MenuKey = "F9", -- Default binding; players can rebind it in FiveM settings.
}

Config.Commands = {
    Open = {
        Command = "vehiclehub", -- Always enabled, including the menu key mapping.
    },

    Admin = {
        Command = "vehiclehubadmin", -- Always enabled; admin permission is still required.
    },

    Delete = {
        Enabled = true, -- Set false when using FS-EntityCleaner to avoid command conflicts; includes all aliases.
        Command = "dv",
        Aliases = { "delveh", "vehicledel" }, -- Set to {} to disable aliases only.
    },

    Repair = {
        Enabled = true,
        Command = "repair",
    },

    Wash = {
        Enabled = true,
        Command = "wash",
    },
}

Config.AdminAce = {
    Enabled = true, -- Disabling this check allows everyone to edit the shared catalog.
    Ace = "fs_vehiclehub.admin", -- Required to edit, import, or reload the shared catalog.
}

Config.BlacklistedModels = {} -- Applies to manual spawning, catalog entries, and personal saves.

-- Available features. Permissions below control who can use them.
Config.SpecialFeatures = {
    EngineModifiers = true, -- Extra engine power and torque boosts.
    God = true, -- Protect vehicles from damage.
    Freeze = true, -- Freeze vehicles in place.
    Invisible = true, -- Hide vehicles while keeping occupants visible.
    DisableTurbulence = true, -- Remove plane and helicopter turbulence.
    Flares = true, -- Refill and deploy flares on supported aircraft.
    PlaneBombs = true, -- Refill and drop bombs from supported planes.
}

-- Optional custom groups. Define an ACE once, then use its group name below.
Config.PermissionGroups = {
    -- mechanics = "vehiclehub.mechanic",
    -- police = "vehiclehub.police",
}

-- Use "everyone", "admins", "disabled", or a custom group name from above.
-- Allow several groups with a list, e.g. { "admins", "mechanics" }.
-- "admins" uses Config.AdminAce.Ace.
-- Permissions do not enable features switched off above.
Config.Permissions = {
    VehicleControls = "everyone", -- Repair, wash, engine, doors/windows, flip, alarm, seats, and delete.
    VehicleCustomization = "everyone", -- Appearance and normal GTA upgrades.
    VehicleDamage = "everyone", -- Destroy engine and fix/burst tires.
    SpecialOptions = "admins", -- God mode, freeze, invisibility, and engine boosts.
    AircraftOptions = "admins", -- Turbulence, flares, and bombs.

    -- Override a group's access for individual features. See the permissions guide for names and examples.
    Options = {
        -- EngineModifiers = "everyone",
    },
}
SettingWhat it controls
DebugExtra diagnostic output. Leave off for normal use.
Menu.Title / Menu.SubtitleHeader title and description.
Menu.MenuKeyDefault FiveM key mapping. Existing player keybind overrides remain in effect.
CommandsCommand names and optional command switches. Use names without /.
AdminAceWho can edit, import, reload, and check the shared catalog. Keep Enabled = true; disabling it allows everyone to edit.
BlacklistedModelsSpawn model names blocked across manual spawning, catalog entries, and personal saves. Example: { "rhino", "lazer" }.
SpecialFeaturesEngine boosts, god mode, freeze, invisibility, turbulence suppression, flares, and bombs. All default on; permissions control access.
PermissionGroupsOptional names for your custom ACE groups.
PermissionsAccess levels, a named group, or a list of allowed groups for each vehicle section.

config.lua is excluded from escrow and remains editable. Menu alignment, size, sounds, spawn preferences, mileage units, and driving conveniences are player settings, not server configuration. Personal libraries and mileage are always enabled and use server KVP. There is no database selector or configurable personal-library cap.

Commands

Default commandAction
/vehiclehubOpen or close Vehicle Hub; also mapped to F9 by default.
/vehiclehubadminOpen the shared catalog organizer with the configured admin ACE.
/dv, /delveh, /vehicledelDelete the current driver vehicle.
/repairRepair the current driver vehicle while preserving fuel.
/washRemove dirt and decals from the current driver vehicle.

Open and Admin are always enabled, but you can rename them. Delete, Repair, and Wash each have an Enabled switch. Disabling Delete also disables all its aliases. An empty Aliases = {} disables only the aliases. These switches do not remove the corresponding menu actions.

Enabled commands have chat suggestions. Players can change the open-menu key under Settings → Key Bindings → FiveM.

Compatibility

We recommend disabling all vMenu vehicle features when Vehicle Hub handles vehicles. This includes vehicle spawning, saved vehicles, personal-vehicle controls, customization, and automatic vehicle options such as engine behavior or keeping vehicles clean. Otherwise both resources may apply different settings to the same vehicle.

You can keep vMenu for non-vehicle features. Use the permissions and configuration for your installed vMenu edition, and check inherited broad grants such as .All. The vMenu permissions reference documents the legacy vehicle sections. Turn off any already-enabled automatic vehicle options and test after reconnecting. This is a compatibility recommendation, not an automatic change made by Vehicle Hub.

If you use FS-EntityCleaner, set:

Config.Commands.Delete.Enabled = false

This prevents Vehicle Hub's delete command and aliases from competing with the cleaner's commands. Likewise, disable or rename /repair and /wash if another resource owns those commands.

Fuel, keys, tuning, radio, and other vehicle-control scripts may also affect the same vehicle. Test your combination, especially before enabling Engine always on or engine boosts. Vehicle Hub does not automatically integrate with every vehicle system.

Optional engine boosts

Set Config.SpecialFeatures.EngineModifiers = true and grant access through SpecialOptions to expose Engine power, Engine torque, and Reset engine boosts under Performance. Choices are Stock, 2x, 4x, 8x, 16x, 32x, 64x, 128x, 256x, 512x, and 1024x. The maximum and steps are fixed internally.

Boosts are temporary and are not saved in presets. They reset when the player leaves the driver seat, switches vehicles, dies, or the resource stops. The power labels represent the game's native input, not a guaranteed measured speed multiplier.

Vehicle action permissions

Use Config.Permissions to choose who can use each vehicle group. Built-in choices are "everyone", "admins", and "disabled". Admins use your existing Config.AdminAce.Ace.

For custom access, give an ACE a readable name once, then use that name in your rules:

Config.PermissionGroups = {
    mechanics = "vehiclehub.mechanic",
    police = "vehiclehub.police",
}

Config.Permissions = {
    VehicleControls = "everyone",
    VehicleCustomization = { "admins", "mechanics" },
    VehicleDamage = "admins",
    SpecialOptions = "admins",
    AircraftOptions = { "admins", "police" },
}

This example lets admins or mechanics customize vehicles, and admins or police use enabled aircraft options. A list means any one of these groups, not all of them. Use "everyone" or "disabled" alone, rather than inside a list.

Custom groups still need the corresponding ACE grant in server.cfg, for example:

add_ace group.mechanic vehiclehub.mechanic allow
add_ace group.police vehiclehub.police allow

Your server must assign players to those ACE principals; writing a group name does not automatically read a framework job. For job/role checks, use the server resolver below. The shipped config leaves custom groups empty, allows everyone to use normal controls, customization, and damage, and restricts special/aircraft options to admins.

Config groupActions
VehicleControlsRepair, Wash, Engine, Doors, Windows, Delete, Flip, Alarm, CycleSeats
VehicleCustomizationCustomize: appearance, plates, and standard upgrades
VehicleDamageDestroyEngine, FixOrDestroyTires
SpecialOptionsGod, Freeze, Invisible, EngineModifiers
AircraftOptionsDisableTurbulence, Flares, PlaneBombs

All special features are enabled in Config.SpecialFeatures by default, but the shipped permissions restrict them to admins. Enabling a feature makes it available; it does not automatically activate its effect on a vehicle. Engine power and torque use Config.SpecialFeatures.EngineModifiers. Giving a player permission never turns on a disabled feature.

Setting Config.AdminAce.Enabled = false only makes catalog editing public. Rules using "admins" still require the configured admin ACE. The built-in names cannot be redefined. Empty lists, unknown names, or malformed rules deny access.

The server checks access for every vehicle action, including repair, wash, and deletion commands. Restricted options show a lock and a reason. Catalog model restrictions and player convenience preferences remain separate.

Rules for individual features

Use Config.Permissions.Options when one feature should have different access from the rest of its group. Use the action names from the table above. A feature without its own rule inherits its group setting.

Feature names are case-sensitive. Use the action names in the table above, such as EngineModifiers, Repair, or God. These are feature names, not menu labels.

ValueWho can use the feature
"everyone"All players.
"admins"Players with Config.AdminAce.Ace.
"disabled"Nobody, even when the group default allows it.
"mechanics"Players in this custom group, defined in Config.PermissionGroups.
{ "admins", "mechanics" }Either group. A player does not need both.

Define custom names before using them. Put ACE strings in PermissionGroups, not directly in Options. Use "everyone" and "disabled" alone, not inside a list. An empty Options = {} leaves every group default in effect.

Here are examples of individual rules, assuming you have defined the mechanics group:

Config.Permissions.Options = {
    EngineModifiers = "everyone",       -- Public boosts; other special options keep their rule.
    DestroyEngine = "admins",           -- Admins only.
    Wash = "mechanics",                 -- Only your custom mechanics group.
    Repair = { "admins", "mechanics" }, -- Admins OR mechanics.
    God = "disabled",                   -- Nobody.
}

For example, allow everyone to use power/torque boosts while keeping the other special options admin-only:

Config.SpecialFeatures.EngineModifiers = true
Config.Permissions.SpecialOptions = "admins"
Config.Permissions.Options = {
    EngineModifiers = "everyone",
}

Only the engine modifier permission changes. God mode, freeze, and invisibility still follow SpecialOptions, and their enable switches stay separate. The individual rule also accepts custom groups or lists, for example Repair = { "admins", "mechanics" }, or God = "disabled".

The server first checks whether a special feature is enabled, then uses its individual permission if present, otherwise the group default. Both the menu and commands follow the same action rule. The optional server resolver below receives this resolved decision and may customize it; it cannot enable a feature whose switch is off.

Using jobs or roles

An integration resource can register one server callback without editing Vehicle Hub or FS-Lib:

Your integration resource: server.lua
exports["FS-VehicleHub"]:SetAccessResolver(function(source, action, defaultAllowed)
    if action == "Repair" then
        return IsPlayerAceAllowed(source, "myserver.mechanic") -- Replace with your cached job/role check.
    end

    return nil -- Keep the config rule for other actions.
end)

Return true to allow, false to deny, or nil to keep the configured rule. Disabled feature switches always win. Use cached checks and do not wait inside the callback. An error or invalid return value denies access. Only one integration can own the resolver. It clears when that resource stops; the owner can also call SetAccessResolver(nil). Register it again after Vehicle Hub restarts.

When upgrading an existing installation, merge the new SpecialFeatures, PermissionGroups, and Permissions sections into your saved config. Builds preserve the existing config. Existing Config.Access rules still work if Config.Permissions is absent. Adding Config.Permissions replaces all old rules, including old overrides; use Permissions.Options or the server resolver for custom exceptions.

The old top-level engine modifier switch still works if SpecialFeatures.EngineModifiers is absent. Once the nested switch is present, it takes priority, including an explicit false.