Hex Map Maker
Make a hex map for a tabletop role-playing game, a war game or your own world, and print it at the hex size you want. Paint any of 14 terrain types (plains, forest, hills, mountains, sea, swamp, towns, ruins and more) by clicking or dragging over the hexes; every terrain has its own fill and a simple line symbol drawn by us. Hexes are numbered column then row (0101 is the top left), the distance tool counts the hexes between any two, and the random button rolls a whole map from a seed: the same seed always gives the same map. Undo any step, save the map as a JSON file and open it again later. Print one page at the largest hex size that fits, or a fixed size such as 1 in across the flats over as many pages as needed. Nothing is uploaded.
100% private — everything runs in your browser. Everything runs in your browser; nothing is uploaded.
One page at the largest hex size that fits, or a fixed hex size over as many pages as needed (join the pages by the hex numbers). Print at 100% (Actual size).
Map
Runs in your browser with our own code: nothing is uploaded or saved. Your map stays in this tab until you save it as a JSON file. The terrain symbols are our own drawings. You may use what you make here, including commercially, with no credit needed.
How to make a hex map
- Set the number of columns and rows, and flat top or pointy top.
- Paint terrain: pick a terrain and click or drag over the map, or roll random terrain from a seed.
- Use Measure distance to count the hexes between two places.
- Save the map as a JSON file to keep working on it later.
- Download the PDF, PNG or SVG and print at 100% (Actual size).
What you can use it for
- Hex-crawl campaign maps
- War game and board game maps
- Worldbuilding for novels
- Travel-time planning by hex
- Classroom map and geography games
- Player handouts at a fixed hex size
The 14 terrain types
| Terrain | Fill colour |
|---|---|
| Plains | #f4efc6 |
| Grassland | #dcefb8 |
| Forest | #b5dba6 |
| Hills | #e6d8b0 |
| Mountains | #d3c6b6 |
| Sea | #a9d0ef |
| Lake | #cfe7f7 |
| Swamp | #c6d9b8 |
| Desert | #f6e2a8 |
| Snow and ice | #eef3f8 |
| Town | #f2e4dc |
| Keep | #e9dfd2 |
| Ruins | #e6e1d6 |
| Cave | #ddd6cc |
Each terrain has a fill and a line symbol, both drawn by the same code on screen, in the PDF, PNG and SVG. Clear leaves a hex white.
Hex size when the map fits one page
| Map (columns × rows) | US Letter landscape: across the flats | A4 landscape: across the flats |
|---|---|---|
| 8 × 6 | 0.936 in (23.77 mm) | 0.9 in (22.86 mm) |
| 12 × 10 | 0.579 in (14.71 mm) | 0.557 in (14.15 mm) |
| 16 × 12 | 0.487 in (12.36 mm) | 0.468 in (11.89 mm) |
| 20 × 15 | 0.392 in (9.97 mm) | 0.377 in (9.59 mm) |
| 24 × 18 | 0.329 in (8.35 mm) | 0.316 in (8.03 mm) |
| 30 × 24 | 0.248 in (6.31 mm) | 0.239 in (6.07 mm) |
Flat-top hexes; the page keeps room for the map name, the terrain key and the footer.
Pages at 1 in across the flats
| Map | US Letter landscape | A4 landscape |
|---|---|---|
| 12 × 10 | 10 × 5 per page, 4 pages | 12 × 5 per page, 2 pages |
| 16 × 12 | 10 × 5 per page, 6 pages | 12 × 5 per page, 6 pages |
| 20 × 15 | 10 × 5 per page, 6 pages | 12 × 5 per page, 6 pages |
| 30 × 20 | 10 × 5 per page, 12 pages | 12 × 5 per page, 12 pages |
| 40 × 30 | 10 × 5 per page, 24 pages | 12 × 5 per page, 24 pages |
Pages break on whole hexes; on flat-top maps they break on even columns so the stagger lines up when the pages are put side by side.
Distance examples on a 12 × 10 flat-top map
| From | To | Hexes |
|---|---|---|
| 0101 | 0201 | 1 |
| 0101 | 0104 | 3 |
| 0101 | 0401 | 3 |
| 0101 | 0505 | 6 |
| 0303 | 0806 | 6 |
| 0110 | 1201 | 14 |
For blank hex paper at an exact size, use Hex Grid; for a whole generated world with rivers and coasts, the Fantasy Map Generator.
Which tool to use
| You want | Use |
|---|---|
| A map painted hex by hex, numbered, at a chosen hex size | Hex Map Maker (this page) |
| A generated world map with coasts, rivers and names | Fantasy Map Generator |
| A dungeon on a square grid | Dungeon Map Generator |
| Blank hex grid paper | Hex Grid |
Also handy: the Dungeon Map Generator and the Poster Tiler for big prints.
More free tools
Grid paper, maps and game printables?
Print tools that run privately in your browser, with no sign-up and no watermark.
Frequently asked questions
How are the hexes numbered?
Column first, then row, two digits each, starting at 01: 0101 is the first column, first row (top left); 0312 is column 3, row 12. Maps with more than 99 columns or rows would need three digits; this tool goes up to 60.
How is distance counted?
As the number of steps from hex to hex through shared edges, the shortest way. The tool converts the column-row numbers to axial coordinates (q,r) and uses (|Δq| + |Δr| + |Δq + Δr|) / 2. Our tests check it against a step-by-step search of every pair of hexes on test maps.
What does the scale do?
Type what one hex stands for (for example 6 miles) and the distance tool also gives the distance in miles, km, ft or m. It is only a label: choose any scale that suits your game.
How does random terrain work?
From the seed number, the tool makes random heights and moisture, smooths them across neighbouring hexes, and turns them into sea, plains, grassland, forest, swamp, desert, hills and mountains, then places towns, a keep, ruins and a cave. The same seed and map size always give the same map.
Can I save my map?
Yes. Save map (JSON) downloads a small file with the map size, orientation, name and the terrain of every hex. Open a saved map reads it back. The file stays on your computer; nothing is stored in the browser or sent anywhere.
Can I print 1 inch hexes?
Yes. Choose Fixed size, 1 in across the flats. A map that does not fit one page is split into pages of whole hexes, with the hex numbers on every hex so the pages line up. A 16 × 12 map on US Letter landscape needs 6 pages.
Whose symbols are these?
Our own: simple line drawings of trees, hills, peaks, waves, houses and so on, made for this tool. You can use them in anything you make.
Is it free?
Yes. There is no sign-up, no watermark and no limit.
Is anything uploaded?
No. Everything is drawn by JavaScript in your browser and nothing is sent anywhere.