Examples

New to tiles? Read the deep guide: How map tiles work — raster vs vector, Leaflet vs MapLibre.

Everything below runs on live Tilezza tiles. Swap YOUR_KEY for the key from your dashboard.

1 · Pick a style

Built-in styles — click to preview on the live map below.

2 · Markers & popups (Leaflet)

The light style is tuned so markers pop. Click the markers.

3 · Your own colors — one URL parameter

Base style for the two vector demos below — includes indigo, our vector-only brand flavor:

Vector styles accept color overrides: water, land, parks, forest, roads, highway, buildings, boundaries, labels (+ hide_labels=1, hide_pois=1, lang=de, lite=1 mobile mode, font=Montserrat or font=Open Sans).

Base style

4 · MapLibre GL quickstart (vector)

<script src="https://unpkg.com/maplibre-gl@5/dist/maplibre-gl.js"></script> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5/dist/maplibre-gl.css"> <div id="map" style="height:400px"></div> <script> new maplibregl.Map({ container: 'map', style: 'https://tilezza.eu/api/style/voyager?key=YOUR_KEY', center: [19.04, 47.5], zoom: 6 }); </script>

5 · Retina (@2x) raster — razor-sharp on phones

Add detectRetina: true and Leaflet requests @2x.png tiles on HiDPI screens (5 quota units each). Available from the Starter tier.

L.tileLayer('https://tilezza.eu/raster/voyager/{z}/{x}/{y}.png?key=YOUR_KEY', { maxZoom: 19, detectRetina: true, attribution: '© OpenStreetMap contributors © Protomaps' }).addTo(map);

6 · Compare two styles — synced maps

Two Leaflet maps locked together (light vs. midnight) — drag or zoom either one.

const a = L.map('left').setView([47.5, 19.04], 7); const b = L.map('right', { zoomControl: false }).setView([47.5, 19.04], 7); L.tileLayer('https://tilezza.eu/raster/light/{z}/{x}/{y}.png?key=YOUR_KEY', { attribution: ATTR }).addTo(a); L.tileLayer('https://tilezza.eu/raster/midnight/{z}/{x}/{y}.png?key=YOUR_KEY', { attribution: ATTR }).addTo(b); let zar = false; const koss = (x, y) => x.on('move', () => { if (zar) return; zar = true; y.setView(x.getCenter(), x.getZoom(), { animate: false }); zar = false; }); koss(a, b); koss(b, a);

7 · Data overlay tiles — live weather layers

Beyond base maps we serve data overlays: transparent PNG tiles rendered from live open data (Open-Meteo), Europe-wide, zoom 3–11. Pick a layer:

L.tileLayer('https://tilezza.eu/raster/grayscale/{z}/{x}/{y}.png?key=YOUR_KEY', { maxZoom: 19, attribution: '© OpenStreetMap contributors © Protomaps' }).addTo(map); L.tileLayer('https://tilezza.eu/overlay/aszaly/{z}/{x}/{y}.png', { maxZoom: 11, maxNativeZoom: 7, opacity: .75, attribution: 'drought: Open-Meteo' }).addTo(map);

9 · One style, four ways — all four move together

The same voyager style, served four different ways. Drag or zoom any panel and the other three follow, so you are always comparing the identical view. Watch the counters underneath: they show what each approach actually costs over the wire.

Vector · MapLibre GLnative
loading…
Vector · Leafletmaplibre-gl-leaflet
loading…
Raster · 1×.png
loading…
Raster · @2x@2x.png
loading…
Pan or zoom any panel to start measuring.
// 1 — vector, native MapLibre GL new maplibregl.Map({ container: 'a', style: 'https://tilezza.eu/api/style/voyager?key=YOUR_KEY' }); // 2 — the same vector tiles inside Leaflet L.maplibreGL({ style: 'https://tilezza.eu/api/style/voyager?key=YOUR_KEY' }).addTo(L.map('b')); // 3 — raster L.tileLayer('https://tilezza.eu/raster/voyager/{z}/{x}/{y}.png?key=YOUR_KEY', { maxZoom: 19 }).addTo(L.map('c')); // 4 — raster, retina (@2x). Same tile, 4x the pixels. L.tileLayer('https://tilezza.eu/raster/voyager/{z}/{x}/{y}@2x.png?key=YOUR_KEY', { maxZoom: 19 }).addTo(L.map('d')); // keep them locked together — Leaflet and MapLibre both expose getCenter/getZoom let zar = false; const koss = (tagok) => tagok.forEach(t => t.on('move', () => { if (zar) return; zar = true; const c = t.getCenter(), z = t.getZoom(); tagok.forEach(m => { if (m === t) return; m.jumpTo ? m.jumpTo({ center: [c.lng, c.lat], zoom: z }) : m.setView([c.lat, c.lng], z, { animate: false }); }); zar = false; }));
Attribution (© OpenStreetMap contributors © Protomaps) is embedded in every style and TileJSON — Leaflet and MapLibre display it automatically. Please keep it visible.

8 · Optimised vector — same tiles, tuned three ways

Identical tiles and style; only the setup differs. Numbers are measured in your browser one after another — running them at once would make them fight over the same GPU and the later ones would always look slower. Once measured, the three lock together: drag or zoom any of them.

Defaultas-is
measuring…
Slimfewer layers
measuring…
Leanslim + overzoom
measuring…

measuring…