Installation Guide

Step-by-step setup for oxide-tablet — dependencies, load order, the tablet item for each framework, database, custom wallpapers, admin access and verification.

This guide takes you from a fresh download to a working tablet. Every step says exactly what to do and what you should see when it worked. You don't need to know any Lua — the only files you open are server.cfg, one item file in your inventory, and (optionally) the tablet's settings file.

Prerequisites

Required resources

These must be installed and running on your server. Most servers already run ox_lib and oxmysql.

ResourceMinimum VersionPurpose
ox_libLatest recommendedShared helpers and translations
oxmysqlLatest recommendedSaves tablets, home screens and settings to your database
o-link1.8.0The bridge that connects the tablet to your framework, inventory, jobs, admin checks, notifications and the map

Why o-link 1.8.0? The tablet loads map files that first shipped in o-link 1.8.0. With an older o-link, oxide-tablet fails to start. Update o-link first.

A supported inventory

The tablet opens from an inventory item, so o-link has to be able to read your inventory. o-link supports these inventory resources: ox_inventory, qb-inventory, ps-inventory, qs-inventory, codem-inventory, core_inventory, origen_inventory, tgiann-inventory, jpr-inventory, ak47_qb_inventory and hex_4_inventory.

ESX owners: ESX's own built-in item list (an ESX server with no inventory resource installed) is not one of these. On a server like that, the tablet item can't be used to open the tablet. Install ox_inventory (most ESX servers already run it) or another inventory from the list above.

Supported frameworks

Everything goes through o-link, so you install one copy of the tablet and it works on whichever framework you run.

FrameworkSupport
QBCoreFull
QBX (qbx_core)Full
ESXFull, with a supported inventory (see above)
CustomVia o-link

Apps from other resources

The tablet comes with three apps of its own: App Store, Settings and Maps. That is everything it ships with. Any other resource can add its own screen as an app, if the version you run supports the tablet. You don't set that up here: when both resources are running, the app shows up in the App Store on its own. Those resources never require the tablet — if you remove it, they go back to their own screens.

Installation Steps

Place the resource

Put the oxide-tablet folder in your server's resources folder. If you run several Oxide resources, keep them together in a folder named [oxide]. There is nothing to build — the tablet's screens ship ready to use.

Add it to your server.cfg

Your server.cfg is the text file that tells your server which resources to start. Add the tablet after o-link, following the Load Order below.

Set up the tablet item

Follow the part of Framework Setup that matches your server. This is the step most people get wrong, so take your time.

Check the settings file before the first start

Open shared/config.lua and review the few settings in Configure Before the First Start. Save the file when you're done.

Start (or restart) your server

The database tables are created automatically. See Database Setup.

Check it works

Run through the steps in Verification.

Load Order

Every Oxide resource uses the same four-part order in server.cfg:

server.cfg
# 1. Framework — everything your framework requires (qb-core, es_extended, qbx_core, etc.)
ensure <framework>

# 2. Scripts — your other resources (phone, inventory, garages, etc.)
ensure <your-other-scripts>

# 3. o-link — the bridge. Starts after your framework/scripts, before any Oxide resource.
ensure o-link

# 4. Oxide resources — keep these together, ideally in a folder named [oxide]
ensure oxide-tablet
  • Your inventory belongs in part 2, above o-link. o-link looks for your framework and inventory at the moment it starts. If they aren't running yet, the tablet item won't work.
  • Don't put oxide-tablet above o-link. The tablet lists o-link as a dependency, so starting the tablet first makes the server start o-link early, before your framework. o-link then can't find your framework, and nothing works properly.
  • If your Oxide resources are in an [oxide] folder, one ensure [oxide] line in part 4 starts them all. Within part 4 the order doesn't matter — the tablet and the resources that add apps find each other whichever starts first.
  • If you restart o-link while the server is running, restart oxide-tablet afterwards too. Restarting the whole server is the safest option.

Framework Setup

What the tablet item needs

The tablet opens when a player uses an inventory item. By default that item is named tablet. The item must be set up like this:

RequirementWhy
UsableUsing the item is what opens the tablet
Doesn't stackEach tablet saves its own IMEI on the item. If tablets stack, every tablet in the stack shares one IMEI, one home screen and one set of apps
Named to match the tablet's item listThe default list contains tablet (see Config.Items below)

You don't set up the IMEI yourself. The first time a tablet is used, the tablet writes the IMEI onto the item automatically.

