# Adding blips to the FiveM map with AddBlipForCoord

> Add blips in FiveM with AddBlipForCoord, style them using SetBlipSprite and SetBlipColour, name them, keep them short-range, and drive it all from a table.

Source: https://fam-tools.com/guides/fivem-blips-guide · FAM Tools · published 2026-09-11 · updated 2026-09-11 · about 12 min

**Short answer.** Create a blip with `AddBlipForCoord(x, y, z)`, then style it with `SetBlipSprite`, `SetBlipColour` and `SetBlipScale`, make it appear only nearby with `SetBlipAsShortRange(blip, true)`, and name it with `BeginTextCommandSetBlipName('STRING')`, `AddTextComponentSubstringPlayerName(name)` and `EndTextCommandSetBlipName(blip)`. Blips are client-side, so create them in a client script.

## Key points

- Blips are **client-side**: every player’s client creates its own.
- Three kinds: at coordinates, attached to an entity, or a coloured radius.
- `SetBlipAsShortRange(true)` hides it from the minimap until the player is nearby — use it for most map icons.
- Name every blip; unnamed ones all show as the same generic label in the map legend.
- Keep the blip list in a config table instead of one function call per location.

`AddBlipForCoord` is where every FiveM blip script starts, and the natives after it decide whether the map reads well or looks unfinished. Blips are the icons on the pause map and the minimap: shops, jobs, garages, hospitals, the car you just parked. They are the main way players learn a city, and a map crowded with badly named, identical icons is one of the fastest ways to make a server feel unfinished. This guide covers every part of a blip, from creating it to naming it, styling it and keeping the map readable.

## Your first blip

*client.lua*

```lua
local blip = AddBlipForCoord(215.8, -810.1, 30.7)
SetBlipSprite(blip, 357)          -- radar_garage
SetBlipColour(blip, 3)            -- blue
SetBlipScale(blip, 0.8)
SetBlipAsShortRange(blip, true)   -- minimap only when nearby

BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('Public Garage')
EndTextCommandSetBlipName(blip)
```

