Last November, I [Re]Introduced Ultra v3 which introduced a bunch of new features. Today, I’m happy to share what’s changed in Ultra over the past year.
Since my last update, I’ve implemented the following features in Ultra:
- Many new styling features enabled by continued MapLibre updates
- Sprite support updates
- A new Overpass/OSM XML&JSON-to-GeoJSON conversion library
- More basemap styles & style previews
- More export options
- Transforms
- More providers
- An “Open with Ultra” bookmarklet
🌍 MapLibre updates
In January of 2025, Ultra updated to the freshly released MapLibre v5, introducing globe support!
View Example
Since then, further MapLibre changes have enabled a host of new styling features including:
color-reliefstyling from raster DEM sources- Data-driven
line-dasharraysupport - Improved font support
- New hillshade methods
📍 Sprites
I’ve added two sprite-related features to facilitate map styling:
SVG Support
You can now reference SVGs by URL in icon-image, just as you can reference PNGs by URL. This works well with inline
data: URLs to create fill patterns:

Emojis
I’ve also added Noto Emojis to the list of sprites bundled with Ultra. Use the emoji: namespace and a short name from https://projects.iamcal.com/emoji-data/table.htm.
Here is an example query that renders each country with its flag:

🤖 osm2geojson-ultra
At some point, I found myself wanting support for Overpass-derived elements. This led to me forking osm2geojson-lite and creating osm2geojson-ultra. This replaces osmtogeojson in Ultra to convert Overpass responses to GeoJSON for use with MapLibre.
Here is a quick rundown of the differences between the three libraries:
| feature | osmtogeojson | osm2geojson-lite | osm2geojson-ultra | notes |
|---|---|---|---|---|
| speed | 🚂 | 🚃 | 🚅 | benchmarks |
out geom |
✅ | ✅ | ✅ | |
out center |
✅ | ❌ | ✅ | |
convert/local/make |
❌ | ❌ | ✅ | |
| tainted object detection | ✅ | ❌ | ✅ |
For more details and how to use osm2geojson-ultra in your own JavaScript projects, see the GitHub Repo.
Using derived objects support, I was able to create this query for making transit maps with Ultra:

🎨 Styles
Stadia Maps has kindly offered their styles for use on Ultra, including those from Stamen Design.
I’ve also added a more visual style picker so you have an idea of what each style looks like without having to actually load it:

💾 Export options
The single-function download button has been replaced with an export dialog that also allows you to copy GeoJSON to your clipboard or export the created MapLibre style.json for use on other sites.

💫 JavaScript Transforms
For a long time, I’ve wanted to be able to use Turf.js to mutate the GeoJSON rendered by an Ultra query. I’m stoked to share that I’ve figured out a way to integrate that! You can now specify a transform YAML front-matter config param to run arbitrary JavaScript on your query’s results.
It must consist of the source code for a JavaScript module with a default export of a function that accepts a GeoJSON FeatureCollection (the query result) and returns one too.
For example, this is a transform that does nothing:
yaml
transform: "export default data => data;"
But for a more interesting example, here is a query that renders the triangulated irregular network of a set of gunshot detectors and filters out edges that are too long:

To load 3rd party libraries, use a cloud JS Module CDN like esm.sh.
⚙️ More Providers
javascript
Since I’d built the JavaScript sandbox for transform support, I figured I should support “bring your own query provider” by implementing a JavaScript provider!
Similar to transforms, it must be a JS module that exports a function named source which returns a MapLibre Source.
Here is an example query I wrote this fall to find playgrounds along the route of my family’s first big roadtrip with our 1-year-old:

dsv
Ultra now also supports CSV&TSV powered by csv2geojson.
This powered a super early version of MapRVA’s Yesterdays project using a Google Sheet!
postpass
When Frederik Ramm announced Postpass, I was excited because the API returns GeoJSON and Ultra actually supported it out-of-the-box:
I have since added a new postpass provider that is configured by default to use the GeoFabrik instance of Postpass.
New BBox shortcut
Since Postpass is PostGIS and bboxes must be specified differently, I’ve introduced a new flexible way to express bounding boxes in Ultra queries. Like {{bbox}} it is wrapped in double curly braces, but inside those braces can be any combination of the letters w,n,e,&s which represent west, north, east, and south respectively. These will be replaced and comma-separated.
So for example, in a Postpass query, you can use geom && ST_MakeEnvelope({{wsen}},4326) to select features intersecting your map’s current bounding box.
For more unique ways of specifying the bbox, using just a single letter allows for any (lat/lon for now, no support for using a different CRS) format, such as QLever in this Example.
esri
I’ve also added a new query provider that supports vector Esri MapServer and FeatureServer layers powered by esri-dump.
🔖 Open with Ultra
I’ve also built a bookmarklet to easily open resources using Ultra.
It features special support for:
- overpass-turbo.eu - Loads query & viewport from Overpass Turbo in Ultra
- QLever - Loads query & server from QLever in Ultra
- Sophox - Loads query & server from Sophox in Ultra
- geojson.io - Loads the GeoJSON from geojson.io as the query in Ultra
- Gists - Loads the current gist as the query in Ultra
- GitHub - Loads the
githubusercontent.comURL for a file loaded in the web UI
For all other sites, it loads the URL as the query.
Ultra features some query providers which work well with this:
osmWebsite- detectshttps://openstreetmap.org/[node|way|relation]/:idURLs and loads that object via the Overpass APIosmWiki- detectshttps://wiki.openstreetmap.org/wiki/Key:andhttps://wiki.openstreetmap.org/wiki/Tag:URLs and loads that object with that tag or key via the Overpass APItaginfo- detectshttps://taginfo.openstreetmap.org/key/andhttps://taginfo.openstreetmap.org/tags/URLs and loads that object with that tag or key via the Overpass APIkml- detectshttps://www.google.com/maps/d(Google My Maps) URLs and loads that map via the KML export.
Install it here: https://overpass-ultra.us/docs/open-with-ultra/
⏭️ Next up: an Ultra workshop at Mapping USA
Want an hour long workshop on how to use Ultra? Sign up for Mapping USA!

Discussion
Comment from watmildon on 24 December 2025 at 20:27
Tremendous work. Thanks for continually innovating in this space!