Commands#
Waypoint registers one command for players and one diagnostic. Both run on the player's own client, so neither needs a permission.
Command | Where | Description |
|---|---|---|
| In game | Opens the Waypoint Creator, or closes it when it is already open. The word is |
| In game / F8 | Prints why the current route looks the way it does. See below. |
The keybind#
The creator is also registered in FiveM's key settings as Waypoint creator, under Settings → Key Bindings → FiveM. Config.Keybind sets the key it starts on — for example "F7". Left empty, it starts unbound and each player chooses their own.
FiveM remembers each player's binding.
Config.Keybindis only the default for players who have never seen the binding — changing it later does not move the key for players who already have one.
Reading waypointdebug#
Set a waypoint, drive towards it, and run the command. Every safety check on the route can only ever remove arrows, so when the trail is shorter than expected, the large number is the one that explains it:
Line | Means |
|---|---|
| Whether the icon loaded. |
| How many points are being drawn, whether the active profile has the route on, and which preset is running. |
| The route only exists between 40 m and 4 km (3 km in performance mode). |
| How many road points the route was built from. Near zero means there is no road to follow from where the player stands. |
| How many arrows the route could have had. |
| Arrows that would have landed on a roof, a bridge deck or a tunnel ceiling. |
| Arrows off the tarmac. Zero with the shipped settings. |
| Arrows behind a wall. Zero with the shipped settings. |
| Arrows in the finished route, and which one is nearest the player. |
Client Exports#
For marking points from your own scripts — a delivery job, a dispatch call, a mission, a treasure hunt — and for switching the player's style. All six are client-side and return immediately. From the server, trigger a client event and call them there; see Integrations for worked examples.
AddWaypoint
local ok = exports['qs-waypoint']:AddWaypoint(id, coords, options)
-- In the player's own style
exports['qs-waypoint']:AddWaypoint('mytaxi:pickup', vector3(215.8, -810.1, 30.7))
-- With a label over the icon and a colour of its own
exports['qs-waypoint']:AddWaypoint('mytaxi:pickup', vector3(215.8, -810.1, 30.7), {
label = 'Customer',
style = { color = { 250, 204, 21 }, markerColor = { 250, 204, 21 } },
})Marks a point until it is removed. Returns true, or false when the id is missing or the coordinates have no x, y and z.
Argument | Type | Description |
|---|---|---|
| string or number | Your name for the point, used to remove it. Adding with an id that already exists replaces that point. |
|
| Where to draw it. The z is used as given, so pass the ground height. |
| string, optional | Text drawn above the icon while the destination is on screen. |
| table, optional | Any fields from the Styling Reference, merged over the player's active style for this point only. The icon itself cannot be changed per point. |
The 1.x form { color = { r, g, b, a } } is still accepted: it colours the icon and the marker and uses the fourth value as the opacity.
RemoveWaypoint · ClearWaypoints
-- One point. true if it existed, false if there was nothing with that id
local removed = exports['qs-waypoint']:RemoveWaypoint('mytaxi:pickup')
-- Every point added through the exports, by any resource. Always true
exports['qs-waypoint']:ClearWaypoints()Neither touches the player's own map waypoint. ClearWaypoints removes the points of every resource, not just yours — prefer removing your own ids.
GetWaypoints
local points = exports['qs-waypoint']:GetWaypoints()
for id, point in pairs(points) do
print(id, point.coords, point.label)
endA copy of every point added through the exports, keyed by id, each with its coords and label. Changing the copy changes nothing on screen. The player's map waypoint is not included.
SetProfile · GetProfiles
-- Every saved profile of this player: { { id = 'p…', name = 'Default' }, … }
local profiles = exports['qs-waypoint']:GetProfiles()
-- Make one active, by name or by id. false if the player has none by that name
local switched = exports['qs-waypoint']:SetProfile('Police')Switching is saved, exactly as if the player had clicked the profile in the creator, and every point on screen takes the new style at once. Names are matched exactly, capitals included.
About Server Exports#
There are none, by design. Waypoint draws on each player's screen, so a server script decides what to mark and tells that player's client with TriggerClientEvent, which then calls the exports above. Waypoint emits no events of its own and needs none.



