> For the complete documentation index, see [llms.txt](https://docs.rainmad.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rainmad.com/resources/custom-plates-with-flipper/configuration.md).

# Configuration

```lua
lib.locale('en')

cfg = {}

-- Enables developer commands (/fake_plate, /plate_remover, /plate_flipper).
cfg.debug = false

-- ============================================================
-- BRIDGE CONFIGURATION
-- ============================================================

-- 'auto' detects QBCore or ESX automatically.
---@type 'auto' | 'qb' | 'esx'
cfg.framework = 'auto'

---@type 'ox_lib' | 'qb' | 'esx' | 'okokNotify' | 'ps-ui'
cfg.notification = 'ox_lib'

---@type 'ox_lib' | 'esx' | 'qb' | 'okokTextUI' | 'jg-textui'
cfg.textUI = 'ox_lib'

-- false = no progress bar, actions are instant.
---@type 'ox_lib' | 'qb' | 'esx' | false
cfg.progressbar = 'ox_lib'

cfg.script = {
    -- QB/QBX -> player_vehicles | ESX -> owned_vehicles, The name of the database table where vehicle data is stored
    -- Vehicles table. Must have a 'plate' column.
    -- A 'custom_plate' LONGTEXT column is created automatically if missing.
    dbTableName = 'player_vehicles',

    -- Only the vehicle owner can apply/remove/flip plates (checked via bridge).
    requireOwnership = false,

    -- Player items that open the paint editor. Leave empty ({}) for presser-only setup.
    -- shouldRemoveItem: consume the item on install.
    -- editorSize: paint canvas resolution (matches the plate aspect ratio).
    items = {
        { item = 'rm_plate_rectangle_s', group = 'rectangle_s', shouldRemoveItem = true, editorSize = { width = 400, height = 100  } },
        { item = 'rm_plate_rectangle_m', group = 'rectangle_m', shouldRemoveItem = true, editorSize = { width = 500, height = 150  } },
        { item = 'rm_plate_rectangle_l', group = 'rectangle_l', shouldRemoveItem = true, editorSize = { width = 600, height = 200  } },
        { item = 'rm_plate_square_s',    group = 'square_s',    shouldRemoveItem = true, editorSize = { width = 400, height = 200  } },
        { item = 'rm_plate_square_m',    group = 'square_m',    shouldRemoveItem = true, editorSize = { width = 500, height = 300  } },
        { item = 'rm_plate_square_l',    group = 'square_l',    shouldRemoveItem = true, editorSize = { width = 600, height = 400  } },
    },

    -- Toggleable plate, switched with G in the driver seat. Set to nil to disable.
    -- allowCustomDesign: false = black plate only, no editor option.
    flipperItem = {
        item              = 'rm_plate_flipper',
        shouldRemoveItem  = false,
        allowCustomDesign = true,
    },

    -- Strips all custom plates and flippers from a vehicle. Set to nil to disable.
    removerItem = {
        item             = 'rm_plate_remover',
        shouldRemoveItem = false,
    },

    -- Progress bar durations (ms).
    progressDuration = {
        install = 3000,
        remove  = 2000,
    },

    -- Animation during progress bars. Set to false to skip the anim.
    progressAnim = {
        dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
        name = 'machinic_loop_mechandplayer',
    },

    -- Plates spawn within renderDistance and despawn past removeRenderDistance.
    -- The gap is hysteresis to stop flickering at the boundary.
    renderDistance       = 50.0,
    removeRenderDistance = 65.0,

    -- Mechanic workstations. Each is a world prop with a proximity prompt.
    -- color: SetObjectTextureVariant index.
    --   0 = green    1 = red       2 = dark yellow  3 = green
    --   4 = cyan     5 = blue      6 = navy         7 = dark blue
    --   8 = purple   9 = pink     10 = pink         11 = red
    platePressers = {
        {
            coords      = vec3(-227.1, -1330.19, 29.89),
            rotation    = vector3(0.0, 0.0, 90.0),
            allowedJobs = { 'mechanic' },
            color       = 2,
        },
        {
            coords      = vec3(-1082.41, -3283.27, 12.94),
            rotation    = vector3(0.0, 0.0, 0.0),
            allowedJobs = { 'mechanic' },
            color       = 1,
        },
    },

}

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rainmad.com/resources/custom-plates-with-flipper/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
