Best on Desktop

This page runs three live mapping SDKs simultaneously — WebGL rendering, GPU compute, and real GeoJSON. It needs a full screen.

← Back to jbf.com
JBF.COM — GIS Developer Notes

The GIS SDK Landscape — Live

Three real SDKs running in the browser. 3D buildings. GPU-rendered evacuation flows. Real census boundaries. Not screenshots.

Jeff Franzen  ·  March 2026  ·  MapLibre  ·  Deck.gl  ·  Leaflet

Someone asked me which GIS SDK to learn after ArcGIS. Here's my stack-rank — and the honest reason behind it. The ESRI ecosystem is deep, but it's one company's answer to every question. The open-source alternatives aren't trying to replace it. They're solving different problems, often better.

Below: each SDK doing something the others can't. MapLibre renders 3D building geometry from OpenStreetMap data. Deck.gl draws GPU-accelerated evacuation arcs across a city. Leaflet loads real Census boundary polygons without a server. All running in a single HTML file.

Weekend Project
Leaflet
Most widely deployed web mapping library ever built. No WebGL. Dead simple.

When Mapbox went closed-source in 2020, the community forked it into MapLibre. Today it's the dominant open-source WebGL vector tile renderer — used by Felt, Stadia, AWS Location, and hundreds of orgs that can't pay Mapbox pricing. The API is nearly identical to Mapbox GL JS.

What ArcGIS developers will recognize immediately: sources, layers, expressions, camera control, event handling — all the same patterns. What's different: you're not locked to one tile provider, and the 3D capability that ArcGIS SceneView requires a separate SDK for comes standard here. The map below is pitched at 55 degrees, pulling live building geometry from OpenStreetMap, and rendering it in your browser with WebGL.

MapLibre GL JS — 3D Buildings — Live
License
BSD-3 — Free forever
Renderer
WebGL2 — vector tiles + 3D
Tile sources
Any PMTiles, Mapbox, CARTO, custom
3D capability
Building extrusion, terrain, sky layer
// Pitch + bearing = 3D camera map.setPitch(55); map.setBearing(-20); // Fill-extrusion from OSM data map.addLayer({ id: 'buildings', source: 'openmaptiles', 'source-layer': 'building', type: 'fill-extrusion', paint: { 'fill-extrusion-color': '#c8b8a0', 'fill-extrusion-height': ['coalesce', ['get', 'render_height'], 5], 'fill-extrusion-opacity': 0.85 } });

In 2015, Uber's engineering team had a problem: millions of trip records, and nothing in the browser that could visualize them at that scale. Leaflet froze. Everything else froze. So they built Deck.gl — a rendering engine that hands the work to the GPU instead of the CPU — and open-sourced it. The same tool built to show where rides were going in San Francisco now runs damage assessment maps, displacement tracking, and resource positioning for humanitarian response worldwide.

The map below is fetching live data from the USGS earthquake feed — every earthquake recorded on Earth in the past seven days. No synthetic data. No manual download. One API call, rendered instantly. Size and color both map to magnitude. The Ring of Fire draws itself.

Standard Web Maps
You know this wall.
Leaflet, ArcGIS JS SDK feature layers, most web maps
  • Load all shelters in your county — fast, no problem
  • Load all shelters in your state — starting to slow down
  • Load every 911 call from the past year — browser freezes
  • Try to pan or zoom while it loads — good luck
Around 500,000 features, most web maps give up
Deck.gl
The wall disappears.
Your graphics card does the work — the same one running your games
  • Every address point in a county — smooth
  • Ten years of incident data, all at once — smooth
  • Every parcel in a major city with live risk coloring — smooth
  • All of it updating in real time as you filter — still smooth
Tens of millions of features. Your CPU has 8–16 cores. Your GPU has hundreds.
Deck.gl — Live USGS Earthquake Feed — Loading...
Data source
USGS Earthquake Hazards Program — updates every 5 minutes
What you're seeing
Every earthquake on Earth in the past 7 days — size and color = magnitude
The GPU story
Live API → rendered instantly. No processing step. No server.
Hover any point
Magnitude, location, depth, time
// Live USGS feed — no API key fetch('https://earthquake.usgs.gov /earthquakes/feed/v1.0 /summary/all_week.geojson') .then(r => r.json()) .then(data => { new ScatterplotLayer({ data: data.features, getPosition: d => d.geometry.coordinates, getRadius: d => magToRadius( d.properties.mag ), getFillColor: d => magToColor( d.properties.mag ) }); });

The most widely deployed web mapping library ever built — more websites run Leaflet than any other mapping tool, and it's been that way since 2011. No WebGL, no GPU — it renders SVG and DOM elements. That's the point. Leaflet is dead simple, has an enormous plugin ecosystem, and works on every device without exception.

The map below fetches real US state boundaries from the Census Bureau — actual GeoJSON, loaded at runtime, styled as a FEMA-style risk choropleth. This is the pattern used by emergency managers in every county in the country. Not glamorous. Extremely effective. Notice how little code it takes.

Leaflet — Real Census Boundaries — Choropleth — Live
License
BSD-2 — Free forever
Renderer
SVG + DOM — raster tiles
Compatibility
Every browser, every device, no exceptions
Best for
Choropleths, markers, tooltips — fast to build
// Real GeoJSON, fetched at runtime fetch('https://cdn.jsdelivr.net/npm/ us-atlas@3/states-10m.json') .then(r => r.json()) .then(topo => { const geo = topojson .feature(topo, topo.objects.states); L.geoJSON(geo, { style: f => ({ fillColor: riskColor( f.properties.risk ), fillOpacity: 0.65, weight: 1 }) }).addTo(map); });

A different category entirely. The three SDKs above are flat maps — even MapLibre's 3D buildings are an illusion on a projected plane. Cesium is a true 3D globe: real WGS84 ellipsoid, real terrain elevation from Cesium World Terrain, and photorealistic 3D tiles from Bing and Google. You can start in space and fly down to street level without ever changing coordinate systems.

For disaster response, this matters when terrain is the story — flood inundation across a valley, wildfire behavior on a ridge, helicopter routing around mountains. The globe below has flown to New Orleans, tilted to show the terrain relationship with Lake Pontchartrain, with Cesium World Terrain active. Drag to orbit. Scroll to zoom. Right-click drag to tilt.

Cesium — World Terrain — True 3D Globe — Live
License
Apache 2.0 — Free tier via Cesium ion
Renderer
WebGL — true 3D globe (WGS84)
Terrain
Cesium World Terrain — 1m resolution
Best for
Terrain analysis, 3D city models, space-to-street
// Set your ion token once Cesium.Ion.defaultAccessToken = 'your_token'; const viewer = new Cesium.Viewer('cesium-map', { terrainProvider: await Cesium. createWorldTerrainAsync(), timeline: false, animation: false }); // Fly to New Orleans, tilted viewer.camera.flyTo({ destination: Cesium.Cartesian3 .fromDegrees( -90.07, 29.95, 35000 ), orientation: { pitch: Cesium.Math .toRadians(-35), heading: Cesium.Math .toRadians(340) } });

See the full SDK landscape

All seven SDKs compared by tier, use case, and licensing — including Cesium and OpenLayers.

View SDK Landscape →