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.

pub.dev version GitHub Stars License

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.

1. Add the dependency

dependencies:
  maplibre_gl: ^0.27.0

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.

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.