Если вы делаете приложение на React Native / Expo и вам нужны Яндекс.Карты, вы наверняка столкнулись с проблемой: у Яндекса есть официальный SDK для Android, iOS и Flutter — но не для React Native. Годами пробел закрывало сообщество, но в 2026-м ситуация невесёлая:
Собственный
expo-mapsот Expo поддерживает только Apple Maps и Google Maps — сторонних провайдеров нет.Самая популярная community-обёртка не выпускала релизов с ноября 2024 и больше не собирается на актуальных React Native / Kotlin.
Остальные — либо с закрытым исходником, либо с документацией на одном языке, либо тянут тяжёлые доп-зависимости.
Поэтому я сделал expo-yandex-mapkit — поддерживаемый SDK Яндекс MapKit под лицензией MIT, собранный современно: на Expo Modules API, настраиваемый целиком конфиг-плагином, готовый к New Architecture и с документацией на русском и английском. В версии 2.0.0 он функционально полон и проверен на устройстве.
Быстрый старт
Это нативный модуль, поэтому нужен dev build (в Expo Go не работает):
npx expo install expo-yandex-mapkit
Добавьте конфиг-плагин в app.json — никаких правок AndroidManifest/AppDelegate:
{ "expo": { "plugins": [ ["expo-yandex-mapkit", { "apiKey": "ВАШ_КЛЮЧ_MAPKIT_MOBILE_SDK", "flavor": "lite" }] ] } }
Рендерим карту — с ключом на этапе сборки инициализация не нужна вовсе:
import { YandexMapView } from 'expo-yandex-mapkit'; import { StyleSheet } from 'react-native'; export default function App() { return ( <YandexMapView style={StyleSheet.absoluteFill} cameraPosition={{ latitude: 55.751, longitude: 37.618, zoom: 12 }} /> ); }
npx expo prebuild && npx expo run:android # или run:ios
Что внутри
Всё работает на обеих платформах с одинаковым JS:
Карта и камера — декларативная анимируемая
cameraPosition; императивныеsetCenter/setZoom/fitMarkers/getVisibleRegion/ проекция мир↔экран; события нажатия / долгого нажатия / движения камеры;mapType(map / satellite / hybrid / vector), JSON-mapStyle, ночной режим, переключатели жестов.Объекты карты —
<Marker>с иконкой-картинкой или из React-детей,<Polyline>/<Polygon>/<Circle>, и декларативный<Clusterer>, где ваши же<Marker>служат render-пропом.Геопозиция и пробки — слой местоположения с кастомной точкой и стилизацией круга точности, слой пробок в реальном времени.
А во flavor full (flavor: 'full') — серверные модули:
import { suggest, searchText, findRoutes } from 'expo-yandex-mapkit'; const hints = await suggest('кофе', { userPosition: here }); // саджест по мере ввода const places = await searchText('Москва', { searchTypes: ['geo'] }); // + обратный геокодинг, resolveURI const route = await findRoutes([a, b], 'masstransit'); // авто / транспорт / пешком // route[0].sections → пешком → автобус 42 → пересадка → метро, каждый участок рисуется отдельно
Чем он лучше
Несколько вещей я сознательно сделал лучше, чем у предшественников:
Декларативная кластеризация — без отдельного массива
clusteredMarkersиrenderMarker; render-пропом служит ваш обычный<Marker>.Координаты в саджесте, которые реально приходят — давняя болячка этой линейки: координаты восстанавливали в JS, парся
uri(что молча ломается на org/opaque-URI). Здесьcenterчитается нативно, поэтому не теряется.Надёжные иконки-маркеры из React-детей, настоящий конфиг-плагин (версия, flavor, API-ключ, локаль, minSdk) и документация на RU + EN.
Как попробовать
npm:
expo-yandex-mapkitGitHub: softwhere-uz/expo-yandex-mapkit — ⭐ помогает другим найти проект
Бесплатно для теста: бесплатный ключ MapKit Mobile SDK (кабинет разработчика Яндекса) покрывает карту + поиск + маршруты.
Если вы используете Яндекс.Карты в Expo — буду рад фидбэку и issue.
Void-Cowboy
в наше время стоит переходить на локальные карты что у вас же и хостятся. Места не так уж и много занимает по факту если вам не нужна прям вся планета до последнего кустика (и это я про старые добрые Slippy Map tiles в EPSG:3857, вектор вообще легкий хотя нагрузка на клиент для отрисовки)
Kamuran Автор
Согласен — если нужна просто подложка-карта без привязки к провайдеру, то self-hosted тайлы (raster в EPSG:3857 или вектор через MapLibre + свой tile-сервер) отличный вариант: дёшево, без вендор-лока и лимитов API. Для многих задач этого хватает за глаза.
Но expo-yandex-mapkit решает другую задачу. Это обёртка именно над Yandex MapKit — не ради «нарисовать базовую карту», а ради экосистемы Яндекса, которую своими тайлами не заменишь:
• поиск организаций и геокодинг по базе Яндекса; • саджест (подсказки по мере ввода); • маршруты — авто / общественный транспорт / пешком, с учётом пробок; • сам «яндексовый» вид + данные (POI, транспорт), которые в СНГ пользователи привыкли видеть.
OSM-тайлы дадут холст, но не дадут этот индекс и сервисы — их у себя не захостишь. Так что грубо: «нужна карта» → MapLibre / свои тайлы, «нужны данные и сервисы Яндекса» → эта библиотека. Оба подхода валидны, просто под разные кейсы.