|
| 1 | +--- |
| 2 | +title: "MapLibre Newsletter November 2025" |
| 3 | +date: "2025-12-02" |
| 4 | +categories: ["newsletter"] |
| 5 | +authors: |
| 6 | + [harel-mazor, bart-louwers, frank-elsinga, yuri-astrakhan, "ramya-ragupathy"] |
| 7 | +draft: false |
| 8 | +--- |
| 9 | + |
| 10 | +import { Image } from "astro:assets"; |
| 11 | +import awsLogo from "/public/img/aws-logo.svg"; |
| 12 | +import maplibreLogo from "/public/img/maplibre-logos/maplibre-logo-for-light-bg.svg"; |
| 13 | +import mlt from "./mlt.jpg"; |
| 14 | +import font_before from "./font_before.png"; |
| 15 | +import font_after from "./font_after.png"; |
| 16 | + |
| 17 | +We open this edition by acknowledging AWS for their continued support of MapLibre during 2023–2025. Their contribution plays an important role in sustaining the growth of our open-source ecosystem. |
| 18 | + |
| 19 | +<div |
| 20 | + style={{ |
| 21 | + backgroundColor: "white", |
| 22 | + padding: "2rem", |
| 23 | + border: "10px solid #cfd8dc", |
| 24 | + borderRadius: 0, |
| 25 | + margin: "0 auto 3rem", |
| 26 | + maxWidth: "960px", |
| 27 | + display: "flex", |
| 28 | + flexDirection: "column", |
| 29 | + justifyContent: "center", |
| 30 | + alignItems: "center", |
| 31 | + gap: "1.5rem", |
| 32 | + }} |
| 33 | +> |
| 34 | + <div |
| 35 | + style={{ |
| 36 | + display: "flex", |
| 37 | + justifyContent: "center", |
| 38 | + alignItems: "center", |
| 39 | + gap: "3rem", |
| 40 | + flexWrap: "wrap", |
| 41 | + width: "100%", |
| 42 | + }} |
| 43 | + > |
| 44 | + <Image |
| 45 | + src={maplibreLogo} |
| 46 | + alt="MapLibre logo" |
| 47 | + style={{ |
| 48 | + maxHeight: "80px", |
| 49 | + width: "auto", |
| 50 | + objectFit: "contain", |
| 51 | + }} |
| 52 | + /> |
| 53 | + <Image |
| 54 | + src={awsLogo} |
| 55 | + alt="AWS logo" |
| 56 | + style={{ |
| 57 | + maxHeight: "80px", |
| 58 | + width: "auto", |
| 59 | + objectFit: "contain", |
| 60 | + }} |
| 61 | + /> |
| 62 | + </div> |
| 63 | + |
| 64 | + <div |
| 65 | + style={{ |
| 66 | + marginTop: "0.5rem", |
| 67 | + fontSize: "1rem", |
| 68 | + textAlign: "center", |
| 69 | + color: "#263238", |
| 70 | + fontStyle: "italic", |
| 71 | + maxWidth: "42rem", |
| 72 | + }} |
| 73 | + > |
| 74 | + Our gratitude goes to AWS for their continued multi-year commitment to |
| 75 | + MapLibre (2023-2025). |
| 76 | + </div> |
| 77 | +</div> |
| 78 | + |
| 79 | +The highlight of this month is the landmark release of Martin v1.0, a major milestone for the project. In addition, we bring updates on MapLibre Tile (MLT), new releases across MapLibre Native and GL JS, a new video export plugin from the community, and information on upcoming community calls. |
| 80 | + |
| 81 | +## 🧩 Martin |
| 82 | + |
| 83 | +🎉 After 8 years in development, [Martin v1.0](https://maplibre.org/martin/introduction.html) is here! 🎉 |
| 84 | + |
| 85 | +We are thrilled to announce [the official release of Martin v1.0](https://github.com/maplibre/martin/releases/tag/martin-v1.0.0). Since joining MapLibre in 2022, Martin has evolved from a simple tile server supporting a single PostgreSQL connection into the fastest, feature-rich, open-source tile server available today. |
| 86 | + |
| 87 | +This incredible progress is thanks to [over 80 contributors](https://github.com/maplibre/martin/graphs/contributors) who have expanded Martin's capabilities to include: |
| 88 | + |
| 89 | +- **Multiple Data Sources**: Support for multiple PostgreSQL, PMTiles, and MBTiles backends. |
| 90 | +- **MapLibre Ecosystem**: Full support for fonts, sprites, and styles. |
| 91 | +- **Powerful Features**: A rich web UI, plus tools for tile generation and MBTiles manipulation. |
| 92 | +- **Developer Flexibility**: The ability to use Martin as a library for building custom tile-serving solutions. |
| 93 | + |
| 94 | +A special thanks to Stepan Kuzmin, the original author, and to key contributors Yuri Astrakhan, Frank Elsinga, and Lucas, along with everyone else who made this project a success! |
| 95 | + |
| 96 | +## 📝 MapLibre Tile |
| 97 | + |
| 98 | +Support for the new **MapLibre Tile** (MLT) format has landed in both MapLibre GL JS and MapLibre Native! |
| 99 | + |
| 100 | +#### What is MLT? |
| 101 | + |
| 102 | +[MLT](https://github.com/maplibre/maplibre-tile-spec) is a new format that we will support alongside [MVT](https://github.com/mapbox/vector-tile-spec). MLT vector tiles have a modern and efficient column oriented format which will save bandwidth as well as storage space for offline use cases. |
| 103 | + |
| 104 | +#### How to try MLT? |
| 105 | + |
| 106 | +We have added the [`encoding`](https://maplibre.org/maplibre-style-spec/sources/#encoding) property to the style specification, where you can add `mlt` as a value to add MLT vector tile sources. It will probably be a while before the tile format is widely available, for example from your favorite tile provider. |
| 107 | + |
| 108 | +The easiest way to try out MLT is to use the [MLT-based demotiles style](https://raw.githubusercontent.com/maplibre/demotiles/refs/heads/gh-pages/tiles-mlt/plain.json). Early adopters might also want to try out the [encoding server](https://github.com/maplibre/maplibre-tile-spec/tree/main/java/encoding-server) which converts existing (MVT) styles and vector tile sources to MLT on the fly. This is mostly a tool for development. For actually deploying MLT, you could use [Planetiler](https://github.com/onthegomap/planetiler), as the upcoming version will support outputting MLT. |
| 109 | + |
| 110 | +<div style={{ maxWidth: "1000px", margin: "1.5rem auto", textAlign: "center" }}> |
| 111 | + <Image |
| 112 | + src={mlt} |
| 113 | + alt="MapLibre Tile Support" |
| 114 | + style={{ |
| 115 | + width: "75%", |
| 116 | + height: "auto", |
| 117 | + display: "block", |
| 118 | + margin: "0 auto", |
| 119 | + border: "1px solid #e5e7eb", |
| 120 | + borderRadius: "0.75rem", |
| 121 | + }} |
| 122 | + class="shadow-lg" |
| 123 | + loading="lazy" |
| 124 | + decoding="async" |
| 125 | + /> |
| 126 | + <p |
| 127 | + style={{ |
| 128 | + fontSize: "0.9rem", |
| 129 | + color: "#666", |
| 130 | + marginTop: "0.5rem", |
| 131 | + fontStyle: "italic", |
| 132 | + }} |
| 133 | + > |
| 134 | + <em>MapLibre Tile Support</em> |
| 135 | + </p> |
| 136 | +</div> |
| 137 | +#### Implementation Status |
| 138 | + |
| 139 | +Refer to [this page](https://maplibre.org/maplibre-tile-spec/implementation-status/) for a complete and up-to-date list of integrations and implementations. |
| 140 | + |
| 141 | +#### Community Feedback |
| 142 | + |
| 143 | +The first results are being reported on [our Slack](https://maplibre.org/community). We would love to hear your experience with using MLT! Join the `#maplibre-tile-format` channel if you are interested in contributing to the future of the tile format. There are a lot of ideas for exciting extensions. |
| 144 | + |
| 145 | +#### Acknowledgements |
| 146 | + |
| 147 | +MapLibre Tile came to be thanks to a multi year collaboration between academia, open source and enterprise. Thank you to everyone that was involved! We are very proud that our community is able to innovate like this. |
| 148 | + |
| 149 | +Special thanks goes to Markus Tremmel for inventing the format, Yuri Astrakhan for spearheading the project, Tim Sylvester for the C++ implementation, Benedikt Vogl and Niklas Greindl for helping out with the JavaScript implementation. |
| 150 | + |
| 151 | +Also thanks to Microsoft and Amazon for financing work on MLT. |
| 152 | + |
| 153 | +## 📱 MapLibre Native |
| 154 | + |
| 155 | +- Please help us test the new MapLibre Android pre-release, [`v12.3.0-pre0`](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.3.0-pre0) (available on Maven Central). Two features need testing: |
| 156 | + - icon placement with pitched maps (especially if you use `icon-offset`) and |
| 157 | + - camera animations. |
| 158 | + |
| 159 | + Since we don't have a large QA team, we rely on the community to help ensure, enhancements don't inadvertently break existing apps. Please report back, even if everything worked as expected. |
| 160 | + |
| 161 | +- We made a new release of the [MapLibre Android test app](https://github.com/maplibre/maplibre-native/releases/tag/android-testapp-b30207bcb92396afc77c7456a68706adeecca50c). If you have an Android device lying around, you can help us improve the stability of MapLibre Android by installing this app and starting the "long running test" activity. Any crashes will be automatically reported to MapLibre developers. |
| 162 | +- The test app helped us find [and fix](https://github.com/maplibre/maplibre-native/pull/3962) a long-standing bug of the Vulkan backend that we were not able to reproduce before. This was one of the last [blockers](https://github.com/maplibre/maplibre-native/issues/3387) for one of our users that wanted to use[the Vulkan build](https://central.sonatype.com/artifact/org.maplibre.gl/android-sdk-vulkan) of MapLibre Android. |
| 163 | + |
| 164 | +- Releases |
| 165 | + - MapLibre Android [12.2.0](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.2.0), [12.1.3](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.1.3), [12.1.2](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.1.2), [12.1.1](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.1.1), [12.1.0](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.1.0) |
| 166 | + |
| 167 | + - MapLibre iOS [6.21.1](https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.21.1), [6.21.0](https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.21.0), [6.20.1](https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.20.1), [6.20.0](https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.20.0), [6.18.0-patch0](https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.18.0-patch0) |
| 168 | + |
| 169 | +- We also recommend reading this detailed community post by Ahmed, on [MapLibre performance on Android Auto](https://helw.net/2025/11/16/maplibre-on-android-auto/). |
| 170 | + |
| 171 | +## 🌐 MapLibre GL JS |
| 172 | + |
| 173 | +We have released two major versions this month: [v5.12](https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.12.0) and [v5.13](https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.13.0). |
| 174 | +The main feature that was added as part of these versions is support for MLT (MapLibre Tiles) as mentioned above! |
| 175 | + |
| 176 | +**Experimental Tile Slicing** |
| 177 | + |
| 178 | +- We've introduced an experimental feature for slicing vector tiles on the fly, this solves some precision issues with labels and improves performance for high zoom levels. |
| 179 | +- We will probably make this feature non experimental and define a different default in the next breaking change version (version 6, for which the timeline is yet to be defined), so it would be great if you could give it a try, check out the [`experimentalZoomLevelsToOverscale`](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MapOptions/#experimentalzoomlevelstooverscale) flag. |
| 180 | + |
| 181 | +**GeoJSON Optimizations & Font Updates** |
| 182 | + |
| 183 | +- There were a lot of performance improvements to the GeoJSON source along side addressing a context restore blank map issue. |
| 184 | +- In these versions there was also a leap forward in term of font support by [adding uncommon Chinese, Japanese, Korean, and Vietnamese characters](https://github.com/maplibre/maplibre-gl-js/pull/6640) along side allowing `glyph` to be removed and use the browser native text rendering capabilities, which can improve support for rendering text in all kind of languages. |
| 185 | +- Styles are no longer strictly tied to server-side glyph PBFs: they can render text using local or Web fonts whenever PBFs are unavailable. This enhances [CJK text rendering](https://en.wikipedia.org/wiki/CJK_characters), supporting bold/italic variants and resolving Japanese character misalignment. |
| 186 | + |
| 187 | +<div style={{ textAlign: "center", margin: "2rem 0" }}> |
| 188 | + <table style={{ margin: "0 auto" }}> |
| 189 | + <thead> |
| 190 | + <tr> |
| 191 | + <th style={{ padding: "0.5rem", fontSize: "0.75rem", color: "#cfd8dc", fontWeight: 400 }}> |
| 192 | + Before |
| 193 | + </th> |
| 194 | + <th style={{ padding: "0.5rem", fontSize: "0.75rem", color: "#cfd8dc", fontWeight: 400 }}> |
| 195 | + After |
| 196 | + </th> |
| 197 | + </tr> |
| 198 | + </thead> |
| 199 | + <tbody> |
| 200 | + <tr> |
| 201 | + <td style={{ padding: "0.5rem" }}> |
| 202 | + <img |
| 203 | + width="360" |
| 204 | + src={font_before.src} |
| 205 | + alt="Font rendering before improvements" |
| 206 | + /> |
| 207 | + </td> |
| 208 | + <td style={{ padding: "0.5rem" }}> |
| 209 | + <img |
| 210 | + width="360" |
| 211 | + src={font_after.src} |
| 212 | + alt="Font rendering after improvements" |
| 213 | + /> |
| 214 | + </td> |
| 215 | + </tr> |
| 216 | + </tbody> |
| 217 | + </table> |
| 218 | + |
| 219 | + <p |
| 220 | + style={{ |
| 221 | + fontSize: "0.75rem", |
| 222 | + color: "#666", |
| 223 | + marginTop: "0.5rem", |
| 224 | + fontStyle: "italic", |
| 225 | + }} |
| 226 | + > |
| 227 | + <em>Example from the font improvements testing: see more cases in the <a href="https://github.com/maplibre/maplibre-gl-js/pull/6640#issue-3575277749">GitHub comment thread</a></em> |
| 228 | + </p> |
| 229 | +</div> |
| 230 | + |
| 231 | +🤝 Thanks to all the contributors this month! Lucas Wojciechowski, Ryan, Lars Maxfield, Tohold, Niklas Greindl, Benedikt Vogl, Minh Nguyễn. |
| 232 | + |
| 233 | +## 🎥 MapLibre GL Video Export Plugin |
| 234 | + |
| 235 | +Brice Person has made [the first release](https://github.com/bjperson/maplibre-gl-video-export/releases/tag/v0.1.0) of an open-source plugin for MapLibre GL JS that enables video export with animated camera movements. |
| 236 | + |
| 237 | +**What it does:** |
| 238 | + |
| 239 | +- Exports videos (WebM/MP4) directly from MapLibre GL maps |
| 240 | +- 28 preset animations (orbit, drone shots, terrain-aware paths, etc.) |
| 241 | +- Waypoints system for defining points of interest |
| 242 | +- WebM VP9 recommended (royalty-free, hardware-accelerated) |
| 243 | + |
| 244 | +**Technical approach:** |
| 245 | +Uses MapLibre GL JS v5.11.0+ time control API (`setNow()`) for deterministic frame-by-frame rendering, ensuring smooth exports without screen recording artifacts. |
| 246 | + |
| 247 | +**Resource Links:** |
| 248 | + |
| 249 | +- GitHub: https://github.com/bjperson/maplibre-gl-video-export |
| 250 | +- Live demo: https://bjperson.github.io/maplibre-gl-video-export/ |
| 251 | +- npm: https://www.npmjs.com/package/maplibre-gl-video-export |
| 252 | + |
| 253 | +Feedback and contributions welcome! |
| 254 | + |
| 255 | +License: BSD-3-Clause |
| 256 | + |
| 257 | +## 🗓️ Monthly meetings |
| 258 | + |
| 259 | +We continue our regular community calls on the _**second Wednesday**_ of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones. |
| 260 | + |
| 261 | +Upcoming Calls |
| 262 | + |
| 263 | +- MapLibre Navigation: Dec 10, 2025 – 5:00–6:00 PM UTC |
| 264 | +- MapLibre Native: Dec 10, 2025 – 6:00–7:00 PM UTC |
| 265 | +- MapLibre GL JS: Dec 10, 2025 – 7:00–8:00 PM UTC |
| 266 | + |
| 267 | +🌏 MapLibre Eastern Call |
| 268 | + |
| 269 | +Held on the last Wednesday of the month at an Asia/Oceania-friendly hour: |
| 270 | + |
| 271 | +- Dec 31, 2025 – 9:00–10:00 AM UTC |
| 272 | + |
| 273 | +🔗 [View meeting times in your local timezone](https://notime.zone/OfXch6EjYJg9K). |
| 274 | + |
| 275 | +All calls are open to everyone. Zoom links are shared in the MapLibre Slack. |
| 276 | +Not yet a member? Request an invite via the [OpenStreetMap US Slack](https://slack.openstreetmap.us/). |
| 277 | +We’d love to see you there! |
0 commit comments