<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>MapLibre</title><description>The MapLibre Organization is an umbrella for open-source mapping libraries.</description><link>https://maplibre.org/</link><language>en-US</language><lastBuildDate>Tue, 06 Oct 2026 19:19:49 GMT</lastBuildDate><item><title>MapLibre Newsletter September 2026</title><link>https://maplibre.org/news/2026-10-01-maplibre-newsletter-september-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-10-01-maplibre-newsletter-september-2026/</guid><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the September 2026 edition of the MapLibre newsletter! A special thanks to our sponsor, Mapme, for their renewed sponsorship and steadfast support since 2024. This month is packed with major milestones across projects. Let’s dive right in!&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:baseline;gap:5rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;height:50px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mapme-logo.BAmpXmZG_1ztOmq.svg&quot; alt=&quot;MapMe logo&quot; style=&quot;height:55px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;399&quot; height=&quot;105&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:1.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem;line-height:1.4&quot;&gt;&lt;p&gt;Sincere thanks to Mapme for their continuous backing since 2024 🤝.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;maplibre-native&quot;&gt;MapLibre Native&lt;/h2&gt;
&lt;h3 id=&quot;cross-platform-plugin-system&quot;&gt;Cross-platform Plugin System&lt;/h3&gt;
&lt;p&gt;An update on the new cross-platform plugin system for MapLibre Native.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;🚀 A first version of the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/blob/ba9fc57bc88725d7602fd652e601384e9f2e3183/include/mln/plugin/plugin_api.h&quot;&gt;C Plugin
API&lt;/a&gt;
has landed this month!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;We also already saw various PRs
(&lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4654&quot;&gt;#4654&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4692&quot;&gt;#4692&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4665&quot;&gt;#4665&lt;/a&gt;) that extended
the capabilities of the plugin system. This is exactly the approach that we want
to take: gradually expand the scope of the plugin system to make sure it fits
all the use cases that our users have.&lt;/p&gt;
&lt;p&gt;It should be noted that during this development phase the plugin system is not stable yet. Regular builds also do not include it yet (all integration code is guarded with a &lt;code&gt;MLN_WITH_PLUGINS&lt;/code&gt; build flag). However, for those that want to experiment with the plugin API already, we did put out a pre-release for MapLibre Android that includes it. Please see &lt;a href=&quot;https://github.com/louwers/maplibre-native-plugin-android-example&quot;&gt;this repository&lt;/a&gt; for an example. MapLibre iOS will follow suit.&lt;/p&gt;
&lt;p&gt;Note that these plugins tie directly into the core. The plugins are &lt;em&gt;cross-platform&lt;/em&gt;, and thanks to the C API, once the API is stable, people will be able to publish plugins that will continue working across versions. We believe that this has the potential to create a true plugin ecosystem for MapLibre Native. By having a powerful plugin system, we allow people to extend the library and experiment, while keeping the core library stable (and small). Below you can find a small taste of some interesting ideas.&lt;/p&gt;
&lt;figure style=&quot;display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:1rem;align-items:center;justify-items:center&quot;&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/waves.LnK_Z0mD.webp&quot; data-pswp-width=&quot;800&quot; data-pswp-height=&quot;505&quot; aria-label=&quot;Enlarge: Waves plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/waves.LnK_Z0mD_Zxi9a6.webp&quot; alt=&quot;Waves plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;505&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/polygon-layer.Cc0SPOVt.webp&quot; data-pswp-width=&quot;800&quot; data-pswp-height=&quot;505&quot; aria-label=&quot;Enlarge: Polygon layer plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/polygon-layer.Cc0SPOVt_Z2tg079.webp&quot; alt=&quot;Polygon layer plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;505&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/location-indicator.DiIRPZPt.png&quot; data-pswp-width=&quot;614&quot; data-pswp-height=&quot;458&quot; aria-label=&quot;Enlarge: Location indicator plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/location-indicator.DiIRPZPt_1vyqF9.webp&quot; alt=&quot;Location indicator plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;614&quot; height=&quot;458&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/eifel-tower._ZAhKWVJ.png&quot; data-pswp-width=&quot;614&quot; data-pswp-height=&quot;458&quot; aria-label=&quot;Enlarge: Eiffel Tower plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/eifel-tower._ZAhKWVJ_HAAT0.webp&quot; alt=&quot;Eiffel Tower plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;614&quot; height=&quot;458&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/fireworks.gDOwa5uy.webp&quot; data-pswp-width=&quot;800&quot; data-pswp-height=&quot;560&quot; aria-label=&quot;Enlarge: Fireworks plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/fireworks.gDOwa5uy_Z2fTUcY.webp&quot; alt=&quot;Fireworks plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;560&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/flow-direction.XQfEVhER.gif&quot; data-pswp-width=&quot;800&quot; data-pswp-height=&quot;560&quot; aria-label=&quot;Enlarge: Flow direction plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/flow-direction.XQfEVhER_1WaDLf.webp&quot; alt=&quot;Flow direction plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;560&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/snowflakes.DROlU6WQ.webp&quot; data-pswp-width=&quot;600&quot; data-pswp-height=&quot;420&quot; aria-label=&quot;Enlarge: Snowflakes plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/snowflakes.DROlU6WQ_1Fkenf.webp&quot; alt=&quot;Snowflakes plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;600&quot; height=&quot;420&quot;&gt; &lt;/a&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/weather.DOLRWOZz.gif&quot; data-pswp-width=&quot;800&quot; data-pswp-height=&quot;560&quot; aria-label=&quot;Enlarge: Weather plugin demo&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/weather.DOLRWOZz_ZQY9c5.webp&quot; alt=&quot;Weather plugin demo&quot; style=&quot;width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;560&quot;&gt; &lt;/a&gt;&lt;figcaption style=&quot;grid-column:1 / -1;font-size:0.9em&quot;&gt;&lt;p&gt;Examples of plugins that the new plugin API enables: waves, an 
&lt;a href=&quot;https://en.wikipedia.org/wiki/Regular_polygon&quot;&gt;n-gon&lt;/a&gt; layer,
custom location indicators, 3D models, fireworks, flow direction, snow and
animated symbols (click to enlarge). Thanks to Sargun Vohra for sharing his
experiments. Map data from 
&lt;a href=&quot;https://www.openstreetmap.org/&quot;&gt;OpenStreetMap&lt;/a&gt; and styles based
on &lt;a href=&quot;https://openmaptiles.org/&quot;&gt;OpenMapTiles&lt;/a&gt;
shown.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3 id=&quot;ongoing-terrain3d-work&quot;&gt;Ongoing Terrain3D work&lt;/h3&gt;
&lt;p&gt;Terrain3D is a work-in-progress, with people still hacking away at the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4190#issuecomment-5782583773&quot;&gt;&lt;code&gt;feature/terrain-3d&lt;/code&gt;&lt;/a&gt; branch until it can be declared feature complete and stable. Patrik Drhlik &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4190#issuecomment-5782583773&quot;&gt;decided&lt;/a&gt; to become an early adopter and try it out. He shared the following promising video:&lt;/p&gt;
&lt;figure&gt;&lt;video src=&quot;/_astro/terrain.BPs-A5L9.mp4&quot; controls=&quot;&quot; playsInline=&quot;&quot; style=&quot;display:block;width:50%;height:auto;margin:0 auto&quot; aria-label=&quot;Terrain3D demo&quot;&gt;&lt;/video&gt;&lt;figcaption style=&quot;text-align:center;font-size:0.9em&quot;&gt;&lt;p&gt;Terrain3D in Patrik’s &lt;a href=&quot;https://mapriot.com/&quot;&gt;MapRiot&lt;/a&gt; app.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3 id=&quot;openharmony-platform&quot;&gt;OpenHarmony Platform&lt;/h3&gt;
&lt;p&gt;With &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4315&quot;&gt;#4315&lt;/a&gt; merged we now have a new platform: &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenHarmony&quot;&gt;OpenHarmony&lt;/a&gt;. OpenHarmony has about 20% smartphone market share in &lt;a href=&quot;https://www.idc.com/resource-center/blog/china-smartphone-market-decline-q2-2026&quot;&gt;China&lt;/a&gt; and about 5% &lt;a href=&quot;https://counterpointresearch.com/en/insights/global-smartphone-os-market-share&quot;&gt;globally&lt;/a&gt;. What makes this platform interesting as well is &lt;a href=&quot;https://oniroproject.org/&quot;&gt;Oniro&lt;/a&gt;. This is an Eclipse Foundation Project that builds on OpenHarmony and is “dedicated to the development of an open source vendor-neutral Operating System (OS) platform”.&lt;/p&gt;
&lt;figure&gt;&lt;a class=&quot;zoomable-image&quot; href=&quot;/_astro/openharmony.DMhEZj4J.png&quot; data-pswp-width=&quot;1301&quot; data-pswp-height=&quot;856&quot; aria-label=&quot;Enlarge: MapLibre Native on OpenHarmony&quot; data-astro-cid-shvrajwy=&quot;&quot;&gt;  &lt;img src=&quot;https://maplibre.org/_astro/openharmony.DMhEZj4J_EDSf5.webp&quot; alt=&quot;MapLibre Native on OpenHarmony&quot; style=&quot;max-width:100%;height:auto&quot; data-astro-cid-shvrajwy=&quot;true&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1301&quot; height=&quot;856&quot;&gt; &lt;/a&gt;&lt;figcaption style=&quot;text-align:center;font-size:0.9em&quot;&gt;&lt;p&gt;MapLibre Native running on OpenHarmony, this interactive sample is included
in the platform and can use either Vulkan or OpenGL ES.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h3 id=&quot;call-for-maplibre-accessibility-features&quot;&gt;Call for MapLibre Accessibility Features&lt;/h3&gt;
&lt;p&gt;Tim Sylvester implemented the ability to introspect rendered features in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4460&quot;&gt;#4460&lt;/a&gt; this month. While this functionality was built primarily with testing purposes in mind, it might offer some opportunities for MapLibre Native to better integrate with accessibility tools such as screen readers. We would be very eager to hear from people willing to &lt;a href=&quot;https://github.com/maplibre/maplibre-native/discussions/3439&quot;&gt;share&lt;/a&gt; their ideas on how to push such accessibility efforts.&lt;/p&gt;
&lt;h2 id=&quot;other-news&quot;&gt;Other news&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Android can now &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4602&quot;&gt;load PMTiles directly from APK assets&lt;/a&gt;, allowing apps to bundle offline tile archives in this format.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4604&quot;&gt;&lt;code&gt;semiliteral&lt;/code&gt; expression&lt;/a&gt; is now supported in Native, matching GL JS. It allows array-valued properties, such as text offsets, to contain elements calculated using expressions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;releases&quot;&gt;Releases&lt;/h3&gt;
&lt;table class=&quot;release-table&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;thead data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Platform&lt;/th&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Latest Versions&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Android&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.5.2&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.5.2&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.6.1&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.6.1&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.6.1-pre935d410353da9d701ad42c97f2e0c300c8d408b8&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.6.1 pre-release&lt;/a&gt;  (with plugin API)   &lt;/td&gt; &lt;/tr&gt;&lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;iOS&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.30.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.30.0&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.31.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.31.0&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;💪 We did a large sweep this month over the open issues and closed about 80 of them (~25%). We also
swept through the PRs and revived some stale ones. Many thanks to John Carmack for driving
this effort!&lt;/p&gt;&lt;p&gt;Additionally we have added support for the &lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/style-labels-with-font-faces/&quot;&gt;&lt;code&gt;font-faces&lt;/code&gt;&lt;/a&gt; style spec property, officially closing one of the last major gaps between native and web.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;We released 8 versions this month: &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.7.0&quot;&gt;6.7&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.8.0&quot;&gt;6.8&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.9.0&quot;&gt;6.9&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.9.1&quot;&gt;6.9.1&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.10.0&quot;&gt;6.10&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.11.0&quot;&gt;6.11&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.11.1&quot;&gt;6.11.1&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.11.2&quot;&gt;6.11.2&lt;/a&gt;.
These versions are packed with new features, fixes and improvements. Our pace is increasing
dramatically with the extensive use of AI, but we make sure to fully review and test all the code
that ships in order to keep our quality high. Check out our AI contribution policy in the &lt;a href=&quot;https://github.com/maplibre/maplibre/blob/main/AI_POLICY.md&quot;&gt;contributing guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are some highlights from these releases, although there are too many to list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/style-labels-with-font-faces/&quot;&gt;&lt;code&gt;font-faces&lt;/code&gt;&lt;/a&gt; style spec property is now supported, which allows using font files with
MapLibre. This was one of the last gaps between native and web, and it is now closed.&lt;/li&gt;
&lt;li&gt;Along with the above addition, we have improved out-of-the-box support for all kinds of complex
script languages and made RTL an out-of-the-box feature that doesn’t require an external plugin.&lt;/li&gt;
&lt;li&gt;The terrain feature is finally production-grade: for a long time terrain performance was lacking,
especially on mobile devices, and there were a lot of bugs related to “jumps”. Recent versions
have made it smooth and fast.&lt;/li&gt;
&lt;li&gt;There were some sky-related bug fixes and improvements, so the sky looks a lot better — try it out!&lt;/li&gt;
&lt;li&gt;A lot of small performance improvements to increase the Lighthouse ranking.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;💙 As always, we would like to thank all the contributors this month, this wouldn’t have been
possible without your help!&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/johncarmack1984&quot; title=&quot;@johncarmack1984&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/johncarmack1984.png&quot; alt=&quot;@johncarmack1984&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/mondsichtung&quot; title=&quot;@mondsichtung&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/mondsichtung.png&quot; alt=&quot;@mondsichtung&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lucaswoj&quot; title=&quot;@lucaswoj&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lucaswoj.png&quot; alt=&quot;@lucaswoj&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lazerg&quot; title=&quot;@lazerg&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lazerg.png&quot; alt=&quot;@lazerg&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/miakh&quot; title=&quot;@miakh&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/miakh.png&quot; alt=&quot;@miakh&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/NEKOYASAN&quot; title=&quot;@NEKOYASAN&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/NEKOYASAN.png&quot; alt=&quot;@NEKOYASAN&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/hiddewie&quot; title=&quot;@hiddewie&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/hiddewie.png&quot; alt=&quot;@hiddewie&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/bradymadden97&quot; title=&quot;@bradymadden97&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/bradymadden97.png&quot; alt=&quot;@bradymadden97&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/giswqs&quot; title=&quot;@giswqs&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/giswqs.png&quot; alt=&quot;@giswqs&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/AveryanAlex&quot; title=&quot;@AveryanAlex&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/AveryanAlex.png&quot; alt=&quot;@AveryanAlex&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/cherenkov&quot; title=&quot;@cherenkov&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/cherenkov.png&quot; alt=&quot;@cherenkov&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/deniial00&quot; title=&quot;@deniial00&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/deniial00.png&quot; alt=&quot;@deniial00&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/str0kes&quot; title=&quot;@str0kes&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/str0kes.png&quot; alt=&quot;@str0kes&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/yuiseki&quot; title=&quot;@yuiseki&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/yuiseki.png&quot; alt=&quot;@yuiseki&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/patte&quot; title=&quot;@patte&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/patte.png&quot; alt=&quot;@patte&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/birkskyum&quot; title=&quot;@birkskyum&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/birkskyum.png&quot; alt=&quot;@birkskyum&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/clement-igonet&quot; title=&quot;@clement-igonet&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/clement-igonet.png&quot; alt=&quot;@clement-igonet&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Turbo87&quot; title=&quot;@Turbo87&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Turbo87.png&quot; alt=&quot;@Turbo87&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/UberMouse&quot; title=&quot;@UberMouse&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/UberMouse.png&quot; alt=&quot;@UberMouse&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/bigmistqke&quot; title=&quot;@bigmistqke&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/bigmistqke.png&quot; alt=&quot;@bigmistqke&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/nostrorom&quot; title=&quot;@nostrorom&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/nostrorom.png&quot; alt=&quot;@nostrorom&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/jokrasno&quot; title=&quot;@jokrasno&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/jokrasno.png&quot; alt=&quot;@jokrasno&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/vlumi&quot; title=&quot;@vlumi&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/vlumi.png&quot; alt=&quot;@vlumi&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/spliffone&quot; title=&quot;@spliffone&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/spliffone.png&quot; alt=&quot;@spliffone&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/avosa&quot; title=&quot;@avosa&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/avosa.png&quot; alt=&quot;@avosa&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/ArcSolver&quot; title=&quot;@ArcSolver&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/ArcSolver.png&quot; alt=&quot;@ArcSolver&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Kanahiro&quot; title=&quot;@Kanahiro&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Kanahiro.png&quot; alt=&quot;@Kanahiro&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/schickm&quot; title=&quot;@schickm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/schickm.png&quot; alt=&quot;@schickm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/kirthi-b&quot; title=&quot;@kirthi-b&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/kirthi-b.png&quot; alt=&quot;@kirthi-b&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/xavierjs&quot; title=&quot;@xavierjs&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/xavierjs.png&quot; alt=&quot;@xavierjs&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/MannXo&quot; title=&quot;@MannXo&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/MannXo.png&quot; alt=&quot;@MannXo&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/timsluis&quot; title=&quot;@timsluis&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/timsluis.png&quot; alt=&quot;@timsluis&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/DoFabien&quot; title=&quot;@DoFabien&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/DoFabien.png&quot; alt=&quot;@DoFabien&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Yasser-Ameur&quot; title=&quot;@Yasser-Ameur&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Yasser-Ameur.png&quot; alt=&quot;@Yasser-Ameur&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/drakeo338&quot; title=&quot;@drakeo338&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/drakeo338.png&quot; alt=&quot;@drakeo338&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/zdila&quot; title=&quot;@zdila&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/zdila.png&quot; alt=&quot;@zdila&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;-martin&quot;&gt;🦀 Martin&lt;/h2&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;Martin 2.0 is now officially in beta! Test it against your setup and check out
our new migration guide.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;We released 3 versions this month: &lt;a href=&quot;https://github.com/maplibre/martin/releases/tag/martin-v1.16.0&quot;&gt;1.16.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/martin/releases/tag/martin-v1.16.1&quot;&gt;1.16.1&lt;/a&gt; and the first beta of &lt;a href=&quot;https://github.com/maplibre/martin/releases/tag/martin-v2.0.0-beta.0&quot;&gt;Martin 2.0 (2.0.0-beta.0)&lt;/a&gt;.
We merged more than 150 non-bot PRs, and &lt;strong&gt;Martin 2.0 is now in beta&lt;/strong&gt;.
Please try the beta against your setup and &lt;a href=&quot;https://github.com/maplibre/martin/issues&quot;&gt;tell us&lt;/a&gt; what breaks.
We have written a &lt;a href=&quot;https://maplibre.org/martin/migration-guide/&quot;&gt;migration guide&lt;/a&gt;:
2.0 removes the options that v1.x and v0.x deprecated, changes some defaults and needs PostGIS 3.5 or newer.
If Martin 1.16 starts without deprecation warnings for you, you’re probably fine (the only un-warned change is &lt;code&gt;martin-cp&lt;/code&gt; -&amp;gt; &lt;code&gt;martin cp&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Here are some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tile grids other than Web Mercator&lt;/strong&gt;: PostgreSQL, MBTiles and PMTiles sources can now be served
on other grids, such as national or polar ones. Seven grids from the OGC registry are built in
(for example &lt;code&gt;NZTM2000Quad&lt;/code&gt;), and you can define your own in the config.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server-side rendering is stable&lt;/strong&gt;: It is no longer experimental. It has moved out of the
default build into the &lt;code&gt;-full&lt;/code&gt; Docker images and tarballs due to having some shared library version dependencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster startup&lt;/strong&gt;: Martin accepts connections while its sources are still loading, and PostgreSQL discovery does less work per table. &lt;code&gt;/health&lt;/code&gt; still only reports ready once everything has loaded.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aliases&lt;/strong&gt; for fonts, sprites and tile sources: give a font fallback stack, a sprite set or a
set of tile sources one name, and a style can request it like a single source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CQL2 filters on table sources&lt;/strong&gt;: write &lt;code&gt;filter: population &amp;gt; 100000&lt;/code&gt; on a table instead of
writing a SQL function.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A terminal dashboard&lt;/strong&gt; shows sources, request rates, a live world map of tile requests and the log. In 2.0 it is on by default in an interactive terminal (&lt;code&gt;--no-tui&lt;/code&gt; turns it off).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;martin-cp&lt;/code&gt; is now the &lt;code&gt;martin cp&lt;/code&gt; subcommand. It can skip now also skip tiles below an empty tile, which took a world copy from 243s down to 11s on our test database.&lt;/li&gt;
&lt;li&gt;Performance work on the tile cache: on a warm cache, serving a tile’s content dropped from
107µs to 29µs.&lt;/li&gt;
&lt;li&gt;Unstable (feature-gated) work continued on DuckDB/GeoParquet sources (&lt;code&gt;s3://&lt;/code&gt;, &lt;code&gt;hf://&lt;/code&gt; and
more, &lt;code&gt;.duckdb&lt;/code&gt; files, hot reload) and on remote COG sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As always, we would like to thank all the contributors this month, this wouldn’t have been
possible without your help!&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/johncarmack1984&quot; title=&quot;@johncarmack1984&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/johncarmack1984.png&quot; alt=&quot;@johncarmack1984&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/deniial00&quot; title=&quot;@deniial00&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/deniial00.png&quot; alt=&quot;@deniial00&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/AbhijitDoesCoding&quot; title=&quot;@AbhijitDoesCoding&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/AbhijitDoesCoding.png&quot; alt=&quot;@AbhijitDoesCoding&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;maplibre-tiles-mlt&quot;&gt;MapLibre Tiles (MLT)&lt;/h2&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;📦 Announcement: MLT v2 has evolved from a spec skeleton into a fully working
format complete with its own high-performance Rust encoder/decoder, docs, and
interactive inspector.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;This month was about &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec&quot;&gt;MLT v2&lt;/a&gt;. It went from a header and metadata skeleton to a working format with its own encoder, decoder, docs and inspector. Everything MLTv2 is still behind the &lt;code&gt;unstable-v2&lt;/code&gt; feature while there are still unresolved questions (see below).&lt;/p&gt;
&lt;p&gt;We shipped &lt;a href=&quot;https://crates.io/crates/mlt-core&quot;&gt;13 releases of mlt-core (0.12.7 -&amp;gt; 0.16.0)&lt;/a&gt;, along with the mlt CLI, the FFI, WASM and Python bindings, and @maplibre/mlt 1.2.1 and 1.3.0.&lt;/p&gt;
&lt;p&gt;Here are some highlights, although there are too many to list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every column kind now round-trips in v2. That covers strings, floats, nested properties and m-values. Nested properties use an ORC-style node tree, and a nested node’s structure is written once per row instead of once per entry. That saves 13.6% on a group of name* columns and 9.8% on a bag of all properties.&lt;/li&gt;
&lt;li&gt;Strings. Dictionaries are front-coded, and a layer can share one dictionary across columns. Together that cuts the whole tile by 18.3% on OpenMapTiles and 21.5% on the tiles that one of our sponsors Amazon provided.&lt;/li&gt;
&lt;li&gt;Floats. A float column can be stored as a dictionary or with ALP, which is chosen only when every value comes back bit for bit. ALP stores a frame of reference, races FastPFOR against varint for its offsets, and packs its two parameters into a single byte. This cuts decimal columns by 19.5% and makes the parameter search about 10x faster.&lt;/li&gt;
&lt;li&gt;Smaller headers.
&lt;ul&gt;
&lt;li&gt;The extent fits in a nibble.&lt;/li&gt;
&lt;li&gt;The column and m-value counts share one variant.&lt;/li&gt;
&lt;li&gt;Raw streams with a fixed element width no longer store their byte length.&lt;/li&gt;
&lt;li&gt;The spare nibble in the layer header now holds the geometry type when a layer has only one. About 60% of layers are like this and no longer write a types stream.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Geometry. Dictionary and tessellated layouts have been merged. A layer made only of tessellated polygons stores can store just its triangles, and triangle indices count from the layer’s first vertex instead of relatively to the start.&lt;/li&gt;
&lt;li&gt;Presence and dictionary codes. Dictionary children share their parent’s presence bitfield, presence can be run-length encoded again (up to 4% smaller), and dictionary codes are bit-packed when that beats one varint per code.&lt;/li&gt;
&lt;li&gt;Tile inspector. The new inspector is built on our WASM bindings to the high performance rust encoder/decoder. It shows a hex view of the tile next to a tree of its regions, draws the geometry, loads tiles from a URL, and has filters with live counts. Check it out -&amp;gt; &lt;a href=&quot;https://maplibre.org/maplibre-tile-spec/inspector/&quot;&gt;https://maplibre.org/maplibre-tile-spec/inspector/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We have also rewritten most of our docs and it should be much more approachable. If something is unclear, that is a bug and we would love your questions.&lt;/li&gt;
&lt;li&gt;We have also done a bunch of Hardening.
&lt;ul&gt;
&lt;li&gt;Malformed FSST data, oversized dictionary child counts, vertex index overflow and float encodings that don’t fit are now rejected instead of panicking.&lt;/li&gt;
&lt;li&gt;Polygon rings with no area are skipped during tessellation.&lt;/li&gt;
&lt;li&gt;Tests moved to cargo-nextest, with a big push on coverage of the error paths in the codecs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cleanup. We removed the Pseudodecimal encoding, which was never implemented, the Java encoding server, the (currently sadly unmaintained) C++ encoder from CI.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mlt.C9tXjR80_YGTpW.webp&quot; alt=&quot;MapLibre Tiles v2 Inspector&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1910&quot; height=&quot;1031&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;MapLibre Tiles v2 Inspector&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;In terms of what we are still discussing (please join our slack channel 😉) before we can move for stabilization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do we want &lt;code&gt;rANS&lt;/code&gt; entropy coding for vertex streams that are smaller, but also 15% slower to decode and more complex?&lt;/li&gt;
&lt;li&gt;Does the proposed z coordinate system work for all use cases that are planned?&lt;/li&gt;
&lt;li&gt;Do we want to remove the unused Morton encoding variants?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-compose&quot;&gt;🎨 MapLibre Compose&lt;/h2&gt;
&lt;p&gt;Over the past couple of months, MapLibre Compose has shipped a shared implementation for Android, iOS, and desktop built on &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi&quot;&gt;MapLibre Native FFI&lt;/a&gt;. These releases closed nearly all the previously open issues (about 80!), completed feature parity work for desktop and web, including map styling and proper compositing with Compose UI, added long-requested features including a &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/releases/tag/v0.16.0&quot;&gt;map snapshotter and imperative styling APIs&lt;/a&gt;, plus support and demos for integrating maps with &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/pull/1301&quot;&gt;Android Auto&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/releases/tag/v0.17.0&quot;&gt;CarPlay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/streetcomplete/StreetComplete&quot;&gt;StreetComplete&lt;/a&gt;, the OpenStreetMap surveying app, has also &lt;a href=&quot;https://github.com/streetcomplete/StreetComplete/pull/7088&quot;&gt;merged its migration&lt;/a&gt; from direct MapLibre Native Android integration to MapLibre Compose, sharing its map implementation across Android and iOS.&lt;/p&gt;
&lt;p&gt;MapLibre Compose is now essentially feature-complete, except for Kotlin Wasm support which is in draft until the next Compose Multiplatform release. The remaining work before 1.0 is improving documentation, performance, finding and squashing bugs, and improving API ergonomics. User feedback is especially important at this stage.&lt;/p&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community Spotlight&lt;/h2&gt;
&lt;h4 id=&quot;maplibre-navigation-sdk-500&quot;&gt;MapLibre Navigation SDK 5.0.0&lt;/h4&gt;
&lt;p&gt;Version &lt;a href=&quot;https://github.com/maplibre/maplibre-navigation-android/releases/tag/5.0.0&quot;&gt;5.0.0 of the MapLibre Navigation SDK&lt;/a&gt; has been released, bringing KMP compatibility and major improvements! Huge thanks to &lt;a href=&quot;https://github.com/Fabi755&quot;&gt;Fabian Keunecke&lt;/a&gt; for the great work! 🎉&lt;/p&gt;
&lt;h4 id=&quot;tel-aviv-2035&quot;&gt;Tel Aviv 2035&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Tel Aviv 2035:&lt;/strong&gt; A 3D map of Tel Aviv-Yafo built in just &lt;em&gt;one hour&lt;/em&gt; with MapLibre GL JS at the Fable 5.1 Build Day on September 17, 2026, where it won the Breakthrough track!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repo (MIT):&lt;/strong&gt; &lt;a href=&quot;https://github.com/benjddd/fable-build-day-tlv-2026&quot;&gt;github.com/benjddd/fable-build-day-tlv-2026&lt;/a&gt; (tag &lt;code&gt;build-day-2026-09-17-winner&lt;/code&gt;; see &lt;code&gt;MAKING_OF.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href=&quot;https://tlvnext.com/?lang=en&quot;&gt;tlvnext.com&lt;/a&gt; | &lt;strong&gt;Short Film:&lt;/strong&gt; &lt;a href=&quot;https://tlvnext.com/films/build-day-2026&quot;&gt;Watch here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;About the Build:&lt;/strong&gt; Built as a one-page web app using MapLibre GL JS &lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/display-buildings-in-3d/&quot;&gt;&lt;code&gt;fill-extrusion&lt;/code&gt;&lt;/a&gt; over municipality raster orthophotos (1997–2025).&lt;/p&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/telaviv.DC0k7FeB_GozeR.webp&quot; alt=&quot;Tel Aviv 2035&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2858&quot; height=&quot;1568&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;Tel Aviv 2035: existing buildings coloured by year, with permitted and planned volumes in blue&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.
As an exception, this month we will have it one day earlier to accommodate maintainer’s availability.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: Oct 13, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Oct 13, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oct 28, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>Results of the 2026 MapLibre Governing Board Election</title><link>https://maplibre.org/news/2026-09-10-board-elections-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-09-10-board-elections-2026/</guid><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Results are in for the 2026 MapLibre Governing Board election, and we’re excited to share them alongside a warm welcome to our newest Voting Members. A big thanks to everyone who were part of the election process this year!&lt;/p&gt;
&lt;h2 id=&quot;board-results&quot;&gt;Board Results&lt;/h2&gt;
&lt;p&gt;Five members have been elected to serve on the 2026 MapLibre Governing Board:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-17677957&quot;&gt;Yuri Astrakhan&lt;/a&gt; (incumbent)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-17915909&quot;&gt;Devesh Kumar&lt;/a&gt; (new)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-17984233&quot;&gt;Sargun Vohra&lt;/a&gt; (new)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-18012804&quot;&gt;Stefan Karschti&lt;/a&gt; (incumbent)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-18023397&quot;&gt;Minh Nguyễn&lt;/a&gt; (new)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🎉 Congratulations to all the five elected members. We’re looking forward to another year of strong leadership from this group.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;💐 We’d also like to recognize &lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-17989529&quot;&gt;Zarichnyi Yaroslav&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507#discussioncomment-17982421&quot;&gt;Malcolm Toon&lt;/a&gt;, who both ran for the board this year and remain active, valued members of the community.&lt;/p&gt;&lt;p&gt;🙏 And a heartfelt thanks to &lt;a href=&quot;https://maplibre.org/about/frank-elsinga/&quot;&gt;Frank Elsinga&lt;/a&gt;, &lt;a href=&quot;https://maplibre.org/about/stephanie-may/&quot;&gt;Stephanie May&lt;/a&gt;, &lt;a href=&quot;https://maplibre.org/about/haowen-you/&quot;&gt;Haowen You&lt;/a&gt;, and &lt;a href=&quot;https://maplibre.org/about/birk-skyum/&quot;&gt;Birk Skyum&lt;/a&gt; for their time on the outgoing board. The work they put in over the past year has left MapLibre stronger for it.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-key-election-statistics&quot;&gt;📊 Key Election Statistics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Total eligible voters (Voting Members): 172&lt;/li&gt;
&lt;li&gt;Ballots cast: 103&lt;/li&gt;
&lt;li&gt;Voter turnout: ~60%&lt;/li&gt;
&lt;li&gt;Seats available: 5 (out of 7 candidates)&lt;/li&gt;
&lt;li&gt;Election method: Conducted online using &lt;a href=&quot;https://opavote.com/&quot;&gt;OpaVote&lt;/a&gt;, with ranked-choice voting (Meek STV).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 Checkout the detailed election results on &lt;a href=&quot;https://github.com/maplibre/maplibre/tree/main/2026-polls&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;️-growing-our-pool-of-voting-members&quot;&gt;🗳️ Growing our pool of Voting Members&lt;/h2&gt;
&lt;p&gt;Ahead of this year’s board election, we ran a &lt;a href=&quot;https://github.com/maplibre/maplibre/issues/506&quot;&gt;voting members nomination round&lt;/a&gt;. Voting Members are the ones who elect the Governing Board and vote on any changes to the MapLibre Charter.&lt;/p&gt;
&lt;p&gt;That process brought in 31 new Voting Members this August, and we’re glad to have them on board as MapLibre keeps growing. The complete &lt;a href=&quot;https://github.com/maplibre/maplibre/blob/main/VOTING_MEMBERS.md&quot;&gt;list of voting members, now 172 members strong&lt;/a&gt;, is available in our GitHub documentation.&lt;/p&gt;
&lt;p&gt;Thank you again to every candidate, Voting Member, and community member who made this year’s election possible.&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter August 2026</title><link>https://maplibre.org/news/2026-09-02-maplibre-newsletter-august-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-09-02-maplibre-newsletter-august-2026/</guid><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the August 2026 edition of the MapLibre Newsletter!&lt;/p&gt;
&lt;p&gt;From the rapid release cadence of MapLibre GL JS and exciting update about Globe in Native, to Martin’s new hillshade and contour postprocessing, development velocity is at an all-time high.&lt;/p&gt;
&lt;p&gt;Before getting further into project updates, a special shout goes to &lt;a href=&quot;https://www.radar.com/&quot;&gt;Radar&lt;/a&gt;, for their unwavering partnership since 2023. Sustained backing, from organizations and individuals alike, keeps us moving forward. If you’d like to help sustain MapLibre’s ongoing work, learn more on our &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Sponsors page&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:baseline;gap:5rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;height:50px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/radar-logo.VfLTpC7x_2tK1yr.svg&quot; alt=&quot;Radar logo&quot; style=&quot;height:55px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;572&quot; height=&quot;135&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:1.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem;line-height:1.4&quot;&gt;&lt;p&gt;Thank you, Radar, for supporting us consistently since 2023 💙&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-board--team-updates&quot;&gt;🏛️ Board &amp;amp; Team Updates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2026 Elections: Voting member nominations and &lt;a href=&quot;https://github.com/maplibre/maplibre/issues/508&quot;&gt;board elections&lt;/a&gt; ran throughout August. Stay tuned for a detailed blog post coming soon summarizing the election results!&lt;/li&gt;
&lt;li&gt;Team Growth: &lt;a href=&quot;https://maplibre.org/about/birk-skyum/&quot;&gt;Birk Skyum&lt;/a&gt;, who has long served on our board and made consistent contributions to our codebase, is now joining our team as a Graphics Engineer!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;p&gt;New features and improvements in MapLibre Native this month include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A PR with a promising globe implementation was opened. See the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4533&quot;&gt;behemoth of a PR&lt;/a&gt; with no less than 30.000 lines of code. This is quite exciting, as globe mode is one of the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/issues/3161&quot;&gt;most requested features&lt;/a&gt; of MapLibre Native. Stay tuned for pre-releases so you can help with quality control. Reviews are also welcome.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/native-globe.B66cBc4A_181hRl.webp&quot; alt=&quot;Native rounded corners for fill extrusions&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2076&quot; height=&quot;1528&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;John Carmack’s globe implementation. It will probably take a while until it lands, because this is quite a big feature requiring careful review and testing. Map style based on OpenMapTiles and data from OpenStreetMap.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Another quite large (LLM assisted) PR implements the &lt;code&gt;global-state&lt;/code&gt; expression that was implemented earlier in MapLibre GL JS. This functionality makes it possible to define ‘variables’ for a style that you can use in various expressions. See &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4516&quot;&gt;#4516&lt;/a&gt; for the PR which was submitted by Taiyu Yoshizawa from &lt;a href=&quot;https://www.mierune.co.jp/en&quot;&gt;our valued sponsor MIERUNE&lt;/a&gt;. Reviews welcome!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stephan Schmid from Mercedes Benz made string expressions operate on Unicode, see &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4344&quot;&gt;#4344&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vladyslav Odobesku from Intellias implemented a &lt;code&gt;CustomVectorSource&lt;/code&gt; in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4377&quot;&gt;#4377&lt;/a&gt;. This provides a more efficient way to load vector data when using MapLibre Android, since you can load it as binary data (in MVT format).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/munawiki&quot;&gt;@munawiki&lt;/a&gt; implemented &lt;code&gt;split&lt;/code&gt; and &lt;code&gt;join&lt;/code&gt; style spec expressions in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4463&quot;&gt;#4463&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yaroslav Zarichnyi from Lyft implemented a &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4488&quot;&gt;customizable gradient for fill extrusions&lt;/a&gt;. Please give feedback on the &lt;a href=&quot;https://github.com/maplibre/maplibre-style-spec/issues/1795&quot;&gt;related style spec change&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bart Louwers is hacking on a &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4475&quot;&gt;C plugin API&lt;/a&gt; for MapLibre Native. There is also a template repository with some &lt;a href=&quot;https://github.com/louwers/maplibre-native-plugin-template/tree/main/plugins&quot;&gt;example plugins&lt;/a&gt;. The idea is that you will be able to fork this repository to easily create and release your own plugins. The current examples cover a rectangle layer, a layer that loads GLTF models and the core hillshade and heatmap layers implemented as a plugins(&lt;em&gt;in the future, we might want to exclude lesser-used core layers and require people to load those as plugins to keep the core small, though we would need to ensure that plugins loaded this way do not introduce regressions&lt;/em&gt;). There is also a plugin for adding shadows to fill extrusions. Please share your ideas for plugins so we can use this for shaping the plugin API.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We moved the namespaces and include paths from &lt;code&gt;mbgl&lt;/code&gt; to &lt;code&gt;mln&lt;/code&gt;. Because we don’t consider the C++ API to be stable, we do not consider this a breaking change for the platforms. For in-flight work we have included some scripts in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4487&quot;&gt;#4487&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4511&quot;&gt;#4511&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;Six (!) versions were released this month:
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.2.0&quot;&gt;6.2.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.3.0&quot;&gt;6.3.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.4.0&quot;&gt;6.4.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.4.1&quot;&gt;6.4.1&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.5.0&quot;&gt;6.5.0&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.6.0&quot;&gt;6.6.0&lt;/a&gt;,
with two new style spec properties among them.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;&lt;p&gt;📣 Increased release frequency is a consequence of the improved quality of
the AI code generation and people actively opening PRs to solve problems
that were a lot harder to solve due to steep learning curve. It’s worth
mentioning that this causes delays in PR reviews due to higher volume of
PRs. We hope to address this going forward, and we appreciate your patience
as we work through the review queue.&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/fill-extrusion-rounded-corners/&quot;&gt;&lt;code&gt;fill-extrusion-rounded-corner-distance&lt;/code&gt;&lt;/a&gt; arrived in GL JS in v6.2.0, following last month’s Native-first landing, which allows you to draw rounded corners for buildings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/elevate-symbols-above-the-terrain/&quot;&gt;&lt;code&gt;symbol-height-offset&lt;/code&gt;&lt;/a&gt; and &lt;code&gt;symbol-height-anchor&lt;/code&gt; were added to allow raising icons and text above the map. This feature was discussed in the last two monthly meetings and after the spec matured, it is now available for your use cases, such as icons on top of building or drones in the sky.&lt;/li&gt;
&lt;li&gt;There were also a few features related to improved icon animation by rendering on the GPU, as well as the ability to keep the perspective or flat warp in image sources.&lt;/li&gt;
&lt;li&gt;Going forward we intend to close the last gap between native and web by supporting the &lt;code&gt;font-faces&lt;/code&gt; style spec definition and improving complex scripts support. It’s ready for review and you can test it out via the &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/8237&quot;&gt;#8237&lt;/a&gt; PR.&lt;/li&gt;
&lt;li&gt;There’s also a strong momentum for supporting some basic cases related to projection and custom CRS that started here in &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/8236&quot;&gt;#8236&lt;/a&gt; and is expected to continue next month.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🙏 Thanks to all the contributors this month! It’s great to see so many features and bug fixes arriving. Keep up the good work!&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/mondsichtung&quot; title=&quot;@mondsichtung&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/mondsichtung.png&quot; alt=&quot;@mondsichtung&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/johncarmack1984&quot; title=&quot;@johncarmack1984&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/johncarmack1984.png&quot; alt=&quot;@johncarmack1984&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/DoFabien&quot; title=&quot;@DoFabien&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/DoFabien.png&quot; alt=&quot;@DoFabien&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/jcolot&quot; title=&quot;@jcolot&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/jcolot.png&quot; alt=&quot;@jcolot&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lucaswoj&quot; title=&quot;@lucaswoj&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lucaswoj.png&quot; alt=&quot;@lucaswoj&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/smmariquit&quot; title=&quot;@smmariquit&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/smmariquit.png&quot; alt=&quot;@smmariquit&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/pholmstr&quot; title=&quot;@pholmstr&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/pholmstr.png&quot; alt=&quot;@pholmstr&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/StrawberryJam22&quot; title=&quot;@StrawberryJam22&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/StrawberryJam22.png&quot; alt=&quot;@StrawberryJam22&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/tnikkel&quot; title=&quot;@tnikkel&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/tnikkel.png&quot; alt=&quot;@tnikkel&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Alchez&quot; title=&quot;@Alchez&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Alchez.png&quot; alt=&quot;@Alchez&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/0xKirisame&quot; title=&quot;@0xKirisame&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/0xKirisame.png&quot; alt=&quot;@0xKirisame&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/birkskyum&quot; title=&quot;@birkskyum&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/birkskyum.png&quot; alt=&quot;@birkskyum&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/clement-igonet&quot; title=&quot;@clement-igonet&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/clement-igonet.png&quot; alt=&quot;@clement-igonet&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/i4innovationnet&quot; title=&quot;@i4innovationnet&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/i4innovationnet.png&quot; alt=&quot;@i4innovationnet&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/samuel-git&quot; title=&quot;@samuel-git&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/samuel-git.png&quot; alt=&quot;@samuel-git&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/smvjohansenbouvet&quot; title=&quot;@smvjohansenbouvet&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/smvjohansenbouvet.png&quot; alt=&quot;@smvjohansenbouvet&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/zdila&quot; title=&quot;@zdila&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/zdila.png&quot; alt=&quot;@zdila&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;-martin&quot;&gt;🦀 Martin&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/martin/&quot;&gt;Martin&lt;/a&gt;, the MapLibre tile server, shipped two releases in
August (see 1.14.0 and 1.15.0 in the &lt;a href=&quot;https://github.com/maplibre/martin/blob/main/martin/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;The major features were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hillshade postprocessing.&lt;/strong&gt; Martin can now bake shaded relief from a source serving Mapzen
normal tiles, so clients get hillshade instead of a normal map they have to shade themselves.
&lt;a href=&quot;https://maplibre.org/martin/postprocessing/hillshade/&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/martin/pull/3180&quot;&gt;PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contour postprocessing.&lt;/strong&gt; &lt;code&gt;convert_to_contour&lt;/code&gt; traces contour lines out of Terrarium elevation
tiles and serves them as MVT, tagged with elevation and whether the line is a major one, with the
interval configurable per zoom. Output is vector, so the client styles and labels the lines.
&lt;a href=&quot;https://maplibre.org/martin/postprocessing/contour/&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/martin/pull/3183&quot;&gt;PR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]
&lt;strong&gt;Two security advisories&lt;/strong&gt; (our first) &lt;strong&gt;were fixed&lt;/strong&gt; in 1.14.0. As always, &lt;strong&gt;we recomend&lt;/strong&gt; to &lt;strong&gt;update&lt;/strong&gt;.
Out-of-gamut CIE colors in a static-overlay body
could permanently kill render workers (&lt;a href=&quot;https://github.com/maplibre/martin/security/advisories/GHSA-6774-6cqw-f586&quot;&gt;GHSA-6774-6cqw-f586&lt;/a&gt;,
affects only the opt-in &lt;code&gt;rendering&lt;/code&gt; feature), and repeated sprite ids let a single
unauthenticated request amplify the work required
(&lt;a href=&quot;https://github.com/maplibre/martin/security/advisories/GHSA-5x5g-6p4c-jqfh&quot;&gt;GHSA-5x5g-6p4c-jqfh&lt;/a&gt;, medium).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Images of how hillshade/contour look:&lt;/p&gt;
&lt;table class=&quot;img-compare&quot;&gt;&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;p&gt; &lt;img src=&quot;https://maplibre.org/_astro/martin-hillshade.D_ZraWq-_Z2fApy0.webp&quot; alt=&quot;Hillshade&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Hillshade&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;p&gt; &lt;img src=&quot;https://maplibre.org/_astro/martin-contour.Chy4hDeY_161wJA.webp&quot; alt=&quot;Contour&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;512&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Contour&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;h2 id=&quot;-maplibre-agent-skills&quot;&gt;🤖 Maplibre Agent Skills&lt;/h2&gt;
&lt;p&gt;MapLibre Agent Skills is a collection of agent skills, markdown files an AI coding assistant loads as context, that teach assistants to write correct MapLibre code. With help from a new contributor (&lt;a href=&quot;https://github.com/johncarmack1984&quot;&gt;@johncarmack1984&lt;/a&gt;), the project has matured to the point where we are ready for you all to really kick the tires. The project published &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills/releases/tag/v0.2.0&quot;&gt;v0.2.0&lt;/a&gt; this month. The release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;adds &lt;code&gt;maplibre-v6-migration&lt;/code&gt;, covering the breaking changes in MapLibre GL JS v6 most likely to trip up coding agents.&lt;/li&gt;
&lt;li&gt;adds &lt;code&gt;maplibre-source-wiring&lt;/code&gt;, split out of &lt;code&gt;maplibre-tile-sources&lt;/code&gt;, for the cases where a source is configured but nothing draws.&lt;/li&gt;
&lt;li&gt;adds a release watch that files an issue when an upstream MapLibre release removes, renames, or deprecates something a skill still mentions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nine skills now span cartography, tile sources, PMTiles, terrain rendering, fonts and glyphs, and Mapbox and v6 migration, plus a process skill for turning a research or coding session into a new skill.&lt;/p&gt;
&lt;p&gt;Skills are backed by a committed baseline run of prompt injections showing the model failing without the skill. Install the set with &lt;code&gt;npx skills add maplibre/maplibre-agent-skills&lt;/code&gt;, and if your assistant still gets MapLibre stuff wrong, &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills/issues/new?template=ai-failure-report.md&quot;&gt;file a failure report&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-flutter&quot;&gt;🪶 MapLibre Flutter&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/maplibre/flutter-maplibre-gl&quot;&gt;&lt;code&gt;flutter-maplibre-gl&lt;/code&gt;&lt;/a&gt; has shipped &lt;a href=&quot;https://pub.dev/packages/maplibre_gl&quot;&gt;v0.27.0&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;After &lt;a href=&quot;https://maplibre.org/news/2026-05-02-maplibre-newsletter-april-2026/&quot;&gt;0.26.0&lt;/a&gt; tackled years of accumulated backlog, this release focuses on making the package easier to use, more consistent across platforms, and closer to the current MapLibre ecosystem.&lt;/p&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/flutter.BwHtQ3TB_Z1nHudi.webp&quot; alt=&quot;The new Flutter MapLibre documentation site&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;536&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;The new documentation site: every guide comes with a live, interactive map.
&lt;a href=&quot;https://maplibre.org/flutter-maplibre-gl/&quot;&gt;Documentation&lt;/a&gt; | &lt;a href=&quot;https://maplibre.org/flutter-maplibre-gl/migration/&quot;&gt;Migration Guide&lt;/a&gt; | &lt;a href=&quot;https://pub.dev/packages/maplibre_gl/changelog&quot;&gt;Full changelog&lt;/a&gt; | &lt;a href=&quot;https://pub.dev/packages/maplibre_gl&quot;&gt;Package&lt;/a&gt;&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interactive documentation site:&lt;/strong&gt; &lt;a href=&quot;https://maplibre.org/flutter-maplibre-gl/&quot;&gt;maplibre.org/flutter-maplibre-gl&lt;/a&gt; now provides practical guides across the API, with live examples you can explore directly in the browser.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alignment with MapLibre Style Spec:&lt;/strong&gt; the plugin’s style APIs are now generated from the current upstream spec instead of an outdated snapshot, thereby bringing new properties and expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Platform parity:&lt;/strong&gt; a growing part of the API now behaves consistently across Android, iOS, and Web, including features like cluster inspection, feature state, map padding, among many others.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web upgrades:&lt;/strong&gt; The web platform now uses MapLibre GL JS 6.4.1, adding support for globe, terrain, sky, and colour relief.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Faster maps:&lt;/strong&gt; Engine pre-warming cuts startup times, and large GeoJSON updates run without blocking the UI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Resilient Android apps:&lt;/strong&gt; Maps now correctly recover and preserve camera position during activity recreation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together, these changes move &lt;code&gt;flutter-maplibre-gl&lt;/code&gt; closer to its goal of providing a &lt;strong&gt;consistent MapLibre experience across Android, iOS, and Web&lt;/strong&gt;, while making the package easier to learn and more pleasant to use.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;&lt;p&gt;📣 Monthly downloads have grown from around &lt;strong&gt;20,000 in August 2025 to more
than 80,000 today&lt;/strong&gt;, roughly a &lt;strong&gt;4× increase in one year&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;🙏 Thanks to everyone who contributed to this release and helped make MapLibre Flutter more capable, consistent, and accessible!&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community Spotlight&lt;/h2&gt;
&lt;h3 id=&quot;maplibre-gl-js-ecosystem-adoption&quot;&gt;MapLibre GL JS Ecosystem Adoption&lt;/h3&gt;
&lt;p&gt;MapLibre GL JS has recently seen notable adoption across the wider mapping ecosystem. The following are four prominent FOSS projects I’ve recently worked with to enhance their support for MapLibre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://deck.gl/&quot;&gt;deck.gl&lt;/a&gt;&lt;/strong&gt;, a geospatial visualization framework, now has a dedicated &lt;code&gt;MapLibreOverlay&lt;/code&gt; in the &lt;code&gt;deck.gl&lt;/code&gt; package. For MapLibre users, this new first-party solution replaces the reliance on &lt;code&gt;MapboxOverlay&lt;/code&gt; and builds directly on MapLibre’s public APIs and types. As the Mapbox and MapLibre renderers diverge, this will help maintain a high level of compatibility. &lt;a href=&quot;https://github.com/visgl/deck.gl/pull/10566/&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.placemark.io/&quot;&gt;Placemark.io&lt;/a&gt;&lt;/strong&gt;, a geospatial data editor, has replaced Mapbox GL JS with MapLibre GL JS 6, removing its remaining Mapbox dependency and making the project fully open source. The migration also moves to OpenFreeMap and provider-neutral routing. Thanks to Birk for the migration! &lt;a href=&quot;https://macwright.com/2026/08/25/placemark-fully-open-source&quot;&gt;Write-up&lt;/a&gt; · &lt;a href=&quot;https://github.com/placemark/placemark/pull/269&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://superset.apache.org/&quot;&gt;Apache Superset&lt;/a&gt;&lt;/strong&gt;, a data exploration and visualization platform, has added MapLibre support across its geospatial charts, with new charts defaulting to MapLibre and open basemaps that require no API key. The change will be released in Superset 6.2.0, while Mapbox remains available for backwards compatibility. &lt;a href=&quot;https://github.com/apache/superset/pull/38035&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.home-assistant.io/&quot;&gt;Home Assistant&lt;/a&gt;&lt;/strong&gt;, a home automation platform, has moved its default basemap from CARTO raster tiles to OpenStreetMap vector tiles rendered with MapLibre GL JS through &lt;code&gt;maplibre-gl-leaflet&lt;/code&gt;, while continuing to use Leaflet for map interactions. &lt;a href=&quot;https://github.com/home-assistant/frontend/pull/53816&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;expressive&quot;&gt;Expressive&lt;/h3&gt;
&lt;p&gt;Built by Zbigniew Matysek (&lt;a href=&quot;https://github.com/falseinput&quot;&gt;@falseinput&lt;/a&gt;), Expressive is a language that compiles to MapLibre style JSON and is tailor-made for maintaining base map styles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It lets you split styles across files, name colors and widths once, derive one value from another, and write expressions in a readable syntax.&lt;/li&gt;
&lt;li&gt;Because every style JSON is already a valid Expressive file, existing styles can be rewritten piece by piece.&lt;/li&gt;
&lt;li&gt;Checkout the &lt;a href=&quot;https://github.com/falseinput/expressive&quot;&gt;source code&lt;/a&gt; or &lt;a href=&quot;https://falseinput.github.io/expressive&quot;&gt;interactive demo&lt;/a&gt;, which runs the &lt;a href=&quot;https://github.com/falseinput/openfreemap-expressive&quot;&gt;OpenFreeMap Bright style rebuilt in Expressive&lt;/a&gt; with 119 layers driven by 15 parameters, recompiling live in your browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;p&gt;Last month was packed with conference attendance across State of the Map (SOTM) Paris and FOSS4G 2026!
You can explore the full schedule of talks and sessions in our &lt;a href=&quot;https://gist.github.com/ramyaragupathy/11d485fc584a1643315a3d0620d7b2f8&quot;&gt;MapLibre SOTM &amp;amp; FOSS4G Gist&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Key talks and recordings from SOTM Paris include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://peertube.openstreetmap.fr/w/sAGbbenarV6zNfoQw6wxdZ&quot;&gt;Interview from Yuri Astrakhan on MapLibre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://peertube.openstreetmap.fr/w/jFTWB2taYjE5S2qgSUBH3E&quot;&gt;Being a Maintainer in the Age of LLMs by Bart Louwers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://peertube.openstreetmap.fr/w/rELhPoARds7WuZUJtMbRCm&quot;&gt;MapLibre from data to rendering in one status update by Frank Elsinga&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: Sep 09, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Sep 09, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sep 30, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>GSoC&apos;26: DuckDB Backend for Martin TileServer</title><link>https://maplibre.org/news/2026-08-15-gsoc-martin-duckdb/</link><guid isPermaLink="true">https://maplibre.org/news/2026-08-15-gsoc-martin-duckdb/</guid><description>How I added DuckDB and GeoParquet tile serving to Martin during Google Summer of Code 2026.</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;introduction-and-motivation&quot;&gt;Introduction and Motivation&lt;/h2&gt;
&lt;p&gt;Hi everyone, I have been working on DuckDB support for &lt;a href=&quot;https://github.com/maplibre/martin&quot;&gt;Martin&lt;/a&gt; as part of Google Summer of Code, under the mentorship of &lt;a href=&quot;https://github.com/CommanderStorm&quot;&gt;Frank Elsinga&lt;/a&gt;.
Martin already serves vector tiles from PostGIS, from pre-generated archives such as PMTiles and MBTilles, can extract images from COG and convert geojson to vector tiles on the fly.
This project adds a path for serving tiles directly from analytical datasets like GeoParquet directly via DuckDB.&lt;/p&gt;
&lt;p&gt;The motivation for this is that many geospatial workflows already use DuckDB and GeoParquet for storage and analysis. Until now, putting that same data on a map generally required importing it into PostGIS, generating a separate tile archive, or maintaining a proxy layer. DuckDB’s spatial extension now provides &lt;code&gt;ST_AsMVT&lt;/code&gt; and &lt;code&gt;ST_AsMVTGeom&lt;/code&gt;, making it possible for Martin to generate vector tiles from those datasets directly. Track the progress on this feature here - &lt;a href=&quot;https://github.com/maplibre/martin/issues/2264&quot;&gt;#2264&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt; &lt;img src=&quot;https://maplibre.org/_astro/Martin-Architecture.DlNvKxXJ_Z21rT2u.webp&quot; alt=&quot;Martin architecture: configuration and map clients flow through the source resolver, tile catalog, and HTTP tile service. DuckDB sources sit alongside PostGIS and PMTiles/MBTiles, using a connection pool and the spatial extension to read GeoParquet and DuckDB files.&quot; style=&quot;max-width: 520px; width: 85%; height: auto; display: block; margin: 0 auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1288&quot; height=&quot;1078&quot;&gt;&lt;figcaption class=&quot;figure-caption&quot;&gt;&lt;p&gt;How DuckDB-backed sources fit into Martin.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;config-structure-for-duckdb-backed-sources&quot;&gt;Config Structure for DuckDB backed sources&lt;/h2&gt;
&lt;p&gt;The first major decision was to design an appropriate config structure to parse for building sources backed by DuckDB. This had two main paths: &lt;code&gt;.duckdb&lt;/code&gt; files and GeoParquet analytic datasets. The following config structure was then designed incorporating already existing features Martin provides like auto discovery of spatially enabled tables etc.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;duckdb&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  pool_size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  auto_bounds&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;quick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sources&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/data/tiles.duckdb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      auto_publish&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tables&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          from_schemas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;autodetect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          source_id_format&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{table}&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          id_columns&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;gid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          extent&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          buffer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          clip_geom&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      tables&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        roads&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          schema&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          table&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;roads&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          geometry_column&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;geom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          srid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4326&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          minzoom&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          maxzoom&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;          properties&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;            id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;int4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;            name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;varchar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;geoparquet&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/data/buildings.parquet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      layer_id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;buildings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      geometry_column&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;geom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      srid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4326&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      minzoom&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      maxzoom&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      extent&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      buffer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;martin-core-duckdbsource-and-pool-2831&quot;&gt;martin-core: DuckDBSource and pool (&lt;a href=&quot;https://github.com/maplibre/martin/pull/2831&quot;&gt;#2831&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;The next step was to add the runtime layer in &lt;code&gt;martin-core&lt;/code&gt; to provide a way for Martin to hold DuckDB connections and execute tile SQL through its existing &lt;code&gt;Source&lt;/code&gt; abstraction.&lt;/p&gt;
&lt;p&gt;DuckDB has a different operating model from Postgres. It is an embedded analytical engine, so Martin opens a &lt;code&gt;duckdb::Connection&lt;/code&gt; directly in its own process rather than connecting to a database server. That connection can query GeoParquet in place using &lt;code&gt;read_parquet(...)&lt;/code&gt; and the data does not need to be imported first. The spatial extension is loaded on each connection to provide the MVT functions, while remote GeoParquet sources also require DuckDB’s &lt;code&gt;httpfs&lt;/code&gt; extension.&lt;/p&gt;
&lt;p&gt;The implementation introduces a single &lt;code&gt;DuckDBSource&lt;/code&gt; for all DuckDB-backed layers. A database table and a GeoParquet file require different configuration, but they all ultimately run a query with &lt;code&gt;z&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, and &lt;code&gt;y&lt;/code&gt; parameters. &lt;code&gt;DuckDBSqlInfo&lt;/code&gt; therefore stores the generated query, while the source-specific logic is largely confined to building its &lt;code&gt;FROM&lt;/code&gt; clause. This kept the execution path shared and left room for database-backed sources to be added without another tile-source implementation.&lt;/p&gt;
&lt;p&gt;Connections are reused through &lt;code&gt;DuckDBPool&lt;/code&gt;. Database-file sources open read-only connections to the &lt;code&gt;.duckdb&lt;/code&gt; file. GeoParquet sources instead create an in-memory DuckDB connection, load the required extensions, and read the external file when a query runs. The pool is limited by &lt;code&gt;pool_size&lt;/code&gt;, so requests wait for an available connection.&lt;/p&gt;
&lt;p&gt;This matters because DuckDB parallelizes a single query internally. A tile query can use several worker threads for Parquet scans, spatial filtering, and MVT encoding, with the limit controlled by &lt;code&gt;Config::threads&lt;/code&gt;. Martin may also have multiple pooled connections, so the effective level of parallelism is approximately &lt;code&gt;pool_size × threads&lt;/code&gt;. The default pool size is four.&lt;/p&gt;
&lt;p&gt;Integrating this with Tokio required one additional boundary. &lt;code&gt;duckdb-rs&lt;/code&gt; is synchronous, whereas Martin’s tile interface is asynchronous. Connection checkout must remain non-blocking, and executing &lt;code&gt;ST_AsMVT&lt;/code&gt; must not occupy a Tokio worker thread. &lt;code&gt;deadpool&lt;/code&gt; provides asynchronous checkout and the actual DuckDB call is moved to Tokio’s blocking pool:&lt;/p&gt;
&lt;p&gt;Connection creation follows the same pattern because extension loading and session setup are blocking operations. The returned connections are health-checked to ensure they can be reused.&lt;/p&gt;
&lt;h2 id=&quot;bounds-and-sql-utilities-2902&quot;&gt;Bounds and SQL utilities (&lt;a href=&quot;https://github.com/maplibre/martin/pull/2902&quot;&gt;#2902&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;The next piece was source metadata. Martin exposes TileJSON for every source, and TileJSON needs geographic bounds. A GeoParquet file does not provide an equivalent server-side catalogue, so the DuckDB backend needs to derive its bounds from the geometries it reads.&lt;/p&gt;
&lt;p&gt;This PR added three bounds modes. &lt;code&gt;skip&lt;/code&gt; leaves bounds out of TileJSON. &lt;code&gt;calc&lt;/code&gt; computes an exact extent with DuckDB spatial functions and transforms the result to WGS84. &lt;code&gt;quick&lt;/code&gt;, the default, first tries &lt;code&gt;ST_Extent_Approx&lt;/code&gt;, which uses cached geometry bounding boxes where they are available. The quick path is time-limited: if it cannot produce a result in time, Martin starts without bounds rather than delaying startup. If the approximate function is unavailable or produces no result, it falls back to the exact calculation.&lt;/p&gt;
&lt;p&gt;The exact query also handles point-like or otherwise degenerate extents. A zero-width or zero-height box is buffered before conversion, producing valid TileJSON bounds instead of an invalid envelope.&lt;/p&gt;
&lt;p&gt;The PR also introduced the small SQL utility layer used by the following resolver work. Identifiers, string values, schema-qualified relations, and EPSG CRS values are escaped separately before being placed in generated SQL. This is necessary because relation names and file paths cannot be passed as normal query parameters in every position used by DuckDB’s spatial and &lt;code&gt;read_parquet(...)&lt;/code&gt; functions. Keeping that logic in one place made the later SQL generation both safer and easier to read.&lt;/p&gt;
&lt;h2 id=&quot;geoparquet-configuration-and-resolution-2931&quot;&gt;GeoParquet configuration and resolution (&lt;a href=&quot;https://github.com/maplibre/martin/pull/2931&quot;&gt;#2931&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;With the runtime and metadata utilities in place, the next PR defined the GeoParquet source model and the resolver that turns a configured file into a &lt;code&gt;DuckDBSource&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The resolver begins with &lt;code&gt;DESCRIBE SELECT * FROM read_parquet(...)&lt;/code&gt;. It identifies the geometry column, validates an optional feature ID column, and treats the remaining columns as MVT properties. A configured geometry column takes precedence; otherwise, Martin accepts a file with exactly one &lt;code&gt;GEOMETRY&lt;/code&gt; column and rejects files with none or several ambiguous candidates.&lt;/p&gt;
&lt;p&gt;The source CRS can be configured explicitly or discovered with &lt;code&gt;ST_CRS&lt;/code&gt;. The resolver accepts &lt;code&gt;EPSG:*&lt;/code&gt; values and &lt;code&gt;OGC:CRS84&lt;/code&gt;, then records the result as an SRID. Before building the tile query, it applies &lt;code&gt;ST_SetCRS&lt;/code&gt; to the geometry. This is important because GeoParquet processing pipelines can preserve the geometry while dropping the CRS metadata DuckDB needs for a correct transformation.&lt;/p&gt;
&lt;p&gt;The generated query follows the normal MVT flow: create the requested tile envelope, transform source geometries into Web Mercator, filter features against the tile bounds, pass each geometry through &lt;code&gt;ST_AsMVTGeom&lt;/code&gt;, and finally assemble the layer with &lt;code&gt;ST_AsMVT&lt;/code&gt;. The layer ID, feature ID, extent, buffer, clipping behaviour, and zoom limits all come from the source configuration.&lt;/p&gt;
&lt;p&gt;The resolver combines this query with the bounds calculation from the previous PR and builds TileJSON from the discovered schema and metadata. At that point it can return a complete &lt;code&gt;DuckDBSource&lt;/code&gt;. The remaining work was to connect this resolver to Martin’s top-level lifecycle and verify the full HTTP path.&lt;/p&gt;
&lt;h2 id=&quot;end-to-end-local-geoparquet-support-3054&quot;&gt;End-to-end local GeoParquet support (&lt;a href=&quot;https://github.com/maplibre/martin/pull/3054&quot;&gt;#3054&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;This PR connected DuckDB configuration to Martin’s normal startup lifecycle. When &lt;code&gt;unstable-duckdb&lt;/code&gt; is enabled, Martin resolves the &lt;code&gt;duckdb:&lt;/code&gt; block alongside its other source types and adds each valid GeoParquet source to the catalog.&lt;/p&gt;
&lt;p&gt;That completed the local GeoParquet path: configuration file to resolver, resolver to &lt;code&gt;DuckDBSource&lt;/code&gt;, and &lt;code&gt;DuckDBSource&lt;/code&gt; to the usual catalog, TileJSON, and &lt;code&gt;/{source}/{z}/{x}/{y}&lt;/code&gt; endpoints. Invalid entries follow Martin’s warning policy, so one malformed GeoParquet source does not prevent valid siblings from starting.&lt;/p&gt;
&lt;p&gt;The end-to-end tests start Martin with a temporary configuration, verify the catalog and generated TileJSON, request a real vector tile, and inspect the decoded MVT output. The fixture includes a polygon that crosses a tile edge, confirming that DuckDB clips it correctly while retaining features inside the tile.&lt;/p&gt;
&lt;p&gt;The PR also introduced &lt;code&gt;just test-duckdb&lt;/code&gt; and a feature-gated CI job. This keeps the expensive bundled DuckDB build out of unrelated test suites while ensuring the complete GeoParquet path is tested whenever DuckDB support changes.&lt;/p&gt;
&lt;h2 id=&quot;what-this-enables&quot;&gt;What this enables&lt;/h2&gt;
&lt;p&gt;The immediate use case is serving a map directly from a GeoParquet dataset. Martin can expose a parquet analytical dataset directly as a standard vector-tile endpoint without a separate PostGIS import. MapLibre clients receive the usual catalog, TileJSON, and MVT responses.&lt;/p&gt;
&lt;p&gt;This is particularly useful when DuckDB is already the analytical layer. The same files can support batch analysis and map rendering, avoiding a second spatial database that exists only to serve tiles.&lt;/p&gt;
&lt;p&gt;The shared &lt;code&gt;DuckDBSource&lt;/code&gt; design also provides a path beyond GeoParquet. The execution and pooling layer does not depend on &lt;code&gt;read_parquet(...)&lt;/code&gt; and future sources can generate SQL against tables in a &lt;code&gt;.duckdb&lt;/code&gt; file while using the same tile-serving code.&lt;/p&gt;
&lt;h2 id=&quot;remaining-work&quot;&gt;Remaining work&lt;/h2&gt;
&lt;p&gt;The current implementation is intentionally gated behind &lt;code&gt;unstable-duckdb&lt;/code&gt;. Before it can become a stable Martin backend, the most important work is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DuckDB database sources:&lt;/strong&gt; implement structured configuration and resolution for tables and auto-publish. Those fields are parsed today but are not served.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote GeoParquet:&lt;/strong&gt; the connection layer supports HTTP(S) through &lt;code&gt;httpfs&lt;/code&gt;; it still needs dedicated end-to-end coverage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discovery and CLI support:&lt;/strong&gt; add directory/glob discovery for Parquet files and a command-line configuration path comparable to Postgres.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operational features:&lt;/strong&gt; support query cancellation and URL query parameters where appropriate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hot reload:&lt;/strong&gt; detect changes to local GeoParquet files and refresh their sources without restarting Martin, matching the reload support available for other file-backed sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation and stabilization:&lt;/strong&gt; document the configuration, resource trade-offs, and when to choose DuckDB over PostGIS or pre-generated archives; then evaluate removing the &lt;code&gt;unstable-&lt;/code&gt; feature gate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This work establishes the core path for serving vector tiles from local GeoParquet through DuckDB.
For users whose geospatial data already lives in analytical files, this provides a simpler route from data to map: keep the dataset in GeoParquet, query it with DuckDB, and serve it through Martin!&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter July 2026</title><link>https://maplibre.org/news/2026-08-02-maplibre-newsletter-july-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-08-02-maplibre-newsletter-july-2026/</guid><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the July 2026 edition of the MapLibre Newsletter!&lt;/p&gt;
&lt;p&gt;It’s been a big month. MapLibre GL JS v6 just shipped, barely eight months after v5 landed in December 2025. Additionally, MapLibre Native landed its first-ever style spec property before GL JS, Martin pushed out three releases in a row, and Flutter got an experimental FFI engine that’s 10x faster on data-heavy maps.&lt;/p&gt;
&lt;p&gt;Before we dive in, we begin with a note of gratitude to &lt;a href=&quot;https://www.jawg.io/&quot;&gt;JawgMaps&lt;/a&gt;, for their continuous backing of MapLibre since 2023. Contributions like theirs, from organizations and individuals alike, are what keep our project running and our community thriving. If you’d like to support our ongoing work, visit the MapLibre &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Sponsors page&lt;/a&gt; for more details.&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:baseline;gap:5rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;height:50px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/jawgmaps-logo.nASKjwUP_Z2t1qr0.svg&quot; alt=&quot;JawgMaps logo&quot; style=&quot;height:55px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;221&quot; height=&quot;40&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:1.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem;line-height:1.4&quot;&gt;&lt;p&gt;Big thanks to JawgMaps, for supporting us since 2023!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-governing-board-update--2026-elections&quot;&gt;🏛️ Governing Board Update &amp;amp; 2026 Elections&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Board Change:&lt;/strong&gt; &lt;a href=&quot;https://maplibre.org/about/frank-elsinga/&quot;&gt;Frank Elsinga&lt;/a&gt; has stepped down from the Governing Board. Per &lt;a href=&quot;https://github.com/maplibre/maplibre/blob/main/CHARTER.md#replacement-of-governing-board-members&quot;&gt;the MapLibre Charter&lt;/a&gt;, his seat is filled by Stefan Karschti, who placed sixth in &lt;a href=&quot;https://maplibre.org/news/2025-09-22-board-elections-2025/&quot;&gt;last year’s allocation&lt;/a&gt;. Thank you, Frank, for your service this term!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2026 Elections:&lt;/strong&gt; Nominations are open for &lt;a href=&quot;https://github.com/maplibre/maplibre/issues/508&quot;&gt;this year’s Governing Board election&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&quot;overflow-x: auto;&quot;&gt;&lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 0.95rem; min-width: 500px;&quot;&gt;&lt;colgroup&gt;&lt;col style=&quot;width: 140px;&quot;&gt;&lt;col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;border-bottom: 1px solid #ccc; text-align: left; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;p&gt;Date&lt;/p&gt;&lt;/th&gt;&lt;th style=&quot;border-bottom: 1px solid #ccc; text-align: left; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;p&gt;Milestone&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top; border-bottom: 1px solid #333;&quot;&gt;&lt;p&gt;Aug 14, 2026&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top; border-bottom: 1px solid #333;&quot;&gt;&lt;p&gt;Deadline for &lt;a href=&quot;https://github.com/maplibre/maplibre/issues/506&quot;&gt;Voting Member
nominations&lt;/a&gt; and
&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/507&quot;&gt;Board candidate
registration&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top; border-bottom: 1px solid #333;&quot;&gt;&lt;p&gt;Aug 20, 2026&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top; border-bottom: 1px solid #333;&quot;&gt;&lt;p&gt;Deadline for approval of new Voting Members (via PR review)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top;&quot;&gt;Aug 31, 2026&lt;/td&gt;&lt;td style=&quot;padding: 8px 12px; vertical-align: top;&quot;&gt;&lt;p&gt;Governing Board election poll closes (OpaVote)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rounded Fill Extrusion Corners:&lt;/strong&gt; Support for rounded fill extrusion corners has been implemented by Alex Cristici in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4343&quot;&gt;#4343&lt;/a&gt;. You can now use the &lt;a href=&quot;https://maplibre.org/maplibre-style-spec/layers/#fill-extrusion-rounded-corner-distance&quot;&gt;&lt;code&gt;fill-extrusion-rounded-corner-distance&lt;/code&gt;&lt;/a&gt; style spec property. Notably this is the very first time a new visual style spec property has landed in MapLibre Native before MapLibre GL JS since the fork! Special thanks to Steve Gifford for the &lt;a href=&quot;https://github.com/maplibre/maplibre-style-spec/issues/1682&quot;&gt;original proposal&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/native-rounded-corners.BJBVNzjI_27RjXK.webp&quot; alt=&quot;Native rounded corners for fill extrusions&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2862&quot; height=&quot;1644&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;Screenshot showing the new rounded corners for fill extrusions in action.
OpenMapTiles based map style.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Crisper CJK Text Rendering:&lt;/strong&gt; CJK characters that use local glyph rasterization are now rendered with double the resolution, matching MapLibre GL JS and significantly improving the legibility of these characters. This was &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4304&quot;&gt;implemented&lt;/a&gt; by Taku Fukada, an engineer at our valued sponsor &lt;a href=&quot;https://github.com/MIERUNE&quot;&gt;MIERUNE&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Android feature-state support:&lt;/strong&gt; The &lt;a href=&quot;https://maplibre.org/maplibre-style-spec/expressions/#feature-state&quot;&gt;&lt;code&gt;feature-state&lt;/code&gt;&lt;/a&gt; functionality is a way to read and set properties on individual features, which can be used for styling with a style expression. Android support was added in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4219&quot;&gt;#4219&lt;/a&gt; by Brandon Roeder. A &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4420&quot;&gt;PR&lt;/a&gt; from Markus Wendorf that adds a similar API to MapLibre iOS is still open.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fresh PMTiles Documentation:&lt;/strong&gt; Stephanie May contributed fresh new PMTiles documentation in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4278&quot;&gt;#4278&lt;/a&gt;. Check out the new guides in both the &lt;a href=&quot;https://maplibre.org/maplibre-native/android/examples/data/PMTiles/&quot;&gt;MapLibre Android&lt;/a&gt; and &lt;a href=&quot;https://maplibre.org/maplibre-native/ios/latest/documentation/maplibre-native-for-ios/pmtiles&quot;&gt;MapLibre iOS&lt;/a&gt; docs.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;📢 v6 Release&lt;/h4&gt;&lt;p&gt;&lt;p&gt;We published the final four
pre-releases(&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v6.0.0-19&quot;&gt;6.0.0-19&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v6.0.0-20&quot;&gt;6.0.0-20&lt;/a&gt;,
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v6.0.0-21&quot;&gt;6.0.0-21&lt;/a&gt;,
and
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v6.0.0-22&quot;&gt;6.0.0-22&lt;/a&gt;)
of Version 6 alongside the official
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.0.0&quot;&gt;v6.0.0&lt;/a&gt;
release itself. This is a huge milestone for us! While it introduces breaking
changes, it also paves the way for future improvements. For more details,
check out our &lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/guides/v5-to-v6-migration-guide/&quot;&gt;migration
guide&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;It has been over a year and a half since &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.0.0&quot;&gt;our last major update&lt;/a&gt;, and breaking changes were piling up. So we needed to carve out a dedicated breaking release, but don’t worry, we don’t plan on doing another one anytime soon (we know how painful migrations can be!).&lt;/p&gt;
&lt;p&gt;We noticed this release created complication for projects pinned to latest. We strongly advise against auto-updating to latest versions in production for this exact reason. Always pinning to specific versions will keep your builds safe and predictable.&lt;/p&gt;
&lt;p&gt;We had a stack of non-breaking features and bug fixes ready to go that we didn’t want to mix into the core 6.0.0 release. To keep things clean, we also shipped &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v6.1.0&quot;&gt;v6.1.0&lt;/a&gt; this month.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;🤝 A Quick Note for Contributors&lt;/h4&gt;&lt;p&gt;&lt;p&gt;While the momentum around AI tools makes drafting code faster than ever, we
kindly ask contributors to focus on driving a single PR to completion before
opening new ones. We take quality and maintainability very seriously.
Aligning code to MapLibre standards, conducting thorough reviews, and making
necessary adjustments takes time. Focusing on one high-quality pull request
at a time helps us review faster and get your contributions to a “ready to
merge” state smoothly.&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;🙏 Thanks to all the contributors this month:&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/DoFabien&quot; title=&quot;@DoFabien&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/DoFabien.png&quot; alt=&quot;@DoFabien&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/birkskyum&quot; title=&quot;@birkskyum&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/birkskyum.png&quot; alt=&quot;@birkskyum&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/plantain&quot; title=&quot;@plantain&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/plantain.png&quot; alt=&quot;@plantain&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/YuChunTsao&quot; title=&quot;@YuChunTsao&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/YuChunTsao.png&quot; alt=&quot;@YuChunTsao&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/qorexdevs&quot; title=&quot;@qorexdevs&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/qorexdevs.png&quot; alt=&quot;@qorexdevs&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/bradymadden97&quot; title=&quot;@bradymadden97&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/bradymadden97.png&quot; alt=&quot;@bradymadden97&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/kamil-sienkiewicz-asi&quot; title=&quot;@kamil-sienkiewicz-asi&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/kamil-sienkiewicz-asi.png&quot; alt=&quot;@kamil-sienkiewicz-asi&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/mondsichtung&quot; title=&quot;@mondsichtung&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/mondsichtung.png&quot; alt=&quot;@mondsichtung&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lazerg&quot; title=&quot;@lazerg&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lazerg.png&quot; alt=&quot;@lazerg&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/clement-igonet&quot; title=&quot;@clement-igonet&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/clement-igonet.png&quot; alt=&quot;@clement-igonet&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/hugosmoreira&quot; title=&quot;@hugosmoreira&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/hugosmoreira.png&quot; alt=&quot;@hugosmoreira&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/cat0825&quot; title=&quot;@cat0825&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/cat0825.png&quot; alt=&quot;@cat0825&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/jan-grzybek&quot; title=&quot;@jan-grzybek&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/jan-grzybek.png&quot; alt=&quot;@jan-grzybek&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/pabueco&quot; title=&quot;@pabueco&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/pabueco.png&quot; alt=&quot;@pabueco&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;-martin&quot;&gt;🦀 Martin&lt;/h2&gt;
&lt;p&gt;Over the last two months, Martin shipped three major releases (&lt;a href=&quot;https://github.com/maplibre/martin/releases#release-martin-v1.11.0&quot;&gt;v1.11.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/martin/releases#release-martin-v1.12.0&quot;&gt;v1.12.0&lt;/a&gt;, and &lt;a href=&quot;https://github.com/maplibre/martin/releases#release-martin-v1.13.0&quot;&gt;v1.13.0&lt;/a&gt;).
Key highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live Source Reloading:&lt;/strong&gt; Hot-reloading has been completed across all source types to keep data fresh without server restarts. Local PMTiles and COG files reload on filesystem changes, while PostgreSQL and remote object stores poll on a configurable timer to update their schemas and sources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct GeoJSON Tile Serving:&lt;/strong&gt; Martin can now serve vector tiles directly from WGS84 &lt;code&gt;.geojson&lt;/code&gt;/&lt;code&gt;.json&lt;/code&gt; files on the fly. It constructs a Hilbert R-Tree index on startup, then queries, clips, and encodes MVTs per request. It also supports filesystem-event hot-reloading.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upstream Tile Passthrough:&lt;/strong&gt; Martin now supports acting as a proxy cache for upstream HTTP tile servers. It fetches tiles from configured templates or mirror servers, allowing developers to wrap external tiles in Martin’s caching pipeline and hide upstream credentials.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static Map Overlays:&lt;/strong&gt; A new endpoint renders static map images with styled vector overlays (fills, lines, circles) drawn on top. The camera can center on coordinates, a bounding box, or auto-fit to the overlays.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GSoC Spotlight:&lt;/strong&gt; Google Summer of Code student &lt;a href=&quot;https://github.com/manbhav234&quot;&gt;Manbhav&lt;/a&gt; laid the groundwork for serving tiles directly from DuckDB and GeoParquet. This includes core integration logic and initial config-resolver wiring.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🙏 Thanks to all the contributors who made these releases possible:&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/AnayGarodia&quot; title=&quot;@AnayGarodia&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/AnayGarodia.png&quot; alt=&quot;@AnayGarodia&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/chrisdebian&quot; title=&quot;@chrisdebian&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/chrisdebian.png&quot; alt=&quot;@chrisdebian&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Auspicus&quot; title=&quot;@Auspicus&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Auspicus.png&quot; alt=&quot;@Auspicus&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/floze-the-genius&quot; title=&quot;@floze-the-genius&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/floze-the-genius.png&quot; alt=&quot;@floze-the-genius&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/gabeschine&quot; title=&quot;@gabeschine&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/gabeschine.png&quot; alt=&quot;@gabeschine&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/JakeLow&quot; title=&quot;@JakeLow&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/JakeLow.png&quot; alt=&quot;@JakeLow&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/johncarmack&quot; title=&quot;@johncarmack&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/johncarmack.png&quot; alt=&quot;@johncarmack&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/manbhav234&quot; title=&quot;@manbhav234&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/manbhav234.png&quot; alt=&quot;@manbhav234&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/hamarituc&quot; title=&quot;@hamarituc&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/hamarituc.png&quot; alt=&quot;@hamarituc&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/michaelkirk&quot; title=&quot;@michaelkirk&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/michaelkirk.png&quot; alt=&quot;@michaelkirk&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/pawelurbanek&quot; title=&quot;@pawelurbanek&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/pawelurbanek.png&quot; alt=&quot;@pawelurbanek&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/thomfuhrmann&quot; title=&quot;@thomfuhrmann&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/thomfuhrmann.png&quot; alt=&quot;@thomfuhrmann&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Weixing-Zhang&quot; title=&quot;@Weixing-Zhang&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Weixing-Zhang.png&quot; alt=&quot;@Weixing-Zhang&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/yuiseki&quot; title=&quot;@yuiseki&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/yuiseki.png&quot; alt=&quot;@yuiseki&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/nyurik&quot; title=&quot;@nyurik&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/nyurik.png&quot; alt=&quot;@nyurik&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;-maplibre-compose&quot;&gt;🎨 MapLibre Compose&lt;/h2&gt;
&lt;p&gt;MapLibre Compose now features an experimental desktop implementation rewrite backed by maplibre-native-ffi on &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/pull/834&quot;&gt;the desktop-ffi-rewrite branch&lt;/a&gt;. This has allowed us to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bring Compose Desktop to near-parity with Compose Android and iOS in functionality.&lt;/li&gt;
&lt;li&gt;supports proper compositing with Compose UI on desktop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This new architecture is expected to resolve a large collection of longstanding open issues, including &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/570&quot;&gt;#570&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/627&quot;&gt;#627&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/595&quot;&gt;#595&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/184&quot;&gt;#184&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/568&quot;&gt;#568&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-compose/issues/608&quot;&gt;#608&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-flutter&quot;&gt;🪶 MapLibre Flutter&lt;/h2&gt;
&lt;p&gt;This month &lt;a href=&quot;https://github.com/maplibre/flutter-maplibre-gl&quot;&gt;&lt;code&gt;flutter-maplibre-gl&lt;/code&gt;&lt;/a&gt; grew an experimental new engine: a pure-Dart FFI backend for Android, on the &lt;a href=&quot;https://github.com/maplibre/flutter-maplibre-gl/tree/exp/native-ffi-android/maplibre_gl_native&quot;&gt;&lt;code&gt;exp/native-ffi-android&lt;/code&gt;&lt;/a&gt; branch.
By driving the map directly through the &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi&quot;&gt;MapLibre Native C API&lt;/a&gt; with &lt;code&gt;dart:ffi&lt;/code&gt;, we can now achieve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10x Faster Data Pipelines: Replacing large GeoJSON sources (e.g., 20k points) is ~10x faster, sustaining ~30 Hz live updates without UI thread jank.&lt;/li&gt;
&lt;li&gt;Jank-Free Frame Delivery: A dedicated native thread handles frame rendering so background Dart tasks (like GC) never drop frames.&lt;/li&gt;
&lt;li&gt;Gesture responsiveness, where platform views historically held an edge, reached full parity across pan, pinch, and rotate by moving to a vsync-aligned frame loop and display-thread rendering.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/flutter-maplibre-gl-parity.ClJ256EQ_c0a8G.webp&quot; alt=&quot;Native rounded corners for fill extrusions&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2400&quot; height=&quot;1000&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;Screenshot of interaction performance benchmark: FFI backend vs. Platform
Channels.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;The public &lt;code&gt;maplibre_gl&lt;/code&gt; API is unchanged: a single &lt;code&gt;MapLibreGlNative.use()&lt;/code&gt; call before &lt;code&gt;runApp&lt;/code&gt; opts an app in. This is an experimental spike (Android arm64 only). Threading lessons learned here are directly shaping maplibre-native-ffi’s executor design &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi/pull/433&quot;&gt;#433&lt;/a&gt;. Thanks to @sargunv for the C API collaboration!&lt;/p&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;p&gt;Keep an eye on our blog for an upcoming post covering MapLibre’s schedule and participation at upcoming geo conferences.&lt;/p&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: Aug 12, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Aug 12, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aug 26, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter June 2026</title><link>https://maplibre.org/news/2026-07-04-maplibre-newsletter-jun-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-07-04-maplibre-newsletter-jun-2026/</guid><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the June 2026 edition of the MapLibre Newsletter!&lt;/p&gt;
&lt;p&gt;We would like to extend our sincere thanks to &lt;a href=&quot;https://www.mierune.co.jp/&quot;&gt;Mierune&lt;/a&gt;, MapLibre’s inaugural sponsor, for their continuous backing since 2022.&lt;/p&gt;
&lt;p&gt;As we keep building and evolving, contributions from organizations and individuals alike are what keep our project running smoothly and our community thriving.
If you would like to support our ongoing work, please visit the MapLibre &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Sponsors page&lt;/a&gt; for more details.&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:baseline;gap:5rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;height:50px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mierune-logo.CUcO-raY_1QdJKN.svg&quot; alt=&quot;Mierune logo&quot; style=&quot;height:55px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;269&quot; height=&quot;85&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:1.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem;line-height:1.4&quot;&gt;&lt;p&gt;A huge shoutout to Mierune, MapLibre’s very first sponsor!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;📢 We are Hiring: Graphics Engineer&lt;/h4&gt;&lt;p&gt;&lt;p&gt;We are looking for a Graphics Engineer to join our team!&lt;/p&gt;&lt;p&gt;If you are passionate about open-source geospatial tools and low-level graphics programming, we would love to hear from you.&lt;/p&gt;&lt;p&gt;Check out the job description at &lt;a href=&quot;https://maplibre.org/jobs/graphics-engineer&quot;&gt;maplibre.org/jobs/graphics-engineer&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Thanks to the efforts of Adrian Cojocaru and Alex Cristici, the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4310&quot;&gt;instancing based fill extrusion optimizations&lt;/a&gt; is now implemented for the Vulkan backend as well. If you are using MapLibre Android, this is yet another reason to switch to the Vulkan backend (the default since version 13.0.0).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Harel Mazor shared a &lt;a href=&quot;https://medium.com/@harel.mazor/putting-mapeak-on-the-dashboard-a6cc73d4f99e&quot;&gt;blog post&lt;/a&gt; detailing his experiences adding Android Auto and Carplay support to his app using MapLibre Native. He also published a project to bring contours to MapLibre iOS and Android using a Rust-based &lt;a href=&quot;https://github.com/Mapeak-com/maplibre-contour-rs&quot;&gt;HTTP interceptor&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Over on Slack, Vladyslav Odobesku created a &lt;a href=&quot;https://osmus.slack.com/archives/C04G140P9U6/p1781859352910629&quot;&gt;discussion thread&lt;/a&gt; about adding a Kotlin based &lt;code&gt;CustomVectorTileProvider&lt;/code&gt; that would be a more performant alternative to &lt;code&gt;CustomGeometrySource&lt;/code&gt; for Android developers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/maplibre-native-ffi&quot;&gt;MapLibre Native FFI&lt;/a&gt; project now features browser support using the WebGPU backend. Dive into the &lt;a href=&quot;https://osmus.slack.com/archives/C02B2CBSNBU/p1782547722335569?thread_ts=1778119369.635259&amp;amp;cid=C02B2CBSNBU&quot;&gt;Slack discussion thread&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi/pull/285&quot;&gt;the relevant PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Taku Fukada from our valued sponsor MIERUNE implemented &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4304&quot;&gt;double resolution rendering for CJK characters&lt;/a&gt;. This makes these characters much more legible on mobile screens. MapLibre GL JS has had this behavior for a while already and we’re thrilled to bring this crisp rendering to MapLibre Native.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Releases:&lt;/strong&gt;&lt;/p&gt;
&lt;table class=&quot;release-table&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;thead data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Platform&lt;/th&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Latest Versions&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Android&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.3.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.3.0&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.3.1&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.3.1&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt;&lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;iOS&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.27.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.27.0&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;We have rolled out seven pre-releases for version 6: &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.0.0-12&quot;&gt;6.0.0-12&lt;/a&gt; through &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases#release-v6.0.0-18&quot;&gt;6.0.0-18&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are nearing the finish line for the version 6 breaking changes! You can track our final milestones on the tracking issue: &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/6427&quot;&gt;#6427&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have just a few remaining Pull Requests that needs community’s input before they close:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PR &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/7800&quot;&gt;#7800&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PR &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/7839&quot;&gt;#7839&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;p&gt;🤝 We would like to thank all the people who have contributed to the project
this month:&lt;/p&gt;&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/DoFabien&quot; title=&quot;@DoFabien&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/DoFabien.png&quot; alt=&quot;@DoFabien&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/kamil-sienkiewicz-asi&quot; title=&quot;@kamil-sienkiewicz-asi&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/kamil-sienkiewicz-asi.png&quot; alt=&quot;@kamil-sienkiewicz-asi&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/xavierjs&quot; title=&quot;@xavierjs&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/xavierjs.png&quot; alt=&quot;@xavierjs&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/dangkyokhoang&quot; title=&quot;@dangkyokhoang&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/dangkyokhoang.png&quot; alt=&quot;@dangkyokhoang&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/ckolin&quot; title=&quot;@ckolin&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/ckolin.png&quot; alt=&quot;@ckolin&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/cat0825&quot; title=&quot;@cat0825&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/cat0825.png&quot; alt=&quot;@cat0825&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/kodeezabdullah&quot; title=&quot;@kodeezabdullah&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/kodeezabdullah.png&quot; alt=&quot;@kodeezabdullah&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/johanrd&quot; title=&quot;@johanrd&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/johanrd.png&quot; alt=&quot;@johanrd&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/springmeyer&quot; title=&quot;@springmeyer&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/springmeyer.png&quot; alt=&quot;@springmeyer&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/katemihalikova&quot; title=&quot;@katemihalikova&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/katemihalikova.png&quot; alt=&quot;@katemihalikova&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/cyphercodes&quot; title=&quot;@cyphercodes&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/cyphercodes.png&quot; alt=&quot;@cyphercodes&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/ted-piotrowski&quot; title=&quot;@ted-piotrowski&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/ted-piotrowski.png&quot; alt=&quot;@ted-piotrowski&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/widefire&quot; title=&quot;@widefire&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/widefire.png&quot; alt=&quot;@widefire&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lucaswoj&quot; title=&quot;@lucaswoj&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lucaswoj.png&quot; alt=&quot;@lucaswoj&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;p&gt;Last month (June 11–13), our board members headed to Madison, Wisconsin for &lt;a href=&quot;https://openstreetmap.us/events/state-of-the-map-us/2026/&quot;&gt;State of the Map US 2026&lt;/a&gt; to connect with the community and share what we’ve been building.
A huge thank you to the organizers and everyone who stopped by to chat with us!&lt;/p&gt;
 &lt;img src=&quot;https://maplibre.org/_astro/conference.BaL-kmWI_1sDmf.webp&quot; alt=&quot;Board members at State of the Map US 2026&quot; style=&quot;height:auto;max-height:400px;width:100%;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1080&quot; height=&quot;1080&quot;&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: Jul 08, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Jul 08, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jul 29, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter May 2026</title><link>https://maplibre.org/news/2026-06-03-maplibre-newsletter-may-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-06-03-maplibre-newsletter-may-2026/</guid><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the May 2026 edition of the MapLibre Newsletter!&lt;/p&gt;
&lt;p&gt;Our sincere thanks go out to &lt;a href=&quot;https://www.komoot.com/&quot;&gt;Komoot&lt;/a&gt; for their ongoing support of MapLibre since 2023. Please refer to our &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Sponsors page&lt;/a&gt; for more details on how organizations and individuals can give back to the project. Your contribution will directly help us run the project successfully and keep the community thriving.&lt;/p&gt;
&lt;p&gt;Read on for this month’s updates!&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:baseline;gap:5rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;height:50px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/komoot-logo.CTu0kONk_Ze78lX.svg&quot; alt=&quot;Komoot logo&quot; style=&quot;height:52px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;358&quot; height=&quot;108&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:1.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem;line-height:1.4&quot;&gt;&lt;p&gt;We are deeply grateful to Komoot for their steadfast support of the MapLibre community since 2023.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Memory Optimization&lt;/strong&gt;: Taking advantage of &lt;a href=&quot;https://en.wikipedia.org/wiki/Geometry_instancing&quot;&gt;instancing&lt;/a&gt;, Alex Christi managed to significantly reduce the memory usage of fill extrusion layers (see &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4256&quot;&gt;PR&lt;/a&gt;). Right now, this is implemented for the Metal backend, with Vulkan following suit thanks to Adrian Cojocaru’s work (see &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4310&quot;&gt;PR&lt;/a&gt;). If you are a heavy user of fill extrusion layers, we would love to hear your experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Android Renderer&lt;/strong&gt;: With Vulkan now being the default renderer in MapLibre Android 13.0.0, more people are trying out the Vulkan backend. MapLibre Android &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.2.0&quot;&gt;13.2.0&lt;/a&gt; introduced some Vulkan specific bugfixes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HarmonyOS Ecosystem Expansion&lt;/strong&gt;: &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4315&quot;&gt;This MapLibre Native PR&lt;/a&gt; adds support for a new platform, &lt;a href=&quot;https://en.wikipedia.org/wiki/HarmonyOS&quot;&gt;HarmonyOS&lt;/a&gt;, Huawei’s commercial OS competing with Android and iOS in China. It is related to &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenHarmony&quot;&gt;OpenHarmony&lt;/a&gt;, an open source project also utilized by initiatives like &lt;a href=&quot;https://oniroproject.org&quot;&gt;Oniro&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cross-Language Bindings&lt;/strong&gt;: Separately, &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi&quot;&gt;MapLibre Native FFI&lt;/a&gt; (the experimental C API wrapper for MapLibre Native), has made great progress since onboarding last month. It has officially landed Java, Rust, Zig, and Kotlin Native bindings, while filling out its support matrix across macOS, Windows, and Linux using Vulkan, Metal, and OpenGL.&lt;/p&gt;
&lt;p&gt;&lt;p&gt;Dave Brophy opened several PRs this month, including an implementation of
&lt;a href=&quot;https://github.com/maplibre/maplibre-native/issues/4283&quot;&gt;contour lines&lt;/a&gt; based
on Raster DEM data. Unfortunately, the PR was closed since we require
contributions to have a &lt;a href=&quot;https://github.com/maplibre/blob/main/AI_POLICY.md&quot;&gt;human in the
loop&lt;/a&gt;. In practice, this
means a feature like this can only be contributed to the core library by
someone with a strong graphics background and knowledge of MapLibre Native
rendering internals.&lt;/p&gt;&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;Code Integrity &amp;amp; AI Policy&lt;/h4&gt;&lt;p&gt;&lt;p&gt;We want the core of MapLibre Native to be stable and maintainable for the
long term. This means being judicious in accepting pull requests, especially
those written using an LLM. At the same time, we understand that some of our
users want to move quickly, and these days that often means using AI to
write functionality.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;strong&gt;Our Solution:&lt;/strong&gt; We plan to create a &lt;a href=&quot;https://maplibre.org/roadmap/maplibre-native/plugin-api/&quot;&gt;plugin
API&lt;/a&gt; for MapLibre
Native. This will allow developers to extend the library without changing
the core codebase. As an example, MapLibre GL JS has a popular &lt;a href=&quot;https://github.com/onthegomap/maplibre-contour&quot;&gt;contour
plugin&lt;/a&gt;; in the future,
MapLibre Native might have one as well.&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;A lot of performance improvements have been added in &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases&quot;&gt;our latest pre-releases&lt;/a&gt;. Now that we have officially dropped support for WebGL 1, we are looking to modernize our WebGL stack further. Check out the &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/issues/7640&quot;&gt;#7640&lt;/a&gt; tracking issue for more details and to follow along.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;Help Us Test the MapLibre GL JS v6 pre-releases&lt;/h4&gt;&lt;p&gt;&lt;p&gt;We have already implemented most of the breaking changes for the upcoming
release, and we hope to ship the new major version soon. To ensure a
flawless launch, we are releasing a new version after nearly every PR merge.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;strong&gt;Our request to you:&lt;/strong&gt; Please test the latest pre-releases in
your environments and let us know if we broke anything before the major
version is released!&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;For those of you who build MapLibre GL JS locally and ship custom changes, we have great news! We have switched to using &lt;strong&gt;Rolldown&lt;/strong&gt;, cutting our local build times down from minutes to seconds. This is a massive boost to the developer experience!&lt;/p&gt;
&lt;p&gt;&lt;p&gt;🤝 We would like to thank all the people who have contributed PRs this month:&lt;/p&gt;&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/xavierjs&quot; title=&quot;@xavierjs&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/xavierjs.png&quot; alt=&quot;@xavierjs&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/birkskyum&quot; title=&quot;@birkskyum&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/birkskyum.png&quot; alt=&quot;@birkskyum&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/lucaswoj&quot; title=&quot;@lucaswoj&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/lucaswoj.png&quot; alt=&quot;@lucaswoj&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/CommanderStorm&quot; title=&quot;@CommanderStorm&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/CommanderStorm.png&quot; alt=&quot;@CommanderStorm&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/safwat-halaby&quot; title=&quot;@safwat-halaby&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/safwat-halaby.png&quot; alt=&quot;@safwat-halaby&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;h4&gt;Style Specification: Share Your Inputs&lt;/h4&gt;&lt;p&gt;&lt;p&gt;A discussion around line opacity and layer opacity in general is currently
underway. We want to ensure our future spec design meets real-world
developer needs.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;Please head over to the tracking thread to share your inputs with us:
&lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/503&quot;&gt;Discussion #503&lt;/a&gt;&lt;/p&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-martin&quot;&gt;🦀 Martin&lt;/h2&gt;
&lt;p&gt;Nine &lt;code&gt;martin&lt;/code&gt; &lt;a href=&quot;https://github.com/maplibre/martin/releases&quot;&gt;releases&lt;/a&gt; shipped across April and May (1.5.0 through 1.10.1), with matching &lt;code&gt;martin-core&lt;/code&gt; and &lt;code&gt;mbtiles&lt;/code&gt; versions.
April is folded in here because no changelog went out at the time.&lt;/p&gt;
&lt;p&gt;Key highlights include:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On-the-fly MLT support&lt;/strong&gt;: The biggest change is &lt;a href=&quot;https://maplibre.org/news/2026-01-23-mlt-release/&quot;&gt;MLT (MapLibre Tiles)&lt;/a&gt; support.
Martin now transcodes MVT to MLT (and back) on the fly, picking the format from the client’s &lt;code&gt;Accept&lt;/code&gt; header.
On our test fixture, MLT is about 39% smaller on the wire and about 12% faster to serve from cache due to that. Checkout the &lt;a href=&quot;https://github.com/maplibre/martin/blob/main/docs/content/using-guides/mlt.md&quot;&gt;full guide&lt;/a&gt; if you want to dig in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server-side raster rendering&lt;/strong&gt;: Now stable and on by default on Linux builds via MapLibre Native (&lt;code&gt;styles: rendering: true&lt;/code&gt;). This closes a massive milestone &lt;a href=&quot;https://github.com/maplibre/martin/issues/978&quot;&gt;#978&lt;/a&gt; open since October 2023.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live source reloading&lt;/strong&gt;: MBTiles directories hot-reload as of April, COG and PMTiles followed in May, and PostgreSQL groundwork is in place for the PG reload work that comes next.&lt;/p&gt;
&lt;p&gt;🤝 Thanks to the community around Martin:&lt;/p&gt;
&lt;div class=&quot;contributor-flex-container&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Auspicus&quot; title=&quot;@Auspicus&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Auspicus.png&quot; alt=&quot;@Auspicus&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/michaelkirk&quot; title=&quot;@michaelkirk&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/michaelkirk.png&quot; alt=&quot;@michaelkirk&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/carderne&quot; title=&quot;@carderne&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/carderne.png&quot; alt=&quot;@carderne&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/sharkAndshark&quot; title=&quot;@sharkAndshark&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/sharkAndshark.png&quot; alt=&quot;@sharkAndshark&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/mvanhorn&quot; title=&quot;@mvanhorn&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/mvanhorn.png&quot; alt=&quot;@mvanhorn&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/jo-chemla&quot; title=&quot;@jo-chemla&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/jo-chemla.png&quot; alt=&quot;@jo-chemla&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/ianthetechie&quot; title=&quot;@ianthetechie&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/ianthetechie.png&quot; alt=&quot;@ianthetechie&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/pawurb&quot; title=&quot;@pawurb&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/pawurb.png&quot; alt=&quot;@pawurb&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/idovmamane&quot; title=&quot;@idovmamane&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/idovmamane.png&quot; alt=&quot;@idovmamane&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/Weixing-Zhang&quot; title=&quot;@Weixing-Zhang&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/Weixing-Zhang.png&quot; alt=&quot;@Weixing-Zhang&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/nyurik&quot; title=&quot;@nyurik&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/nyurik.png&quot; alt=&quot;@nyurik&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/NlDev-hub&quot; title=&quot;@NlDev-hub&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/NlDev-hub.png&quot; alt=&quot;@NlDev-hub&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/mwtoews&quot; title=&quot;@mwtoews&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/mwtoews.png&quot; alt=&quot;@mwtoews&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;table class=&quot;avatar-table&quot; style=&quot;border-collapse: collapse; border: 0; padding: 0; margin: 0;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;tr data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;td style=&quot;padding: 0; border: 0; vertical-align: middle; width: 90px; height: 90px;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;a href=&quot;https://github.com/manbhav234&quot; title=&quot;@manbhav234&quot; style=&quot;display: block; text-decoration: none; width: 90px; height: 90px; overflow: hidden; border-radius: 50%;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;img src=&quot;https://github.com/manbhav234.png&quot; alt=&quot;@manbhav234&quot; style=&quot;width: 90px; height: 90px; min-width: 90px; min-height: 90px; max-width: 90px; max-height: 90px; object-fit: cover; border-radius: 50%; border: 2.5px solid #334155; box-sizing: border-box;&quot; data-astro-cid-tpxm6xxb=&quot;&quot;&gt; &lt;/a&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;📣 As we scope next steps for server-side raster rendering, we want you to tell us what you’d want from the API (overlays, query params, perf knobs).&lt;/p&gt;&lt;p&gt;☀️ GSoC Spotlight: DuckDB backend! A warm welcome to Manbhav Sugla (&lt;a href=&quot;https://github.com/manbhav234&quot;&gt;@manbhav234&lt;/a&gt;), our Google Summer of Code student, whose first PR: &lt;a href=&quot;https://github.com/maplibre/martin/pull/2831&quot;&gt;#2831 &lt;code&gt;feat: duckdb-source implementation at martin-core&lt;/code&gt;&lt;/a&gt;, landed in draft and kicks off a brand-new DuckDB source for Martin, with reviews and suggestions welcome.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community Spotlight&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;OMT Router&lt;/strong&gt;: Built by Abel, this fast, zero‑backend library builds routing graphs straight from OpenMapTiles vector tiles to compute optimal routes and isolines entirely in the browser.
Dive into the &lt;a href=&quot;https://github.com/AbelVM/omt-router&quot;&gt;source code&lt;/a&gt; or test it yourself on the &lt;a href=&quot;https://abelvm.github.io/omt-router/example/&quot;&gt;live interactive demo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;QGIS2VectorTiles&lt;/strong&gt;: Returning with a major upgrade since its last feature, &lt;a href=&quot;https://gallpeters.github.io/QGIS2VectorTiles/&quot;&gt;QGIS2VectorTiles&lt;/a&gt; packs a QGIS project into a lightweight package complete with vector tiles, a matching MapLibre style, and a ready-to-use web viewer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recent updates to the project introduces native MBTiles export, imagery background layers, alpha channel color support, and a redesigned multithreaded export pipeline utilizing the GDAL CLI for faster tile generation. It also vastly expands style conversion (adding symbol-placement, text-variable-anchor, and interactive pop-ups) alongside a brand-new OpenLayers web viewer option.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;p&gt;We plan to participate and contribute to sessions at &lt;a href=&quot;https://openstreetmap.us/events/state-of-the-map-us/2026/&quot;&gt;State of the Map US — Madison, Wisconsin&lt;/a&gt; between 11-13 June 2026.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thursday, June 11 (Workshops)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/about/stephanie-may/&quot;&gt;Stephanie&lt;/a&gt; will guide OSM editors through quick, easy ways to extract OSM data and display it on a map.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/about/yuri-astrakhan&quot;&gt;Yuri&lt;/a&gt; will host a hands-on session showing attendees how to spin up their own map service utilizing OSM data and Planetiler.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to sign up for the workshops and spread the word!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Friday, June 12 (Lightning Talk):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/about/yuri-astrakhan&quot;&gt;Yuri&lt;/a&gt; will deliver a rapid-fire lightning talk tracking the latest ecosystem updates across MapLibre and the new MLT (MapLibre Tiles) specification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: Jun 10, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Jun 10, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jun 24, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>Welcoming YellowMap as a Silver Sponsor!</title><link>https://maplibre.org/news/2026-05-15-yellowmap-announcement/</link><guid isPermaLink="true">https://maplibre.org/news/2026-05-15-yellowmap-announcement/</guid><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are thrilled to officially welcome &lt;a href=&quot;https://yellowmap.com/&quot;&gt;YellowMap&lt;/a&gt; as a Silver sponsor of the MapLibre organization!&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2rem;border:10px solid #cfd8dc;border-radius:0;margin-bottom:3rem;display:flex;justify-content:center;align-items:center;gap:2rem;flex-wrap:nowrap;overflow:hidden&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;width:40%;max-width:300px;height:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/smartmaps-logo.D5162RA2_Z1inpTt.svg&quot; alt=&quot;YellowMap logo&quot; style=&quot;width:40%;max-width:330px;height:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;222&quot; height=&quot;47&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;why-yellowmap-chose-maplibre-a-shift-to-modern-vector-maps&quot;&gt;Why YellowMap Chose MapLibre: A Shift to Modern Vector Maps&lt;/h2&gt;
&lt;p&gt;For YellowMap, the decision to migrate to MapLibre was driven by a desire to modernise and add functionality. They recently transitioned from raster map configurations to vector tile approach allowing for smoother zooming and easier customisation. During this transition, YellowMap conducted exhaustive high-load and performance testing that confirmed MapLibre could meet their high standards.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;Today, YellowMap’s infrastructure, powered by a Kubernetes cluster, serves
nearly a million map views a day and handles global map tile updates every
four weeks. MapLibre GL JS has helped them handle this massive scale
effortlessly.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;how-yellowmap-meets-data-compliance-needs-with-maplibre&quot;&gt;How YellowMap Meets Data Compliance Needs with MapLibre&lt;/h2&gt;
&lt;p&gt;At the core of YellowMap’s product offering is &lt;a href=&quot;https://www.smartmaps.net/en/&quot;&gt;SmartMaps&lt;/a&gt;, built to address the strict data privacy demands of the European B2B market.
While many modern mapping providers rely on external content delivery networks (CDNs) or track user behaviors via cookies, YellowMap takes a self-hosted approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;100% &lt;a href=&quot;https://www.smartmaps.net/en/gdpr/&quot;&gt;GDPR&lt;/a&gt; Compliance: YellowMap hosts all mapping systems entirely on their own self-managed servers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No Tracking: SmartMaps solution operates completely without cookies and does not transmit any user data (such as IP addresses or advertising IDs) to external providers or third-party CDNs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Digital Sovereignty: SmartMaps’ independent architecture provides data security for privacy-critical B2B power users, including major financial institutions like Sparkasse, where end-users rely on secure interfaces to do things like look up local ATM branches.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/smartmaps-store-locator.BWcXO3YF_1WIV1I.webp&quot; alt=&quot;SmartMaps store locator example&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;960&quot; height=&quot;540&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;Showcase of SmartMaps used in a store-locator application.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;MapLibre’s open-source, vendor-agnostic nature goes hand-in-hand with
YellowMap’s data privacy and digital sovereignty philosophy, allowing them to
maintain complete ownership of their tech stack and uphold their digital
sovereignty unique selling proposition (USP).&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;how-yellowmap-utilizes-maplibre-today&quot;&gt;How YellowMap Utilizes MapLibre Today&lt;/h2&gt;
&lt;p&gt;YellowMap’s core mapping SDK, &lt;a href=&quot;https://docs.smartmaps.cloud/maps/&quot;&gt;SmartMaps GL&lt;/a&gt;, functions as a specialized wrapper around MapLibre GL JS. Their current deployment relies heavily on several advanced MapLibre features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/display-a-globe-with-a-vector-map/&quot;&gt;Globe View&lt;/a&gt;: Providing an immersive, global perspective for large-scale data visualization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/change-a-maps-language/&quot;&gt;Multi-Language Support&lt;/a&gt;: Enabling end users customers to switch map languages dynamically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://maplibre.org/maplibre-gl-js/docs/examples/display-buildings-in-3d/&quot;&gt;3D Buildings&lt;/a&gt;: Rendering buildings as 3D extrusions for detailed cityscapes and immersive urban visualizations.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-road-ahead&quot;&gt;The Road Ahead&lt;/h2&gt;
&lt;p&gt;YellowMap’s integration with MapLibre is only expanding. Driven by growing customer demand for digital sovereignty and data protection, they are currently preparing to integrate MapLibre Native into their environment, with internal technical documentation slated for completion in the coming days.&lt;/p&gt;
&lt;p&gt;YellowMap is also interested in developments surrounding the entire backend tile generation stack, Martin tile server format integrations, and native support for simple SVG sources.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;We are incredibly grateful for YellowMap’s support, which helps ensure that MapLibre remains open, and community-driven mapping framework for everyone.
If you are interested in &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;sponsoring&lt;/a&gt; MapLibre, please reach out to us at &lt;a href=&quot;mailto:sponsor@maplibre.org&quot;&gt;sponsor@maplibre.org&lt;/a&gt;. We would love to hear from you!&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter April 2026</title><link>https://maplibre.org/news/2026-05-02-maplibre-newsletter-april-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-05-02-maplibre-newsletter-april-2026/</guid><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the April 2026 edition of the MapLibre Newsletter! This month, we have exciting updates across all our projects. Key milestones include overhauls for React Native and Flutter, the transition toward MapLibre GL JS v6, and foundational research into a native MLT 3D tile format.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexcristici&quot;&gt;Alex Cristici&lt;/a&gt; improved the resilience of MapLibre Native when the system runs out of memory (see &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4178&quot;&gt;PR&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There now is a new experimental C API for MapLibre Native, which can serve as a foundation for new platforms. See the &lt;a href=&quot;https://github.com/maplibre/maplibre-native-ffi&quot;&gt;new repository&lt;/a&gt; as well as the &lt;a href=&quot;https://github.com/maplibre/maplibre/issues/500&quot;&gt;onboarding discussion&lt;/a&gt;. This is the work of &lt;a href=&quot;https://github.com/sargunv&quot;&gt;Sargun Vohra&lt;/a&gt;, who also used what he learned when creating &lt;a href=&quot;https://maplibre.org/maplibre-compose/&quot;&gt;MapLibre Compose&lt;/a&gt; for the new C API.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Releases:&lt;/strong&gt;&lt;/p&gt;
&lt;table class=&quot;release-table&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;thead data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Platform&lt;/th&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Latest Versions&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Android&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.1.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.1.0&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt;&lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;iOS&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.25.1&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.25.1&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.26.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.26.0&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;Versions &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.22.0&quot;&gt;5.22.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.23.0&quot;&gt;5.23.0&lt;/a&gt;, and &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.24.0&quot;&gt;5.24.0&lt;/a&gt; were released this month, introducing mostly performance improvements and bug fixes along with minor public API additions, and marking the final releases for version 5.&lt;/p&gt;
&lt;p&gt;We have begun releasing version 6 pre-releases featuring the breaking changes planned for this major update. We will continue rolling these out over the next few weeks and expect to finish shortly.&lt;/p&gt;
&lt;p&gt;The primary breaking changes for this version include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dropping WebGL1 support&lt;/strong&gt; to resolve long-standing bugs and feature requests while improving performance and compatibility with modern libraries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transitioning from CommonJS to ESM&lt;/strong&gt;, which will allow us to move faster, adopt modern tools, and upgrade our overall build system and infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;Once all breaking changes are in place, we will provide a migration guide to assist with the transition from version 5 to version 6. While most changes so far are fairly trivial, some may be tricky; we encourage you to try these pre-releases and help us build robust migration documentation for the community.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;It has been over a year since our last major update, and we believe now is the right time to move on from legacy constraints we have carried for a while.&lt;/p&gt;
&lt;p&gt;As always, we would like to thank all our contributors:&lt;/p&gt;
&lt;p&gt;👏 &lt;a href=&quot;https://github.com/xavierjs&quot;&gt;Xavier Bourry&lt;/a&gt;, &lt;a href=&quot;https://github.com/CommanderStorm&quot;&gt;Frank Elsing&lt;/a&gt;, &lt;a href=&quot;https://github.com/kubapelc&quot;&gt;Jakub Pelc&lt;/a&gt;, &lt;a href=&quot;https://github.com/itisyb&quot;&gt;itisyb&lt;/a&gt;, &lt;a href=&quot;https://github.com/YuChunTsao&quot;&gt;Yu Chun Tsao&lt;/a&gt;, &lt;a href=&quot;https://github.com/neodescis&quot;&gt;neodescis&lt;/a&gt;, &lt;a href=&quot;https://github.com/mvanhorn&quot;&gt;Matt Van Horn&lt;/a&gt;, &lt;a href=&quot;https://github.com/Willjfield&quot;&gt;Will Field&lt;/a&gt;, &lt;a href=&quot;https://github.com/ashwinuae&quot;&gt;Ashwin Chandran&lt;/a&gt;, &lt;a href=&quot;https://github.com/kkokkojeong&quot;&gt;Seokcheol Jeong&lt;/a&gt;, &lt;a href=&quot;https://github.com/Lievesley&quot;&gt;Sam&lt;/a&gt;, and &lt;a href=&quot;https://github.com/k-yle&quot;&gt;Kyℓe Hensel&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-tile-mlt&quot;&gt;🧩 MapLibre Tile (MLT)&lt;/h2&gt;
&lt;p&gt;Markus Tremmel has shared initial design considerations and encoding strategies for &lt;strong&gt;MLT 3D&lt;/strong&gt;, building on an original proposal by Anas. This project explores how a dedicated 3D tile format can be optimized for the MapLibre ecosystem while identifying key areas where it diverges from existing standards like 3D Tiles.&lt;/p&gt;
&lt;p&gt;There is potential for direct MapLibre GL JS integration, which would pave the way for more robust 3D capabilities natively and the project is currently seeking feedback on both use cases and technical encoding.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;You can explore the design document and provide feedback on the &lt;a href=&quot;https://github.com/mactrem/mlt-3d&quot;&gt;GitHub
repository&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;️-maplibre-react-native&quot;&gt;⚛️ MapLibre React Native&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre-react-native/releases/tag/v11.0.0&quot;&gt;MapLibre React Native v11&lt;/a&gt; is here, and it is the first release to exclusively support React Native’s new architecture. Alongside this foundational shift, the entire API has been overhauled to align with MapLibre GL JS, making it easier than ever to share knowledge and code between web and native map implementations.&lt;/p&gt;
&lt;p&gt;One of the most exciting additions is style-spec compliant &lt;code&gt;paint&lt;/code&gt; and &lt;code&gt;layout&lt;/code&gt; props on the unified &lt;code&gt;Layer&lt;/code&gt; component. This means layer definitions exported from the style spec can be spread directly onto a &lt;code&gt;Layer&lt;/code&gt; component with no translation needed.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;A full migration guide with before-and-after code snippets for every breaking
change is available in the &lt;a href=&quot;https://maplibre.org/maplibre-react-native/docs/setup/migrations/v11&quot;&gt;v11 migration
docs&lt;/a&gt;.
Grateful to everyone who contributed to this release and look forward to
building on this clean foundation in the versions ahead!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-maplibre-flutter&quot;&gt;🪶 MapLibre Flutter&lt;/h2&gt;
&lt;h3 id=&quot;flutter-maplibre-gl&quot;&gt;flutter-maplibre-gl&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/maplibre/flutter-maplibre-gl&quot;&gt;&lt;strong&gt;flutter-maplibre-gl&lt;/strong&gt;&lt;/a&gt;, the long-standing Flutter plugin, has shipped v0.26.0! This release focuses on closing years of accumulated backlog and bringing the package back to a healthy maintenance baseline.&lt;/p&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/flutter_examples.DQSm5D0o_m7tyQ.webp&quot; alt=&quot;MapLibre Examples Gallery&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1451&quot; height=&quot;744&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;Interactive examples of new features.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Offline regions, rebuilt end-to-end&lt;/strong&gt; — the offline manager now supports pause/resume of downloads, per-tile progress reporting, cache eviction policies, and rate-limit safety on the tile server side.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WASM release mode on Flutter Web&lt;/strong&gt; — long-standing build issues with WASM in release mode have been resolved, making Flutter Web a viable production target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;takeSnapshot()&lt;/code&gt;&lt;/strong&gt; — a single, unified snapshot API now works consistently across Android, iOS, and Web.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tap handling&lt;/strong&gt; — &lt;code&gt;onMapClick&lt;/code&gt; now reliably fires on every tap, including taps on rendered features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature State on Web&lt;/strong&gt; — &lt;code&gt;setFeatureState&lt;/code&gt;, &lt;code&gt;getFeatureState&lt;/code&gt;, and &lt;code&gt;removeFeatureState&lt;/code&gt; are now available on the Web platform, closing a feature parity gap with the native platforms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Camera interpolation&lt;/strong&gt; — &lt;code&gt;easeCamera&lt;/code&gt; now accepts interpolation curves, removing velocity jumps in GPS-following scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronous GeoJSON drag&lt;/strong&gt; — drag handling for GeoJSON features is now synchronous, eliminating stale positions during interactions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A long tail of fixes&lt;/strong&gt; — including Android split-screen behavior, an iOS &lt;code&gt;onStyleLoaded&lt;/code&gt; race condition, and a brand new example app.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:2rem auto;text-align:center;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;background-color:#161b22;border-radius:12px;padding:12px;border:1px solid #30363d&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/flutter_hover.CShgbgaK_2lIAMX.webp&quot; alt=&quot;MapLibre Hover Effect Demo&quot; style=&quot;width:100%;height:auto;display:block;border-radius:6px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1454&quot; height=&quot;806&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.75rem;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.9rem;color:#8b949e;font-style:italic&quot;&gt;&lt;p&gt;A screenshot of the new hover effect.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Full changelog: &lt;a href=&quot;https://github.com/maplibre/flutter-maplibre-gl/blob/main/CHANGELOG.md&quot;&gt;https://github.com/maplibre/flutter-maplibre-gl/blob/main/CHANGELOG.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Package: &lt;a href=&quot;https://pub.dev/packages/maplibre_gl&quot;&gt;https://pub.dev/packages/maplibre_gl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Special thanks to all the contributors and maintainers for shepherding the package through this work.&lt;/p&gt;
&lt;h3 id=&quot;flutter-maplibre&quot;&gt;flutter-maplibre&lt;/h3&gt;
&lt;p&gt;Version &lt;a href=&quot;https://pub.dev/packages/maplibre/changelog#035&quot;&gt;0.3.5&lt;/a&gt; of the &lt;a href=&quot;https://github.com/josxha/flutter-maplibre&quot;&gt;flutter-maplibre&lt;/a&gt; has been released, featuring several improvements to consistency and stability alongside general maintenance. The MapLibre SDKs and the dependencies on &lt;code&gt;jni&lt;/code&gt; / &lt;code&gt;jnigen&lt;/code&gt; have been updated.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;As an ongoing task, work continues on static typed expressions that fit well
into Dart. Ideas regarding the Dart syntax, can be &lt;a href=&quot;https://github.com/josxha/flutter-maplibre/issues/72#issuecomment-4358841272&quot;&gt;discussed
here&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community Spotlight&lt;/h2&gt;
&lt;p&gt;HDTP is an open data platform by Codeando México that features a notable GTFS Realtime (GTFS-RT) visualizer. This tool combines MapLibre with deck.gl to create &lt;a href=&quot;https://hdtp.codeandomexico.org/datos/mex-cdmx-cdmx-metrobus-rt&quot;&gt;an interactive map (&lt;em&gt;checkout the cine mode&lt;/em&gt;)&lt;/a&gt; for exploring real-time transit data, efficiently displaying live vehicle positions.&lt;/p&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;h3 id=&quot;linuxfest-northwest&quot;&gt;LinuxFest Northwest&lt;/h3&gt;
&lt;p&gt;On April 25, Stephanie May and Matt Wilden delivered a joint presentation at &lt;a href=&quot;https://linuxfestnorthwest.org/&quot;&gt;LinuxFest Northwest&lt;/a&gt; on the synergies between MapLibre and OpenStreetMap US. They discussed how the tooling and infrastructure across both ecosystems have matured enough for anyone to build an open-source map—including building custom tiles, styling layers, and scaling a CDN or dynamic tile server.&lt;/p&gt;
&lt;p&gt;The enthusiastic crowd was eager to dive deeper into the world of open mapping. You can find the slides for their talk, titled “The Latest in Open Source Maps,” &lt;a href=&quot;https://github.com/mizmay/LinuxFestNorthwest2026/blob/main/The%20Latest%20in%20Open%20Source%20Maps.pdf&quot;&gt;here&lt;/a&gt;, along with &lt;a href=&quot;https://github.com/mizmay/LinuxFestNorthwest2026&quot;&gt;various demos showcasing how accessible working with open-source data and maps has become&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Native: May 13, 2026 – 7:00–8:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: May 13, 2026 – 8:00–9:00 PM Berlin Time (UTC+2)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;May 27, 2026 – 9–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter March 2026</title><link>https://maplibre.org/news/2026-04-01-maplibre-newsletter-march-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-04-01-maplibre-newsletter-march-2026/</guid><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the March 2026 edition of the MapLibre Newsletter! This month marks a significant transition for our community. We have made the decision to &lt;a href=&quot;https://maplibre.org/news/2026-03-17-reinivisioning-the-bounty-program/&quot;&gt;sunset the current MapLibre Bounty Program&lt;/a&gt; as we shift towards a contributor recognition system.&lt;/p&gt;
&lt;p&gt;Please stay tuned for more details in the coming months as we finalize how this new system will empower our community. In the meantime, we encourage everyone to read the FAQ included in our recent blog post for more context on this change.&lt;/p&gt;
&lt;p&gt;This evolution is made possible by the continued and growing support from our partners.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;🙏 We are particularly grateful to &lt;a href=&quot;https://www.notion.com/&quot;&gt;Notion&lt;/a&gt; for their
recent &lt;a href=&quot;https://opencollective.com/maplibre/contributions/935577&quot;&gt;financial
contribution&lt;/a&gt; via
Open Collective.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Contributions like these are vital as we look out for co-funding models for major features like Terrain3D and the maturation of the MapLibre Tile (MLT) project.&lt;/p&gt;
&lt;p&gt;Now, let’s dive in for the latest updates!&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;h3 id=&quot;releases&quot;&gt;Releases&lt;/h3&gt;
&lt;table class=&quot;release-table&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;thead data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Platform&lt;/th&gt; &lt;th data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Latest Versions&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Android&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.0.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.0.0&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.0.1&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.0.1&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.0.2&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;13.0.2&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt;&lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;iOS&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.24.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.24.0&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.25.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.25.0&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt;&lt;tr data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;td class=&quot;platform-name&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt; &lt;strong data-astro-cid-t5zbhcjr=&quot;&quot;&gt;Node.js&lt;/strong&gt; &lt;/td&gt; &lt;td class=&quot;version-links&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;  &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/node-v6.4.0&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.4.0&lt;/a&gt;  ,   &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/node-v6.4.1&quot; data-astro-cid-t5zbhcjr=&quot;&quot;&gt;6.4.1&lt;/a&gt;    &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
&lt;h3 id=&quot;terrain3d-call-for-funding&quot;&gt;Terrain3D: Call for Funding&lt;/h3&gt;
&lt;p&gt;Support for Terrain3D is one of the &lt;a href=&quot;https://github.com/maplibre/maplibre-native/issues/252&quot;&gt;most upvoted&lt;/a&gt; features for MapLibre Native. While several, (mostly) vibe coded prototypes have been developed, delivering a production-grade implementation is something that requires a significant investment in graphics engineering and expertise.&lt;/p&gt;
&lt;div style=&quot;
max-width: 600px;
margin: 1.5rem auto;
text-align: center;
padding: 0 0.75rem;
&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/terrain-3d.fiBm63Yv_2mEdja.webp&quot; alt=&quot;MapLibre Terrain 3D&quot; style=&quot;
width: 100%;
height: auto;
display: block;
&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;915&quot; height=&quot;393&quot;&gt;&lt;p style=&quot;margin-top:0.5rem;margin-bottom:0;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.8rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;A visualization of elevation data&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;We are pleased to announce significant progress! We have identified a company that is willing to commit substantial funding to this initiative. However, &lt;strong&gt;they are seeking an additional co-funding partner to bring this feature to life&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;If your organization is interested in supporting this development, please
reach out to us at &lt;a href=&quot;mailto:team@maplibre.org&quot;&gt;team@maplibre.org&lt;/a&gt;. We are also open to connecting with
individual developers who are interested in contributing to this effort.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;To clarify, MapLibre (the organization) is not directly funding Terrain3D for MapLibre Native at this stage. Instead we are facilitating connections between interested parties (companies, developers). MapLibre will provide maintainer support through consensus building, quality control, CI/CD, communication and release management.&lt;/p&gt;
&lt;p&gt;We have created a dedicated branch &lt;code&gt;feature/terrain-3d&lt;/code&gt; for continued work on the initial prototype. You can follow the progress in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4190&quot;&gt;this PR&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;We had a great month with 5 new releases: &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.20.0&quot;&gt;v5.20.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.20.1&quot;&gt;v5.20.1&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.20.2&quot;&gt;v5.20.2&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.21.0&quot;&gt;v5.21.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.21.1&quot;&gt;v5.21.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;✨ Some of the highlights of this month include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We introduced updateable features to the &lt;a href=&quot;https://maplibre.org/geojson-vt/&quot;&gt;geojson-vt&lt;/a&gt; library, which improved the GeoJSON update performance significantly. While this initially caused a few nasty bugs which were quickly resolved thanks to &lt;a href=&quot;https://github.com/wayofthefuture&quot;&gt;Ryan Scully&lt;/a&gt;, the results are worth it. The latest version is reportedly 7x faster compared to when we began GeoJSON optimizations a few months ago. Many thanks to everyone who contributed code, helped with the testing, and submitted bug reports!&lt;/li&gt;
&lt;li&gt;Memory optimizations and removal of legacy code supporting outdated browsers, mainly lead by &lt;a href=&quot;https://github.com/johanrd&quot;&gt;Johan&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improved ETag handling added by &lt;a href=&quot;https://github.com/rivkamatan&quot;&gt;Rivka Matan&lt;/a&gt; and &lt;a href=&quot;https://github.com/wayofthefuture&quot;&gt;Ryan Scully&lt;/a&gt; stops the map from re-downloading unchanged data, saving bandwidth and speeding up load times.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/maplibre-style-spec/layers/#resampling&quot;&gt;Resampling&lt;/a&gt; support is available now. This was added by &lt;a href=&quot;https://github.com/larsmaxfield&quot;&gt;Lars Maxfield&lt;/a&gt;. This option lets users turn off smoothing to see raw, pixel-accurate terrain data instead of a blended or blurry image&lt;/li&gt;
&lt;li&gt;An example of how to use MapLibre GL JS with 3D tiles example was added by &lt;a href=&quot;https://github.com/hh-hang&quot;&gt;Hang&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Last month we mentioned starting pre-releases for Version 6. However due to the high volume of contributions to the current branch, we have decided to continue with Version 5 for now. We still aim to begin the Version 6 transition in the coming months.&lt;/p&gt;
&lt;p&gt;🏆 The sheer volume of work contributed this month is amazing! A huge thanks to this month’s contributors:
&lt;a href=&quot;https://github.com/claudiobgit&quot;&gt;Claudio&lt;/a&gt;, &lt;a href=&quot;https://github.com/Bingtagui404&quot;&gt;Baixiaochun&lt;/a&gt;, &lt;a href=&quot;https://github.com/xavierjs&quot;&gt;Xavier Bourry&lt;/a&gt;, &lt;a href=&quot;https://github.com/johanrd&quot;&gt;Johan&lt;/a&gt;, &lt;a href=&quot;https://github.com/kikuomax&quot;&gt;Kikuo Emoto&lt;/a&gt;, &lt;a href=&quot;https://github.com/katemihalikova&quot;&gt;Kate Miháliková&lt;/a&gt;, &lt;a href=&quot;https://github.com/garethbowker&quot;&gt;Gareth Bowker&lt;/a&gt;, &lt;a href=&quot;https://github.com/dannote&quot;&gt;Danila Poyarkov&lt;/a&gt;, &lt;a href=&quot;https://github.com/ted-piotrowski&quot;&gt;Ted Piotrowski&lt;/a&gt;, &lt;a href=&quot;https://github.com/hh-hang&quot;&gt;Hang&lt;/a&gt;, &lt;a href=&quot;https://github.com/HiroyukiYANO&quot;&gt;yano-h-wni&lt;/a&gt;, &lt;a href=&quot;https://github.com/rivkamatan&quot;&gt;Rivka Matan&lt;/a&gt;, &lt;a href=&quot;https://github.com/wayofthefuture&quot;&gt;Ryan Scully&lt;/a&gt;, &lt;a href=&quot;https://github.com/itisyb&quot;&gt;ItisYB&lt;/a&gt;, &lt;a href=&quot;https://github.com/larsmaxfield&quot;&gt;Lars Maxfield&lt;/a&gt;, &lt;a href=&quot;https://github.com/jtfedd&quot;&gt;JT&lt;/a&gt;, &lt;a href=&quot;https://github.com/madoci&quot;&gt;Stephen Andre&lt;/a&gt; and &lt;a href=&quot;https://github.com/pcardinal&quot;&gt;PierreC&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-tile-mlt&quot;&gt;🧩 MapLibre Tile (MLT)&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://maplibre.org/news/2026-01-23-mlt-release/&quot;&gt;MapLibre Tile (MLT) project&lt;/a&gt; has seen significant progress this month. The Rust implementation is rapidly maturing; we have introduced a comprehensive suite of synthetic tests to ensure stability across edge cases.&lt;/p&gt;
&lt;p&gt;Beyond just stability, we have achieved full decoding and expanded partial encoding support, bringing us closer to a production-grade toolkit. This progress is a major step toward making MLT a viable, high-performance alternative to MVT, offering better compression and faster parsing for large-scale geospatial data.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/TimSylvester&quot;&gt;Tim Sylvester&lt;/a&gt; also made many improvements to the Java CLI tool. The performance for parallel conversion from MVT has been improved by several orders of magnitude. This now makes it a suitable tool to adapt existing MVT creation pipelines.
In addition, the data input of the Java encoder is being &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/pull/1176&quot;&gt;generalized&lt;/a&gt;. This prepares MLT for a future where the data model of MLT that goes beyond MVT parity, enabling support for m-values or encoding lists and nested key-value structures.&lt;/p&gt;
&lt;p&gt;On the rust side (competition is good!), both the encoder and decoder have seen major refactorings by &lt;a href=&quot;https://github.com/nyurik&quot;&gt;Yuri Astraken&lt;/a&gt; and &lt;a href=&quot;https://github.com/CommanderStorm&quot;&gt;Frank Elsinga&lt;/a&gt; that have increased this encoders performance and output quality signifcantly.
It can now beat java in most cases, but this is because we have settings that explore more state-space which is slower.
More engineering is neccesary to improve performance beyond what java offers.
There are also experiments using &lt;a href=&quot;https://github.com/rust-diplomat/diplomat&quot;&gt;diplomat&lt;/a&gt; to provide FFI access to the rust based tooling.
More on this in the next update.&lt;/p&gt;
&lt;p&gt;You can follow the development and check out the &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec&quot;&gt;MLT Specification&lt;/a&gt; on GitHub.&lt;/p&gt;
&lt;h2 id=&quot;-martin&quot;&gt;🦀 Martin&lt;/h2&gt;
&lt;p&gt;This month, like the last month, has been focused on implementing a production-grade MLT encoder/decoder, so there has not been much movement regarding Martin.&lt;/p&gt;
&lt;p&gt;We fixed a startup crash that occurred when &lt;code&gt;ST_Extent&lt;/code&gt; returns a &lt;code&gt;LineString&lt;/code&gt; instead of &lt;code&gt;Polygon&lt;/code&gt; , and added &lt;a href=&quot;https://facebook.github.io/zstd/&quot;&gt;ZSTD support&lt;/a&gt; thanks to &lt;a href=&quot;https://github.com/nuts-rice&quot;&gt;@nuts-rice&lt;/a&gt;.
We also further reworked &lt;a href=&quot;https://maplibre.org/martin/&quot;&gt;our new documentation site&lt;/a&gt; and ironed out a few of the remaining inconsistencies.&lt;/p&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community spotlight&lt;/h2&gt;
&lt;p&gt;We are tracking an exciting development in the rendering world: &lt;a href=&quot;https://terathon.com/blog/decade-slug.html&quot;&gt;the Slug algorithm is now out-of-patent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Most maps currently draw text using pictures of letters, which can look fuzzy when you zoom in close to the map view. The Slug algorithm replaces these pictures with mathematical blueprints, allowing labels to remain perfectly crisp at any angle or scale.&lt;/p&gt;
&lt;div class=&quot;announcement-callout&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;div class=&quot;announcement-content&quot; data-astro-cid-h4bjbk3l=&quot;&quot;&gt; &lt;p&gt;Now that this technology is public property, we are looking for community
members to help us research how to bring these benefits to MapLibre. Join us
in our &lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/493&quot;&gt;GitHub
discussion&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;h3 id=&quot;fossgis&quot;&gt;FOSSGIS&lt;/h3&gt;
&lt;p&gt;MapLibre was well-represented at the &lt;a href=&quot;https://fossgis-konferenz.de/2026/&quot;&gt;FOSSGIS&lt;/a&gt;, a German open source geospatial and OpenStreetMap conference. It was a fantastic opportunity to connect with the community and share updates on our projects.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oliver Wipfli(former MapLibre coordinator) shared how his project &lt;a href=&quot;https://mapterhorn.com/&quot;&gt;Mapterhorn&lt;/a&gt; is expanding from terrain tiles to create a new dataset with satellite coverage.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KiwiKilian&quot;&gt;Kilian Finger&lt;/a&gt; discussed progess on getting &lt;a href=&quot;https://maplibre.org/maplibre-react-native/&quot;&gt;MapLibre React Native&lt;/a&gt; ready for the new architecture.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/about/frank-elsinga/&quot;&gt;Frank Elsinga&lt;/a&gt; and &lt;a href=&quot;https://maplibre.org/about/bart-louwers/&quot;&gt;Bart Louwers&lt;/a&gt; gave a talk on the latest MapLibre developments, specifically introducing the community to MapLibre Tile (MLT).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to view the MapLibre talks at the conference, checkout the recordings below (they are in German):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://media.ccc.de/v/fossgis2026-83258-schnellere-karten-kleinere-maplibre-vektorkacheln-und-weitere-neuerungen&quot;&gt;Schnellere Karten, kleinere MapLibre Vektorkacheln und weitere Neuerungen&lt;/a&gt; (&lt;a href=&quot;https://pretalx.com/media/fossgis2026/submissions/NYSASD/resources/MapLibre-FOSSG_wz7XMwI.pdf&quot;&gt;slides&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://media.ccc.de/v/fossgis2026-84194-verwendung-der-routing-engine-valhalla-mit-dem-maplibre-navigation-sdk&quot;&gt;Verwendung der Routing-Engine Valhalla mit dem MapLibre Navigation SDK&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;fossgiscollage&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mlt-talk.DFqsCFz-_Z1QtDaH.webp&quot; alt=&quot;Photo from Frank&apos;s and Bart&apos;s talk on MapLibre at FOSSGIS. On the slide: Academia, Open Source and Organizations, with hand shaking emoji between them.&quot; style=&quot;display: block; margin: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1333&quot; height=&quot;1000&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-gang.Cot8zaOy_1drw2r.webp&quot; alt=&quot;The MapLibre representation at FOSSGIS.&quot; style=&quot;display: block; margin: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;750&quot; height=&quot;1000&quot; class=&quot;maplibregang&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mapterhorn-talk.DZCmW8ru_Z2oDL8c.webp&quot; alt=&quot;Photo from Oliver&apos;s talk on Mapterhorn&quot; style=&quot;display: block; margin: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1333&quot; height=&quot;1000&quot;&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Navigation: Apr 8, 2026 – 5:00–6:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre Native: Apr 8, 2026 – 6:00–7:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Apr 8, 2026 – 7:00–8:00 PM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apr 29, 2026 – 10:00–11:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt; and join the &lt;code&gt;#maplibre&lt;/code&gt; channel.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>We&apos;re Sun-setting the Bounty Program</title><link>https://maplibre.org/news/2026-03-17-reinivisioning-the-bounty-program/</link><guid isPermaLink="true">https://maplibre.org/news/2026-03-17-reinivisioning-the-bounty-program/</guid><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;
&lt;strong&gt;MapLibre&lt;/strong&gt; is &lt;strong&gt;sun-setting the bounty program&lt;/strong&gt; as originally conceived because it isn’t a sustainable way to incentivize contributions at our current scale.
The Board and maintainers are working hard to identify what comes next.
We will honor any existing bounty commitments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Since our founding, MapLibre has asked sponsors to contribute to a development fund intended to incentivize new feature development; primarily through bounties. After running this program for several years, we’ve concluded it no longer serves our community well.&lt;/p&gt;
&lt;p&gt;Effective March 31, 2026, we will no longer be offering bounties for development work. We will instead pursue roadmap and feature development goals through pathways more typical for open source software.&lt;/p&gt;
&lt;p&gt;We are working toward a &lt;strong&gt;contributor recognition system&lt;/strong&gt; that rewards regular, high-value contributions that sustain and strengthen our community. If you have questions or ideas, please &lt;a href=&quot;mailto:board@maplibre.org&quot;&gt;reach out&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;reason-for-the-change&quot;&gt;Reason for the change&lt;/h2&gt;
&lt;p&gt;We are making this change because the system as it was designed fails on a structural level:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overhead:&lt;/strong&gt; The bureaucratic overhead is high for both MapLibre and our community.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visibility:&lt;/strong&gt; Many very helpful contributions happen outside this system and remain invisible to it, such as community work and ecosystem maintenance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI:&lt;/strong&gt; We need to respond to the rising use of coding agents and AI assisted development; the Bounty System does not adequately incentivize the patterns we need from contributors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compensation:&lt;/strong&gt; The payouts are not competitive enough to be a meaningful or reliable income source in most markets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adoption:&lt;/strong&gt; We have not seen significant usage of this system for contributions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Governing Board’s mission is to sustain and grow this project by recognizing those who invest their time and money in it. A bounty-based model may have seemed like a good idea at first, but at our current scale it creates more problems than it solves.&lt;/p&gt;
&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking ahead&lt;/h2&gt;
&lt;p&gt;We would like to replace the bounty system with a contributor recognition system that rewards impact and community contribution. The Board and maintainers are actively working to define what this looks like, and we will share more details as they are finalized.&lt;/p&gt;
&lt;p&gt;MapLibre exists because of its contributors across code, ecosystem integrations, and community work. That hasn’t changed. Our goal is a well-funded project that can pay the people who sustain it. That starts with sponsorship; if your company builds on MapLibre, please &lt;a href=&quot;/sponsors&quot;&gt;become a sponsor&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;MapLibre remains a community-driven project. If you have feedback or ideas, we want to hear from you. This is an ongoing conversation, and we’re building the future together.&lt;/p&gt;
&lt;h2 id=&quot;frequently-asked-questions&quot;&gt;Frequently asked questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q: What is the history of the bounty program?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MapLibre introduced our bounty program in 2022 to give back to contributors, encourage new participation, and create a lightweight reward system. Developers could sign up, comment on bounty-labeled issues, complete the work, and submit an invoice through OpenCollective. The process was bureaucratic by design, and at the time, we had no budget or runway. We are more established today, and want to align with the common practices of other open source organizations to ensure the sustainability and stability of the project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Is this part of a broader organizational change?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No. MapLibre remains a lean organization with a Governing Board made entirely of volunteers and four part-time staff members.&lt;/p&gt;
&lt;p&gt;Our financial reports are public. We are currently operating at a loss. See our &lt;a href=&quot;/sponsors&quot;&gt;sponsor page&lt;/a&gt; if you want to help.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: What if I have an in-flight bounty?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Contact your maintainer. We will honor existing commitments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: I maintain a MapLibre integration for another platform or framework. When can MapLibre financially support me?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ecosystem maintainers — the volunteers who keep integrations like Flutter, React Native, Qt, and others working — extend MapLibre’s reach into developer communities our core team cannot serve directly. That work matters enormously to us, and to the users and companies downstream who depend on it.&lt;/p&gt;
&lt;p&gt;We can’t pay you directly yet, but it’s a goal we’re working toward. In the meantime, we support ecosystem maintainers in concrete ways: we’re exploring grant-based and commercial funding for larger efforts, we can help with hardware or testing resources if you’re blocked by a missing device or platform, and we can cover reasonable conference travel costs for presenting your work. Reach out to a &lt;a href=&quot;/about&quot;&gt;board member&lt;/a&gt; to start the conversation.&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter February 2026</title><link>https://maplibre.org/news/2026-03-03-maplibre-newsletter-february-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-03-03-maplibre-newsletter-february-2026/</guid><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the February 2026 edition of MapLibre Newsletter! It’s been an active month with exciting updates, from shifting rendering backends to launching a collection of &lt;a href=&quot;https://agentskills.io/home&quot;&gt;agent skills&lt;/a&gt; to perform MapLibre related tasks.&lt;/p&gt;
&lt;p&gt;A special thanks to MapTiler for their continued support. We updated our &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Sponsors&lt;/a&gt; page this month, to make clearer how organizations and individuals can give. If you have been thinking about contributing, there has never been a better time.&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2.5rem 2rem;border:4px solid #B0BEC5;border-radius:8px;margin:0 auto 3rem;max-width:960px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;box-shadow:0 4px 15px rgba(0, 0, 0, 0.05)&quot;&gt;&lt;div style=&quot;display:flex;justify-content:center;align-items:center;gap:4rem;flex-wrap:wrap;width:100%&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;max-height:70px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maptiler-logo.Ci3qDT4M_Z21cNiy.svg&quot; alt=&quot;MapTiler logo&quot; style=&quot;max-height:70px;width:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;812&quot; height=&quot;212&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-top:0.5rem;font-size:0.95rem;text-align:center;color:#455A64;font-style:italic;max-width:35rem&quot;&gt;&lt;p&gt;Our gratitude goes to MapTiler for their continued support to MapLibre.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;With that note, let’s dive into the latest updates across the MapLibre ecosystem!&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Core library: Distance-Based Level-of-Detail (LOD)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nathan Olson implemented a &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4057&quot;&gt;distance-based level-of-detail algorithm&lt;/a&gt; into the core library. However, platform APIs for this functionality still need to be added.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Experimental WebGPU Backends for Mobile&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Birk Skyum implemented a &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4097&quot;&gt;WebGPU backend for Android&lt;/a&gt; and for &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4103&quot;&gt;iOS&lt;/a&gt;. At this point the motivation behind this is more or less “because we can”, but it might offer opportunities to share custom shaders between platforms in the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Hillshading Algorithms Merged&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Andrew Calcutt’s PR that implements additional &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/3965&quot;&gt;hillshade algorithms&lt;/a&gt; has been merged! These algorithms are included in the current pre-release for Node.js, and the next releases for MapLibre iOS and MapLibre Android.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Android: Transitioning to Vulkan by Default&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We released &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/android-v13.0.0&quot;&gt;MapLibre Android 13.0.0&lt;/a&gt; which now uses Vulkan as a default rendering backend. This means that the &lt;code&gt;org.maplibre.gl:android-sdk&lt;/code&gt; package is now using Vulkan. You can use the &lt;code&gt;org.maplibre.gl:android-sdk-opengl&lt;/code&gt; package if you prefer to stick to OpenGL ES for now.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;New Releases: Versions 5.18 and 5.19&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We’ve released versions &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.18.0&quot;&gt;5.18&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.19.0&quot;&gt;5.19&lt;/a&gt; this month. A major highlight is the migration of our documentation to &lt;a href=&quot;https://zensical.org/&quot;&gt;Zensical&lt;/a&gt;, the next-generation replacement of Material for MkDocs, which has served us very well until now. We also added &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/7134&quot;&gt;&lt;code&gt;anisotropicFilterPitch&lt;/code&gt;&lt;/a&gt; to support some interesting data analysis use cases.&lt;/p&gt;
&lt;p&gt;We would like to thank all the contributors this month for these versions - truly inspiring work!&lt;/p&gt;
&lt;p&gt;🙏 &lt;a href=&quot;https://github.com/n4n5&quot;&gt;n4n5&lt;/a&gt;, &lt;a href=&quot;https://github.com/larsmaxfield&quot;&gt;Lars Maxfield&lt;/a&gt;, &lt;a href=&quot;https://github.com/pcardinal&quot;&gt;pcardinal&lt;/a&gt;, &lt;a href=&quot;https://github.com/simonmnt&quot;&gt;Simon&lt;/a&gt;, &lt;a href=&quot;https://github.com/birkskyum&quot;&gt;Birk Skyum&lt;/a&gt;, &lt;a href=&quot;https://github.com/HarelM&quot;&gt;Harel Mazor&lt;/a&gt;, &lt;a href=&quot;https://github.com/ganesh8068&quot;&gt;Ganesh Lokhande&lt;/a&gt;, &lt;a href=&quot;https://github.com/wayofthefuture&quot;&gt;Ryan&lt;/a&gt;, &lt;a href=&quot;https://github.com/CommanderStorm&quot;&gt;Frank Elsinga&lt;/a&gt;, &lt;a href=&quot;https://github.com/kaigritun&quot;&gt;Kai Gritun&lt;/a&gt;, &lt;a href=&quot;https://github.com/pstaszek&quot;&gt;Stanislaw Puda&lt;/a&gt;, &lt;a href=&quot;https://github.com/lucaswoj&quot;&gt;Lucas Wojciechowski&lt;/a&gt;, &lt;a href=&quot;https://github.com/russellporter&quot;&gt;Russell Porter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Road to Version 6&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following PR, which will pave the way for our next major release is now ready to be merged:&lt;/p&gt;
&lt;p&gt;👉 &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/6992&quot;&gt;https://github.com/maplibre/maplibre-gl-js/pull/6992&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We expect to release a first pre-release for version 6 in March. While we haven’t made a major (breaking) release in over a year now to keep things as maintainable as possible, it is now time to move forward with changes we’ve previously deferred.&lt;/p&gt;
&lt;p&gt;The primary change in version 6 regarding developer experience will be the transition to ESM. As the industry moves toward ESM and our current build process is becoming increasingly complex, we are considering not releasing a CommonJS version. This transition will allow us to leverage newer technologies like Rolldown.&lt;/p&gt;
&lt;p&gt;We would love to hear your thoughts on these expected breaking changes to ensure we don’t disrupt your workflow.
Please join the discussion in the &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/issues/6427&quot;&gt;relevant tracking issue&lt;/a&gt; and share your feedback.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-flutter&quot;&gt;🪶 MapLibre Flutter&lt;/h2&gt;
&lt;p&gt;Versions &lt;a href=&quot;https://github.com/josxha/flutter-maplibre/releases/tag/v0.3.4&quot;&gt;0.3.4&lt;/a&gt; and &lt;a href=&quot;https://github.com/josxha/flutter-maplibre/releases/tag/v0.3.4%2B1&quot;&gt;0.3.4+1&lt;/a&gt; of &lt;a href=&quot;https://pub.dev/packages/maplibre&quot;&gt;maplibre&lt;/a&gt; have been released this month, bringing significant architectural improvements and expanded platform support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iOS transition to FFI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A major milestone in this release is the complete transition of the iOS implementation to use &lt;a href=&quot;https://dart.dev/interop/c-interop&quot;&gt;FFI&lt;/a&gt;, removing all remaining usages of method channel serialization. This simplifies the integration between Flutter and the native SDK while providing minor performance gains.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Federated plugin architecture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As part of an ongoing committment to code quality, the plugin has been reorganized into a fully federated plugin architecture, separating each platform implementation into a dedicated packages. This restructuring improves long-term maintainability and allows each platform to evolve independently. These changes happened under the hood and require no migration from users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Experimental desktop support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Experimental support for Windows and macOS has been introduced via a WebView–based implementation that uses MapLibre GL JS. This is a simple solution to bring performant vector map rendering to these desktop platforms while broader native support continues to mature.&lt;/p&gt;
&lt;div style=&quot;margin-bottom:2rem;width:100%;display:flex;flex-direction:column;align-items:center&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/flutter-windows.Dv59z4vD_Z1aXmFO.webp&quot; alt=&quot;MapLibre GL JS map in a Flutter App on Windows&quot; style=&quot;width:100%;max-width:650px;height:auto;display:block;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2538&quot; height=&quot;1430&quot;&gt;&lt;p style=&quot;margin-top:0.75rem;margin-bottom:0;line-height:1.4;text-align:center;width:100%;max-width:550px&quot;&gt;&lt;em style=&quot;font-size:0.85rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;MapLibre GL JS map rendering within a Flutter App on Windows.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Documentation and Future Roadmap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The documentation website has been migrated to Zensical alongside the broader MapLibre migration. &lt;a href=&quot;https://flutter-maplibre.pages.dev/docs/&quot;&gt;Check it out&lt;/a&gt; and let us know what you think.&lt;/p&gt;
&lt;p&gt;Looking ahead, work is progressing on typed style layer properties and expressions, a highly anticipated feature. We are currently targeting static typing for style expressions, paint/layout properties, and new style layer inspection capabilities for the upcoming &lt;a href=&quot;https://github.com/josxha/flutter-maplibre/milestone/12&quot;&gt;v0.4.0&lt;/a&gt; release.&lt;/p&gt;
&lt;h2 id=&quot;-maplibre-agent-skills&quot;&gt;🤖 Maplibre Agent Skills&lt;/h2&gt;
&lt;p&gt;In an effort to move with the times and inform the LLMs of all the great things you can build with MapLibre, we’ve launched &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills&quot;&gt;&lt;code&gt;maplibre-agent-skills&lt;/code&gt;&lt;/a&gt;, a library of structured knowledge files that help AI coding assistants (Claude Code, Cursor, GitHub Copilot) write better MapLibre applications.&lt;/p&gt;
&lt;p&gt;Rather than putting up with bad or wrong MapLibre integrations, we’re directly informing the AI agents so they in turn share good information and the right recommendations on when it makes sense to use MapLibre, how to deal with tile sources and other renderer resources, and how to follow open-ecosystem patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Skills available now:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;maplibre-tile-sources&lt;/code&gt; — choosing hosted vs. self-hosted tiles, OpenFreeMap, PMTiles, glyphs, CORS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maplibre-pmtiles-patterns&lt;/code&gt; — serverless tile hosting on S3, R2, and static hosts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maplibre-mapbox-migration&lt;/code&gt; — migrating from Mapbox GL JS to MapLibre GL JS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Visit &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills&quot;&gt;&lt;code&gt;maplibre-agent-skills&lt;/code&gt;&lt;/a&gt; for more details on how to use or install these, or review the &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills/issues&quot;&gt;open issues&lt;/a&gt; for what’s next.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We’re looking for contributors.&lt;/strong&gt; Skills are plain markdown files, easy to read, review. We welcome your expansions, corrections and questions. If you’ve tackled geocoding, routing, styling, framework integration (React, Vue, Angular, Flutter, Swift), or performance — your experience can make a big impact.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills/blob/main/CONTRIBUTING.md&quot;&gt;contributing guidelines&lt;/a&gt; for how to write a skill, or &lt;a href=&quot;https://github.com/maplibre/maplibre-agent-skills/issues&quot;&gt;open an issue&lt;/a&gt; to propose a new one we haven’t thought of yet.&lt;/p&gt;
&lt;h2 id=&quot;-style-spec&quot;&gt;🎨 Style Spec&lt;/h2&gt;
&lt;p&gt;The MapLibre Style Spec continues to evolve to support more complex styling needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/maplibre-style-spec/expressions/#split&quot;&gt;&lt;code&gt;split&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://maplibre.org/maplibre-style-spec/expressions/#join&quot;&gt;&lt;code&gt;join&lt;/code&gt;&lt;/a&gt;, which allow better string manipulation, are now part of the spec and are expected to be incorporated in MapLibre GL JS soon.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maplibre.org/maplibre-style-spec/expressions/#resampling&quot;&gt;&lt;code&gt;resampling&lt;/code&gt;&lt;/a&gt; was also added to support other layers besides raster.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;symbol-elevation&lt;/code&gt; will probably land soon to allow better support for placing symbols in a 3D map, check it out here:
&lt;a href=&quot;https://github.com/maplibre/maplibre-style-spec/pull/1508&quot;&gt;https://github.com/maplibre/maplibre-style-spec/pull/1508&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-rs&quot;&gt;🦀 maplibre-rs&lt;/h2&gt;
&lt;p&gt;In February our focus has been on text rendering, with the following enhancements merged in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SDF renderer plugin, adding support for text labels as shown on the picture below. Thanks to @maxammann for the &lt;a href=&quot;https://github.com/maplibre/maplibre-rs/pull/314&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Support for configurable text-field property for symbol layers, so it’s possible to e.g. set the language of the labels. Thanks to @birkskyum for the &lt;a href=&quot;https://github.com/maplibre/maplibre-rs/pull/326&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Render tests harness added to the project. Thanks to @birkskyum for the &lt;a href=&quot;https://github.com/maplibre/maplibre-rs/pull/331&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin-bottom:2rem;width:100%;display:flex;flex-direction:column;align-items:center&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-rs-text.Bbj8NCVH_1MUhl5.webp&quot; alt=&quot;SDF text rendering in maplibre-rs&quot; style=&quot;width:100%;max-width:650px;height:auto;display:block;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1408&quot; height=&quot;1068&quot;&gt;&lt;p style=&quot;margin-top:0.75rem;margin-bottom:0;line-height:1.4;text-align:center;width:100%;max-width:550px&quot;&gt;&lt;em style=&quot;font-size:0.85rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;Demonstration of the new SDF-based text rendering in maplibre-rs.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2 id=&quot;-maplibre-tile-mlt&quot;&gt;🧩 MapLibre Tile (MLT)&lt;/h2&gt;
&lt;p&gt;There is a growing interest in &lt;a href=&quot;https://maplibre.org/news/2026-01-23-mlt-release/&quot;&gt;the new format&lt;/a&gt;. Our current priorities are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mature decoders. In particular, we are rebuilding the test infrastructure to ensure high quality decoders in all the major languages.&lt;/li&gt;
&lt;li&gt;Encoders in Rust and C++. Having mature encoders will allow integration into all kinds of tools such as databases and tiles servers.&lt;/li&gt;
&lt;li&gt;Leverage the native strengths of the MLT directly. For example, in MapLibre GL JS we aim to move away from the current method of converting data into an MVT-style model.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📣 Call for Volunteers: MLT Logo&lt;/p&gt;
&lt;p&gt;The MLT project is looking for a volunteer to design our official logo. This is a great opportunity to contribute to the project and leave a lasting mark on the MapLibre ecosystem.
Please &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/issues/942&quot;&gt;join the discussion&lt;/a&gt; to provide your inputs or share your submissions!&lt;/p&gt;
&lt;p&gt;We’ve made great progress on the tooling side, including a Rust-based TUI and a dedicated QGIS plugin 🎉 Stay tuned for more updates!&lt;/p&gt;
&lt;div style=&quot;display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1.5rem;width:100%;max-width:960px;margin:0 auto 2rem&quot;&gt;&lt;div style=&quot;flex:1&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mlt-tui.DwUg70cZ_1TXkOv.webp&quot; alt=&quot;MLT Terminal UI (TUI) showing geometry inspection&quot; style=&quot;width:100%;height:auto;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1904&quot; height=&quot;953&quot;&gt;&lt;p style=&quot;margin-top:0.5rem;font-size:0.85rem;color:#666;text-align:center&quot;&gt;&lt;em&gt;MLT TUI: Direct feature inspection within the terminal.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style=&quot;flex:1&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mlt-qgis.HNtANoDX_ZLTeIz.webp&quot; alt=&quot;QGIS Desktop application showing MLT data integration&quot; style=&quot;width:100%;height:auto;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;p style=&quot;margin-top:0.5rem;font-size:0.85rem;color:#666;text-align:center&quot;&gt;&lt;em&gt;MLT Data integration progress within the QGIS ecosystem.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-martin&quot;&gt;⚙️ Martin&lt;/h2&gt;
&lt;p&gt;While it has been a relatively quiet month as we focus on MLT development, we’ve still shipped several key improvements to the tile server:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web UI Fixes:&lt;/strong&gt; The path-prefix now works correctly within the Web UI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Smarter Routing:&lt;/strong&gt; Common URL mistakes (e.g., using &lt;code&gt;/source.mvt&lt;/code&gt; instead of &lt;code&gt;/source&lt;/code&gt;) now return a 301 redirect instead of a 404, including periodic log hints to help fix configurations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;COG Stability:&lt;/strong&gt; The experimental Cloud Optimized GeoTIFF (COG) backend was tightened significantly (thanks to &lt;a href=&quot;https://github.com/Auspicus&quot;&gt;David E Disch&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/martin/pull/2510&quot;&gt;PR #2510&lt;/a&gt;). To ensure stability, COGs must now be fully WebMercator-compatible (EPSG:3857), tiled, and consistently sized. Some previously ambiguous COGs may no longer load as we move toward a more predictable, production-ready implementation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/manbhav234&quot;&gt;Manbhav Sugla&lt;/a&gt; also migrated &lt;a href=&quot;https://maplibre.org/martin/&quot;&gt;our documentation&lt;/a&gt; to Zensical, which looks much more modern than what we had before.&lt;/p&gt;
&lt;h2 id=&quot;-community-spotlight&quot;&gt;✨ Community spotlight&lt;/h2&gt;
&lt;p&gt;Yossef from our community has build &lt;strong&gt;QGIS2VectorTiles&lt;/strong&gt; which streamlines the process of packing a QGIS project into a styled vector tile package ready for MapLibre. It allows users to design maps within the familiar and flexible QGIS Desktop and export stunning MapLibre client-side web maps leveraging GDAL’s MVT driver.&lt;/p&gt;
&lt;p&gt;The exported output package includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vector tile source: &lt;code&gt;XYZ&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Styled QGIS layer file: A &lt;code&gt;.qlr&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;MapLibre style: A ready-tp-use &lt;code&gt;.json&lt;/code&gt; stylesheet&lt;/li&gt;
&lt;li&gt;MapLibre sprites &lt;em&gt;(optional)&lt;/em&gt; :&lt;code&gt;.png&lt;/code&gt; and &lt;code&gt;.json&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;A ready-to-use MapLibre viewer: A pre-configured &lt;code&gt;.html&lt;/code&gt; file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This package is ideal for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client-side web map rendering via MapLibre, OpenLayers, and Leaflet&lt;/li&gt;
&lt;li&gt;Lightweight WMS/WMTS vector tile serving via GeoServer and QGIS Server&lt;/li&gt;
&lt;li&gt;Sharing complex, multi-source styled QGIS projects packaged as a single data source and layer file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A short demo is attached:&lt;/p&gt;
&lt;div style=&quot;margin-bottom:2rem;width:100%;display:flex;flex-direction:column;align-items:center&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/qgis2-vector-tiles.D7dXsT28_Z1utwSB.webp&quot; alt=&quot;QGIS2VectorTiles workflow demo&quot; style=&quot;width:100%;max-width:650px;height:auto;display:block;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;818&quot; height=&quot;480&quot;&gt;&lt;p style=&quot;margin-top:0.75rem;margin-bottom:0;line-height:1.4;text-align:center;width:100%;max-width:550px&quot;&gt;&lt;em style=&quot;font-size:0.85rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;Exporting styled vector tiles directly from QGIS.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;More information is available on the &lt;a href=&quot;https://gallpeters.github.io/QGIS2VectorTiles/&quot;&gt;plugin homepage&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Navigation: Mar 11, 2026 – 5:00–6:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre Native: Mar 11, 2026 – 6:00–7:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Mar 11, 2026 – 7:00–8:00 PM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mar 25, 2026 – 9:00–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔗 &lt;a href=&quot;https://notime.zone/OmyPkU_Ha6K7W&quot;&gt;View meeting times in your local timezone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt;.
We’d love to see you there!&lt;/p&gt;</content:encoded><author/></item><item><title>CalTopo joins the MapLibre Sponsorship program</title><link>https://maplibre.org/news/2026-02-16-caltopo-announcement/</link><guid isPermaLink="true">https://maplibre.org/news/2026-02-16-caltopo-announcement/</guid><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We’re pleased to announce that &lt;a href=&quot;https://caltopo.com/about/&quot;&gt;CalTopo&lt;/a&gt; is now a &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;Silver sponsor&lt;/a&gt; of the MapLibre project.&lt;/p&gt;
&lt;div style=&quot;background-color:white;padding:2rem;border:10px solid #cfd8dc;border-radius:0;margin-bottom:3rem;display:flex;justify-content:center;align-items:center;gap:2rem;flex-wrap:nowrap;overflow:hidden&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;width:40%;max-width:300px;height:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/caltopo-logo.D8Dc8mJ3_mYFNo.svg&quot; alt=&quot;CalTopo logo&quot; style=&quot;width:40%;max-width:330px;height:auto;object-fit:contain&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;395&quot; height=&quot;96&quot;&gt;&lt;/div&gt;
&lt;p&gt;CalTopo has built one of the most trusted field mapping platforms in the US, relied on by search and rescue teams, wildland firefighters, and backcountry adventurers who need maps to work when it counts. We’re proud to welcome them as a MapLibre sponsor — and to support the open-source rendering infrastructure that powers their maps.&lt;/p&gt;
&lt;p&gt;CalTopo is an app for collaborative map building and offline adventuring, and they rely heavily on MapLibre powering their &lt;a href=&quot;https://training.caltopo.com/all_users/getting-started/3D&quot;&gt;3D maps&lt;/a&gt;, making it possible for users to explore terrain in a more intuitive, visual way.&lt;/p&gt;
&lt;div style=&quot;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:2rem&quot;&gt;&lt;iframe src=&quot;https://player.vimeo.com/video/836970545&quot; style=&quot;position:absolute;top:0;left:0;width:100%;height:100%&quot; frameBorder=&quot;0&quot; allow=&quot;autoplay; fullscreen; picture-in-picture&quot; allowFullScreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Below, the CalTopo team shares more about why they chose to support MapLibre and how it fits into their product roadmap.&lt;/p&gt;
&lt;h2 id=&quot;what-motivated-caltopo-to-support-maplibre&quot;&gt;What motivated CalTopo to support MapLibre?&lt;/h2&gt;
&lt;p&gt;MapLibre is a core part of how CalTopo works and we rely on it every day to deliver the mapping experience our users expect. Supporting MapLibre is about investing in an organization that we depend on and believe in. When the libraries continue to grow and improve, it helps us build better tools for our community and ensures the long-term stability of the mapping technology behind our apps.&lt;/p&gt;
&lt;h2 id=&quot;how-does-maplibre-fit-into-your-product-and-technical-roadmap&quot;&gt;How does MapLibre fit into your product and technical roadmap?&lt;/h2&gt;
&lt;p&gt;MapLibre plays a central role in how people experience CalTopo. In our mobile app, it’s the map engine that displays all of our layers, routes, and user data. On the web, &lt;a href=&quot;https://caltopo.com/map.html#ll=38.80547,-98.41553&amp;amp;z=5&amp;amp;b=mbt&quot;&gt;MapLibre powers our 3D maps&lt;/a&gt;, making it possible for users to explore terrain in a more intuitive, visual way. As we continue to invest in performance and expand our 3D capabilities, MapLibre remains an important part of how we bring those ideas to life.&lt;/p&gt;
&lt;h2 id=&quot;what-do-open-source-mapping-tools-mean-for-your-community&quot;&gt;What do open-source mapping tools mean for your community?&lt;/h2&gt;
&lt;p&gt;Open-source mapping tools make it possible for us to stay focused on what matters most to our users. By building on reliable, community-driven libraries, we’re able to move faster, keep costs down, and put more effort into solving real planning and navigation challenges. That ultimately means a better product for our users and access to powerful tools without unnecessary barriers.&lt;/p&gt;
&lt;h2 id=&quot;is-there-a-message-youd-like-to-share-with-maplibre-contributors-and-users&quot;&gt;Is there a message you’d like to share with MapLibre contributors and users?&lt;/h2&gt;
&lt;p&gt;We’re thankful for the work and care that goes into the libraries and MapLibre organization. The time and effort contributed by the community have a direct impact on the tools our users rely on every day. We’re proud to support this work and excited to be part of an open mapping ecosystem that continues to grow and improve through collaboration.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;We’re grateful to CalTopo for their support and for sharing their perspective.
Sponsorships like this help strengthen the long-term sustainability of the
MapLibre project. If you are interested in sponsoring MapLibre, we invite you
to learn more about our &lt;a href=&quot;https://maplibre.org/sponsors/&quot;&gt;sponsorship program&lt;/a&gt;.&lt;/p&gt;</content:encoded><author/></item><item><title>MapLibre Newsletter January 2026</title><link>https://maplibre.org/news/2026-02-03-maplibre-newsletter-january-2026/</link><guid isPermaLink="true">https://maplibre.org/news/2026-02-03-maplibre-newsletter-january-2026/</guid><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the January 2026 edition of MapLibre Newsletter! This edition covers project updates across the MapLibre ecosystem, a round-up of events from the past month, and highlights from our growing global community.&lt;/p&gt;
&lt;p&gt;MapLibre continues to move forward thanks to the support of its community. Since launching &lt;a href=&quot;https://github.com/sponsors/maplibre&quot;&gt;GitHub Sponsors&lt;/a&gt;, 87 sponsors have supported MapLibre over time, with 35 sponsors currently backing the project, alongside 40+ community backers on &lt;a href=&quot;https://opencollective.com/maplibre&quot;&gt;Open Collective&lt;/a&gt; contributing varied amounts.&lt;/p&gt;
&lt;p&gt;Thank you to everyone who supports MapLibre with their time, feedback, code, and financial contributions 💙.&lt;/p&gt;
&lt;div style=&quot;
background-color: white;
padding: 2rem;
border: 8px solid #1f78c8;
margin: 0 auto 3rem;
max-width: 960px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 1.5rem;
&quot;&gt;&lt;div style=&quot;
display: flex;
justify-content: center;
align-items: center;
gap: 3rem;
flex-wrap: wrap;
width: 100%;
&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/maplibre-logo-for-light-bg.CSR25x_s_1MmUEv.svg&quot; alt=&quot;MapLibre logo&quot; style=&quot;max-height: 80px; width: auto; object-fit: contain;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1354&quot; height=&quot;317&quot;&gt;&lt;/div&gt;&lt;div style=&quot;
margin-top: 0.5rem;
font-size: 1rem;
text-align: center;
color: #263238;
font-style: italic;
max-width: 42rem;
&quot;&gt;&lt;p&gt;Our sincere thanks to the individuals and organizations who support MapLibre
through GitHub Sponsors and Open Collective. Your contributions, big or
small, help keep the project open, independent, and community-driven.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;-maplibre-native&quot;&gt;📱 MapLibre Native&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We’ve published the test app for iOS on TestFlight!&lt;/p&gt;
&lt;p&gt;If you have a spare iPhone lying around, please enroll and run the ‘long running test’ made by &lt;a href=&quot;https://github.com/adrian-cojocaru&quot;&gt;Adrian Cojocaru&lt;/a&gt;. Any crashes are automatically reported to our Sentry project and will be available for MapLibre developers to investigate&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;true&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Testflight link: &lt;a href=&quot;https://testflight.apple.com/join/h81pYA1M&quot;&gt;https://testflight.apple.com/join/h81pYA1M&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/NathanMOlson&quot;&gt;Nathan Olson&lt;/a&gt; added camera roll support to MapLibre Native (&lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/3011&quot;&gt;#3011&lt;/a&gt;). This feature is now available on both MapLibre iOS and MapLibre Android.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nathan also is working on a distance-based level-of-detail(LOD) implementation in &lt;a href=&quot;https://github.com/maplibre/maplibre-native/pull/4057&quot;&gt;#4057&lt;/a&gt;. This is the same algorithm that is used for MapLibre GL JS. If you (also) have an aviation related use case for MapLibre Native we would love to hear from you.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Releases this month:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre iOS &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.23.0&quot;&gt;6.23.0&lt;/a&gt;, &lt;a href=&quot;https://github.com/maplibre/maplibre-native/releases/tag/ios-v6.22.2&quot;&gt;6.22.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-gl-js&quot;&gt;🌐 MapLibre GL JS&lt;/h2&gt;
&lt;p&gt;Versions &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.16.0&quot;&gt;5.16&lt;/a&gt; and &lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.17.0&quot;&gt;5.17&lt;/a&gt; were released this month.
We also integrated the &lt;a href=&quot;https://github.com/maplibre/geojson-vt&quot;&gt;&lt;code&gt;geojson-vt&lt;/code&gt;&lt;/a&gt; version that was recently onboarded into the MapLibre organization, which should facilitate faster GeoJSON updates in the near future.&lt;/p&gt;
&lt;p&gt;We are looking to improve GeoJSON serialization, including addressing limitations related to nested properties. We’d love to get community feedback on the following PR:
&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/pull/6992&quot;&gt;https://github.com/maplibre/maplibre-gl-js/pull/6992&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once this PR is merged and GeoJSON serialization is improved, it will pave the way for releasing version 6 as this will be breaking. Version 6 will also include additional breaking changes that we’ve gathered over the past year, which are described in the following issue:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maplibre/maplibre-gl-js/issues/6427&quot;&gt;https://github.com/maplibre/maplibre-gl-js/issues/6427&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any feedback is very welcome.&lt;/p&gt;
&lt;p&gt;We would like to thank this month’s contributors, every contribution helps make the library better for everyone who uses it. THANK YOU! 🙌&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lucaswoj&quot;&gt;Lucas Wojciechowski&lt;/a&gt;, &lt;a href=&quot;https://github.com/lesbaa&quot;&gt;Les&lt;/a&gt;, &lt;a href=&quot;https://github.com/melitele&quot;&gt;melitele&lt;/a&gt;, &lt;a href=&quot;https://github.com/1ec5&quot;&gt;Minh Nguyễn&lt;/a&gt;, &lt;a href=&quot;https://github.com/pstaszek&quot;&gt;Stanislaw Puda&lt;/a&gt;, &lt;a href=&quot;https://github.com/larsmaxfield&quot;&gt;Lars Maxfield&lt;/a&gt;, &lt;a href=&quot;https://github.com/ToHold&quot;&gt;ToHold&lt;/a&gt;, &lt;a href=&quot;https://github.com/tavimori&quot;&gt;Licheng Mao&lt;/a&gt;,
&lt;a href=&quot;https://github.com/wayofthefuture&quot;&gt;Ryan&lt;/a&gt;, &lt;a href=&quot;https://github.com/mizmay&quot;&gt;Stephanie May&lt;/a&gt;, &lt;a href=&quot;https://github.com/Syncret&quot;&gt;yujian&lt;/a&gt;, &lt;a href=&quot;https://github.com/HarelM&quot;&gt;Harel Mazor&lt;/a&gt;, &lt;a href=&quot;https://github.com/ciscorn&quot;&gt;Taku Fukada&lt;/a&gt;, &lt;a href=&quot;https://github.com/Auspicus&quot;&gt;David E Disch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;-maplibre-tile&quot;&gt;🧩 MapLibre Tile&lt;/h2&gt;
&lt;p&gt;This month we &lt;a href=&quot;https://maplibre.org/news/2026-01-23-mlt-release/&quot;&gt;officially announced&lt;/a&gt; MapLibre Tile!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/TimSylvester&quot;&gt;Tim Sylvester&lt;/a&gt; is working on adding PMTiles support to the Java Encoder CLI (&lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/pull/798&quot;&gt;#798&lt;/a&gt;). The Java CLI tools can be downloaded from the &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/releases?q=java&amp;amp;expanded=true&quot;&gt;releases page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We have added coverage checking to the Java encoder/decoder. At the &lt;a href=&quot;https://app.codecov.io/github/maplibre/maplibre-tile-spec&quot;&gt;Codecov&lt;/a&gt; page you can see that Rust and Java have some catching up to do to reach the coverage number of the TypeScript decoder.&lt;/p&gt;
&lt;p&gt;We have a monthly community call to discuss MLT developments, if you would like an invite, send a message to &lt;a href=&quot;mailto:team@maplibre.org&quot;&gt;team@maplibre.org&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;
max-width: 600px;
margin: 1.5rem auto;
text-align: center;
padding: 0 0.75rem;
&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/globe.CUXFivbm_6VKw5.webp&quot; alt=&quot;MapLibre Tile demo site showing vector tiles and map styles&quot; style=&quot;
width: 100%;
height: auto;
display: block;
&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4096&quot; height=&quot;2386&quot;&gt;&lt;p style=&quot;margin-top:0.5rem;margin-bottom:0;line-height:1.4&quot;&gt;&lt;em style=&quot;font-size:0.8rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;Screen grab from the &lt;a href=&quot;https://github.com/maplibre/demotiles&quot;&gt;MapLibre demo site&lt;/a&gt; showcasing vector tiles.&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2 id=&quot;️-martin&quot;&gt;⚙️ Martin&lt;/h2&gt;
&lt;p&gt;We’ve released &lt;a href=&quot;https://github.com/maplibre/martin/releases/tag/martin-v1.3.0&quot;&gt;Martin 1.3.0&lt;/a&gt;, bringing improvements to logging, font handling, routing, and tile formats - plus several performance and UX fixes.&lt;/p&gt;
&lt;p&gt;Highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;More flexible logging:&lt;/strong&gt;
Martin now uses tracing instead of log, enabling better instrumentation and configurable log output via &lt;code&gt;RUST_LOG_FORMAT&lt;/code&gt;. Supported formats include compact (default), json, full, bare, and pretty.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved glyph support beyond &lt;a href=&quot;https://en.wikipedia.org/wiki/Unicode_block&quot;&gt;&lt;code&gt;U+FFFF&lt;/code&gt;&lt;/a&gt;:&lt;/strong&gt;
Fonts with characters outside the Basic Multilingual Plane (e.g. emoji, historic scripts, or private-use glyphs) are now handled correctly.
We also removed FontSources.masks, reducing memory usage and startup time.&lt;/p&gt;
&lt;p&gt;Since not everyone is likely aware of what &lt;code&gt;U+FFFF&lt;/code&gt; means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;U+0000&lt;/code&gt; - &lt;code&gt;U+FFFF&lt;/code&gt; is Basic Multilingual Plane, which covers characters for almost all modern languages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;U+10000&lt;/code&gt; - &lt;code&gt;U+3347F&lt;/code&gt; covers minor characters such as historic scripts and emojis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;U+E0000&lt;/code&gt; - &lt;code&gt;U+E01EF&lt;/code&gt; is for tags and variation selectors&lt;/li&gt;
&lt;li&gt;&lt;code&gt;U+F0000&lt;/code&gt; - &lt;code&gt;U+10FFFF&lt;/code&gt; is for private use (i.e. can be assigned arbitrary custom characters without worrying about possible conflict with the future standards)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin-top: 1.25rem;&quot;&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Native subpath support:&lt;/strong&gt; A new &lt;code&gt;route_prefix&lt;/code&gt; config option and
&lt;code&gt;--route-prefix&lt;/code&gt; CLI flag allow Martin to serve from a subpath without requiring
reverse-proxy URL rewriting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MLT decoding support:&lt;/strong&gt;
Martin now supports the &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/&quot;&gt;MapLibre Tiles Specification (MLT)&lt;/a&gt;, allowing MLT-based tiles to be served directly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Human-readable time estimates in &lt;code&gt;martin-cp&lt;/code&gt; progress output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL materialized view support and improved table metadata&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/maplibre/martin/releases/tag/martin-v1.3.0&quot;&gt;full changelog on GitHub&lt;/a&gt;, and as always, thanks to &lt;a href=&quot;https://github.com/yutannihilation&quot;&gt;Hiroaki Yutani&lt;/a&gt;, &lt;a href=&quot;https://github.com/Auspicus&quot;&gt;David E Disch&lt;/a&gt;, &lt;a href=&quot;https://github.com/amandasaurus&quot;&gt;Amanda&lt;/a&gt;, &lt;a href=&quot;https://github.com/kunalsinghdadhwal&quot;&gt;Kunal&lt;/a&gt;, &lt;a href=&quot;https://github.com/thomfuhrmann&quot;&gt;thomfuhrmann&lt;/a&gt;, &lt;a href=&quot;https://github.com/birkskyum&quot;&gt;Birk Skyum&lt;/a&gt;, &lt;a href=&quot;https://github.com/CommanderStorm&quot;&gt;Frank Elsinga&lt;/a&gt; and &lt;a href=&quot;https://github.com/nyurik&quot;&gt;Yuri Astrakhan&lt;/a&gt; who contributed to this release 💙&lt;/p&gt;
&lt;h2 id=&quot;-conferences--events&quot;&gt;👥 Conferences &amp;amp; Events&lt;/h2&gt;
&lt;p&gt;Last month, members of the MapLibre team were on the ground connecting with the community, sharing updates, and learning alongside fellow open-source contributors at the following events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://foss4g.asia/2026/&quot;&gt;FOSS4G Asia&lt;/a&gt; in Nashik, India where &lt;a href=&quot;https://maplibre.org/about/frank-elsinga/&quot;&gt;Frank Elsinga&lt;/a&gt; held a &lt;a href=&quot;https://talks.geoinfo-lab.org/foss4g-asia-2026/talk/review/YS39GBKKBZKJRJ9BKNQZP8ZBMKYYYPXP&quot;&gt;workshop on Tile Serving with MapLibre&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.openstreetmap.in/sotm-india/&quot;&gt;State of the Map India&lt;/a&gt; in Nashik, India&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fosdem.org/2026/&quot;&gt;FOSDEM&lt;/a&gt; in Brussels, Belgium where &lt;a href=&quot;https://maplibre.org/about/frank-elsinga/&quot;&gt;Frank Elsinga&lt;/a&gt; and &lt;a href=&quot;https://maplibre.org/about/bart-louwers/&quot;&gt;Bart Louwers&lt;/a&gt; presented &lt;a href=&quot;https://fosdem.org/2026/schedule/event/QAL9VN-state-of-the-maplibre-tile-format/&quot;&gt;State of the MapLibre Tile Format&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;max-width:600px;margin:1.25rem auto 0;padding:0 0.75rem&quot;&gt;&lt;div style=&quot;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:180px auto;gap:0.5rem&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/foss4g-asia.Bwzx9ayq_Q9p8W.webp&quot; alt=&quot;Frank&apos;s workshop at FOSS4G Asia&quot; style=&quot;width:100%;height:100%;object-fit:cover;border-radius:0.75rem&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;960&quot; height=&quot;1280&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/stickers.DcssBMXC_Z1QQXFN.webp&quot; alt=&quot;MapLibre stickers and conference materials&quot; style=&quot;width:100%;height:100%;object-fit:cover;border-radius:0.75rem&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/fosdem-brussels.D2TzmtMW_1mCK5K.webp&quot; alt=&quot;MapLibre booth and community interactions at FOSDEM&quot; style=&quot;grid-column:1 / -1;width:100%;height:auto;object-fit:cover;border-radius:0.75rem&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;&lt;/div&gt;&lt;p style=&quot;margin-top:0.5rem;margin-bottom:0;line-height:1.4;text-align:justify;text-align-last:center&quot;&gt;&lt;em style=&quot;font-size:0.8rem;color:#666;font-style:italic&quot;&gt;&lt;p&gt;MapLibre team members at recent community conferences, including FOSS4G Asia
(Nashik, India), State of the Map India, and FOSDEM (Brussels).&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;It was great to meet community members in person, exchange ideas, and represent MapLibre across regions.&lt;/p&gt;
&lt;p&gt;We’re looking forward to attending more events in the coming months. If you’d like to follow along or suggest events we should be part of, please let us know in &lt;a href=&quot;https://github.com/maplibre/maplibre/discussions/484&quot;&gt;this GitHub discussion&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;️-monthly-meetings&quot;&gt;🗓️ Monthly meetings&lt;/h2&gt;
&lt;p&gt;We continue our regular community calls on the &lt;em&gt;&lt;strong&gt;second Wednesday&lt;/strong&gt;&lt;/em&gt; of each month, with an additional session on the last Wednesday to better accommodate Asia/Oceania time zones.&lt;/p&gt;
&lt;p&gt;Upcoming Calls&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapLibre Navigation: Feb 11, 2026 – 5:00–6:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre Native: Feb 11, 2026 – 6:00–7:00 PM UTC&lt;/li&gt;
&lt;li&gt;MapLibre GL JS: Feb 11, 2026 – 7:00–8:00 PM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌏 MapLibre Eastern Call&lt;/p&gt;
&lt;p&gt;Held on the last Wednesday of the month at an Asia/Oceania-friendly hour:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feb 25, 2026 – 9:00–10:00 AM UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🔗 &lt;a href=&quot;https://notime.zone/OkYx7EDS3F8Hu&quot;&gt;View meeting times in your local timezone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All calls are open to everyone. Zoom links are shared in the MapLibre Slack.
Not yet a member? Request an invite via the &lt;a href=&quot;https://slack.openstreetmap.us/&quot;&gt;OpenStreetMap US Slack&lt;/a&gt;.
We’d love to see you there!&lt;/p&gt;
&lt;section data-footnotes=&quot;true&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Note: crash reports may include some privacy-sensitive data such as IP addresses (see &lt;a href=&quot;https://maplibre.org/privacy-policy-ios-testapp/&quot;&gt;privacy policy&lt;/a&gt;). &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><author/></item><item><title>Announcing MapLibre Tile: a modern and efficient vector tile format</title><link>https://maplibre.org/news/2026-01-23-mlt-release/</link><guid isPermaLink="true">https://maplibre.org/news/2026-01-23-mlt-release/</guid><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today we are happy to announce &lt;strong&gt;MapLibre Tile&lt;/strong&gt; (MLT), a new modern and efficient vector tile format.&lt;/p&gt;
&lt;div style=&quot;max-width:1000px;margin:1.5rem auto;text-align:center&quot;&gt; &lt;img src=&quot;https://maplibre.org/_astro/mlt.CaGKYWCo_1VYzVE.webp&quot; alt=&quot;MapLibre Tile Support&quot; style=&quot;width:75%;height:auto;display:block;margin:0 auto;border:1px solid #e5e7eb;border-radius:0.75rem&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2987&quot; height=&quot;1867&quot; class=&quot;shadow-lg&quot;&gt;&lt;p style=&quot;font-size:0.9rem;color:#666;margin-top:0.5rem;font-style:italic&quot;&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2 id=&quot;what-is-maplibre-tile&quot;&gt;What is MapLibre Tile?&lt;/h2&gt;
&lt;p&gt;MapLibre Tile (MLT) is a successor to &lt;a href=&quot;https://github.com/mapbox/vector-tile-spec&quot;&gt;Mapbox Vector Tile (MVT)&lt;/a&gt;.
It has been redesigned from the ground up to address the challenges of rapidly growing geospatial data volumes
and complex next-generation geospatial source formats, as well as to leverage the capabilities of modern hardware and APIs.&lt;/p&gt;
&lt;p&gt;MLT is specifically designed for modern and next-generation graphics APIs to enable high-performance processing and rendering of
large (planet-scale) 2D and 2.5 basemaps. This current implementation offers feature parity with MVT&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;true&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; while delivering on the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improved compression ratio&lt;/strong&gt;: up to 6x on large tiles, based on a column-oriented layout with recursively applied (custom)
lightweight encodings. This leads to reduced latency, storage, and egress costs and, in particular, improved cache utilization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better decoding performance&lt;/strong&gt;: fast, lightweight encodings that can be used in combination with SIMD/vectorization instructions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, MLT was designed to support the following use cases in the future:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improved support for 3D coordinates&lt;/strong&gt;, i.e. elevation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved processing performance&lt;/strong&gt;, based on storage and in-memory formats that are specifically designed for modern graphics APIs,
allowing for efficient processing on both CPU and GPU. The formats are designed to be loaded into GPU buffers with little or no additional processing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for linear referencing and m-values&lt;/strong&gt; to efficiently support the upcoming next-generation source formats such as Overture Maps (GeoParquet).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support complex types&lt;/strong&gt;, including nested properties, lists and maps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As with any MapLibre project, the future of MLT is decided by the needs of the community. There are a lot of exciting ideas for other future extensions and we welcome contributions to &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec&quot;&gt;the project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For a more in-depth exploration of MLT have a look at the &lt;a href=&quot;https://github.com/mactrem/presentations/blob/main/FOSS4G_2024_Europe/FOSS4G_2024_Europe.pdf&quot;&gt;following slides&lt;/a&gt;, watch
&lt;a href=&quot;https://www.youtube.com/watch?v=YHcoAFcsES0&quot;&gt;this talk&lt;/a&gt; or read &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3748636.3763208&quot;&gt;this publication&lt;/a&gt; by MLT inventor Markus Tremmel.&lt;/p&gt;
&lt;h2 id=&quot;when-can-i-use-it&quot;&gt;When can I use it?&lt;/h2&gt;
&lt;p&gt;For the adventurous, the answer is: &lt;strong&gt;today&lt;/strong&gt;. Both MapLibre GL JS and MapLibre Native now support MLT sources. You can use the new &lt;a href=&quot;https://maplibre.org/maplibre-style-spec/sources/#encoding&quot;&gt;&lt;code&gt;encoding&lt;/code&gt;&lt;/a&gt; property on sources in your style JSON with a value of &lt;code&gt;mlt&lt;/code&gt; for MLT vector tile sources.&lt;/p&gt;
&lt;p&gt;To try out MLT, you have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The easiest way to try out MLT is to use the &lt;a href=&quot;https://raw.githubusercontent.com/maplibre/demotiles/refs/heads/gh-pages/tiles-mlt/plain.json&quot;&gt;MLT-based demotiles style&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You can also try out the &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec/tree/main/java/encoding-server&quot;&gt;encoding server&lt;/a&gt; that converts existing (MVT-based) styles and vector tile sources to MLT on the fly. This is mostly a tool for development.&lt;/li&gt;
&lt;li&gt;To create tiles for production, you could use &lt;a href=&quot;https://github.com/onthegomap/planetiler&quot;&gt;Planetiler&lt;/a&gt;, as the upcoming version will support generating MLTs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://maplibre.org/maplibre-tile-spec/implementation-status/&quot;&gt;this page&lt;/a&gt; for a complete and up-to-date list of integrations and implementations. If you are an integrator working on supporting MLT, feel free to add your own project there.&lt;/p&gt;
&lt;p&gt;We would love to hear your experience with using MLT! Join the &lt;code&gt;#maplibre-tile-format&lt;/code&gt; channel on &lt;a href=&quot;https://maplibre.org/community&quot;&gt;our Slack&lt;/a&gt; or create an Issue or Discussion on the &lt;a href=&quot;https://github.com/maplibre/maplibre-tile-spec&quot;&gt;tile spec repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot;&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;MapLibre Tile came to be thanks to a multi-year collaboration between academia, open source and enterprise. Thank you to everyone who was involved! We are very proud that our community can innovate like this.&lt;/p&gt;
&lt;p&gt;Special thanks go to Markus Tremmel for inventing the format, Yuri Astrakhan for spearheading the project, Tim Sylvester for the C++ implementation, Harel Mazor, Benedikt Vogl and Niklas Greindl for working on the JavaScript implementation.&lt;/p&gt;
&lt;p&gt;Also thanks to Microsoft and AWS for financing work on MLT.&lt;/p&gt;
&lt;section data-footnotes=&quot;true&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;One exception: unlike MVT, MLT does not support layers where a value in a column changes type from feature to feature. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><author/></item></channel></rss>