Top
Best
New

Posted by todsacerdoti 15 hours ago

MapLibre Tile: a modern and efficient vector tile format(maplibre.org)
402 points | 79 comments
edward 11 hours ago|
Come to the MapLibre talk in the Geospatial devroom at FOSDEM on Saturday

https://fosdem.org/2026/schedule/event/QAL9VN-state-of-the-m...

akpa1 10 hours ago|
If one can fit :P
Koffiepoeder 14 hours ago||
Had to search a bit, but here's a demo page: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-... Can be compared with: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-...

In that example I saw this in the console:

    before - 2.41+26.29+24.87+71.28+59.2+77.57 - 261.62kb
    after  - 2.45+22.4 +22.66+60.6+51.99+77.57 - 237.67kb
So roughly a ~10% compression improvement, neat!
dzogchen 13 hours ago|
Note that the demotiles style is not really comparable to a production basemap such as ones based on the popular OpenMapTiles schema. The article linked in the announcement has some more findings related to compression ratio.

Also note that lightweight encodings are built into the format, and different tiles can even be encoded in a completely different way. So you have to use heuristics to find the best combination of encodings and often you need to make a trade off between tile size and decoding performance. It is still early days for MLT, but all this means there are a lot of possibilities for optimization. In fact, AWS is again financing work on MLT this year, with a focus on optimization.

Lastly, when benchmarking tile size, it is good to look at actual usage patterns instead of size of the total tile set. Nobody is zooming into a random spot in the ocean, for example. ;-)

pratio 14 hours ago||
This is interesting. We recently deployed a solution that uses pmtiles and it's great.

https://docs.protomaps.com/pmtiles/

afaik, pmtiles uses mvt, let's hope the tooling to convert the tiles to mlt also becomes available.

dzogchen 14 hours ago||
PMTiles is actually pretty agnostic to what kind of tiles it contains! There is already a PMTiles PR that updates the byte that specifies the type of tile to include MLT.

https://github.com/protomaps/PMTiles/pull/596

thibaut_barrere 9 hours ago|||
Neat, as someone integrating PMTiles right now, thank you!
pratio 13 hours ago|||
Oh wow, thank you, looking forward to this
jamessb 14 hours ago|||
PMtiles is often used with MVT tiles, but it can encapsulate a variety of tile types: the current spec [1] has defined tile types for MVT, PNG, JPEG, WebP and AVIF (plus "Unknown/Other").

[1]: https://github.com/protomaps/PMTiles/blob/main/spec/v3/spec....

pratio 13 hours ago||
Absolutely, we have MVT tiles at the moment, I'm hoping to test MLT soon
maelito 12 hours ago|||
I'm building PMTiles through Tilemaker, PMTiles is incredible, but sadly it will take a lot of work to produce MLT though Tilemaker :/
Humphrey 14 hours ago||
Oh pmtiles is such a simple and innovative solution!
jarl-ragnar 5 hours ago|||
It is. I’ve found it so useful I created an Elixir library to act as a cache in front on a pmtiles file. https://hex.pm/packages/ex_pmtiles
pratio 13 hours ago|||
Yes, Absolutely in love with it. Loading tiles with range requests made our application so much faster.
jtbaker 11 hours ago||
It's very cool! If you want to get higher cache hit rates from a CDN or redis etc. and lower the amount of S3 reads, you can get set up a proxy to convert `/{z}/{x}/{y}.mvt` requests into the byte-range requests: https://docs.protomaps.com/deploy/

Brandon has some example code you can lift to dump it into a Cloudflare Worker or other platforms on that page.

pratio 10 hours ago||
Thank you. I'm going to try this on a different project that we have. Our current deployment is designed to work directly through s3/api gateway which reduces the number of moving parts.

We update the tiles frequently, so the setup has been amazing for us.

ccev 14 hours ago||
MapLibre is an awesome project, their JS library is by far the best way to display maps in the browser that I've come across. Very excited to eventually switch to this format!
Humphrey 14 hours ago|
This 100%
zylepe 11 hours ago||
Planetiler currently supports generating MLT by adding —-tile-format=mlt cli argument. It’s only on latest main right now but I should be able to get a release out in the next few days. In my testing I’ve seen ~10% reduction in overall OpenMapTiles archive size with default settings but there are some more optimizations the team is working on that should bring it down even further.
maelito 12 hours ago||
Unfortunately, Tilemaker hasn't planned or cannot plan to support MLT in the medium-term.

