minimapcodewalkertexturesdxt518 min read · updated 9/13/2026

How to make a custom FiveM minimap

Making a minimap is not a drawing problem. The art is the easy half: the hard half is producing twelve texture dictionaries that match, byte for byte in structure, what the game already expects to find, and doing it without breaking the container format they live in. This guide covers all three ways people actually do it, and is specific about where each one goes wrong.

Short answer: A FiveM minimap is a 6144 × 9216 image cut into six 3072 × 3072 land tiles in a 2 × 3 grid, plus a matching set of sea tiles, a LOD texture and the geometry they are drawn onto. Each tile is compressed as DXT5 with a full mipmap chain and packed into a .ytd texture dictionary, which is an RSC7 container whose header describes the memory the game will allocate. You can build that by hand with CodeWalker, OpenIV and an image editor; you can generate it with a browser or in-game editor; or you can take a finished pack and change only the branding. The manual route is the only one that gives you complete control and the only one that can silently produce a file the streamer refuses.

How to Make a Custom FiveM Minimap in 2026

#What you are actually building

Before you open anything, get the target clear. The game does not load "a minimap". It loads a fixed set of named texture dictionaries, draws them onto a fixed set of geometry, and samples them at zoom levels defined in game data. Every one of those pieces has to be right or the result is wrong in a specific, recognisable way.

PropertyValue
Full map resolution6144 × 9216
Grid2 columns × 3 rows
Tile resolution3072 × 3072
Land dictionaries6 — minimap_0_0minimap_2_1
Sea dictionaries6 — minimap_sea_0_0minimap_sea_2_1
Zoomed-out pause map1 LOD texture, minimap_lod_128
Geometry65 .ydd drawable dictionaries
CompressionDXT5 (BC3), full mip chain
Runtime cost≈ 113 MB of VRAM, the same as the stock map

The specification a correct replacement has to hit. Full detail in [the technical specification](/guides/minimap-technical-specification).

The aspect ratio is not a choice. San Andreas is much taller than it is wide, and the 2 × 3 grid is what the base game’s geometry asks for. Change the grid and nothing lines up no matter how good the artwork is.

#The three routes

RouteWhat it gives youWhat it costsRealistic time
By handTotal control over every pixelTooling knowledge, and the ability to break the containerDays for a first attempt
Editor or generatorZones, labels and branding on a base map somebody else madeA subscription or a one-off licenceAn afternoon
Ready-made packA finished, tested map immediatelyYou did not choose the base artFive minutes

Most people who ask how to make a minimap want the second or third. It is worth being honest with yourself about which problem you have: if you want the stock map in your colours with your logo on it, that is a rendering and branding problem, not a drawing one, and the manual route is a slow way to get there.

#Route one: by hand

The traditional pipeline is CodeWalker or OpenIV to get the stock textures out, an image editor to make the new art, a DDS converter, and CodeWalker to build the dictionaries back up. Here is the order that works.

  1. Extract the stock map. Open the game files in CodeWalker or OpenIV and export the existing minimap_*.ytd land and sea dictionaries. You want them for two reasons: as a reference for exact naming, and as a size and format template.
  2. Assemble a single flat image. Stitch the six land tiles into one 6144 × 9216 canvas. Working on separate tiles is how you get seams, because any effect with a radius — a glow, a blur, a drop shadow — behaves differently at a tile edge than in the middle.
  3. Work at 2× if you can afford it. Build the master at 12288 × 18432 and resample down at the end. It is the difference between a smooth coastline and a stair-stepped one, and it is what keeps street labels legible once the game compresses them.
  4. Do the sea as its own layer set. Keep the ocean on separate layers from the start. You will export it separately, and rebuilding it later from a flattened image is painful.
  5. Split into tiles last. Once the flat image is final, cut it into six 3072 × 3072 pieces, in column-row order, and name them to match the dictionaries they are going into.
  6. Convert to DDS. DXT5 (BC3), mipmaps generated, no sRGB conversion surprises. Check one tile in a DDS viewer before doing all six.
  7. Rebuild the dictionaries. Import each DDS into its .ytd in CodeWalker and let it write the file. Do not patch bytes into an existing file with a hex editor, for reasons the RSC7 section below explains.
  8. Package the resource. A fxmanifest.lua, a client.lua with the zoom calls, and a stream/ folder containing the dictionaries, the LOD texture and the .ydd geometry.

CodeWalker is the tool most people settle on because it can open, edit and write these formats directly. OpenIV is still the better extractor for some archives. Working with them both is covered in CodeWalker map editing.

#Getting the tile grid right

Six land tiles, two columns by three rows. The naming is minimap_<row>_<column>, so the six land dictionaries run minimap_0_0, minimap_0_1, minimap_1_0, minimap_1_1, minimap_2_0 and minimap_2_1, and the sea set mirrors them exactly with the minimap_sea_ prefix.