Stock QBCore already has a tablet item, but it is set up wrong for this resource: it stacks and it can't be used.

  1. Open qb-core/shared/items.lua.

  2. Search for tablet. The stock line looks like this:

    qb-core/shared/items.lua
    tablet                       = { name = 'tablet', label = 'Tablet', weight = 2000, type = 'item', image = 'tablet.png', unique = false, useable = false, shouldClose = true, description = 'Expensive tablet' },
  3. Change unique = false to unique = true, and useable = false to useable = true. The line should now read:

    qb-core/shared/items.lua
    tablet                       = { name = 'tablet', label = 'Tablet', weight = 2000, type = 'item', image = 'tablet.png', unique = true, useable = true, shouldClose = true, description = 'Expensive tablet' },

    If your file has no tablet line at all, paste the line above in with the other items.

  4. Save the file and restart your server.

Players who already carry a stack of old, stacking tablets should get fresh ones after this change. A stack made before the change stays a stack.

Stock QBX runs ox_inventory, which does not include a tablet item, so you add one.

  1. Open ox_inventory/data/items.lua.

  2. Add this entry with the other items:

    ox_inventory/data/items.lua
    ['tablet'] = {
        label = 'Tablet',
        weight = 2000,
        stack = false,
        close = true,
    },
  3. Save the file and restart your server.

stack = false is what keeps each tablet separate.

Keep the entry simple. Don't add a consume line, a client block containing status, usetime or export, or a server block with an export. Any of those makes ox_inventory handle the item by itself, and the tablet never finds out the item was used. If your file already had a tablet item from another script, check it for these lines and remove them.

ESX servers running ox_inventory use the same file and the same entry as QBX:

  1. Open ox_inventory/data/items.lua.

  2. Add this entry with the other items:

    ox_inventory/data/items.lua
    ['tablet'] = {
        label = 'Tablet',
        weight = 2000,
        stack = false,
        close = true,
    },
  3. Save the file and restart your server.

Follow the same "keep it simple" rule as QBX: no consume line, no client block containing status, usetime or export, and no server block with an export.

If your ESX server has no inventory resource, see A supported inventory above.

If you use a different inventory from the supported list, add an item named tablet following that inventory's own guide. Make sure it is usable and doesn't stack.

Some inventories can't save extra information on an item. The tablet still works with them, but tablets don't get their own IMEI — home screens, installed apps and player settings are then saved per character instead of per tablet. The server console tells you when this happens (see Troubleshooting).

Item icon

A ready-made icon ships in this resource at itemimages/tablet.png. Copy it into your inventory's image folder:

InventoryImage folder
qb-inventoryqb-inventory/html/images/
ox_inventoryox_inventory/web/images/

If a tablet.png is already in that folder, you can keep the one you have or replace it with this one. Without any icon the item still works — it just shows a blank picture.

Database Setup

You don't need to import anything. The tablet creates its tables automatically the first time it starts:

TableWhat it stores
tablet_devicesOne row per tablet (by IMEI): its name, home screen, installed apps, player settings and battery charge
tablet_profilesHome screen, apps and settings for players who open the tablet without a tablet item
oxide_settingsThe tablet's settings. This table is shared with other Oxide resources, one row per setting

A copy of these table definitions ships in sql/install.sql. You only need it if your database user isn't allowed to create tables. In that case, import sql/install.sql once using your database manager (the program you use to look at your server's database, such as HeidiSQL, phpMyAdmin, or the database page in your hosting panel). The file is safe to run on a database that already has these tables: it only creates tables that are missing.

Configure Before the First Start

Read this before you start the server with the tablet for the first time. On its first start, the tablet copies the settings from shared/config.lua into the oxide_settings database table. From then on it reads settings from the database, and editing shared/config.lua does nothing. After the first start you change settings in game with /tablet settings.

Two things are good to know about this:

  • When an update adds a brand-new setting, its value from shared/config.lua is added to the database automatically. Your existing settings are left alone.
  • In /tablet settings, Reset to default on a setting puts back the value from shared/config.lua as it was when the server last started.

