Если вы делаете приложение на 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'] }); // + обратный геокодинг, resolveURIconst 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-mapkit -
GitHub: softwhere-uz/expo-yandex-mapkit — ⭐ помогает другим найти проект
-
Бесплатно для теста: бесплатный ключ MapKit Mobile SDK (кабинет разработчика Яндекса) покрывает карту + поиск + маршруты.
Если вы используете Яндекс.Карты в Expo — буду рад фидбэку и issue.
ссылка на оригинал статьи https://habr.com/ru/articles/1063014/