MapLibre Native FFI
MapLibre Native FFI is the MapLibre Native map engine as a C API, with bindings for Dart, Go, Kotlin, .NET, Python, Rust, Swift, TypeScript, and Zig. Use it to build map components for a UI framework, or to render maps on a server.
To start, install the package for your language, then create a map.
To see it run, open the live demo, which renders a map in your browser with the TypeScript binding, on WebGL or WebGPU.
Used by
Section titled “Used by”- MapLibre Compose brings maps to Compose Multiplatform.
- MapLibre for Flutter brings maps to Flutter.
- Rampardos renders static maps and raster tiles from local MBTiles.
- Mapigrade draws a MapLibre
Native map into a Flutter
Texturewidget as the base layer of aflutter_mapmap.
Status
Section titled “Status”Until the first part of the version reaches 1, any release can break the API, the ABI, or documented behavior.
Tested in CIBuilt onlyNot supported
| Platform | Arch | Backend | C | C# | Dart | Go | GObject | Kotlin (JAR) | Kotlin (KLIB) | Python | Rust | Swift | TypeScript | Zig |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LinuxGNU | x64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ◐ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| riscv64 | Vulkan, OpenGL | ✓ | ✕ | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✕ | ◐ | ✓ | |
| loongarch64 | Vulkan, OpenGL | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ | |
| Linuxmusl | x64 | Vulkan, OpenGL | ✓ | ✓ | ✕ | ✓ | ✓ | ✓ | ✕ | ✓ | ✓ | ✕ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL | ✓ | ✓ | ✕ | ✓ | ✓ | ✓ | ✕ | ✓ | ✓ | ✕ | ✓ | ✓ | |
| riscv64 | Vulkan, OpenGL | ✓ | ✕ | ✕ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✕ | ✓ | ✓ | |
| loongarch64 | Vulkan, OpenGL | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ | |
| macOS | x64 | Metal | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL, Metal | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| WindowsMSVC | x64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✕ | |
| WindowsMinGW | x64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✕ | |
| FreeBSD | x64 | Vulkan, OpenGL | ✓ | ✕ | ✕ | ✓ | ✓ | ✓ | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ |
| arm64 | Vulkan, OpenGL | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | |
| Android | x64 | Vulkan, OpenGL | ✓ | ✓ | ✓ | ✓ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| x86 | Vulkan | ◐ | ◐ | ✕ | ◐ | ✕ | ◐ | ◐ | ✕ | ◐ | ✕ | ◐ | ◐ | |
| OpenGL | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ✕ | ✓ | ✕ | ✓ | ✓ | ||
| arm64 | Vulkan, OpenGL | ◐ | ◐ | ◐ | ◐ | ✕ | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ | |
| arm | Vulkan, OpenGL | ◐ | ◐ | ◐ | ◐ | ✕ | ◐ | ◐ | ✕ | ◐ | ◐ | ◐ | ◐ | |
| iOS | arm64device | Metal | ◐ | ◐ | ◐ | ◐ | ✕ | ✕ | ◐ | ✕ | ◐ | ◐ | ◐ | ✕ |
| arm64simulator | Metal | ✓ | ✓ | ✓ | ✓ | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ | ✓ | ✕ | |
| Mac Catalyst | arm64 | Metal | ✓ | ✓ | ✕ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ |
| tvOS | arm64device | Metal | ◐ | ◐ | ✕ | ✕ | ✕ | ✕ | ◐ | ✕ | ◐ | ◐ | ◐ | ✕ |
| arm64simulator | Metal | ✓ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ | ✓ | ✕ | |
| visionOS | arm64device | Metal | ◐ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ◐ | ◐ | ◐ | ✕ |
| arm64simulator | Metal | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✕ | |
| OpenHarmony | x64 | Vulkan | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ◐ | ✕ |
| OpenGL | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ✓ | ✕ | ||
| arm64 | Vulkan, OpenGL | ◐ | ✕ | ✕ | ◐ | ✕ | ✕ | ✕ | ✕ | ◐ | ✕ | ◐ | ✕ | |
| WebEmscripten | wasm32 | OpenGL, WebGPU | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | ✓ | ✕ | ✓ | ✕ |
TypeScript runs under Node, Bun, and Deno, in ArkTS apps on OpenHarmony, and in the browser. OpenGL uses WGL on Windows and EGL on other platforms. macOS EGL uses ANGLE. Issue #936 tracks the gaps.
Sponsors
Section titled “Sponsors”CI is provided by Blacksmith under its open source program.