MapLibre Tile Specification¶
MLT (MapLibre Tile) is a vector tile format that extends MVT, storing geometries and attributes as separate columns for improved compression and richer data support. MLT is natively supported by MapLibre GL JS and MapLibre Native, and tiles can be served using the Martin tile server.
Why MLT¶
MLT was redesigned from the ground up, so tiles are both more efficient and more capable than MVT:
- Smaller and faster. On whole-planet tilesets, uncompressed MLT v2 is 4-8% smaller than gzipped MVT and decodes 2.3 to 3.7 times faster. With gzip, v2 is 10-18% smaller than gzipped MVT. See benchmarks for details.
- Richer data. MLT v2 adds per-vertex elevation and values, and keeps lists and maps as nested properties, none of which MVT can store. Each layer carries its own format version, so new kinds of data can be added later.
Each geometry and attribute is stored as a separate column, with compression optimized for its data type. This makes tiles smaller, faster to decode with SIMD, and cheaper to load into GPU buffers.
MVT limits a feature to 2D vertices and single-value properties.
Elevation and per-vertex values like lane count are lost, and lists or maps are flattened into columns like name:en and name:de.
MLT v2 removes these limits; see how v2 differs from v1:
Each layer in a tile carries its own format version, so new formats can be added without breaking existing readers. One tile can mix formats, so future formats can add 3D and other kinds of data, including non-visual data, alongside existing layers.
MLT 0x03
A 3D extension to MLT will expand these capabilities and is in the requirements engineering stage. Join the MapLibre Slack to learn more and share your ideas.
Documentation¶
Note
This is a live specification that evolves continuously. Features marked as are under active development and may change in future versions. Stable features are those without experimental tags.
| Page | Contents |
|---|---|
| Data Model | How tiles, frames, layers, features, columns and streams fit together. Start here. |
| MLT v1 | The stable wire format: 2D features with scalar properties, compatible with MVT. |
| MLT v2 | The next wire format: v1 content in a smaller layout, plus Z and M values and nested properties. |
| Encoding Algorithms | The compression schemes used by both versions. |
| Implementation Guide | Choosing encodings and decoding into memory. |
| Implementation Status | Tools, libraries and datasets that support MLT. |
| Benchmarks | Decoding speed and tile size compared with MVT. |
| Tile Inspector | Decode a tile in the browser and walk through its bytes. |