> For the complete documentation index, see [llms.txt](https://visionstore.gitbook.io/visionstore-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://visionstore.gitbook.io/visionstore-docs/scripts/crafting/troubleshooting.md).

# Troubleshooting

Fixes for the most common problems.

{% hint style="info" %}
First step, always: look at the **server console** and the player's **F8 console**. Most problems print a clear message there, starting with `[Chapo_Crafting]`. Then run `crafting validate` in the server console.
{% endhint %}

## Startup

<details>

<summary>"You lack the required entitlement" / the resource won't start</summary>

See [Escrow and common errors](/visionstore-docs/getting-started/escrow-and-common-errors.md). The server key must belong to the account that bought the script.

</details>

<details>

<summary>The console says <code>framework: standalone</code> but I use Qbox / QBCore / ESX</summary>

The script started before your framework. Move `ensure Chapo_Crafting` **below** your framework in `server.cfg`, or set `Config.Framework` to `'qbox'`, `'qb-core'` or `'esx'` explicitly.

</details>

<details>

<summary>The console lists missing items</summary>

Those items don't exist in ox\_inventory. Add them from `install/ox_inventory_items.lua` to `ox_inventory/data/items.lua`, then restart the server. Until then, only the recipes that use them are switched off. Everything else works.

</details>

## Benches

<details>

<summary>Using the bench item does nothing</summary>

The item in `ox_inventory/data/items.lua` needs all three of these:

```lua
stack = false,
consume = 0,
server = { export = 'Chapo_Crafting.usePortableBench' },
```

And the resource folder must be named exactly `Chapo_Crafting`.

</details>

<details>

<summary>"Unknown bench type" when using a plain <code>crafting_bench</code> item</summary>

The generic `crafting_bench` item doesn't say which bench it is until a bench id is written in it. Give benches with `/crafting give <id> <type>`, or use the per-type items (`tools_crafting_bench`, `medical_crafting_bench`...), which work even when given with `/giveitem`.

</details>

<details>

<summary>The bench is invisible</summary>

The prop isn't in your game build. The default bench (`xm3_prop_xm3_bench_04b`) needs build 2944+. Either raise `sv_enforceGameBuild`, or set `model = 'workbench2'` on the bench type in `config/benches.lua`.

</details>

<details>

<summary>I can't pick up a bench</summary>

* It still has **running or unclaimed crafts**. Claim or cancel them first (`blockPickupWithActiveCrafts`).
* It's a **static** bench (`Config.StaticBenches`) or was placed with `/crafting place <type> fixed`. Those can never be picked up.
* The bench type has `portable = false`.

</details>

<details>

<summary>Placement is always refused</summary>

The preview says why. The usual causes: the ground is steeper than `maxSlope` (12°), the bench overlaps an object or another bench, there's no room to stand at it, or you're inside a no-build zone (`Config.RestrictedZones`). See [Placement](/visionstore-docs/scripts/crafting/configuration/placement.md).

</details>

<details>

<summary>A bench placed inside a house shows up on the street (or vanishes)</summary>

Benches belong to the instance they were placed in (the `instance` state bag, then the routing bucket). If your housing script changes the routing bucket without telling the script, wire its door events in `bridge/client.lua`. See [Housing](/visionstore-docs/scripts/crafting/developers/bridges.md#housing).

</details>

## Crafting

<details>

<summary>A recipe doesn't show on the bench</summary>

* Run `crafting validate` and read the problems.
* Its `category` must be listed in the bench type's `categories` (and in its `recipes` allow-list, if it has one).
* Every item it uses must exist in ox\_inventory.
* With `hideUnavailableRecipes = true`, recipes above the bench level are hidden.

</details>

<details>

<summary>I edited a recipe but nothing changed</summary>

Config files are read on start. Run `restart Chapo_Crafting`. (`crafting reload` only rebuilds from the config already in memory.)

</details>

<details>

<summary>"This workbench is out of service" / crafting is slow</summary>

The bench is worn. Open it and use a maintenance kit (**Service Bench**). A dead bench needs the Precision Overhaul Kit. See [Wear and maintenance](/visionstore-docs/scripts/crafting/configuration/condition.md).

</details>

<details>

<summary>Players get very little Mastery XP</summary>

That's the anti-farm rules working: short crafts, repeating the same recipe and the daily soft cap all reduce XP. Run `crafting mastery-why <id> <recipe>` to see the exact breakdown. Tune it in [Crafting Mastery](/visionstore-docs/scripts/crafting/configuration/mastery.md#anti-farm), or lower `xpScale`.

</details>

## Screen and UI

<details>

<summary>The screen sits in the wrong spot on a custom prop</summary>

Stand at the bench, run `/craftingcalibrate`, line it up, press **Enter** and paste the printed block into `config/models.lua`. See [Bench props and the screen](/visionstore-docs/scripts/crafting/configuration/models.md).

</details>

<details>

<summary>The screen is mirrored or upside down</summary>

Set `flipU` / `flipV` in `Config.RendererAxis` (or per model in `dui.axis`) in `config/models.lua`.

</details>

<details>

<summary>The screen is blank or broken</summary>

Run `/craftingduireload` (staff) to rebuild the bench screens without restarting. `/craftingdui` prints their state to F8.

</details>

<details>

<summary>My HUD stays visible at the bench</summary>

The minimap and native HUD are hidden automatically. List your HUD in `Config.Hud.resources`, or edit `Bridge.HideHud` / `Bridge.ShowHud` in `bridge/client.lua`. See [Hiding your HUD](/visionstore-docs/scripts/crafting/configuration/general.md#hiding-your-hud-at-the-bench).

</details>

## Permissions and NPCs

<details>

<summary>I'm not recognised as an admin</summary>

Add your group to `Config.Permissions.adminGroups`, or give your group the ACE:

```properties
add_ace group.admin crafting.admin allow
```

</details>

<details>

<summary>Players can't use a job-locked bench / everyone can use it</summary>

Per-bench `access` rules only apply when `Config.Permissions.access = 'benchRules'`, or when the bench has `enforce = true`. See [Who may use a bench](/visionstore-docs/scripts/crafting/configuration/benches.md#who-may-use-a-bench).

</details>

<details>

<summary>I can't talk to the hidden NPCs</summary>

They need **ox\_target**, started **before** `Chapo_Crafting`. The console warns when ox\_target isn't running. Also check they aren't in police custody (`crafting npcs`).

</details>

Still stuck? [Open a ticket on our Discord](https://discord.gg/ZvHtyhyBp4) with your console errors (see [Support](/visionstore-docs/getting-started/support.md) for what to include).


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://visionstore.gitbook.io/visionstore-docs/scripts/crafting/troubleshooting.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
