MapLibre GL JS исторически вырос из кода Mapbox GL JS v1, и именно
это наследие определяет большинство фундаментальных различий между ними
и другими WebGL-картографическими библиотеками. Несмотря на схожесть API
и концепций, различия затрагивают лицензионную модель, архитектурные
решения, поддержку рендеринга, экосистему и стратегию развития.
Лицензирование и модель
развития
Одним из ключевых отличий является открытость
лицензии.
MapLibre GL JS распространяется под лицензией
BSD-3-Clause, что делает библиотеку полностью свободной
для использования в коммерческих и закрытых проектах без ограничений,
связанных с проприетарными компонентами или платными сервисами.
В противоположность этому, Mapbox GL JS после версии 2 перешёл на
проприетарную модель и тесную привязку к сервисам Mapbox, включая
ограничения на самостоятельное использование рендерера в некоторых
сценариях.
Это приводит к важным последствиям:
- MapLibre может использоваться без внешней зависимости от конкретного
провайдера карт.
- Проект развивается сообществом, а не одной компанией.
- Возможна интеграция с любыми источниками тайлов и стилями.
Архитектура рендеринга
Обе библиотеки используют WebGL для отрисовки векторных карт, однако
различия проявляются в деталях реализации.
MapLibre GL JS:
- Ориентирован на максимальную совместимость с оригинальным Mapbox GL
JS v1 API.
- Поддерживает WebGL 1 как основной стандарт.
- Сохраняет классическую архитектуру рендеринга слоёв (layers),
источников данных (sources) и стилей (styles).
Mapbox GL JS v2+:
- Перешёл на более тесную интеграцию с современными WebGL API и
оптимизациями под собственную экосистему.
- Внёс изменения, нарушающие обратную совместимость.
- Использует более закрытые внутренние оптимизации рендеринга.
Практическое следствие: код, написанный под Mapbox GL JS v1, почти
напрямую переносится в MapLibre GL JS, но не гарантированно работает в
новых версиях Mapbox GL JS.
Совместимость API
MapLibre GL JS стремится к API-параллельности с Mapbox GL JS
v1, что является стратегическим решением для миграции
проектов.
Основные элементы совпадают:
map.addSource
map.addLayer
map.setStyle
- обработчики событий (
click, move,
zoom)
- выражения стилей (style expressions)
Однако есть нюансы:
- некоторые экспериментальные функции Mapbox GL JS v2 отсутствуют
- отдельные методы были удалены или заменены из-за лицензионных
ограничений
- поведение некоторых API может отличаться при крайних сценариях
(например, обработка tile loading states)
Работа со стилями карт
Обе системы используют спецификацию Mapbox Style
Specification, но MapLibre не привязан к инфраструктуре
Mapbox.
Ключевые различия:
MapLibre GL JS:
- Полностью поддерживает загрузку стилей из локальных или сторонних
источников
- Не требует API-ключей
- Позволяет использовать собственные tile servers без ограничений
Mapbox GL JS:
- Часто требует токен доступа
- Интегрирован с Mapbox Studio
- Часть функционала завязана на облачные сервисы
Особенно важно различие в источниках данных:
- MapLibre свободно работает с любыми vector tiles
(MVT)
- Mapbox может оптимизировать работу под собственный формат и CDN
Шрифты, спрайты и ресурсы
Рендеринг текста и иконок в обеих системах опирается на:
- glyphs (шрифтовые тайлы)
- sprite sheets (спрайты иконок)
Различия заключаются в способе доставки:
MapLibre GL JS:
- не предоставляет собственный CDN для ресурсов
- требует самостоятельной настройки сервера glyphs и sprites
- поддерживает стандартные форматы
pbf для шрифтов
Mapbox GL JS:
- предоставляет готовую инфраструктуру доставки ресурсов
- автоматически интегрируется с Mapbox Studio
- упрощает старт, но ограничивает независимость
Поддержка рендеринга
и производительность
MapLibre GL JS ориентирован на стабильную, предсказуемую
производительность без привязки к закрытым оптимизациям.
Особенности:
- стабильная работа в браузерах с WebGL 1
- предсказуемая загрузка тайлов
- отсутствие скрытых оптимизаций, завязанных на серверную часть
Mapbox GL JS v2+ использует более агрессивные оптимизации:
- динамическое управление ресурсами
- оптимизация под собственные tile pipelines
- использование специфичных внутренних форматов данных
Это даёт преимущество в некоторых сценариях, но снижает прозрачность
поведения.
Экосистема и расширяемость
MapLibre GL JS:
- активно развивается open-source сообществом
- поддерживает форки и сторонние плагины
- интегрируется с OpenStreetMap-экосистемой
- часто используется в корпоративных self-hosted решениях
Mapbox GL JS:
- тесно связан с продуктовой экосистемой Mapbox
- расширения часто завязаны на сервисы компании
- меньше свободы в изменении низкоуровневого поведения
Поддержка платформ и
браузеров
MapLibre делает ставку на широкую совместимость:
- современные браузеры с WebGL 1
- мобильные браузеры через WebView
- стабильная работа в ограниченных средах
Mapbox GL JS v2+ ориентирован на более новые окружения:
- улучшенная поддержка современных GPU-фич
- постепенное снижение поддержки устаревших браузеров
Форматы данных и источники
тайлов
MapLibre поддерживает стандартные источники:
- Vector Tile Protocol (MVT)
- Raster tiles
- GeoJSON
- Image sources
- Video sources
Ключевое отличие — отсутствие привязки к проприетарным форматам. Это
позволяет:
- использовать OpenMapTiles
- подключать собственные tile servers
- комбинировать разные источники в одном стиле
Mapbox GL JS может оптимизировать работу с собственными форматами и
CDN, что даёт преимущества в скорости в рамках их экосистемы, но снижает
гибкость.
Обновления и
стратегическое развитие
MapLibre GL JS развивается по модели:
- открытые pull request’ы
- прозрачные релизы
- сообщество разработчиков из разных компаний
Mapbox GL JS:
- централизованная разработка
- ориентация на коммерческий продукт
- более жёсткий контроль roadmap
Это влияет на:
- скорость появления новых возможностей
- предсказуемость изменений API
- независимость от одного поставщика
Практическая миграция
проектов
При переходе с Mapbox GL JS v1 на MapLibre GL JS чаще всего
сохраняются:
- логика работы с картой
- структура слоёв
- стили JSON
- обработка событий
Требуют внимания:
- настройка источников glyphs
- настройка sprite URL
- замена токенов доступа (если использовались Mapbox API)
- проверка поведения кастомных шейдеров и сложных выражений
Основной принцип миграции: переносится не только код, но и
инфраструктура картографического сервера.