« back to blog

Monkruman St. Jules

Monkruman St. Jules

Derek Eder

Derek Eder

Modernizing our mapping stack with Maplibre

Published on Jun 05, 2025

Chicago's Million Dollar Blocks and Second City Zoning
Chicago's Million Dollar Blocks and Second City Zoning

Websites typically have a short lifespan, and as DataMade has been building them for over a decade, finding ways to maintain and extend their longevity has become increasingly important.

A significant reason for website failures is their reliance on external platforms, which frequently change or may even be shut down. However, a promising development in the past few years has been the emergence of GL-powered maps that operate entirely in the front-end browser. As a result, we have adopted Maplibre-gl as our preferred choice for data-rich maps and are in the process of transitioning many of our projects to this technology.

We started by transitioning two existing DataMade projects from CARTO to Maplibre: Million Dollar Blocks and Second City Zoning.

Chicago's Million Dollar Blocks and Second City Zoning
Chicago's Million Dollar Blocks - now using Maplibre

Second City Zoning - now using Maplibre
Second City Zoning - now using Maplibre

Both Chicago’s Million Dollar Blocks and Second City Zoning are maps that implement fairly standard interactions and have straightforward data sources that don’t change often (or at all) so they served as good starting points for the transition.

Motivation

CARTO has served DataMade well as a mapping platform and has been a part of our stack for many years. However, CARTO recently announced that they are sunsetting their “legacy” platform that our maps use. This highlights a common issue when using proprietary software with data stored in the cloud: providers can change their products, services, terms of use, etc. at their pleasure. That can be fine for new projects, but existing ones often don’t have budgets to take on these upgrades.

Granted, this doesn’t happen often. But when it does, it can create significant overhead for teams who now have to either transition to new, incompatible software or worse, find new providers altogether.

So, we took this opportunity to reap the benefits of open-source software and self-hosted data and transition our maps to Maplibre. For maps that require hosted data, we use Amazon S3. But we’ve stored the data for both Million Dollar Blocks and Second City Zoning in their respective GitHub repos. This affords our long-running projects with both stability and lower maintenance costs.

Advantages

Performance and complexity

When using Maplibre with GeoJSON sources, all user interactions are processed client side. The map has access to all of its data in memory whereas before our data was stored remotely on CARTO’s servers.

Our maps no longer need to send SQL queries to CARTO to fetch data in response to user interactions. This results in noticeable performance improvements along with less complexity and easier maintenance/debugging.

More capacity for complex data sources

Maplibre’s usage of vector tiles and hardware acceleration makes it much more capable of handling large data sets. We’ve been able to create performant maps with multiple data sources and upwards of a million features, something that Leaflet would greatly struggle with.

Reliability

Recently, we ran into a CARTO service outage that rendered one of our maps unusable for a short period of time. Though this is an infrequent occurrence, hosting our own data removes one more level of complexity to make our apps more reliable. We also don’t need to worry about other companies upgrading or deprecating their services.

Limitations and considerations

Data size

Our new setup requires that users load all of the data for Million Dollar Blocks and Second City Zoning before the map can load. Though the map data isn’t massive, it’s not ideal to have users download several megabytes of GeoJSON data every time they view our maps.

Compressing our map data with gzip took the data for both maps from several megabytes to a few hundred kilobytes. We used Open Innovations’ handy GeoJSON minify tool to simplify the data before compression.

Geocoding

Our updated Million Dollar Blocks and Second City Zoning maps still rely on Google’s geocoding service. Though it’s possible to roll your own geocoding service with something like Nominatim, we’re comfortable continuing to use Google.

Tiles and styles

Maplibre’s use of vector tiles presents the opportunity to also self-host vector tiles. Since neither Million Dollar Blocks nor Second City Zoning have complex ETL processes or particularly large datasets, we can simply have our maps rely on raw GeoJSON data stored in S3.

We’ve also successfully created custom vector tiles using pmtiles and tippecanoe for more complex maps. Depending on how often your basemaps need to update, that can possibly require a regular ETL process. Protomaps wrote a handy guide that explores scenarios where using pmtiles makes the most sense.

Basemaps and map tiles exemplify the idea that open source tools can be adopted piecemeal– you don’t have to switch over all at once. For some projects, it can be perfectly acceptable to use proprietary basemaps, reserving completely bespoke tiles for those that call for more complicated setups. Some of our maps even use a combination of custom vector tiles and proprietary satellite data.

More maps are coming

DataMade’s transition to Maplibre has opened up lots of opportunities for us to create more resilient, performant, and complex mapping applications. Keep an eye out for future updates as we debut new maps and share insights as we continue to iterate on our mapping toolset.

For further reading that inspired us, check out How The Post is replacing Mapbox with open source solutions.