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

  • GitHub: softwhere-uz/expo-yandex-mapkit — ⭐ помогает другим найти проект

  • Бесплатно для теста: бесплатный ключ MapKit Mobile SDK (кабинет разработчика Яндекса) покрывает карту + поиск + маршруты.

Если вы используете Яндекс.Карты в Expo — буду рад фидбэку и issue.

Комментарии (2)


  1. Void-Cowboy
    25.07.2026 21:18

    в наше время стоит переходить на локальные карты что у вас же и хостятся. Места не так уж и много занимает по факту если вам не нужна прям вся планета до последнего кустика (и это я про старые добрые Slippy Map tiles в EPSG:3857, вектор вообще легкий хотя нагрузка на клиент для отрисовки)


    1. Kamuran Автор
      25.07.2026 21:18

      Согласен — если нужна просто подложка-карта без привязки к провайдеру, то self-hosted тайлы (raster в EPSG:3857 или вектор через MapLibre + свой tile-сервер) отличный вариант: дёшево, без вендор-лока и лимитов API. Для многих задач этого хватает за глаза.

      Но expo-yandex-mapkit решает другую задачу. Это обёртка именно над Yandex MapKit — не ради «нарисовать базовую карту», а ради экосистемы Яндекса, которую своими тайлами не заменишь:

      • поиск организаций и геокодинг по базе Яндекса; • саджест (подсказки по мере ввода); • маршруты — авто / общественный транспорт / пешком, с учётом пробок; • сам «яндексовый» вид + данные (POI, транспорт), которые в СНГ пользователи привыкли видеть.

      OSM-тайлы дадут холст, но не дадут этот индекс и сервисы — их у себя не захостишь. Так что грубо: «нужна карта» → MapLibre / свои тайлы, «нужны данные и сервисы Яндекса» → эта библиотека. Оба подхода валидны, просто под разные кейсы.