# Adding blips to the FiveM map and minimap

> Create, style and remove blips in FiveM: AddBlipForCoord and AddBlipForEntity, sprites and colours, custom names, short-range blips and a config table.

Source: https://fivem-minimaps.com/guides/fivem-blips-guide · MiniMaps for FiveM · 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.

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://fivem-minimaps.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. For the drawing itself, [a blip creator](https://fam-tools.com/blip-creator) hands you the sprite, the colour and the scale as a ready call.

## 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://fivem-minimaps.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://fivem-minimaps.com/guides/fivem-player-blips-onesync
- https://fivem-minimaps.com/guides/fivem-gps-routes-waypoints
- https://fivem-minimaps.com/guides/fivem-drawmarker-types
- https://fivem-minimaps.com/guides/fivem-blip-sprites-colors-list
- https://fivem-minimaps.com/guides/gta-5-map-coordinates
- https://fivem-minimaps.com/guides/fivem-radar-zoom-settings
- https://fivem-minimaps.com/guides/brand-your-server-map
