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
pub.dev version GitHub Stars License

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.

1. Add the dependency

dependencies:
  maplibre_gl: ^0.26.2

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.

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.