Why MapLibre GL
There are several ways to put a map in a Flutter app. This page compares the three most widely used ones, so you can pick the right one; other packages exist, including other MapLibre-based ones, so a look at pub.dev is worth it too. If another library fits your project better, use it.
| Capability | flutter-maplibre-gl | flutter_map | google_maps_flutter |
|---|---|---|---|
| Renderer | MapLibre Native (C++/GPU) | Flutter canvas | Google Maps SDK |
| Offline maps | ✔ Android & iOS | ● Via plugin | ✘ No |
| Custom vector styles | ✔ Full spec | ● Limited | ● Cloud styling |
| GeoJSON support | ✔ Full + live update | ● Via plugins | ● Limited |
| Data-driven styling | ✔ Expressions | ✘ No | ✘ No |
| Clustering | ✔ Native | ● Via plugin | ● Marker clustering |
| Heatmaps | ✔ Yes | ✘ No | ✘ No |
| 3D extrusion | ✔ Yes | ✘ No | ● Limited |
| PMTiles | ✔ Built-in | ● Via plugin | ✘ No |
| Vector tiles | ✔ Yes | ● Via plugin | ✘ Not as your own source |
| Open tile sources | ✔ Yes | ✔ Yes | ● As overlays; key for the base map |
| Web support | ✔ GL JS | ✔ Yes | ✔ Yes |
| License | ✔ BSD-3 | ✔ BSD-3 | ● Plugin BSD-3, SDK proprietary |
| Tile cost | ✔ Free options | ✔ Free options | ✔ Free options |
| Desktop (Windows, macOS, Linux) | ✘ Not a target | ✔ Yes | ✘ No |
| Flutter widgets inside the map | ✘ Overlay only | ✔ Yes | ✘ Overlay only |
| Built-in POI, traffic and Street View data | ✘ Bring your own | ✘ Bring your own | ✔ Yes |
| Native setup required | ● Permissions only | ✔ None | ● Key and permissions |
✔ supported · ● partial / via plugin · ✘ not available
Choose flutter-maplibre-gl when
You need any of these, and they are hard or impossible elsewhere:
- Offline maps. Users download regions and keep using the map with no connection.
- Custom styling. White-label maps, dark mode, brand colors, show or hide individual layers.
- Large datasets. Tens of thousands of GeoJSON features rendered on the GPU without dropping frames.
- Data-driven styling. Color roads by speed limit, size circles by population, all evaluated per feature at render time.
- PMTiles. Self-host your tile data as a single file with no tile server.
- An open stack. No vendor lock-in and no API key when you use open tile providers.
- Advanced cartography. 3D buildings, hillshade, heatmaps, terrain.
Choose flutter_map when
flutter_map is the right call when:
- You want pure Flutter rendering with no native code, including smooth desktop support without platform-view overhead.
- You need to overlay arbitrary Flutter widgets directly inside the tile layer.
- Your map is simple: raster tiles plus a handful of markers.
- You target Linux, macOS or Windows desktop, which this package does not support.
- Your team wants to avoid native iOS and Android setup.
flutter_map renders raster tiles (PNG/WebP) by default: vector styles, expressions and GPU-accelerated vector rendering are not part of the core package, though community plugins such as vector_map_tiles add vector tile rendering on top.
Choose google_maps_flutter when
google_maps_flutter fits when:
- Users expect the Google Maps look and brand.
- You already run a Google Maps Platform billing account and key.
- You need Google-specific features: Street View, Places integration, Google traffic.
- Your organization mandates Google services.
Pricing and quotas change, so check Google Maps Platform pricing for the current terms; as of August 2026 the mobile Maps SDKs carry no map-load billing, though an API key and a billing account are still required. The plugin exposes no offline download API, and styling goes through Google's cloud-based map styling or a style JSON rather than the MapLibre style spec.
Performance at scale
Rendering 10,000 point features is where the architectural difference shows:
| Aspect | flutter-maplibre-gl | flutter_map | google_maps_flutter |
|---|---|---|---|
| Approach | Vector tiles + GPU | Raster tiles + canvas | Raster tiles + SDK |
| 10k points | ✔ Native cluster/layer | ● Plugin, cost grows per feature | ● Marker clustering |
| Where features are drawn | ✔ GPU, native engine | ● Flutter canvas | ● Google Maps SDK |
All rendering is delegated to the native MapLibre engine, which runs on the GPU. The Flutter layer only manages configuration. The difference is architectural rather than a benchmark result: see Architecture. Measure with your own data and target devices before deciding.
For the full platform-by-platform breakdown, see the Feature Matrix.