That is a complete, named garage icon. Sprite and colour numbers come from the game’s own lists; the most useful ones are in [the blip sprites and colours list](https://fam-tools.com/guides/fivem-blip-sprites-colors-list).

## The three kinds of blip

| Native | Creates | Typical use |
| --- | --- | --- |
| `AddBlipForCoord(x, y, z)` | A fixed icon at a position | Shops, jobs, garages |
| `AddBlipForEntity(entity)` | An icon that follows an entity | Your car, a delivery van, a police unit |
| `AddBlipForRadius(x, y, z, radius)` | A coloured circle on the map | Zones, turf, search areas |

*Radius blip for a zone*

```lua
local zone = AddBlipForRadius(1400.0, 3600.0, 35.0, 250.0)
SetBlipColour(zone, 1)   -- red
SetBlipAlpha(zone, 90)   -- 0-255, keep it translucent
```

A radius blip has no icon of its own. Add a normal blip at the centre if you want a name in the legend.

## Styling: sprite, colour, scale and display

| Native | What it controls |
| --- | --- |
| `SetBlipSprite(blip, id)` | The icon |
| `SetBlipColour(blip, id)` | The colour |
| `SetBlipScale(blip, 0.8)` | Size; 1.0 is default, 0.6–0.9 keeps the map calm |
| `SetBlipAsShortRange(blip, true)` | Minimap only when close; always on the pause map |
| `SetBlipDisplay(blip, id)` | Where it appears: 2 both maps, 3 pause map only, 5 minimap only, 8 both (not selectable) |
| `SetBlipAlpha(blip, 0–255)` | Transparency |
| `SetBlipFlashes(blip, true)` | Flashing, for urgent things only |
| `SetBlipRoute(blip, true)` | Draw a GPS route to it |
| `SetBlipCategory(blip, id)` | Grouping in the map legend |

> **Short range for almost everything** — Dozens of permanent icons on the minimap make it unreadable. Short-range blips stay on the pause map for planning but only appear on the minimap as you approach.

## A config-driven blip script

Instead of repeating six lines per location, keep a table and loop over it. Adding a blip becomes one line.

*config.lua*

```lua
Config = {}
Config.Blips = {
    { name = 'Pillbox Medical',  coords = vector3(300.0, -585.0, 43.3), sprite = 61,  colour = 2 },
    { name = 'Mission Row PD',   coords = vector3(430.0, -980.0, 30.7), sprite = 60,  colour = 29 },
    { name = 'Public Garage',    coords = vector3(215.8, -810.1, 30.7), sprite = 357, colour = 3 },
    { name = 'Clothing Store',   coords = vector3(72.3, -1399.1, 29.4), sprite = 73,  colour = 17, scale = 0.7 },
}
```

*client.lua*

```lua
local created = {}

CreateThread(function()
    for _, b in ipairs(Config.Blips) do
        local blip = AddBlipForCoord(b.coords.x, b.coords.y, b.coords.z)
        SetBlipSprite(blip, b.sprite)
        SetBlipColour(blip, b.colour or 0)
        SetBlipScale(blip, b.scale or 0.8)
        SetBlipAsShortRange(blip, true)
        BeginTextCommandSetBlipName('STRING')
        AddTextComponentSubstringPlayerName(b.name)
        EndTextCommandSetBlipName(blip)
        created[#created + 1] = blip
    end
end)

-- Clean up if the resource is restarted
AddEventHandler('onResourceStop', function(res)
    if res ~= GetCurrentResourceName() then return end
    for _, blip in ipairs(created) do RemoveBlip(blip) end
end)
```

Without the `onResourceStop` handler, restarting the resource leaves the old blips behind and adds a second set on top.

## Blips only some players should see

Because blips are client-side, showing them only to a job is a matter of creating them only when the player has that job — and removing them when the job changes. Frameworks announce job changes with an event (for example `esx:setJob` on ESX or `QBCore:Client:OnJobUpdate` on QBCore). Recreate the job-specific blips inside that handler.

Live blips for other players, such as police seeing each other, need positions from the server because a client only knows about players near it. With OneSync, send positions from the server periodically or use [state bags](https://pityus.net/guides/fivem-state-bags) and update entity or coord blips on the client.

## Keeping the map readable

- One sprite per kind of place: every garage uses the same icon and colour.
- Use colour for meaning — green for medical, blue for police, yellow for jobs — and stick to it.
- Use short range and a smaller scale for anything that is not a landmark.
- Give every blip a name; the pause-map legend groups by name.
- A cleaner map texture helps as much as fewer icons — see [branding your server map](https://fam-tools.com/guides/brand-your-server-map).

## Questions

### How do I add a blip in FiveM?

In a client script, call `AddBlipForCoord(x, y, z)`, then set the sprite, colour and name. See the full example at the top of this guide.

### How do I change a blip’s name?

Use `BeginTextCommandSetBlipName('STRING')`, `AddTextComponentSubstringPlayerName('Your name')` and `EndTextCommandSetBlipName(blip)`.

### How do I make a blip show only when I am close?

Call `SetBlipAsShortRange(blip, true)`. It stays on the pause map but only appears on the minimap nearby.

### Why do my blips duplicate when I restart the resource?

The old blips were never removed. Remove them in an `onResourceStop` handler with `RemoveBlip`.

### Can I use my own image as a blip icon?

Not directly with the natives — sprites come from the game’s texture set. Custom icons require streaming a replacement for an existing blip texture.

### Are blips server-side or client-side?

Client-side. Each player’s client creates its own blips; the server can only tell clients what to create.

## Related

- https://fam-tools.com/guides/fivem-player-blips-onesync
- https://fam-tools.com/guides/fivem-gps-routes-waypoints
- https://fam-tools.com/guides/fivem-drawmarker-types
- https://fam-tools.com/guides/fivem-blip-sprites-colors-list
- https://fam-tools.com/guides/gta-5-map-coordinates
- https://fam-tools.com/guides/fivem-radar-zoom-settings
- https://fam-tools.com/guides/brand-your-server-map
