Maps for Flutter
MapLibre, natively in Flutter
Open data, the full MapLibre style spec, and no proprietary tokens. One Dart API across Android, iOS, and web.
Android
iOS
Web
Why this library
⚡
Native C++ rendering
MapLibre Native on Android and iOS. Hardware-accelerated, 60fps, GPU-powered tile rendering.
🔓
Truly open source
BSD-2 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) {
// Add symbols, layers, and more
},
)
See Installation & Setup 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.
Honest comparison with flutter_map and google_maps_flutter: features, tradeoffs, and when to choose each.