> 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/decal-v-graffiti-and-vehicle-sticker/migrate-from-v2.md).

# Migrate From v2

v3 is a ground-up rewrite, but it was built to upgrade in place: **your placed decals survive**, and the customer-edited files from v2 keep working. The resource is renamed (`rm_decalv2` becomes `rm_decalv`) and a second resource, `rm_decalv_assets`, now carries the decal types and textures.

{% hint style="info" %}
**What carries over automatically:** every sticker and graffiti in the database (same tables, missing columns are added on first start), `discord_log.lua` copies, event handlers written against the v2 names, and custom decal entries in the old flat `decals.lua` format.
{% endhint %}

{% stepper %}
{% step %}

### Back up your customizations

Before touching anything, copy these out of your old `rm_decalv2` folder:

* `cfg.lua` (to read your old values from, not to reuse as a file)
* your custom `decals.lua` entries and their images from `assets/`
* `server/discord_log.lua` if you edited it
* your locale file if you translated one

A database backup never hurts, but the upgrade does not drop or rewrite existing rows.
{% endstep %}

{% step %}

### Remove v2 completely

Delete the `rm_decalv2` folder and its `ensure rm_decalv2` line. Do **not** run v2 and v3 side by side: v2 ships its own `gta5.meta`, and the two resources would fight over the level meta.
{% endstep %}

{% step %}

### Install v3

Follow the [Installation](/resources/decal-v-graffiti-and-vehicle-sticker/installation.md) page: both folders (`rm_decalv` + `rm_decalv_assets`) into `resources`, both ensured in `server.cfg`.
{% endstep %}

{% step %}

### Port your configuration

The new `cfg.lua` is reorganized, so re-apply your old values by hand instead of copying the old file over. Shared settings kept their names (`vehicleOwnerCheck`, `blacklistModels`, commands, items, ...); the one move is `cfg.framework`, which is now `cfg.bridge.framework` and defaults to `'auto'`. Everything else you'll find in there is new in v3, with safe defaults, and the file is fully commented.
{% endstep %}

{% step %}

### Port your custom decals

Copy your custom images into `rm_decalv/assets/` and your entries into the new `decals.lua`. The old flat array format still loads as-is, but the new grouped format (category blocks with inherited permissions) is worth adopting, see [Adding decals](/resources/decal-v-graffiti-and-vehicle-sticker/adding-decals.md).
{% endstep %}

{% step %}

### Port edited files and translations

* `discord_log.lua`: your v2 copy works unchanged, drop it into `rm_decalv/server/`.
* Locale files: copy yours into `rm_decalv/locales/`, then compare against the new `en.json`. v3 added keys (editor, admin panel, imports) and renamed two (`back_decal_choise` → `back_decal_choice`, `back_pozition_adjust` → `back_position_adjust`). Untranslated keys fall back to showing the key name, so the interface stays usable while you catch up.
  {% endstep %}

{% step %}

### Restart the server

A full server restart (not a resource restart) is required once, so every player's next join mounts the new decal types from `rm_decalv_assets`.
{% endstep %}

{% step %}

### Verify

Join, open `/decals`, and check that your v2 decals render in the world. If anything looks off, the [Troubleshooting](/resources/decal-v-graffiti-and-vehicle-sticker/troubleshooting.md) page reads the debug overlay card by card.

{% hint style="success" %}
Integrations keep running during the transition: every server hook fires under both the new `rm_decalv:server:*` and the legacy `rm_decalv2:server:*` names, so external scripts can be updated at your own pace. New names are on [Events & Exports](/resources/decal-v-graffiti-and-vehicle-sticker/events-and-exports.md).
{% endhint %}
{% endstep %}
{% endstepper %}