That will leave a significant part of the community out of this transition.

See this interesting (and quite heated) discussion : https://github.com/systemed/tilemaker/issues/856

sjg-wet-dog 10 hours ago|
You can always convert after the fact. Just go from MVT to MLT. There's a Java based program in the repo.
neiman 10 hours ago||
It's cool that stuff like vector file formats is still being reinvented. What's the new idea(s) here, though?

Like, I get that it's new and has better features (better compression, faster decoding, etc.) --- but what are the new ideas or insights that led to this design?

mattrighetti 12 hours ago||
Does anyone self host maps? If you do, mind sharing the pros, cons and tools to do that?
homebrewer 11 hours ago||
We've been self-hosting protomaps (aka pmtiles) for several years. The only thing you need server-side is a web server that can serve static files and supports range requests (so anything works; I've tried caddy and nginx). The map is one large file, it's easy to share it between however many servers you need.

https://docs.protomaps.com/guide/getting-started

Downsides? Nothing major that I can think of. You have to add another client-side dependency (support for their custom protocol); the library is pretty small and easy to audit.

Editing map styles is slightly more difficult because generic maplibre styles won't work with it: they add a bit of custom sauce on top. IIRC this editor worked fine, you can import one of protomaps styles and base your work off it:

https://maputnik.github.io/editor

That's probably it.

throw_away_623 11 hours ago|||
Are the names of cities/streets included in the tiles, or do they have to be placed from a different data source?
homebrewer 11 hours ago||
No, the names are there in the file, streets included. Their default styles did not support the languages we needed out of the box (everything was shown in the local language or English IIRC), but it was easy to fix by patching the style. I don't remember the exact fix, but it was about as simple as replacing something like `["get", "name_en"]` with `["get", ["coalesce", "name_xx", "name_en"]]`.
throw_away_623 11 hours ago||
Is there enough information to show exact addresses? For example "221B Baker Street"
homebrewer 10 hours ago||
Sure. You can look at their demo, it uses the exact same single-file hosting mechanism (the network requests tab in the browser dev tools confirms it — it doesn't send any other requests), and street/house addresses are visible on the map.

https://maps.protomaps.com

yuretz 8 hours ago|||
How do you update pmiles? Do you have to rebuild the entire map every time? If so, I think that's a downside/limitation for some use cases.
storystarling 3 hours ago|||
I had to go down this path for a print-on-demand book project. If you need high-DPI assets for physical print the commercial static map APIs are prohibitively expensive or restrict usage rights for resale. Self-hosting was basically the only way to generate 300dpi rasters at scale without destroying the margins.
Humphrey 2 hours ago|||
Have used pmtiles to self-host a “find your nearest store” map, which only needed to cover Australia. Created two sources: (1) a low-detail worldwide map to fill out the view (about 50 MB), and (2) a medium-to-high detail source for Australia only, up to zoom level 15 (about 900 MB). In this case, there’s no need for up-to-date maps, so we were able to upload these two files to S3 and forget about them. Works great!
davidkwast 4 hours ago|||
I do. The pros are hosting own data and have total control over stack and cloud hosting. The cons are having to code your own stack and do cloud management. I use PostGis to storage and serve vector tiles. And I use a simple backend with AWS S3 to store and serve raster data (GeoTiff COG).
matt-p 3 hours ago||
Respect this commitment. I think to be honest I'd only ever consider hosting a tile server if I was actually rendering data on the tiles or there was something 'special' about them (e.g style). Using $whatever hosted tiles are likely to be faster for the user as they'll be cached, served statically.
linsomniac 11 hours ago||
We use mod_tile+renderd: https://github.com/openstreetmap/mod_tile

In short: We have a script that builds a pbf of the area we are interested in (Colorado, USA) from OSM, then set up a openstreetmap-tile-server container with that data, bring in our styles, and then set up renderd.

bikelang 4 hours ago||
Been following this for a little bit and am extremely excited for this. I think the final big hurdle for adoption (for those of use in the MapLibre stack at least) will be getting an equivalent As_MLT() function added to PostGIS.
tjwebbnorfolk 3 hours ago|
and support in Geoserver
Dowwie 10 hours ago|
I <3 Martin and the team that built it. It's great to see that the Rust stack they used is the one I contributed to, now 8 years ago. Aging like fine wine!
More comments...