<script>
	import Callout from '$lib/components/Callout.svelte';
</script>

Paid resources here ship with FiveM asset escrow. This page explains what that means in practice —
what you can change, what you cannot, and where the seams are deliberately left open.

## What escrow does

FiveM's asset escrow encrypts the resource's gameplay code so it runs on your server without being
readable or redistributable. You will see a small `.fxap` file in the resource folder; that is the
escrow key blob, and it must stay where it is.

Escrowed `.lua` files look like binary if you open them. That is expected, not corruption.

## What stays editable

Escrow is not all-or-nothing. Each resource declares an `escrow_ignore` list in its
`fxmanifest.lua`, and everything on that list ships as plain, readable, editable source.

The convention across my resources is that **configuration and integration code are always
excluded** — typically:

```lua
escrow_ignore {
    'config/**/*',
    'bridge/**/*',
    'types.lua',
}
```

That means:

- **`config/`** — every option, with its comment, readable and editable in place.
- **`bridge/`** — the adapters that talk to your framework, inventory, targeting resource, menu and
  phone. Readable, editable, and copyable.
- **`types.lua`** — the type annotations, so the Lua language server can check any bridge you write.

Check the resource's own `fxmanifest.lua` for its exact list.

<Callout type="tip">
If you want to know what a resource can be made to do without asking, read its `bridge/` directory
and its `config/` comments. Between them they describe every seam that was left open on purpose.
</Callout>

## Supporting a resource that is not on the list

Because `bridge/` is outside escrow, adding support for a framework, inventory, targeting resource,
menu or phone that a script does not ship with does not require access to the encrypted code.

The pattern is the same everywhere:

1. Copy the closest existing bridge file to a new name.
2. Adapt the handful of functions it exposes.
3. Point the matching config option at your new name.

Each bridge dispatcher carries the exact instruction as a comment at the top of the file. dd-cards'
version of this is documented at [Custom bridges](/docs/dd-cards/bridges).

## What you cannot do

- Read or modify the gameplay logic under `modules/` (or equivalent).
- Reuse the code in another resource.
- Remove or relocate the `.fxap` file.

## Reporting a limitation

If the behaviour you need genuinely is not reachable from `config/` or `bridge/`, that is worth
telling me about rather than working around — a missing config option is usually a fix, not a
feature request. Include what you are trying to achieve and what you tried; see
[Getting support](/docs/general/support).
