- Monorepo structure with Bun workspaces
- TypeScript types and interfaces
- React component exports
- Nitro config and initial HybridView spec
- ESM build pipeline (react-native-builder-bob)
- ESLint, Prettier, GitHub Actions CI
- Expo example app
- Documentation (README, architecture, contributing)
- Finalize
MapView.nitro.tsHybridView spec - Run Nitrogen codegen
- Implement
HybridMapViewin Swift (iOS) - Implement
HybridMapViewin Kotlin (Android) - Wire React
MapViewto Nitro HybridView viagetHostComponent - Verify native view renders in example app (
bun example ios/bun example android)
- Add MapKit framework dependency
- Render MKMapView in HybridMapView
- Support
mapType(standard, satellite, hybrid;terrainfalls back to standard on iOS) - Camera control (setCamera, animateCamera)
- Region change events
- Press and long-press events
- Add Google Maps SDK dependency
- Render MapView in HybridMapView
- Support
mapType(standard, satellite, hybrid, terrain) - Camera control
- Region change events
- Press and long-press events
- Decide overlay architecture (per-view vs data-driven)
- Marker rendering with title/subtitle callouts
- Draggable markers
- Polyline rendering with styling
- Polygon rendering with fill/stroke
- Circle rendering with radius
- Overlay press events
Delivered incrementally during Phases 3–5; polished for platform consistency in Phase 6.
-
onRegionChange/onRegionChangeComplete -
onPress/onLongPresson map -
onPress/onDragEndon markers -
onPresson polylines, polygons, circles -
onMapReadycallback
- Marker clustering
- Custom map styles
- User location display
- Compass and scale controls
- Edge padding for camera fitting
- Multi-provider
MapViewarchitecture - Google Maps provider on iOS
- Public README and package metadata
- Expo setup documentation
- CI quality checks
- Release performance benchmark pass
- Migration guide from react-native-maps
- npm publish (v1.0.0)
- GitHub release with changelog
| Decision | Options | Status |
|---|---|---|
| Overlay architecture | Per-view native vs data-driven descriptors | Data-driven (Option B) |
| Clustering library | Custom vs platform-native | Platform-native (MKClusterAnnotation / maps-utils) |
| Provider architecture | In-place SDK switching vs adapter remount | Provider adapter + React remount |
| Overlay animations | Reanimated core path vs native descriptors | Native descriptor animations; Reanimated optional |
| Custom view markers | Snapshot-only vs live/hybrid native views | Hybrid: live MapKit, snapshot Google (ADR 0004) |
| Offline support | Tile caching strategy | Future consideration |
- Phase 0: apply
MarkerDescriptorimage, anchor, centerOffset, rotation, flat, and opacity on iOS Google - Phase 1:
<Marker>children via snapshot into existing image pipeline - Phase 2:
<MarkerView>HybridView — live MapKit views, snapshot on Google
- OpenStreetMap-backed provider
- Mapbox provider
- Provider-specific install and configuration docs