The grid, north at the top
        column 0            column 1
      ┌──────────────────┬──────────────────┐
row 0 │ minimap_0_0      │ minimap_0_1      │  3072 px
      ├──────────────────┼──────────────────┤
row 1 │ minimap_1_0      │ minimap_1_1      │  3072 px
      ├──────────────────┼──────────────────┤
row 2 │ minimap_2_0      │ minimap_2_1      │  3072 px
      └──────────────────┴──────────────────┘
         3072 px            3072 px

      total: 6144 × 9216

The file names are not decorative. They are what the .ydd geometry asks the streamer for, which is also why every minimap on every server collides with every other one. If you invent your own names, the geometry will not find them and you get an empty map.

  • Cut on exact 3072 boundaries. A one-pixel offset shows as a visible seam along a straight road.
  • Do not add a bleed or a border. The tiles butt together edge to edge.
  • Keep the same tile at the same grid position in the sea set as in the land set.
  • Do not rotate or flip anything to "make it fit". If it needs flipping, your export order is wrong.

#DXT5, mipmaps and the alpha channel

DXT5, also called BC3, is block compression: the image is divided into 4 × 4 pixel blocks and each block is stored as two endpoint colours plus interpolation indices, with the alpha channel stored separately at higher precision than DXT1 can manage. That alpha channel is the reason the minimap uses DXT5 rather than DXT1 — the map is drawn over the world with transparency, and DXT1’s one-bit alpha is not enough.

ChoiceEffect on a minimap
DXT5 with mipsCorrect. What the stock map uses.
DXT1Alpha collapses to one bit. Hard edges where the map should fade.
Uncompressed (A8R8G8B8)Roughly four times the memory for no visible gain, and stutter when it streams.
No mipmap chainShimmering and aliasing on the radar while driving.
BC7Better quality per byte, but not what the stock pipeline expects here.

The mip chain matters more on a minimap than on almost any other texture, because the radar is a small window showing a heavily minified version of a very large image. Without mipmaps the hardware samples the full-resolution texture at radar scale and thin features — road centrelines, label strokes, the coastline — crawl and flicker as the player moves. A full chain from 3072 down to 1 is not optional.

#The RSC7 page trap

This is the part that is never in the tutorials and the part that ruins the most weekends. A .ytd is not a zip of DDS files. It is an RSC7 resource container: a 16-byte header followed by a compressed stream. The header carries two flag words that describe the memory layout the game must allocate before it inflates the payload into it.

The consequence is blunt: the game never looks at the file size. It allocates exactly what the header’s flag words say and decompresses the file into that allocation. Pixel data inside is packed into memory pages, and a texture never straddles a page boundary. Change what is inside without recomputing the page layout, the record size words and the header flags, and you have a file whose header promises one shape and whose payload is another.

What you didWhat you get
Rebuilt the dictionary with a tool that recomputes the flagsA working map
Patched new pixel data into an existing .ytdCheckerboard tiles, or missing map entirely
Increased the texture size without rebuildingA resource the streamer refuses to load
Left the file uncompressed on diskOversized-asset warnings and slow first joins

The second effect of the same design is that on-disk size tells you nothing about memory cost. A .ytd of a few megabytes on disk can need tens of megabytes of physical memory in game, because the payload is deflated and because pages are allocated whole. This is why the FiveM server console warns about assets above roughly 16 MiB of physical memory rather than about file sizes, and why a correctly built minimap of six 3072 px tiles sits at around 22 MB on disk while costing the same VRAM as the map it replaces.

The practical rule is short. Let CodeWalker write the file. If a workflow ever asks you to open a .ytd in a hex editor, or to rename a .dds to .ytd, stop. That is not how the format works, and the file it produces will fail somewhere between the server console and a player’s screen. The oversized-asset side of the same problem is covered in the oversized assets warning.

#Zoom data and the manifest

The radar samples the map at zoom levels defined in game data. In single-player modding that data lives in mapzoomdata.meta; on a FiveM server you do not ship a meta file, you set the same values at runtime from a client script. That is the whole reason a minimap resource has any Lua in it at all.

client.lua — runs once, at resource start
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)

The arguments are the zoom level index, then the zoom scale, zoom speed, scroll speed and the two tile values — the same fields the meta file holds. If your map appears at the wrong scale next to the player blip, this is where it is coming from. Radar zoom settings goes through the numbers in detail.

fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
this_is_a_map 'yes'

client_script 'client.lua'

That is the whole manifest, and it is worth noticing what is not in it. Anything inside a stream/ folder is picked up automatically, so there is no files block and no data_file line. If a minimap you downloaded declares data files, find out what it is overriding before you start it.

