This is a setup walkthrough for a FiveM whiteboard script: Tugamars' Advanced Whiteboards, which gives rooms on your server boards that players draw on, pin images to or point at a web page, with everyone nearby seeing the same thing. Every step comes from going through the downloaded config and Lua files ourselves. Nobody here has run this build on a production server, so read each step as what the code expects, not as a report from a working city.

Version note: this store's download contains build 1.1.2. Tugamars announced 1.1.3 on 6 July 2026 with synced web pages players can scroll and click; those pages are absent from the 1.1.2 code this guide covers.

Before you start: what you need

  • ox_lib, loaded as a shared script; the placement dialogs and menus use it.
  • PolyZone, loaded client-side. Each set of boards belongs to a polygon zone.
  • ox_target or qb-target. A target is not optional: in the release thread Tugamars explained that the target is how the script knows which board a player is using.
  • A notification resource. Notify and ServerNotify near the end of config.lua call t-notify; on a server without it, change both functions to call whatever you use.

In server.cfg, ensure all of them ahead of the whiteboard resource. There is no SQL: drawings are saved to data/drawingsdb.json, which the server writes itself, so the folder must stay writable.

Pick a framework mode

Config.Whiteboards.Framework takes "qb-core" or "standalone", and ships as "qb-core", so change it on any server without QBCore. The QBCore side is small: main/server/framework.lua registers a usable item (ItemName, default whiteboard) so a player can put a board down from their inventory. In both modes the script keys players on their Rockstar license.

The thread title mentions ESX, but this build has no ESX code, so an ESX server uses standalone mode and places boards by command. On QBCore, if the item never registers, look first at framework.lua: it uses a global QBCore object without fetching it.

Player placement arrived in 1.1.0, in May 2023, along with the item, the /wbplace command and ace restrictions.

Settings worth changing first

  • Target: "ox-target" by default, or "qb-target".
  • Debug: ships true and draws the PolyZone grid; switch it off before going live.
  • CleanUpDrawings / CleanUpDrawingsAfter: a set number of hours after start (default 1), drawings untouched for the given days (default 15) are removed. In 1.1.2 this runs once per start, not on repeat.
  • MaxObjectsPerZone (10) and MaxBoardsPerPlayer (2).
  • AllowPlace, UseAcePlace, CommandPlace (all ship true): free placement by players, whether it needs an ace, and whether /wbplace is registered.

Boards that players put down during a session are kept in memory by the server, and nothing we read writes them to disk. Expect those boards to be gone after a restart, while drawings survive in the JSON file.

Images: the Discord webhook

Images added to a board are uploaded through a Discord webhook whose URL sits on line 1 of nui/nui.js:

var discordWebhook="";

It ships blank, and without a URL image uploads have nowhere to go. Create a webhook in a private Discord channel, paste its URL between the quotes, and restart the resource. Because it lives in a client file, anyone who digs through the client can read it, so use a channel reserved for board images.

Permissions

main/server/main.lua checks these aces:

add_ace group.admin whiteboard_create allow
add_ace group.admin command.wbcreate allow
add_ace group.admin whiteboard_place allow

/wbcreate is a restricted command, so staff need command.wbcreate on top of whiteboard_create. Give whiteboard_place to the group that may place boards, or set UseAcePlace = false so anyone can.

Put boards in a room

  1. In the room, trace the floor with PolyZone's /pzcreate, then add a zone to Config.Whiteboards.Zones with those points plus minZ and maxZ, modelled on the mrpd_room1 sample.
  2. Type /wbcreate. An ox_lib prompt offers to create a stand and a board model; decline both to lay the drawing surface over a wall prop already in the room.
  3. Move it with the arrow keys, raise or lower it with E and Q, rotate with Y, and confirm with Enter; Backspace or Esc backs out.
  4. Confirming spawns nothing lasting. The script prints a finished table entry in F8 and copies it to the clipboard; paste it into that zone's Objects list and restart.

The forum listing allows up to 10 boards per room, matching MaxObjectsPerZone. In game, each board's target menu lists Manage Boards (owners rename or delete drawings and pick who else can edit), Change Board (switch between a drawing and a URL), Clean Board and Draw on board.

If something does not work

  • No target option on a board: check Target matches the target resource you run, and that the board sits inside its zone.
  • Images never appear: the webhook line in nui/nui.js is probably still empty.
  • A debug grid over the room: Debug is still true.
  • Player-placed boards vanished after a restart: expected in this build, as above.

Details and price are on the Advanced Whiteboards page, and the studio is on the Tugamars page.

Sources