Open shared/config.lua (the tablet's settings file) and look at these three settings. Everything else can wait; the full list is in Configuration.

Config.RequireItem

Config.RequireItem = true
  • true (default): the keybind and /tablet open only work while the player carries a tablet item.
  • false: anyone can open the tablet with the keybind or /tablet open, with no item. Home screens are then saved per character. Using a tablet item still works as normal.

An app that its own resource opens directly (through that resource's own command, item or menu) never needs a tablet item.

Config.Items

Config.Items = {
    { item = 'tablet', apps = {} },
}

This is the list of inventory items that open the tablet.

  • item is the item name exactly as your inventory spells it.
  • apps = {} (empty) makes a normal tablet. Players install apps from the App Store.
  • A filled-in apps list makes a locked tablet. It shows only the apps listed (plus the Settings app), and the App Store isn't offered. App names are app IDs from the resource that adds the app, listed in that resource's documentation.

Here is an example with a second item. It turns a work-issued item into a tablet that only shows one app:

Config.Items = {
    { item = 'tablet', apps = {} },
    { item = 'work_tablet', apps = { 'their_app' } },   -- only that one app
}

Don't list an item that another resource already opens by itself. If both resources react to the same item, both open when it's used. Before listing an item here, check the other resource's config for an "open with an item" option and turn it off.

Every item you list must also exist in your inventory and be set up as described in Framework Setup.

Config.OpenKey

Config.OpenKey = ''

The default key that opens the tablet. It's empty by default, which means no key is bound. Players can still bind their own key in game: Esc → Settings → Key Bindings → FiveM → Open tablet.

To set a default key, put the key name in the quotes, for example Config.OpenKey = 'F10'. A default only applies to players who have never joined your server. Anyone who has joined before keeps their own binding.

Good to know: the App Store

Apps from other resources don't appear on anyone's home screen by themselves. Each player installs them from the tablet's App Store. If you'd rather every tablet had certain apps, or every app installed automatically, see Config.Store in Configuration.

Custom Wallpapers (Optional)

The tablet has 8 built-in wallpapers. You can add your own images too:

Copy the image into the wallpapers/ folder inside oxide-tablet (next to itemimages/, not inside web/).

  • Use a .png, .jpg, .jpeg or .webp file with a lowercase extension.
  • Use only letters, digits, - and _ in the file name, with no spaces. For example skyline.jpg.
  • An image about 1600x1000 (16:10) fits the screen without cropping.

Add it to the wallpaper list. Each entry needs an id (a short unique name using letters, digits, - and _), a label (the name players see) and a url (the file name).

Before the first start, add it in shared/config.lua:

Config.Home = {
    dockSize = 6,
    maxPages = 5,
    wallpapers = {
        { id = 'skyline', label = 'Skyline', url = 'skyline.jpg' },
    },
}

After the first start, run /tablet settings, open Home Screen, and add a row under Wallpaper images. Press Save Changes.

Restart the tablet so it picks up the new file. Type restart oxide-tablet in your server console, or restart the server.

A full https:// web address also works as the url. Plain http:// addresses are not accepted.

Keep an image's id the same once players have picked it. Saved home screens remember the id, not the file name. If you change or remove the id, those players go back to the default wallpaper.

Players pick a wallpaper on the home screen: they right-click the home screen (or press and hold an app, or press the pen button in the corner), then press Wallpaper and choose from Images.

Admin Access

The admin parts of the tablet (/tablet settings, /tablet wipe and /tablet notify) use o-link's admin check. A player passes if they have the admin or command permission. On ESX, members of an ESX admin group pass too.

  • Most QBCore and QBX servers already give their group.admin group the command permission in server.cfg, so existing admins work straight away.

  • Otherwise, add these two lines to your server.cfg, replacing YOUR_LICENSE with the admin's license identifier:

    server.cfg
    add_principal identifier.license:YOUR_LICENSE group.admin
    add_ace group.admin admin allow

The full command list is in Admin Tools.

Verification

Start your server and watch the server console. There should be no red errors mentioning oxide-tablet, and you should see a line like this:

[INFO][oxide-tablet][boot] tablet ready
  {"items":1,"requireItem":true}

On the very first start you'll also see a configSeeded line. That is the tablet copying your settings into the database — it's normal.

Give yourself a tablet in game. Replace YOUR_ID with your in-game server ID. The command is the same on QBCore (qb-inventory) and on QBX or ESX (ox_inventory):

/giveitem YOUR_ID tablet 1

Use the tablet from your inventory. The tablet should open and your character should hold it. The home screen shows a Calendar and an ID widget, the App Store and Settings apps, and a hint to open the App Store.

Open the App Store. You should see Maps, plus any apps your other resources add. Press Get on one and it appears on your home screen.

Put the tablet away with Esc. Then type /tablet device in chat. You should see something like Tablet (IMEI 35xxxxxxxxxxxxx), which means this tablet has its own IMEI.

If you see "This tablet has not been activated yet" after using it, your inventory couldn't save the IMEI on the item. See Troubleshooting.

As an admin, type /tablet settings. The Tablet Settings menu should open. This confirms your admin permission works.

If any step doesn't match what you see, go to Troubleshooting.

Next Steps