Яндекс.Карты в Expo в 2026: поддерживаемый нативный SDK

от автора

Если вы делаете приложение на 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/