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.
NotifyandServerNotifynear the end ofconfig.luacallt-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: shipstrueand 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) andMaxBoardsPerPlayer(2).AllowPlace,UseAcePlace,CommandPlace(all shiptrue): free placement by players, whether it needs an ace, and whether/wbplaceis 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
- In the room, trace the floor with PolyZone's
/pzcreate, then add a zone toConfig.Whiteboards.Zoneswith those points plusminZandmaxZ, modelled on themrpd_room1sample. - 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. - 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.
- 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
Objectslist 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
Targetmatches the target resource you run, and that the board sits inside its zone. - Images never appear: the webhook line in
nui/nui.jsis probably still empty. - A debug grid over the room:
Debugis stilltrue. - 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
- Advanced Whiteboards release thread and update posts, Cfx.re forum
- Advanced Whiteboards 1.1.3 update video
whiteboard.zipon this store (fxmanifest.luaversion 1.1.2), config and Lua files re-read 2026-09-29, with its README.md- PolyZone on GitHub
- ox_lib on GitHub
- ox_target on GitHub
- qb-target on GitHub
- Discord webhook documentation