#Route two: editors and generators

If what you want is your own zones, labels and branding rather than your own terrain, an editor does the container work for you and you never see an RSC7 header.

Browser editors such as the one at fivem-tools.com let you place gang zones, labels, images and map-wide tints over the GTA V map and export a stream-ready resource in one click, with a free tier limited to one generation per tool per day and a paid supporter tier at $15 a month for unlimited exports and larger export resolutions. In-game editors such as LMX Minimap Creator move the same job inside the game: you draw on the live map and the resource writes BC3-compressed minimap_*.ytd and minimap_sea_*.ytd files into its own stream folder. It is a one-off Tebex purchase listed at $29.99 and the code is escrowed apart from its config.

What neither can do is change the base map underneath. You are compositing onto somebody else’s terrain, coastline and road palette. That is usually fine, and it is exactly the wrong tool if the thing you dislike is the base map itself.

#Route three: start from a finished map

The third route is to take a map that is already built correctly and change only what you care about. For a lot of servers the honest requirement is "the stock map, in our colours, with our name on it", and that is a render-and-composite job rather than an art job.

That is what this site does: twelve colour themes over three base map styles, giving 36 maps — with postal codes, without postal codes, and a Google-style street map. The themes are black OBSIDIAN, white ALABASTER, gray GRAPHITE, red CRIMSON, blue COBALT, yellow SOLAR, green EMERALD, orange EMBER, purple VIOLET, pink MAGENTA, TOPO NIGHT and TOPO DAY. A map is $8.00 and each element you place in the browser studio — a logo, a server name, a Discord tag — is $1.00, with later edits at $1.00 per element. Every tenth account that registers gets a base map free. The export is the specification at the top of this page: 6144 × 9216 across 78 stream files, about 22 MB, no framework dependency, so it drops onto ESX, QBCore, Qbox, vMenu or a standalone server unchanged.

The catalogue is at all 36 minimaps and the branding workflow is described in custom FiveM minimaps. A comparison of every route, including the free packs, is in the best FiveM minimaps compared.

#Testing what you built

Whatever route you took, the test is the same and it takes two minutes. The radar and the pause map fail independently, which makes checking both a diagnosis rather than a formality.

What you seeWhat it means
Both radar and pause map changedBuilt and installed correctly
Pause map changed, radar did notClient cache not cleared on that machine
Neither changedResource not started, or another resource is winning the name collision
Checkerboard tilesA dictionary is missing or its container is malformed
Map at the wrong scaleZoom data not set, or two resources setting it
New land over an old seaYou built the land tiles and not the sea set

Check the server console at start too. Oversized-asset lines naming your minimap mean the compression or the resolution is wrong, and they are worth fixing before players find the same problem as missing textures elsewhere in the world.

#Which route is actually yours

  • You want a different world. A fictional city, a custom map, a non-San-Andreas island: manual, and budget days rather than hours.
  • You want gang territory or hood zones you can redraw. An editor. Nothing else makes the second revision cheap.
  • You want the stock map in your colours with your logo on it. A themed map you brand, or a preset. Building that by hand is a slow route to a result you can buy.
  • You want to learn the formats. Manual, once, on a copy of a single tile. It is genuinely educational and you will never fear a .ytd again.
  • You need it working tonight. A finished pack, free or paid, installed properly.

Installation is the same for all of them and is covered step by step in installing a custom FiveM minimap.

Questions

What resolution should a FiveM minimap be?
6144 × 9216 overall, split into six 3072 × 3072 tiles in a 2 × 3 grid. Rendering the master at 12288 × 18432 and resampling down produces noticeably cleaner coastlines and labels, but the shipped tiles are 3072.
Which compression does a FiveM minimap use?
DXT5, also known as BC3, with a full mipmap chain. DXT1 loses the alpha the map needs, and uncompressed textures multiply memory for no visible gain.
Can I make a minimap without CodeWalker?
You can make the artwork in anything. You cannot build a valid .ytd without a tool that writes the RSC7 container correctly, and in practice that means CodeWalker, OpenIV or a generator that does the packing for you.
Why is my custom minimap a checkerboard?
A texture dictionary is missing from the stream folder, or one was written without rebuilding its RSC7 page layout, so the game allocated one shape and got another. Re-export the dictionary rather than patching it.
Do I need to ship mapzoomdata.meta?
No. On a FiveM server you set the same values at runtime with SetMapZoomDataLevel in a client script, which is why minimap resources are server-side and need nothing installed by the player.
How long does making a minimap by hand take?
For a first attempt, expect days rather than hours, and expect most of that time to go on the export and packaging steps rather than the art. Subsequent maps are much faster once the pipeline works.

Ready to pick a map?

Twelve themes on three base map styles, $8 each, instant download.