7 ms·
MapLibre Tile: a modern and efficient vector tile format
- ccev 9mo agoMapLibre 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 9mo agoThis 100%
- pratio 9mo agoThis is interesting. We recently deployed a solution that uses pmtiles and it's great. https://docs.protomaps.com/pmtiles/ https://docs.protomaps.com/pmtiles/ afaik, pmtiles uses mvt, let's hope the tooling to convert the tiles to mlt also becomes available.
- Humphrey 9mo agoOh pmtiles is such a simple and innovative solution!
- pratio 9mo agoYes, Absolutely in love with it. Loading tiles with range requests made our application so much faster.
- jtbaker 9mo agoIt'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/ 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 9mo agoThank 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.
- jarl-ragnar 9mo agoIt 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 https://hex.pm/packages/ex_pmtiles
- dzogchen 9mo agoPMTiles 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 https://github.com/protomaps/PMTiles/pull/596
- pratio 9mo agoOh wow, thank you, looking forward to this
- thibaut_barrere 9mo agoNeat, as someone integrating PMTiles right now, thank you!
- jamessb 9mo agoPMtiles 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.md#tile-type-tt https://github.com/protomaps/PMTiles/blob/main/spec/v3/spec....
- pratio 9mo agoAbsolutely, we have MVT tiles at the moment, I'm hoping to test MLT soon
- maelito 9mo agoI'm building PMTiles through Tilemaker, PMTiles is incredible, but sadly it will take a lot of work to produce MLT though Tilemaker :/
- Koffiepoeder 9mo agoHad to search a bit, but here's a demo page: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-map-with-mlt/ https://maplibre.org/maplibre-gl-js/docs/examples/display-a-... Can be compared with: https://maplibre.org/maplibre-gl-js/docs/examples/display-a-map/ 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 9mo agoNote 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. ;-)
- twelvechairs 9mo agoLooks great. I wish there was similar advancement for full 3d tiles. The only real option at the moment is cesiums 3d tiles format which is nowhere near as fast as it could/should be
- QuiCasseRien 9mo agoAll links in the top navigation are broken (404).
- dzogchen 9mo agoSorry about that. Noticed the footnote was broken. Fixed the footnote, broke all other links. Should be OK again when the caches catch up.
- adim86 9mo agoI find it shocking that a reputable resource such as this is still displaying the size of Greenland or Africa wrong (Mercator projection) in relation to other land masses in its marketing material and documentation, like here. It just brings doubt to the whole project, which is a shame considering all the time they must have put in. Why show the map that way when majority of its users will never use it for nautical navigation? https://maplibre.org/maplibre-gl-js/docs/examples/display-a-map-with-mlt/ https://maplibre.org/maplibre-gl-js/docs/examples/display-a-...
- xigoi 9mo agoNot everyone has a spherical monitor.
- workmandan 9mo agoWeb Mercator is the standard projection used on the web, if you think the we should use a different projection on the web then that's a completely separate argument
- bottled_poe 9mo agoAccuracy where it matters is why. Do you have a better suggestion for projecting a sphere onto a rectangle?
- einpoklum 9mo agoI would not use such strong rhetoric as the GP, but I believe they probably mean we should lean towards using the Gall/Peters projection, which maintains lengths and areas, but not angles. (There are of course other projections with other interesting features; or you could take the same projection but center the world differently etc.)
- willtemperley 9mo agoWeb Mercator does not preserve angles. We're currently forced to use a projection that is strictly worse than what it was based on, the Mercator projection, created in 1569. Everyone on this thread needs to read this presentation entitled "Use Literally Anything But Web Mercator": https://www.esri.com/content/dam/esrisites/en-us/events/conferences/2021/developer-summit/12415-use-literally-anything-but-web-mercator.pdf https://www.esri.com/content/dam/esrisites/en-us/events/conf... Let's say that a bit louder shall we: USE LITERALLY ANYTHING BUT WEB MERCATOR.
- einpoklum 9mo agoI am not familiar with the ecosystem of geographic data and mapping as online services. Can someone please explain... * How this tile format, or the organization behind it, related to OpenStreetMap (if it is related at all)? * Why the need to replace the previous tile format / scheme which they mention? * What challenges such a project faces (other than, I suppose, being noticed and considered for adoption)?
- wiredfool 9mo ago1) It's not. Maplibre is a JS library for displaying map data. OpenStreetMap is a collection of map data that is published in various formats. Different levels of the stack. 2) It's an optimization/advancement. There are some pain points in the older version that 10 years of experience can fix in a newer format. 3) Attention, funding. Technically, they're at the leading edge of open source.
- WorldMaker 9mo agoAdditionally to point 2, the older format was created by a company (Mapbox) that used to be open source-friendly but has recently made a larger pushback against open source and open standards, changing the licenses of much of their formerly open source work. (The Maplibre JS library itself is a fork of that company's previous open source work from its last open source drop to keep the work open source.)
- mmooss 9mo ago> There are some pain points in the older version that 10 years of experience can fix in a newer format. What were the major pain points? Compression ratio and speed seem like two of them. (Thanks for answering the elementary questions.)
- sjg-wet-dog 9mo agoLack of tessellation was a big one. In many cases you'd rather have the polygons pre-tessellated in the file format. Now you can. Or you can avoid doing that and save the bytes. The format is also designed to slide onto the GPU more easily. If you're writing a vector map from scratch, I say just do MLT. There was never any support for more complex geometry. Now someone could add curves. Attributes had to be fairly simple. Now you could conceivably do hierarchical attributes. The requirements for navigation data tiles get specific and weird (from a visual perspective). Now it can be added without breaking existing data.
- maelito 9mo agoUnfortunately, 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 https://github.com/systemed/tilemaker/issues/856
- sjg-wet-dog 9mo agoYou can always convert after the fact. Just go from MVT to MLT. There's a Java based program in the repo.
- maelito 9mo agoHow much times would it take ? Generating the planet with Tilemaker takes 2 hours on an enormous 350 Go RAM server.
- willtemperley 9mo agoAnother thing worth mentioning is it's very similar to the structure of columnar formats like Arrow and Parquet. Anyone with familiarity with these formats could build a decoder in a couple of days. If they don't use FastPFOR. I really wish they hadn't used FastPFOR. It's a research library and has an incredibly opaque algorithm: https://ayende.com/blog/199523-C/integer-compression-understanding-fastpfor https://ayende.com/blog/199523-C/integer-compression-underst...
- CommanderStorm 9mo agoFSST is similar in terms of underlying complexity. You need this complexity to get good performance though, it seems from the research. If there were something better than FastPFOR, we would use it. If something comes up, we can always use a new tag and add it in the future. There is still a lot to do, for example one can do like-operators on FSST without decompressing it.
- ltbarcly3 9mo ago"Modern" is such a silly way to advertise things.
- xigoi 9mo agoAlthough the word is overused, hindsight can be a huge advantage in design.
- sjg-wet-dog 9mo agoIt should be backed up, for sure. Like how is this modern? In this case it's the column format for attributes and the newer encodings. Things the industry wasn't doing a decade ago.
- dzogchen 9mo agoWe don't have a marketing department, so we're happy to take suggestions on our messaging! What makes it modern are the ideas behind it: the column-oriented layout, support for lightweight encodings such as FSST and FastPFOR and support for pre-tessellation. Also, enabling doing more computations on the GPU instead of the CPU, which are made possible thanks to modern graphics APIs like Vulkan and Metal. I agree that it is better to be specific about these things (if that is your gripe with it), but there's only so many characters that fit into a title. ;)
- mattrighetti 9mo agoDoes anyone self host maps? If you do, mind sharing the pros, cons and tools to do that?
- homebrewer 9mo agoWe'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 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 https://maputnik.github.io/editor That's probably it.
- throw_away_623 9mo agoAre the names of cities/streets included in the tiles, or do they have to be placed from a different data source?
- homebrewer 9mo agoNo, 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 9mo agoIs there enough information to show exact addresses? For example "221B Baker Street"
- maximgeorge 9mo ago[dead]
- shirol 9mo agoUnrelated, but I noticed that clicking the logo goes to the current permalink rather than the homepage, might be unintentional.
- CommanderStorm 9mo agoThanks for the report. Should be fixed in a few hours once another of the project members approves https://github.com/maplibre/maplibre.github.io/pull/526 https://github.com/maplibre/maplibre.github.io/pull/526
- zylepe 9mo agoPlanetiler 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.
- edward 9mo agoCome to the MapLibre talk in the Geospatial devroom at FOSDEM on Saturday https://fosdem.org/2026/schedule/event/QAL9VN-state-of-the-maplibre-tile-format/ https://fosdem.org/2026/schedule/event/QAL9VN-state-of-the-m...
- akpa1 9mo agoIf one can fit :P
- Dowwie 9mo agoI <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!
- neiman 9mo agoIt'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?
- mips_avatar 9mo agoI just want support for globe view on maplibre native
- CommanderStorm 9mo agoGlobe view is a large feature that would require dedicated engineering effort. Currently, we don’t have funding allocated for this feature. If you or your organization would like to - sponsor (-> https://maplibre.org/sponsors https://maplibre.org/sponsors) the work or - contribute engineering time (-> https://maplibre.org/community/ https://maplibre.org/community/), we’d be happy to discuss options. Feel free to reach out on Slack (invite at https://slack.openstreetmap.us/ https://slack.openstreetmap.us/).
- bikelang 9mo agoBeen 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 9mo agoand support in Geoserver