Compare Map Packages
Flutter has several map packages, and each fits different projects. This page
compares maplibre with the most used alternatives. The migration guides
show how to move from
maplibre_gl,
flutter_map,
google_maps_flutter and
mapbox_maps_flutter.
At a glance
| maplibre | maplibre_gl | flutter_map | mapbox_maps_flutter | google_maps_flutter | |
|---|---|---|---|---|---|
| Map data | Any tile provider | Any tile provider | Any tile provider | Mapbox or other providers | |
| API key and billing | Only if your provider needs one | Only if your provider needs one | Only if your provider needs one | Mapbox access token, billed by usage | Google API key, billed by usage |
| Rendering | MapLibre, GPU | MapLibre, GPU | Flutter canvas, Dart | Mapbox, GPU | Google Maps SDKs |
| Map in Flutter as | Texture, HTML element on web |
Platform view, HTML element on web | Widgets | Platform view | Platform view |
| Android, iOS | ✅ | ✅ | ✅ | ✅ | ✅ |
| Web | ✅ | ✅ | ✅ | ✅ | ✅ |
| macOS, Windows, Linux | ✅ | ❌ | ✅ | ❌ | ❌ |
| Vector tiles | ✅ | ✅ | With vector_map_tiles |
✅ | ❌ (Google's own maps) |
| Style spec | MapLibre, typed | MapLibre, untyped | ❌ | Mapbox | Cloud styling or JSON |
| Annotations | Declarative layers | Imperative controller | Declarative widgets | Imperative managers | Declarative sets |
| Offline regions | ✅ (not on web) | Android and iOS | With plugins | Android and iOS | ❌ |
| Widgets at map coordinates | ✅ | ❌ | ✅ | ❌ | ❌ |
| License | BSD-3-Clause | BSD-3-Clause | BSD-3-Clause | Plugin BSD/MIT, SDK under Mapbox terms | BSD-3-Clause, service under Google terms |
maplibre
This package. It runs on all six Flutter platforms with one API, renders
with MapLibre into a Flutter Texture through FFI, and on web into an HTML
element through JS interop. Annotations are declarative layers, and style layers,
sources and expressions are typed. It reads many values, such as the camera
and the style layers, synchronously.
It keeps its tech stack up to date and follows semantic versioning. Every
breaking release comes with a
migration guide. maplibre is being
onboarded to the MapLibre organization as a
hosted project.
maplibre_gl
maplibre_gl is the other
MapLibre package for Flutter and a
hosted project
of the MapLibre organization. It
started as a fork of flutter-mapbox-gl and wraps the MapLibre Android and
iOS SDKs and maplibre-gl-js. Both packages use the same map styles and tiles.
| maplibre | maplibre_gl | |
|---|---|---|
| Principle | What can be done in Dart is done in Dart | What the MapLibre SDKs can do is done by the SDKs |
| Platforms | Android, iOS, macOS, Windows, Linux, web | Android, iOS, web |
| Interop | FFI, JS interop on web | Platform channels, JS interop on web |
| Map in Flutter | Texture, HTML element on web |
Platform view, HTML element on web |
| API | Declarative annotations and an imperative controller, synchronous where possible | Imperative controller, asynchronous |
flutter_map
flutter_map draws maps with Flutter
itself, written in Dart. It runs on every Flutter platform, layers are
widgets, and a large plugin ecosystem adds vector tiles
(vector_map_tiles), offline caching (flutter_map_tile_caching, GPL-3.0
or a commercial license) and the user location
(flutter_map_location_marker).
It is a good fit for raster tiles and apps that want everything in Dart.
maplibre draws on the GPU with MapLibre, which renders vector tiles, large
data, labels, 3D extrusions and hillshading faster, and has those features,
offline regions and the user location built in.
mapbox_maps_flutter
mapbox_maps_flutter is the
official Mapbox package, built on the Mapbox Maps SDKs and Mapbox GL JS. It
has Mapbox features such as the Mapbox Standard style, 3D terrain and
globe, and Mapbox services. It needs a Mapbox access token, and usage beyond
the free tier is billed.
MapLibre started as a fork of the open source Mapbox SDKs, so styles, layers
and expressions are very similar. maplibre works with any tile provider or
your own server, has no usage fees, and also runs on desktop platforms.
google_maps_flutter
google_maps_flutter is the
Flutter team's plugin for Google Maps on Android, iOS and web. It shows
Google's map data, with Google's place and traffic layers, and needs a Google
Maps Platform API key with billing enabled. Map styles are limited to Google's
cloud styling or style JSON, and markers, polylines, polygons and circles are
the main ways to show data.
maplibre shows any vector or raster tiles with full control over the style,
has style layers for large data, heatmaps and 3D, and runs on desktop
platforms.