Maps for Flutter
MapLibre, natively in Flutter
Any tile provider or your own server, the full MapLibre style spec, and no API key to get started. One Dart API across Android, iOS, and web.
Why this library
⚡
Native C++ rendering
MapLibre Native on Android and iOS. Hardware-accelerated, 60fps, GPU-powered tile rendering.
🔓
Open source, end to end
BSD-3 license. Use OpenFreeMap, OpenMapTiles, or self-host with PMTiles. Zero vendor lock-in.
📴
Offline maps
Download geographic regions on Android and iOS. Tiles, fonts, and sprites live on-device, no network needed.
🎨
Full style spec
Every MapLibre layer type: symbol, circle, fill, line, heatmap, raster. Data-driven expressions included.
📍
Dual-layer API
High-level Annotations for quick interactive pins. Low-level Style Layers for large datasets and expressions.
🌐
Web via GL JS
The same Dart API renders with MapLibre GL JS on web. One codebase, three platforms.
Quick start
1. Add the dependency
2. Add the map widget
import 'package:maplibre_gl/maplibre_gl.dart';
MapLibreMap(
initialCameraPosition: const CameraPosition(
target: LatLng(48.8566, 2.3522), // Paris
zoom: 11,
),
onMapCreated: (MapLibreMapController controller) {
// Keep the controller
},
onStyleLoadedCallback: () {
// Add symbols, layers, and more here, once the style is ready
},
)
See Getting Started for Android, iOS, and web platform configuration.
Explore the docs
How the Flutter widget, platform bridge, and MapLibre engine connect across Android, iOS, and web.
The library's most distinctive feature. Understand the two APIs and when to use each.
Style features by their properties. Interpolate colors, scale sizes, and match categories, all on the GPU.
Group nearby points into expanding clusters. Built into the GeoJSON source, no server needed.
Self-host vector tiles as a single file. No tile server, no infrastructure, works on all platforms.
Side-by-side comparison with flutter_map and google_maps_flutter: features, tradeoffs, and when to choose each.