Custom map styles

Design your own cartography, keep our tiles underneath

Change the colours, the labels and the whole palette in the browser, or edit the style JSON directly. Same tiles, your design. Drag the slider to see two styles over the same ground.

Central Paris shown twice over the same ground, split down the middle: the light Street style on the left and the Dark style on the right, with the city label, the arrondissements and the Seine crossing the divide between them.
MapMaker

Three ways in, depending on how deep you want to go

MapMaker edits any of the published styles in the browser and exports a finished style.json. In our opinion it is among the best map style editors available right now, and it is free to use with these tiles.

Easy Mode

Sliders, colour pickers and switches for the changes most people want: palette, label density, terrain, and feature groups like roads, water, buildings and points of interest. No JSON at any point.

Photo-to-Map

Upload a photo or a logo and MapMaker derives a palette from it. The quickest way to get a map that sits with a brand image or a mood board instead of fighting it.

Expert Mode

The underlying MapLibre style.json, with live validation. Click a feature on the map to find which layer draws it and jump straight there. Errors show inline and block saving until they are fixed.

Every map using these tiles keeps the Maptoolkit logo and the copyright line visible, whatever the styling. The attribution guide covers the exact requirement and the drop-in plugins for MapLibre and Leaflet.

Starting point

Fork a style that already works

A blank style.json is a lot of work before it looks like anything. All seven styles are published, along with their -3d variants and 13 language versions, so the shorter route is to take the closest one and change what you need.

# The published styles, under the Community License
git clone https://github.com/maptoolkit/maptoolkit.org

# summer, winter, hiking, cycling, street, light, dark
# plus 3d/ and one directory per language

Cycling carries 134 layers and Hiking 132. A city map will never draw most of them, and deleting the ones you do not need leaves less JSON to parse and less for the renderer to weigh on every frame.

Hosting

Put the JSON anywhere, point the sources at us

A style is one JSON file. Host it on your own domain, in a bucket, next to your app, wherever suits. Its sources keep pointing at our tiles, glyphs and sprites, and there is nothing to register.

{
  "version": 8,
  "glyphs": "https://fonts.maptoolkit.org/{fontstack}/{range}.pbf",
  "sources": {
    "mtk": {
      "type": "vector",
      // Reference the TileJSON, not a tile URL. The vector tiles sit
      // behind a dated path that changes when the data is rebuilt, and
      // this indirection is what keeps your style working across it.
      "url": "https://tiles.maptoolkit.org/mtk.json"
    }
  },
  "layers": [ /* yours */ ]
}

The copyright line comes out of that TileJSON, which carries the attribution string, so most renderers show it without you writing it. The logo is a separate element you place, and the attribution guide covers both.

Constraints

What you cannot change

The attribution

The logo and the copyright line stay visible at every size and zoom level. Restyle everything around them, place them where they suit your layout, but they do not come off. That is the condition the tiles are free under.

Your own typeface

280 faces across about 20 families are served, serif and slab and display and monospace among them, so there is plenty of range. What is not possible is adding a font: a brand typeface means hosting your own glyphs and pointing glyphs at them.

Questions

Frequently asked questions about custom styles

Which fonts can I use in my own style?

Far more than the published styles use. The glyph endpoint serves 280 named faces across about 20 families, and they are not all sans: Alegreya, Epunda Slab, Fraunces Soft, Proza Libre, Sanchez and Sansita are serif or slab, Lobster, Berkshire Swash, Bellefair and Grandstander are display or script, and SUSE Mono is monospace. MapMaker's font menu lists the lot.

What there is no path for is uploading a font of your own, so a brand typeface means hosting your own glyphs and pointing the style's glyphs property at them.

Will my style break when you update the tiles?

Not if you reference the TileJSON rather than the tile URL. The vector tiles sit behind a dated path that changes as the data is rebuilt: it read v31082026 one day and v07092026 the next. The TileJSON at tiles.maptoolkit.org/mtk.json always points at the current one, so a source with url set to the TileJSON keeps working. A source with a hard-coded tiles array pointing at a dated path will stop returning tiles.

Can I use my own icons and sprites?

Yes. The sprite property in a style is just a list of URLs, and once you host the style JSON those URLs are yours to set. The published styles load several sprites from icons.maptoolkit.org, so the simplest route is to keep those and add your own alongside rather than replacing them and losing every existing icon.

Can I delete layers I do not use?

Yes, and it is worth doing. Cycling carries 134 layers and Hiking 132, most of which a city map will never draw. Fewer layers means less style JSON to parse and less for the renderer to consider on every frame. Keep the attribution behaviour intact and delete freely otherwise.

Do I need to register my style with anyone?

No. Your style is a JSON file you host wherever you like, and nothing about it is known to us. The tiles, glyphs and sprites it references are fetched by your visitors' browsers exactly as they are for the published styles.

Can I remove the attribution if it clashes with my design?

No. The Maptoolkit logo and the copyright line stay visible at all times, and that is the condition the tiles are free under. Two npm packages place them for you so you are not fighting your own layout, and the attribution guide covers the exact requirement.

Is the tile server itself open source?

No, and it is not self-hostable. What is public: the seven styles and their variants under the Community License, the Maps SDK under BSD-3-Clause, and the attribution plugins under MIT.

What are the rate limits?

Unregistered traffic gets 120 tiles per second sustained and 200 in burst per website, with a 40 tiles per second cap per visitor IP. Cached tiles do not count, and the edge cache absorbs most requests. There is no SLA on the community service, so it is not the right choice behind anything life-safety or billing-critical.

More styles

The published styles

Hiking maps

Waymarked route shields, SAC and via ferrata grades, nine path layers and four hillshade passes.

Cycling maps

Numbered node networks, separated cycleways, on-road lanes and MTB trails on their own layers.

3D terrain and buildings

Add -3d for terrain, already configured against a global elevation model. Street draws buildings in 3D.