The technical specification of a FiveM minimap
The GTA V minimap is not one image. It is a grid of texture dictionaries drawn onto a set of geometry, with a separate ocean layer underneath and a low-detail texture for the zoomed-out pause map. Replacing it correctly means matching all of that exactly.

#Dimensions
The aspect ratio is fixed by the geometry: San Andreas is taller than it is wide, and the 2 × 3 grid is what the base game uses. A replacement that changes the grid will not line up no matter how good the art is.
| Property | Value |
|---|---|
| Full map resolution | 6144 × 9216 |
| Grid | 2 columns × 3 rows |
| Tile resolution | 3072 × 3072 |
| Land dictionaries | 6 (minimap_0_0 … minimap_1_2) |
| Sea dictionaries | 6 (minimap_sea_0_0 … minimap_sea_1_2) |
| LOD texture | 1 (minimap_lod) |
| Geometry | 65 .ydd drawable dictionaries |
| Compression | DXT5 (BC3), mipmapped |
| VRAM | ≈ 113 MB, identical to stock |
| On disk | ≈ 22 MB per resource |
#Why the sea layer is separate
The ocean is drawn underneath the land with its own set of textures. This is what lets the game fade the water differently, and it is why a replacement has to provide both sets — a land-only replacement gives you the new island floating over the old ocean.
#Radar zoom data
The radar samples the texture at zoom levels defined in game data. A higher-resolution replacement needs those levels adjusted or the map appears at the wrong scale relative to the player blip — usually described as "the map is zoomed in too far".
-- what a minimap resource's client.lua does
Citizen.CreateThread(function()
SetMapZoomDataLevel(0, 0.96, 0.9, 0.08, 0.0, 0.0)
SetMapZoomDataLevel(1, 1.6, 0.9, 0.08, 0.0, 0.0)
SetMapZoomDataLevel(2, 8.6, 0.9, 0.08, 0.0, 0.0)
SetMapZoomDataLevel(3, 12.3, 0.9, 0.08, 0.0, 0.0)
SetMapZoomDataLevel(4, 22.3, 0.9, 0.08, 0.0, 0.0)
end)#How ours are produced
The pipeline is two stages. First the source map is decomposed into semantic layers — ocean alpha, bathymetric depth, coastline, terrain relief, directional hillshade, three road classes, labels and label halos — and cached as a 12288 × 18432 twelve-channel structure. Then each palette is a colouring pass over that structure.
Rendering at 2× and resampling down is what keeps the coastline smooth instead of stair-stepped, and what keeps labels readable at radar size. Colouring a finished image instead would tint everything together; separating the layers first is why twelve palettes look like twelve different maps rather than twelve tints of one.
| Stage | Output |
|---|---|
| Structure | 12288 × 18432 × 12 channels, cached once per base map style |
| Colourise | 6 × 3072 × 3072 PNG per palette |
| Pack | 12 DXT5 .ytd + LOD + 65 .ydd |
| Deliver | A complete resource, 78 stream files |
#The three base map styles
The same palette work is applied to three different sources, which is why a theme looks consistent across all three while the underlying map differs.
- With postal codes — the classic base map with the community postal grid and street names burned in.
- Without postal codes — the same coastline and street network with the grid removed and the ground beneath it rebuilt.
- Google style — a colour street map as the source: road classes, water, parks and beaches segmented from its own colours, then re-lit with the elevation relief of the base map.
#What a correct replacement must do
- Provide all twelve dictionaries plus the LOD texture. A partial set gives a map with holes.
- Use DXT5 with mipmaps. Uncompressed textures multiply VRAM for no visible gain and cause stutter.
- Keep the exact file names. They are what the geometry references.
- Ship the .ydd geometry, or rely on the base game's — but not a mixture of the two.
- Set the radar zoom levels once, at start.
- Not collide with any other resource. One minimap per server.
Questions
Can I use a higher resolution than 6144 × 9216?
Does a custom minimap increase VRAM use?
Why do some minimaps look blurry in game?
Ready to pick a map?
Twelve themes on three base map styles, $8 each, instant download.