> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sonoransoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vehicle Radio Display

> View Sonoran Radio on a working, in-vehicle 3D display!

## Vehicle Radio Display (Video Tutorial)

[Video tutorial](https://www.youtube-nocookie.com/embed/xbV3KpBOFi4)

> [!NOTE]
>
> The vehicle radio display is a **free** Tebex script fully compatible with the **free** version of Sonoran Radio.

![](https://docs-assets.sonoransoftware.com/sha256/1a/1a140fe25a5426dbe398a0111ebe4bdc88968ef5405167d84ddef9427e6d1b15.png)

*Sonoran Radio - Vehicle Display*

## Installation (Written)

## Download the Script

"Purchase" the **free** [vehicle radio display from the Sonoran Store](https://www.sonoran.store/package/6668073).

Once purchased, see: [How to download the script from your Keymaster account.](/store/general/tebex-assets)

## Install the script

#### A. Extract Folders

Extract the script's two folders (`sonoran-radiodisplay` and `sonoran-radiodisplay_helper`) to a folder in your server's resources folder called `[sonoranradio]`.

![](https://docs-assets.sonoransoftware.com/sha256/e4/e4d51bf85f27772d0a68f176fd9a1d93b4982e917df2387b0239ca8855cc5447.png)

*Radio Display - Folders*

#### B. Rename Config Files

Inside of the `sonoran-radiodisplay` folder:

* Rename `config.changeme.lua` to `config.lua`
  * See more about the [configuration options](/radio/game-integrations/fivem/vehicle-radio-display#configuration) here.
* Rename `radios.changeme.json` to `radios.json`

#### C. Start the Resource

To start the display resource and give the auto-updater permissions to run, paste the following into your `server.cfg`

```
# Start the Radio Display Resource
ensure sonoran-radiodisplay

# Grant permissions to the auto-updater
add_ace resource.sonoran-radiodisplay command allow
add_ace resource.sonoran-radiodisplay_helper command allow
```

## Configuration

The `config.lua` file allows you to customize the labels, ACE permissions, and more!

> **Default config.lua**
>
> ```lua theme={null}
> Config = {}
>
> Config.debug_mode = false -- Enable debug mode
> Config.configuration_version = 1.0
> Config.auto_update = true -- Enable auto updates
>
> Config.lang = {
>     addNewRadioHelp = 'Open the menu to begin spawning a new in-car model model',
>     vehNotCompatible = 'This vehicle is not compatible with the in-car model placement system!',
>     vehAlrRadio = 'This vehicle already has a valid in-car radio!',
>     radioMenuHeader = 'Sonoran In-Car Radio',
>     creditsPanel = 'Made by',
>     spawningSubMenu = 'In-Car Radio Spawning',
>     attachingSubMenu = 'Attaching',
>     deletionSubMenu = 'Are you sure?',
>     radioAttachMenuButton = 'Attach In-Car Radio',
>     deleteMenuButton = 'Delete Current In-Car Radio',
>     spawnMenuButton = 'Spawn In-Car Radio',
>     deletionConfirmationButton = 'Yes, remove from all of these vehicles',
>     deletionCancelButton = 'Cancel',
>     deletionCancelled = 'In-Car Radio deletion cancelled',
>     noRadioFound = 'No In-Car Radio is in this vehicle!',
>     modelComboBox = 'Model:',
>     vehAlrRadioNoti = '~r~This vehicle already has an In-Car Radio of this type',
>     notInVeh = '~r~You must be in a vehicle!',
>     vehicleBone = 'Radio - Vehicle Bone',
>     object = "Object:",
>     vehicleBoneComboBox = 'Vehicle Bone',
>     objectName = 'Sonoran In-Car Radio',
>     attachButton = 'Attach',
>     detachButton = 'Detach',
>     confirmPlacementButton = 'Apply to all of this vehicle model',
>     cannotGoFaster = '~r~You cannot go any faster!',
>     cannotGoSlower = '~r~You cannot go any slower!',
> }
>
> Config.commands = {
>     carRadioMenu = 'radiodisplay',
>     restricted = false -- should the radio display menu be restricted?
> }
>
> Config.permissionMode = "ace" -- Available Options: ace, framework, custom
>
> -- Ace Permissions Section --
> Config.acePerms = {
>     aceObjectUseMenu = "sonoran.incarradio", -- Select the ace for placing new In-Car radios
>     aceObjectAdminUseMenu = "sonoran.incarradio.admin", -- Select the ace for placing new In-Car radios into all vehicles of the same model
> }
>
> -- Framework Related Settings --
> Config.framework = {
>     frameworkType = "qb-core", -- This setting controls which framework is in use options are esx or qb-core
>     civilianJobNames = {"unemployed"}, -- An array of job names that should be allowed to use the radio menu
>     adminJobNames = {"admin"}, -- An array of job names that should be allowed to use the radio menu as an admin
>     useCivilianJobListAsBlacklist = false, -- This will treat the civilian job list as a blacklist rather than a whitelist
> }
>
> -- Configuration For Custom Permissions Handling --
> Config.custom = {
>     checkPermsServerSide = true, -- If true the permission event will be sent out to the server side resource, this is recommended
>     permissionCheck = function(_, type) -- This function will always be called server side.
>         if type == 0 then -- Check permission to use the menu
>             return true or false -- Return true if they have admin, return false if they don't
>         end
>     end
> }
>
> Config.general = {
>     notificationType = "native", -- Available options: native, pNotify, okokNotify
>     useAllowlistAsBlacklist = false, -- If true, the Config.allowlistedCars will be treated as an blacklist
> }
>
> Config.allowlistedCars = {
>     "POLICE",
>     "POLICE2",
>     "POLICE3",
>     "POLICE4",
>     "FBI",
>     "FBI2",
>     "SHERIFF",
>     "SHERIFF2",
> }
>
> ```

## Spawning the Radio Display

1. Sit in a stopped vehicle and run `/radiodisplay` (or your configured menu command).
2. Select **Spawn In-Car Radio**, then **Sonoran In-Car Radio** to open placement for a new radio. To reposition an existing radio, select **Attach In-Car Radio**, then **Position this vehicle's radio**.

### Move

Select **Move** and left-drag a red, green, or blue arrow to move the radio along that axis. Drag a colored square to move along two axes at once.

![Radio placement in a vehicle with Move selected, red, green, and blue movement arrows, plane squares, and apply, save, and cancel buttons](https://docs-assets.sonoransoftware.com/sha256/38/386f99fdc9b22d931cd014c8d2b23e8ecb5d6d4ac3a366b72fd6b4e372d4cae0.png)

*Drag an arrow to move along one axis, or a square to move along two.*

### Rotate

Select **Rotate** and left-drag a colored ring to turn the radio around that axis. The outer ring rotates it relative to your current view.

![Radio placement in a vehicle with Rotate selected, red, green, and blue rotation rings, the outer view ring, and apply, save, and cancel buttons](https://docs-assets.sonoransoftware.com/sha256/be/befa965d75209d16f39d724d4e7127f22d9f6e07196b68329598af5697ba9e55.png)

*Drag a colored ring to rotate the radio, or use the outer ring to rotate relative to your view.*

Switch between **Local axes** and **World axes** to align movement and rotation with the radio or the world. Enable **Snap** for 1 cm movement and 5° rotation steps.

### Adjust your view

| Control | Action |
| - | - |
| Right-drag | Look around the cabin. Enable **Orbit radio** to circle the radio instead. |
| Middle-drag | Lean the camera slightly. |
| Mouse wheel | Zoom in or out. |
| **Look at display** | Aim the camera at the radio. |
| **Cabin view** | Restore the starting camera view. |

### Apply or save

* **Apply to this vehicle** applies the placement to the current radio without saving it for other vehicles.
* **Save for this vehicle model** saves the placement and uses it for vehicles of the same model. This requires administrator access when menu restrictions are enabled.
* **Reset** restores the radio's position and rotation from when you opened the editor.
* **Cancel** leaves an existing radio unchanged, or removes a new radio created for this placement session.

When restrictions are enabled in [configuration](/radio/game-integrations/fivem/vehicle-radio-display#configuration), menu access uses the configured permissions. With ACE permissions, `Config.acePerms.aceObjectUseMenu` grants menu access and `Config.acePerms.aceObjectAdminUseMenu` grants administrator access, including model saves.

Keep the vehicle stopped while placing the radio. Moving the vehicle or leaving it cancels placement. Close the tablet or other windows before opening the editor.

### `radios.json` Property Explanation

| Property Name | Example | Notes |
| - | - | - |
| `ID` | `2` | A unique ID for this saved radio placement. |
| `Position` | | The radio's saved x, y, and z offsets. |
| `Rotation` | | The radio's saved pitch, roll, and yaw. |
| `Vehicle` | `POLICE` | This is the vehicles spawn code |
| `Bone` | `-1` | The vehicle attachment point used by the radio. |

### Commands

| Command Name | Command Description | Required Permissions |
| - | - | - |
| `/radiodisplay` | Open the radio menu to spawn or reposition a display. | As configured |

### Default Vehicles

| Vehicle Spawncode | Adds Radio by Default |
| - | - |
| `FBI` | `yes` |
| `FBI2` | `yes` |
| `POLICE` | `yes` |
| `POLICE2` | `yes` |
| `POLICE3` | `yes` |
| `POLICE4` | `yes` |
| `POLICEOLD1` | `no` |
| `POLICEOLD2` | `no` |
| `SHERIFF` | `yes` |
| `SHERIFF2` | `yes` |

## Additional Display Resources

Loving the radio display? Check out our [in-vehicle police radar](/store/radar-display) and [radar detector](/store/radar-detector) displays!

![](https://docs-assets.sonoransoftware.com/sha256/9a/9abde9d9004c3e914a0499c1011ea0e76612e1b26fdf21361545d04f2606bb8a.png)

*Sonoran Store: Radar Display*

![](https://docs-assets.sonoransoftware.com/sha256/85/8513b68b4e372dc36eba3121118a08a5829930a87784d19890e629155bc4dae8.png)

*Sonoran Store: Radar Detector*

### Changelog

#### v1.0.1

* `fix: Duplicate radio items when a passenger is in the vehicle`

#### v1.0.0

* `Initial Release`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.